Setting up non-Newtonian viscosity models in OpenFOAM has become a common source of confusion since OpenFOAM 12 (openfoam.org) restructured where rheology is defined. This guide covers the full setup for BirdCarreau, CrossPowerLaw, powerLaw, and HerschelBulkley — for single-phase, two-phase VoF, and the known limitations with multiphase VoF. It also explains the difference between openfoam.org and openfoam.com for non-Newtonian cases.
In OpenFOAM versions up to 9 (openfoam.org) and in all openfoam.com versions, non-Newtonian models were defined in constant/transportProperties:
// Old structure (OF9, openfoam.com)
transportModel BirdCarreau;
BirdCarreauCoeffs
{
nu0 1.734e-3;
nuInf 1e-6;
k 5.0;
n 0.45;
}
From OpenFOAM 10 onwards (openfoam.org), this was split across two files. physicalProperties becomes a minimal placeholder, and the actual rheology moves into momentumTransport under the generalisedNewtonian model:
// constant/physicalProperties — OF12
viscosityModel constant;
nu 1e-3; // placeholder, overridden at runtime
rho 1000;
// constant/momentumTransport — OF12
simulationType laminar;
laminar
{
model generalisedNewtonian;
viscosityModel BirdCarreau;
nu0 1.734e-3;
nuInf 1e-6;
k 5.0;
n 0.45;
}
The nu value in physicalProperties is read during initialisation but immediately overridden by the generalisedNewtonian model. Its value does not affect results. The rho value however is used — set it correctly.
All viscosity values are kinematic (ν = μ/ρ, units m²/s). If your rheometer data gives dynamic viscosity in Pa·s, divide by density before entering the values.
The Bird-Carreau model: η = η∞ + (η0 − η∞) [1 + (λγ̇)²](n−1)/2
viscosityModel BirdCarreau;
nu0 1.734e-3; // zero-shear kinematic viscosity [m²/s]
nuInf 1e-6; // infinite-shear kinematic viscosity [m²/s]
k 5.0; // relaxation time λ [s]
n 0.45; // power-law index [-]
The Cross model: η = η∞ + (η0 − η∞) / [1 + (mγ̇)n]
viscosityModel CrossPowerLaw;
nu0 1e-3;
nuInf 1e-5;
m 0.4; // time constant [s]
n 3.0; // power index [-]
The power-law model: η = k γ̇n−1. Unbounded at low shear rates — always set nuMin and nuMax.
viscosityModel powerLaw;
k 3000; // consistency index [m²/s · s^(n-1)]
n 0.4; // shear-thinning index [-]
nuMin 0.1; // viscosity floor [m²/s]
nuMax 1e6; // viscosity ceiling [m²/s]
For yield-stress fluids (gels, pastes, muds). Flow only occurs above the yield stress τ0.
viscosityModel HerschelBulkley;
k 1.0; // consistency index
n 0.5; // flow index
tau0 10.0; // yield stress [Pa] / rho → [m²/s²]
nu0 1e-3; // viscosity below yield stress
For two immiscible non-Newtonian fluids, the rheology of each phase is defined in a separate momentumTransport.PhaseName file. The top-level momentumTransport must declare simulationType twoPhaseTransport — without this, OpenFOAM ignores the per-phase files and falls back to the constant viscosity in physicalProperties.
simulationType twoPhaseTransport;
// Per-phase rheology is in momentumTransport.PhaseA and momentumTransport.PhaseB
simulationType laminar;
laminar
{
model generalisedNewtonian;
viscosityModel powerLaw;
k 3000;
n 0.4;
nuMin 0.1;
nuMax 1e6;
}
simulationType laminar;
laminar
{
model generalisedNewtonian;
viscosityModel BirdCarreau;
nu0 5e-4;
nuInf 1e-6;
k 2.0;
n 0.6;
}
The phase names must match those declared in constant/phaseProperties. The physicalProperties.PhaseA and physicalProperties.PhaseB files still need viscosityModel constant and a valid rho.
incompressibleMultiphaseVoF in OpenFOAM 12 openfoam.org does not reliably support non-Newtonian models. The generalisedNewtonian framework is not fully integrated into the multiphase momentum transport layer in this version. Attempting to use it typically results in the simulation running with the constant viscosity from physicalProperties instead of the defined model.
The practical alternatives:
transportProperties structure, non-Newtonian multiphase workstransportProperties, multiphase non-Newtonian is supported. The rheology definition reverts to the old syntax with a BirdCarreauCoeffs { } blockThe two distributions (openfoam.org and openfoam.com) are independent forks with different file structures and different release cadences. Tutorials and setup guides from one version often do not transfer directly to the other.
For strongly shear-thinning fluids (n < 0.5), starting from a uniform zero velocity field with the full non-Newtonian model active often causes divergence. The local viscosity at low shear rates can be orders of magnitude higher than at high shear rates, making the momentum equation very stiff at startup. The reliable approach:
viscosityModel constant (or n = 1) until the flow is established0/The powerLaw model has no natural viscosity bounds — it diverges to infinity at zero shear rate and collapses to zero at high shear rates. Always set nuMin and nuMax. Set them wide enough not to interfere with the physics, but tight enough to prevent unphysical extremes. A factor of 10³–10⁴ between nuMin and nuMax around the expected operating viscosity is typical.
For steady-state non-Newtonian cases with strong shear-thinning, reduce the U relaxation factor to 0.5–0.6 (lower than the standard 0.7). The viscosity field couples back into the momentum equation at every iteration, creating an additional source of instability absent in Newtonian cases.
In OpenFOAM 12 (openfoam.org), non-Newtonian models were moved from physicalProperties into momentumTransport under a laminar { model generalisedNewtonian; } block. The physicalProperties file must still contain viscosityModel constant as a placeholder — it no longer defines the actual rheology. The error "Unknown viscosity model BirdCarreau" appears because the solver is looking in the wrong file.
BirdCarreau uses nu0 (zero-shear kinematic viscosity, m²/s), nuInf (infinite-shear kinematic viscosity, m²/s), k (relaxation time, s), and n (power-law index, dimensionless). All viscosity values are kinematic — divide dynamic viscosity by density before entering them. A common mistake is entering rheometer values in Pa·s directly without dividing by rho.
Set simulationType twoPhaseTransport in the top-level constant/momentumTransport file. Then create constant/momentumTransport.PhaseA and constant/momentumTransport.PhaseB, each with simulationType laminar and the generalisedNewtonian block. Without twoPhaseTransport in the top-level file, the per-phase files are silently ignored.
Not reliably. The generalisedNewtonian model is not fully wired into the multiphase momentum transport framework in OpenFOAM 12 openfoam.org. The practical alternatives are OpenFOAM 9 (openfoam.org) or OpenFOAM.com versions (v2412, v2512) which retained the transportProperties structure and support multiphase non-Newtonian setups.
They are independent forks. OpenFOAM.org (versions 10–13) restructured rheology into momentumTransport. OpenFOAM.com (v2412, v2512) retained transportProperties. For multiphase non-Newtonian cases, openfoam.com is currently more reliable. Tutorials and case files from one fork typically do not work directly with the other.
Most common causes: nuMax not set for powerLaw (viscosity diverges near stagnation), initial velocity too far from solution causing extreme local viscosity values, or relaxation factors too high for a strongly shear-thinning fluid. Start with n = 1 (Newtonian), converge the flow field, then switch to your target model using the converged state as initial condition.
Struggling with a non-Newtonian case? Upload your case files to CFDpilot for an automated diagnostic — it checks your momentumTransport setup, physicalProperties consistency, and flags common configuration errors.