Immersed Boundary Options
The IBM block attaches surface boundary conditions (BCs) to geometry patches from Geometries, and sets sampling distances for the immersed-boundary stencil and wall-model queries. All values accept numbers or expressions (resolved against the Dictionary).
Structure
IBM
{
sample_dist_wm = <number | "expr"> # wall-model sampling distance
sample_dist_bc = <number | "expr"> # general IBM BC sampling distance
BoundaryConditions
{
<bc_name_0> { ... }
<bc_name_1> { ... }
...
}
}
sample_dist_wm— sampling distance (solver units) used by the wall model when it queries the flow.sample_dist_bc— sampling distance used by general IBM BC stencils (non-wall-model).- Typical ranges (guidance):
sample_dist_wm ≈ 2.5–4.5,sample_dist_bc ≈ 0.10–0.75. Choose relative to near-surface resolution.
BoundaryConditions entries
Each entry targets one or more geometry patches and assigns a BC type via specifier, with optional type-specific parameters.
For a full list of supported BCs, see Supported Immersed Boundary Conditions.
<bc_name>
{
component = "<patch-name | any>"
geometries = ["<geom-name>", ...] | "any"
specifier = "<bc-type>"
# BC-type-specific parameters (numbers or expressions):
<param_0> = <...>
<param_1> = <...>
...
}
-
geometries- Either
"any"or a list of names that must exist underGeometries. - Matching is done per geometry at initialization.
- Either
-
component- A patch name exported by the geometry’s
Patches, or"any". - A named patch may map to multiple component IDs internally; the solver expands that mapping for you.
- A patch name exported by the geometry’s
-
specifier- The BC type identifier (e.g.,
wall_model,stagnation_subsonic_inflow, …). - Each type may require extra parameters (e.g.,
wall_temperature,total_pressure, …). We’ll document these in the separate IBM Surface Boundary Conditions reference.
- The BC type identifier (e.g.,
-
Values can be literals or expressions (e.g.,
total_pressure = "jetP0").
Matching & Precedence
The solver builds BCs per geometry and then assigns one BC to each surface component that actually appears on that geometry’s immersed boundary. The rules are:
- Exactly one
"any"component rule is allowed across all entries. It acts as a default for any component that doesn’t receive a specific assignment. - Specific beats default, regardless of order.
- If both a specific patch rule and the
"any"default match a component, the specific rule is chosen. - In implementation: the default may be seen first, but a later specific will overwrite it; conversely, a later default will not overwrite an earlier specific.
- If both a specific patch rule and the
- Two specifics targeting the same component is an error.
- If multiple non-
"any"rules would assign different BCs to the same underlying component ID, the solver throws (duplicate assignment).
- If multiple non-
- Missing coverage is an error.
- If a component gets no matching rule and there is no
"any"default, the solver throws (no BC found).
- If a component gets no matching rule and there is no
- Unknown patch names are fatal.
- If
componentnames a patch that doesn’t exist on the targeted geometry, the solver throws.
- If
- Uniqueness requirements per BC type.
- Some BC types declare
must_be_unique_patch. If such a BC is applied to a patch name that expands to multiple IDs, the solver throws.
- Some BC types declare
Practical recipe: define a single global default (
component = "any",geometries = "any"), then add specific overrides for special patches. This guarantees coverage and avoids duplicate specifics.
Inheritance with Subdomains
IBMlives inside aDomain. ASubdomainsentry inherits the parent domain’sIBMsettings (distances and rules) unless it overrides them locally.- This lets you use different sampling distances or BC parameters in a moving-frame subdomain without duplicating everything.
Examples
1) Global default wall-model BC
IBM
{
sample_dist_wm = 3.0
sample_dist_bc = 0.5
BoundaryConditions
{
default
{
component = "any"
geometries = "any"
specifier = "wall_model"
}
}
}
2) Default + specific overrides on one geometry
IBM
{
sample_dist_wm = 2.8
sample_dist_bc = 0.9
BoundaryConditions
{
wallBC
{
component = "any"
geometries = ["main"]
specifier = "wall_model"
}
injectionBC
{
component = "inlet"
geometries = ["main"]
specifier = "stagnation_subsonic_inflow"
total_pressure = "Ptot_jet"
total_temperature = "Ttot_jet"
}
...
}
}