Solver Configuration and Numerical Methods
Scope
This page documents the governing equations, discretisation schemes, solver
algorithms, and physics models available in AortaCFD. Three pre-configured
numerics profiles --- robust, standard, and precise --- allow
practitioners to trade numerical diffusion against stability depending on
mesh quality and simulation objectives. All settings are compatible with
OpenFOAM 12 and the foamRun solver modules.
1. Governing Equations
AortaCFD solves the incompressible Navier--Stokes equations for blood flow in patient-specific aortic geometries.
1.1 Continuity (Mass Conservation)
1.2 Momentum Conservation
where:
| Symbol | Description | Value / Note |
|---|---|---|
| \(\mathbf{u}\) | Velocity vector field | Solved variable |
| \(p\) | Pressure (kinematic or static) | Solved variable |
| \(\rho\) | Blood density | 1060 kg m\(^{-3}\) |
| \(\nu_{\text{eff}}\) | Effective kinematic viscosity | \(\nu + \nu_t\) (RANS) or \(\nu + \nu_{\text{sgs}}\) (LES) |
| \(\nu\) | Molecular kinematic viscosity | \(3.7736 \times 10^{-6}\) m\(^{2}\) s\(^{-1}\) |
Blood is modelled as an incompressible Newtonian fluid with constant properties (\(\rho = 1060\) kg m\(^{-3}\), \(\mu = 4.0 \times 10^{-3}\) Pa s), consistent with the approach widely adopted in aortic computational fluid dynamics Steinman 2002; Taylor & Figueroa 2009. For laminar flow, \(\nu_{\text{eff}} = \nu\); for Reynolds-Averaged Navier--Stokes (RANS) simulations, \(\nu_{\text{eff}} = \nu + \nu_t\), where \(\nu_t\) is the turbulent eddy viscosity.
2. Spatial Discretisation
AortaCFD employs the finite volume method (FVM) Ferziger & Perić 2002 with a collocated
variable arrangement on unstructured polyhedral meshes generated by
snappyHexMesh. The integral form of the governing equations is discretised
over each control volume, yielding a system of algebraic equations.
2.1 Gradient Schemes
Gradient reconstruction is performed via the Gauss theorem with optional cell-based limiting to prevent unbounded overshoots on highly skewed cells.
| Scheme | Formal Order | Behaviour | Used In |
|---|---|---|---|
Gauss linear |
2nd | Unbounded, exact on uniform meshes | --- |
cellLimited Gauss linear 1.0 |
2nd | Full Barth--Jespersen limiting | robust |
cellLimited Gauss linear 1 |
2nd | Moderate limiting | standard, precise |
The limiter coefficient ranges from 0 (no limiting, pure second order) to 1 (full limiting, maximum boundedness). The robust profile applies full limiting to prevent gradient overshoots on cells with high skewness.
2.2 Convection (Divergence) Schemes
The convective term \(\nabla \cdot (\mathbf{u} \otimes \mathbf{u})\) is the primary source of numerical diffusion and potential instability. AortaCFD provides three convection schemes, selected automatically by profile:
| Scheme | Order | Properties | Profile |
|---|---|---|---|
Gauss upwind |
1st | Bounded, monotone, diffusive | robust |
Gauss linearUpwind default |
2nd | Low diffusion, bounded | standard |
Gauss LUST grad(U) |
2nd | Linear-Upwind Stabilised Transport | precise |
Total Variation Diminishing (TVD) Limiters
The limitedLinearV and limitedLinear schemes apply TVD limiting Jasak 1996
to scalar and vector fields, respectively. TVD schemes guarantee that no
new local extrema are introduced during the convective update, preserving
boundedness while maintaining second-order accuracy in smooth regions
Jasak 1996; Versteeg & Malalasekera 2007. The coefficient of 1 enforces full limiting for maximum
monotonicity.
The LUST (Linear-Upwind Stabilised Transport) scheme blends 75% central
differencing (Gauss linear) with 25% linear-upwind stabilisation. This
yields substantially lower numerical diffusion than pure linearUpwind,
making it suitable for Large Eddy Simulation where resolved turbulent
structures must not be artificially damped.
2.3 Laplacian Schemes
The diffusive (Laplacian) term discretisation must account for mesh non-orthogonality. On a perfectly orthogonal mesh the standard two-point stencil is exact; on non-orthogonal meshes an explicit correction is required Ferziger & Perić 2002; OpenFOAM 2024.
| Scheme | Correction | Profile |
|---|---|---|
Gauss linear limited corrected 0.5 |
Limited non-orthogonal correction | robust, standard |
Gauss linear limited corrected 0.5 |
Tuned limited correction | precise |
The limited corrected formulation blends between the uncorrected and fully
corrected Laplacian. A coefficient of 0.5 provides stability on meshes
with non-orthogonality up to approximately 70 degrees; higher coefficients
(closer to 1.0) provide more accurate correction but may introduce
instability on poor-quality meshes OpenFOAM 2024.
2.4 Surface-Normal Gradient Schemes
Surface-normal gradients (snGradSchemes) are set consistently with the
Laplacian correction:
| Profile | Scheme |
|---|---|
| robust | limited corrected 0.5 |
| standard | limited 0.5 |
| precise | limited 0.5 |
3. Temporal Discretisation
| Scheme | Order | Stability | Profile |
|---|---|---|---|
Euler |
1st | Unconditionally stable (A-stable) | robust |
backward |
2nd | Unconditionally stable, fully implicit | standard |
CrankNicolson 0.9 |
2nd | Nearly centred; off-centring parameter 0.9 for stability | precise |
Crank--Nicolson Off-Centring
Pure Crank--Nicolson (\(\alpha = 1.0\)) is second-order accurate but can
exhibit oscillatory behaviour on coarse temporal grids. The coefficient
\(\alpha = 0.9\) blends 90% Crank--Nicolson with 10% Euler implicit,
retaining second-order formal accuracy while improving robustness. This
provides superior phase accuracy compared to the fully implicit backward
scheme, which is important for resolving pulse-wave propagation in aortic
haemodynamics.
All profiles employ adaptive time-stepping controlled by the maximum Courant number:
| Profile | Max Co | Initial \(\Delta t\) | Max \(\Delta t\) |
|---|---|---|---|
| robust | 1.0 | \(10^{-6}\) s | \(10^{-3}\) s |
| standard | 0.8 | \(10^{-6}\) s | \(10^{-3}\) s |
| precise | 0.5 | \(10^{-6}\) s | \(8 \times 10^{-4}\) s |
The conservative initial time step (\(10^{-6}\) s) prevents Courant-number spikes during flow startup.
4. PIMPLE Algorithm
AortaCFD uses the PIMPLE algorithm Issa 1986, which merges the pressure-implicit splitting of PISO (Pressure-Implicit with Splitting of Operators) with the iterative relaxation of SIMPLE (Semi-Implicit Method for Pressure-Linked Equations). The outer correction loop of PIMPLE enables larger time steps than pure PISO while preserving temporal accuracy through convergence-based iteration.
4.1 Algorithm Structure
Each time step proceeds as follows:
- Outer corrector loop (up to
nOuterCorrectorsiterations):- Assemble and solve the momentum equation (momentum predictor).
- Inner corrector loop (up to
nCorrectorspressure corrections):- Construct the pressure equation from the semi-discretised momentum equation.
- Solve the pressure equation.
- Apply non-orthogonal corrections (
nNonOrthogonalCorrectorspasses). - Correct the velocity field to satisfy continuity.
- Evaluate outer-loop residual convergence against
residualControl. - If residuals are below the target, exit the outer loop early.
- Advance to the next time step.
4.2 PIMPLE Configuration by Profile
| Parameter | robust | standard | precise |
|---|---|---|---|
nOuterCorrectors |
25 | 10 | 10 |
nCorrectors |
3 | 2 | 2 |
nNonOrthogonalCorrectors |
2 | 0 | 0 |
momentumPredictor |
yes | yes | yes |
| Outer residual target (p) | \(10^{-3}\) | \(10^{-3}\) | \(10^{-3}\) |
| Outer residual target (U) | \(10^{-3}\) | \(10^{-4}\) | \(10^{-4}\) |
4.3 Relaxation Factors
| Factor | robust | standard | precise |
|---|---|---|---|
| \(p\) | 0.3 | 0.5 | 0.5 |
| \(p_{\text{Final}}\) | 1.0 | 1.0 | 1.0 |
| \(U\) | 0.7 | 0.8 | 0.8 |
| \(U_{\text{Final}}\) | 1.0 | 1.0 | 1.0 |
Critical: Final-Iteration Relaxation
The settings \(p_{\text{Final}} = 1.0\) and \(U_{\text{Final}} = 1.0\) on the final outer corrector iteration are mandatory for correct Windkessel outlet coupling. Under-relaxation on the final corrector causes the Windkessel ODE state to drift from the applied pressure field, producing non-physical pressure waveforms and potential divergence. This requirement applies to all three profiles.
4.4 Convergence-Based Early Exit
All profiles set a deliberately high nOuterCorrectors ceiling combined
with outerCorrectorResidualControl for convergence-based early exit. The
solver iterates until the specified residual targets are reached, then
exits the outer loop regardless of the remaining iteration budget. This
strategy ensures adequate convergence during haemodynamically demanding
phases (peak systole, flow reversal) while permitting rapid exit during
quiescent diastolic periods where convergence is reached in two to three
iterations.
Inner Solver Tolerances
The residualControl block in fvSolution sets the absolute tolerance
for the linear solvers (typically GAMG for pressure, PBiCGStab for
velocity). The robust profile uses \(10^{-4}\), standard uses
\(10^{-6}\), and precise uses \(10^{-8}\).
5. Numerics Profiles Summary
AortaCFD ships three self-consistent numerics profiles. Each profile specifies temporal, spatial, and solver settings that have been tested together for stability and accuracy on patient-specific aortic meshes.
| Characteristic | robust | standard | precise |
|---|---|---|---|
| Formal spatial order | 1st | 2nd | 2nd |
| Formal temporal order | 1st | 2nd | 2nd |
| Numerical diffusion | High | Low--moderate | Low |
| Stability | Maximum | High | Good (mesh-dependent) |
| Mesh requirement (ortho) | Any | > 50 deg | > 70 deg |
| Mesh requirement (skew) | Any | < 4 | < 2 |
| Intended use | Debugging, poor meshes | Production, clinical | LES, validation |
| Computational cost | 1x (baseline) | 1x | 2--3x |
Profile Selection Guidance
- Start with
standardfor all production simulations. - If divergence occurs, switch to
robustand investigate mesh quality. - Use
preciseonly aftercheckMeshconfirms orthogonality > 70 deg and skewness < 2. - For LES,
preciseis mandatory (LUST preserves resolved eddies).
6. Physics Models
6.1 Laminar (Recommended Default)
Aortic Reynolds numbers typically range from 500 to 4000, placing the flow in the transitional regime. Published patient-specific aortic CFD increasingly adopts laminar simulations for \(\text{Re} < 4000\), on the grounds that turbulence models developed for fully turbulent flows may introduce greater modelling error than the unresolved transitional fluctuations Steinman 2002; Taylor & Figueroa 2009. AortaCFD uses the laminar solver module by default.
6.2 RANS: k--omega SST
The \(k\text{--}\omega\) SST (Shear Stress Transport) model Menter 1994 is provided for cases with sustained turbulence (\(\text{Re} > 5000\)), such as severe aortic stenosis or mechanical heart valve flows. The transport equations are:
Turbulent kinetic energy:
Specific dissipation rate:
where \(P_k\) is the production of turbulent kinetic energy, \(F_1\) is the SST blending function, and the model coefficients (\(\beta^{*}\), \(\beta\), \(\gamma\), \(\sigma_k\), \(\sigma_\omega\)) are blended between the \(k\text{--}\omega\) (near-wall) and \(k\text{--}\varepsilon\) (free-stream) sets via \(F_1\) Menter 1994.
Caution: RANS in Predominantly Laminar Flow
The \(k\text{--}\omega\) SST model may over-predict eddy viscosity in predominantly laminar aortic flow, artificially increasing dissipation and damping physiologically relevant secondary flow structures Pope 2000. Users should verify that RANS results do not differ qualitatively from laminar solutions before adopting a turbulence model.
6.3 LES (Large Eddy Simulation)
For time-resolved turbulence investigations (jet breakdown distal to stenoses, aortic arch vortex dynamics), AortaCFD supports subgrid-scale (SGS) modelling:
- WALE (Wall-Adapting Local Eddy-viscosity) Nicoud & Ducros 1999 --- preferred for wall-bounded flows; the SGS viscosity naturally vanishes at solid walls without requiring damping functions.
- Smagorinsky --- classical constant-coefficient model; suitable for free-shear flows but requires van Driest damping near walls.
LES Mesh and Temporal Requirements
LES demands significantly higher resolution than RANS:
- Mesh orthogonality > 70 deg, skewness < 2
- Near-wall resolution: \(y^{+} < 1\) (mandatory wall-resolved LES)
- Boundary-layer expansion ratio < 1.3
- Maximum Courant number \(\leq 0.5\)
- Use the
precisenumerics profile exclusively
7. Convergence Monitoring
Convergence is assessed at two levels:
-
Linear solver convergence (inner iterations): monitored via absolute residual tolerances in
fvSolution. Typical targets are \(10^{-4}\) (robust), \(10^{-6}\) (standard), or \(10^{-8}\) (precise). -
PIMPLE outer-loop convergence: the
outerCorrectorResidualControlblock specifies per-field residual targets that trigger early exit from the outer correction loop.
Recommended post-simulation checks include:
- Initial residuals for \(p\) and \(\mathbf{U}\) should decrease monotonically within each time step.
- Global mass conservation error should remain below 0.01%.
- For pulsatile simulations, examine convergence behaviour separately during systolic acceleration, peak systole, and diastole.
Mesh Independence Verification
Regardless of the numerics profile selected, solution accuracy must be confirmed through a mesh independence study. The Grid Convergence Index (GCI) method Versteeg & Malalasekera 2007 on at least three mesh levels (refinement ratio \(r \geq \sqrt{2}\)) is the accepted standard for quantifying spatial discretisation uncertainty in cardiovascular CFD.
8. Mesh-Adaptive Numerics
The regenerate-numerics pipeline step automatically adjusts discretisation
schemes based on mesh quality metrics reported by checkMesh. This is
implemented in src/config/mesh_adaptive_solver.py.
The mesh-quality-aware adjustment classifies the mesh into one of five tiers based on maximum skewness, non-orthogonality, and aspect ratio:
| Tier | Skewness | Non-Orthogonality | Aspect Ratio |
|---|---|---|---|
| Excellent | < 1.5 | < 55 deg | < 20 |
| Good | < 2.5 | < 65 deg | < 30 |
| Fair | < 4.0 | < 70 deg | < 50 |
| Poor | < 6.0 | < 75 deg | < 100 |
| Critical | \(\geq\) 6.0 | \(\geq\) 75 deg | \(\geq\) 100 |
Solver settings (correctors, relaxation factors, tolerances) are then
scaled relative to the selected numerics profile to ensure stability on
the actual mesh. Users may override any adjusted parameter via config.json.
9. Parallel Execution
Domain decomposition is performed via the scotch algorithm (default) or
hierarchical methods. The scotch partitioner minimises inter-processor
communication by optimising the surface-area-to-volume ratio of each
subdomain.
{
"run_settings": {
"solution_type": "parallel",
"subdomains": 8,
"decomposition_method": "scotch"
}
}
Subdomain Count
The number of subdomains should be set equal to the number of available physical cores. Over-decomposition (more subdomains than cores) increases MPI communication overhead without computational benefit. For typical patient-specific aortic meshes (1--5 million cells), 4--16 subdomains provide efficient scaling.
References
Full bibliography on the References page.
Found an issue or have a suggestion for this page?
Open a GitHub issue