# Porous Medium Model
The Porous Medium model in Flow360 simulates flow through porous regions by adding a resistance term to the momentum equations.
# 📝 Porous Medium Configuration
The Porous Medium model allows you to represent complex geometries or flow-restricting devices without modeling their detailed structure. It adds a source term to the momentum equations that simulates the pressure drop that would occur when fluid passes through a porous material.
# 📋 Available Parameters
Parameter | Description | Unit |
---|---|---|
Entities | Volumes that define the porous region (must specify axes) | |
Darcy Coefficient | 3D vector of linear (viscous) pressure drop coefficients | 1/length² (e.g., 1/m²) |
Forchheimer Coefficient | 3D vector of quadratic (inertial) pressure drop coefficients | 1/length (e.g., 1/m) |
Volumetric Heat Source | Optional heat generation within the porous volume | energy/length³/time (e.g., W/m³) |
# 🔍 Detailed Descriptions
# Entities
The entity list for the Porous Medium model. The entity should be defined by Box or zones from the geometry/volume mesh. The axes of entity must be specified to serve as the principle axes of the porous medium material model.
- Default: None (required parameter)
- Example:
[Box.from_principal_axes(name="porous_zone", axes=[(0, 1, 0), (0, 0, 1)], center=(0, 0, 0), size=(0.2, 0.3, 2))]
- Notes: Each entity must have axes defined that determine the principal directions for the resistance coefficients.
# Darcy Coefficient
Darcy coefficient of the porous media model which determines the scaling of the viscous loss term. The 3 values define the coefficient for each of the 3 axes defined by the reference frame of the volume zone.
- Default: None (required parameter)
- Example:
(1e6, 0, 0) / u.m**2
- Notes:
- Values are specified in the local coordinate system of the porous volume
- The three components correspond to the three principal axes of the volume
- When using
Box.from_principal_axes()
, the first two directions are those you provide in theaxes
parameter, and the third is the cross product of these two - When using
Box.from_axis_and_angle()
, visualize the 3D graphics to identify the directions correctly
# Forchheimer Coefficient
Forchheimer coefficient of the porous media model which determines the scaling of the inertial loss term.
- Default: None (required parameter)
- Example:
(1, 0, 0) / u.m
- Notes:
- Values are specified in the local coordinate system of the porous volume, same as Darcy coefficients
- The three components correspond to the three principal axes of the volume
- These coefficients affect the quadratic (velocity-squared) pressure drop term
- Typically dominant at higher flow rates
# Volumetric Heat Source
The volumetric heat source within the porous region.
- Default:
0 W/m³
- Example:
1.0 * u.W / u.m**3
- Notes: Can be specified as a constant value or as a function of position/time using a string expression. String expressions (time/position-dependent functions) can only be defined through the Python API, not in the GUI.
💡 Tips
- Base resistance coefficients on experimental data when possible.
- For anisotropic media, define directional resistances aligned with your principal axes.
- Ensure sufficient mesh resolution near the porous media interfaces.
- For heat exchangers, couple with appropriate thermal settings.
- Consider conducting sensitivity studies if experimental data for coefficients is limited.
- When constructing boxes for porous media, carefully define axes to match your physical system's principal directions.
# Best Practices
- Base resistance coefficients on experimental data when possible
- For anisotropic media, define directional resistances appropriately
- Ensure smooth transition of mesh resolution at porous media interfaces
- For heat exchangers, couple with heat transfer settings
- Conduct sensitivity studies on resistance coefficients when experimental data is limited
- Verify pressure drop predictions against known values for similar devices
- Consider the impact of porosity on flow volume and domain sizing
# Common Use Cases
# Heat Exchangers and Radiators
- Automotive cooling systems
- HVAC equipment
- Power plant components
- Electronic cooling systems
# Flow Control Devices
- Screens and filters
- Perforated plates
- Flow straighteners
- Diffusers and flow distributors
# Natural Systems
- Soil and groundwater flow
- Vegetation modeling
- Urban air flow through building arrays
# Determining Resistance Coefficients
# From Experimental Data
- Measure pressure drop vs. flow rate
- Plot Δp/L vs. velocity
- Fit to quadratic equation: Δp/L = av + bv²
- Viscous resistance = a/μ
- Inertial resistance = b/ρ
# From Known Loss Coefficients
- For screens/perforated plates with known loss coefficient K
- Inertial resistance = K/(2Δx)
- Where Δx is the medium thickness
# From Correlations
For common geometries like packed beds:
- Ergun equation: Δp/L = 150μ(1-ε)²v/(ε³d²) + 1.75ρ(1-ε)v²/(ε³d)
- Where ε is porosity and d is particle diameter
❓ Frequently Asked Questions
How do I determine appropriate Darcy and Forchheimer coefficients?
Coefficients can be determined from experimental pressure drop vs. flow rate data, known loss coefficients, or correlations like the Ergun equation for packed beds. Plot Δp/L vs. velocity and fit to a quadratic equation: Δp/L = av + bv². Then, Darcy coefficient = a/μ and Forchheimer coefficient = b/ρ.
What's the difference between Darcy and Forchheimer coefficients?
Darcy coefficients control the linear (viscous) component of pressure drop, proportional to velocity. Forchheimer coefficients control the quadratic (inertial) component, proportional to velocity squared. At low Reynolds numbers, the Darcy term dominates, while at higher Reynolds numbers, the Forchheimer term becomes more significant.
How do I handle highly anisotropic porous media?
Define your entity axes to align with the principal directions of your porous medium. Then specify different coefficient values for each direction. Ensure your mesh adequately resolves the flow in all directions of interest.
How do the coefficient vectors relate to the coordinate system?
The Darcy and Forchheimer coefficients are defined in the local coordinate system of your porous region. When using
Box.from_principal_axes()
, the first two components correspond to the axes you provide, and the third is their cross product. When usingBox.from_axis_and_angle()
, it can be challenging to know which component corresponds to which direction, so use the 3D graphics visualization to verify.Can I model time-dependent heat generation in porous media?
Yes, the volumetric heat source parameter can accept a string expression that includes time dependency, allowing you to model transient heat generation (python only).
How does the porous medium model affect solution stability?
High resistance coefficients can sometimes cause convergence difficulties. If you encounter instability, consider a gradual ramp-up of the coefficients during the solution process or ensuring adequate mesh resolution in the porous region.
🔒 Limitations
- Simplifies complex geometry effects
- Cannot capture detailed local flow patterns within the porous region
- Requires accurate resistance coefficients for realistic results
- May oversimplify thermal effects in heat exchangers
- Assumes homogeneous properties throughout the porous volume
🐍 Python API Usage Example
Below is a Python code example showing how to configure a porous medium model:
# Example (for reference only, not included in GUI documentation)
porous_medium_model = fl.PorousMedium(
entities=[porous_zone],
darcy_coefficient=(1e6, 0, 0) / fl.u.m**2,
forchheimer_coefficient=(1, 0, 0) / fl.u.m,
volumetric_heat_source=1.0 * fl.u.W/ fl.u.m**3,
)