Reference Guide

OpenFOAM Reynolds Stress Models (LRR & SSG): Setup, the R Field, and Multiphase

Reynolds stress models (RSM) drop the Boussinesq eddy-viscosity assumption and solve a transport equation for each component of the Reynolds stress tensor — capturing turbulence anisotropy that k-omega and k-epsilon cannot. The price is stiffness and a harder convergence path. This guide covers when an RSM is worth it, how to configure LRR and SSG in OpenFOAM, the R field and its boundary conditions, the initialisation that keeps it stable, and the often-asked question of how RSM behaves with multiphase solvers.

By CFDpilot · Updated June 2026

1. When to use an RSM (and when not to)

Two-equation models (kEpsilon, kOmegaSST) assume the Reynolds stresses are aligned with the mean strain rate through a single scalar eddy viscosity — the Boussinesq hypothesis. That assumption fails when turbulence is strongly anisotropic. A Reynolds stress model instead solves a transport equation for each of the six independent Reynolds stress components, so it can represent anisotropy directly.

Use an RSM when your flow is dominated by:

Do not reach for an RSM as a default. It adds seven transport equations (six stresses plus dissipation), is markedly less robust than kOmegaSST, and needs more mesh quality and a more careful solution procedure. For attached or mildly separated flows, kOmegaSST is the better engineering choice.

2. The models: LRR and SSG

OpenFOAM provides two Reynolds stress transport models in the RAS family:

Both are available for incompressible and compressible single-phase flows.

3. Configuring the model

In OpenFOAM Foundation v10 and later the turbulence dictionary is constant/momentumTransport (it was constant/turbulenceProperties in earlier versions and in ESI/.com builds). Select the model with the model keyword:

// constant/momentumTransport  (OpenFOAM.org v10+)
simulationType  RAS;

RAS
{
    model           LRR;        // or SSG
    turbulence      on;
    printCoeffs     on;
}

On ESI/.com and older Foundation versions, use constant/turbulenceProperties and the RASModel keyword instead — the model names (LRR, SSG) are the same.

The R field

An RSM solves for the Reynolds stress tensor directly, so you must supply an R field — a volSymmTensorField with six components — in your 0/ directory, alongside k and epsilon. A missing 0/R is the single most common reason an RSM case fails to start.

// 0/R
dimensions      [0 2 -2 0 0 0 0];

internalField   uniform (0 0 0 0 0 0);  // (Rxx Rxy Rxz Ryy Ryz Rzz)

boundaryField
{
    inlet
    {
        type            fixedValue;
        value           uniform (0.01 0 0 0.01 0 0.01);
    }
    outlet
    {
        type            zeroGradient;
    }
    walls
    {
        type            kqRWallFunction;
        value           uniform (0 0 0 0 0 0);
    }
}

At walls the kqRWallFunction boundary condition is used (the same family that applies to k and q). The internal field is best taken from a converged two-equation run rather than guessed (see below).

Schemes and solver settings

Add bounded discretisation for the new transported quantities, and give R its own linear solver and relaxation:

// fvSchemes — divSchemes
div(phi,R)        Gauss upwind;
div(phi,epsilon)  Gauss upwind;

// fvSolution — relaxationFactors/equations
R           0.5;
epsilon     0.5;

Pure upwind on div(phi,R) is first-order but bounded — start here for stability, and only move to limitedLinear once the case is converging.

4. Initialisation and stability — the real pitfall

RSM is stiff: the six stress equations and the dissipation equation are tightly coupled, and small inconsistencies grow quickly. The dominant failure mode is starting cold from uniform fields.

The reliable procedure:

Watch for unphysical (non-realisable) stresses — negative normal components — which signal the model is being pushed too hard by the mesh or the schemes.

5. RSM with multiphase solvers

This is a frequent source of confusion, because the answer depends entirely on which kind of multiphase you mean — and one path has no tutorial because it is trivial, while the other has none because it is not supported.

VOF / interface-capturing (interFoam lineage)

VOF solvers — in OpenFOAM 11/12 the incompressibleVoF and compressibleVoF solvers, run via foamRun — solve a single mixture momentum equation with a single turbulence field. The model sees the mixture exactly like a single-phase flow, so LRR and SSG are configured identically to a single-phase case. There is no special multiphase RSM setup, which is precisely why you will not find a dedicated tutorial. Copy the turbulence configuration (the momentumTransport entry, 0/R, schemes) straight from a single-phase RSM case and run it with your VOF solver. Note that the sharp property jump at the interface stresses the R equations, so keep the interface well resolved.

Euler-Euler / two-fluid (multiphaseEuler lineage)

The two-fluid solvers — multiphaseEuler in OpenFOAM 12, the former multiphaseEulerFoam / reactingTwoPhaseEulerFoam — give each phase its own turbulence model. In the standard distribution the per-phase RAS models compiled for this framework are k-based only: mixtureKEpsilon, LaheyKEpsilon, continuousGasKEpsilon and kOmegaSST (usually with the Sato bubble-induced viscosity). LRR and SSG are not instantiated for the phase momentum-transport type, so you cannot simply select them.

Running a Reynolds stress model per phase means instantiating the template for the phase type and compiling a custom library — and the bubble/phase-induced source terms for the Reynolds stresses are not standardised. It has been done in the research literature (Euler-Euler RSM with anisotropic bubble-induced turbulence), but it is a development exercise, not an off-the-shelf capability. For production Euler-Euler work, use the k-based phase models.

FAQ

What Reynolds stress models are available in OpenFOAM?

LRR (Launder, Reece and Rodi) and SSG (Speziale, Sarkar and Gatski), both in the RAS family, for incompressible and compressible single-phase flows. LRR uses a linear pressure-strain closure; SSG uses a quadratic one that is better for swirl and curvature.

Why does my Reynolds stress model simulation diverge immediately?

Usually a missing or zero 0/R field, or a cold start from uniform fields. Initialise from a converged kOmegaSST/kEpsilon solution, provide 0/R with kqRWallFunction walls, use Gauss upwind for div(phi,R), and lower the relaxation factors.

Can I use a Reynolds stress model with interFoam / VOF?

Yes. VOF solvers use a single mixture turbulence field, so LRR and SSG are set up exactly as in a single-phase case. There is no special multiphase RSM configuration.

Can I use RSM with the Euler-Euler multiphase solver?

Not in the standard distribution — the per-phase models are k-based (mixtureKEpsilon, LaheyKEpsilon, continuousGasKEpsilon, kOmegaSST). LRR/SSG are not compiled for the phase type, so an RSM per phase needs a custom build and is a research-level task.

What is the R field in OpenFOAM?

The Reynolds stress tensor field — a volSymmTensorField with six components. An RSM solves a transport equation for each, so a 0/R file is required in addition to k and epsilon.

LRR or SSG — which should I use?

SSG generally does better in swirling and strongly curved flows, which is typically why you would use an RSM at all. LRR is more robust. Converging with LRR first and then switching to SSG is a practical path.

Official documentation

Setting up an RSM and fighting divergence?

CFDpilot is an AI agent for OpenFOAM — it reads your case from the terminal, checks your momentumTransport model, R field and schemes, and explains why an RSM run is diverging.

See how CFDpilot works →