Skip to main content

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.

Supported Surface Boundary Conditions

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 under Geometries.
    • Matching is done per geometry at initialization.
  • 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.
  • 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.
  • 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:

  1. 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.
  2. 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.
  3. 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).
  4. Missing coverage is an error.
    • If a component gets no matching rule and there is no "any" default, the solver throws (no BC found).
  5. Unknown patch names are fatal.
    • If component names a patch that doesn’t exist on the targeted geometry, the solver throws.
  6. 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.

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

  • IBM lives inside a Domain. A Subdomains entry inherits the parent domain’s IBM settings (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"
}
...
}
}