Porous Jump Boundary Condition#
The Porous Jump boundary condition models a thin, permeable membrane (e.g. a filter, screen, or heat exchanger core) as a surface interface that introduces a pressure drop proportional to the local flow velocity.
Available Options#
Option |
Description |
Applicable |
|---|---|---|
Name |
Identifier for this boundary condition |
always |
Darcy coefficients |
Viscous (linear) resistance coefficient of the porous layer |
always |
Forchheimer coefficient |
Inertial (quadratic) resistance coefficient of the porous layer |
always |
Thickness |
Physical thickness of the porous layer |
always |
Assigned surfaces |
Flat list of interface faces that form the porous jump |
always |
Detailed Descriptions#
Name#
A user-defined label to identify this boundary condition within the simulation.
Default:
PorousJumpExample:
"heat_exchanger_core","filter_screen"
Darcy coefficients#
Scales the viscous (linear) pressure-drop term across the porous interface.
Units: 1/m²
Required.
Example:
1e6 / fl.u.m**2
Forchheimer coefficient#
Scales the inertial (quadratic) pressure-drop term across the porous interface.
Units: 1/m
Required.
Example:
1.0 / fl.u.m
Thickness#
The physical thickness of the porous layer represented by the surface interface.
Units: m
Required.
Example:
0.05 * fl.u.m
Note: The thickness does not need to match the actual mesh geometry. The surface is treated as an infinitely thin interface in the mesh, and the thickness is used only inside the pressure-drop model.
Assigned surfaces#
The interface faces that form the porous jump, provided as a single flat list.
Required.
Example (volume mesh):
[volume_mesh["blk-1/Interface-blk-2"], volume_mesh["blk-2/Interface-blk-1"]]Example (geometry):
[geometry["interface_front"], geometry["interface_back"]]
Note: Both sides of every interface must be listed. They share this boundary condition’s coefficients, so the two sides always match. How the donor/receiver pairing is found depends on the starting point. From a volume mesh, the two interface patches already exist (for example
blk-1/Interface-blk-2andblk-2/Interface-blk-1) and the solver detects the pairing from the mesh metadata. From a geometry, the two coincident (duplicated) CAD faces must already exist in the asset and be enclosed by custom volumes; after volume meshing they form the interface and the pairing is recovered downstream. Only custom volumes are supported for porous jump at present; seedpoint volumes are not yet supported. A single shared or non-manifold face is not turned into a porous-jump interface (the surface mesher only creates interfaces for rotating volumes).Deprecated: The earlier
surface_pairs=[(A, B), ...]form is still accepted for one more minor release (through 25.10) and is converted internally into the flatsurfaceslist, but it emits a deprecation warning and will be removed in 25.11. New setups should usesurfaces=.
💡 Tips
Mesh Requirements
Interface surfaces: The porous jump surfaces must be internal interface boundaries between adjacent mesh blocks.
Coefficient Estimation
Darcy and Forchheimer coefficients can be derived from experimental pressure-drop vs. velocity data by fitting: Δp/t = μ · D · v + ½ · ρ · F · v²
Alternatively, they can be obtained from the manufacturer’s specifications for standard filter or heat-exchanger products.
🐍 Python Example Usage
import flow360 as fl
# Example: single porous interface (e.g. a heat exchanger core).
# List both faces of the interface; the pairing is recovered automatically.
porous_jump = fl.PorousJump(
name="heat_exchanger_core",
surfaces=[
volume_mesh["blk-1/Interface-blk-2"],
volume_mesh["blk-2/Interface-blk-1"],
],
darcy_coefficient=1e6 / fl.u.m**2,
forchheimer_coefficient=10.0 / fl.u.m,
thickness=0.05 * fl.u.m,
)
# Example: several interfaces sharing the same porous properties.
# Pass every face in one flat list, regardless of how many interfaces it spans.
multi_interface_porous_jump = fl.PorousJump(
name="filter_screen",
surfaces=[
volume_mesh["blk-1/Interface-blk-2"],
volume_mesh["blk-2/Interface-blk-1"],
volume_mesh["blk-1/Interface-blk-3"],
volume_mesh["blk-3/Interface-blk-1"],
],
darcy_coefficient=1e6 / fl.u.m**2,
forchheimer_coefficient=1.0 / fl.u.m,
thickness=0.1 * fl.u.m,
)
# Example: starting from a geometry (or surface mesh).
# Reference the two coincident faces present in the asset; they become an
# interface during volume meshing and the pairing is recovered automatically.
geometry_porous_jump = fl.PorousJump(
name="heat_exchanger_core",
surfaces=[
geometry["interface_front"],
geometry["interface_back"],
],
darcy_coefficient=1e6 / fl.u.m**2,
forchheimer_coefficient=10.0 / fl.u.m,
thickness=0.05 * fl.u.m,
)