Loading...

Searching...

No Matches

Immersed Boundaries

Implement boundaries of arbitrary shapes in PDEs. More...

## Topics | |

Immersed Boundary Condition | |

Initialize and prepare resolution of immersed boundary conditions. | |

## Namespaces | |

module | variables_explicit_weno_fd |

Compile-time settings for immersed boundaries. | |

module | mod_update_variable_ib_b_ghost |

Update fields on boundary and immersed boundary ghost cells. | |

module | mod_immersed_boundary_surface_integrals |

Tools to compute surface integrals. | |

module | mod_apply_immersed_boundary_condition_cell |

Apply immersed boundaries, cell version. | |

module | mod_apply_immersed_boundary_condition_face |

Apply immersed boundaries, face version. | |

module | mod_eval_ibm_matrix_coefficients |

Preparation routine building blocks for immersed boundaries. | |

module | variables_immersed_boundary_condition |

Compile-time settings for immersed boundaries. | |

module | mod_set_ib_mask |

Tools to manipulate immersed boundaries. | |

In Notus, complex, non-Cartesian, boundaries can be set using the popular immersed boundary technique. The computational domain is split into an *inner* and an *outer* domains.

Basically, the present Implementation will use a distance field and the current grid to define a set of *boundary points*. Boundary conditions are then be defined at these points for each resolved equation. Since the geometry is not Cartesian, additional interpolations are needed to define the boundary conditions, which can be parametrized to obtain the desired accuracy. A number of routines modifies Notus processing and post-processing to account for the immersed boundary, while using its Cartesian framework.

The variables required to define immersed boundaries are grouped into two derived types:

- type_immersed_boundary::immersed_boundary_metrics contains metric-related variables, and
- type_immersed_boundary::immersed_boundary_condition contains field-related variables.

Thus one instance of the former corresponds to a grid (cell-centered, etc.), and one instance of the latter corresponds to a resolved field (temperature, pressure, etc.)

See immersed_boundary_types for detailed information.

The Implementation use a distance field description of the immersed boundary, yet it is more easy and flexible to use the Shapes API directly in the `domain/immersed_boundary`

block of the NTS file.

Notice that the interior of the shape corresponds to the outer domain. The `invert`

keyword easily swaps inner and outer domains.

The global variables fields_immersed_subdomain::ib_metrics, fields_immersed_subdomain::face_immersed_boundary%u, fields_immersed_subdomain::face_immersed_boundary%v, fields_immersed_subdomain::face_immersed_boundary%w contains the metric-related variables of the cell-centered, x-face-centered, y-face-centered, z-face-centered grids, respectively. These fields are initialized by the routines defined in mod_initialize_immersed_subdomain.

See mod_immersed_boundary_prepare for detailed initialization information.

- Warning
- The Implementation needs ghost boundary cells to work properly. Be sure that the appropriate
`<equation>_has_ghost_boundary_cells`

is set to`.true.`

.

- Note
- Square stencils are often
*required*when immersed boundary is activated.

- Warning
- Depending on the boundary condition parameters described below, the
`nghost`

variable may require a sufficiently high value.

Boundary condition are set in the block `modeling/equations/<equation>/immersed_boundary_condition`

. Two equations are currently supported. Types and description of immersed boundary conditions follows the syntax of domain boundary condition, allowing constants, instructions and shapes instructions.

The energy equation supports the *Dirichlet* and *Neumann* boundary conditions. The global variable fields_immersed_subdomain::ibc_temperature contains field-related variables.

The navier equation supports the *wall* and *inlet* boundary conditions. The global variables fields_immersed_subdomain::ibc_velocity and fields_immersed_subdomain::ibc_pressure contains field-related variables.

Numerical parameters are set in the block `numerical_parameters/<equation>/immersed_boundary`

. There is three parameters:

`method`

sets the algorithm used to create the boundary conditions,`order`

sets the minimal order at which finite-differences are trunked,`outer_value`

sets the field-value to assign in the outer domain.

For the Navier equation, two values can be set for `method`

and `order`

, which will be applied to the momentum and pressure increment equations. The `enum_ibc_method`

lists the available methods.

Alternatively, the `method`

numerical parameter can be set to `volume_penalization`

to quickly replace the immersed boundary by a 1st-order accurate penalization method.

The penalization method considers that fields are defined in both the inner and outer domain, the latter being penalized.

As described above, the resolution of the modified linear system may become prohibitive when an inner node becomes very close to the boundary. To prevent such thing, a thickness is given to the boundary. When a node is found to be in the boundary thickness, it is considered as a boundary point.

The boundary thickness is computed as a fraction of the minimum cell size in the parameter `thickness`