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:
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.
<equation>_has_ghost_boundary_cells
is set to .true.
.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