Appendix: Inviscid Fluxes and Gradient Limiting
Numerical treatment of the convection terms in the governing equations
is of primary concern regarding both accuracy and stability of the
computation. Selection of the convection scheme is made using the run
control file variable inviscidFlux.
inviscidFlux: SOU
Several numerical treatments are available, including a first-order scheme
(FOU), a second-order scheme (SOU), and SLAU-family schemes intended for
use in compressible flows with shock waves. The FOU and SOU schemes may
be used for both incompressible and compressible simulations. The SLAU-family
schemes are only available for compressible simulations. These schemes as
well as the associated limiters are briefly detailed in the following
sections.
First-Order Upwinding
This scheme is selected by specifying the value FOU for the inviscidFlux
variable. With first-order upwinding, face values for the dependent
variables are obtained by a simple zeroth-order extrapolation from the
upwind associated cell center. Overall, this scheme results in a
calculation which is first-order accurate in space. In general, one
should not use first-order upwinding for production runs where grid
independent solutions are required as a prohibitive number of grid cells
would be required to achieve grid-independence. The generally
dissipative nature of this scheme can be advantageous for starting
simulations from scratch with a poor initial condition if it is found
that second-order schemes have difficulty at start-up due to their
relatively less dissipative nature.
Second-Order Upwinding
This scheme is selected by specifying the value SOU for the inviscidFlux
variable in the run control file. With second-order upwinding, face
values for the dependent variables are obtained via a linear
extrapolation from the upwind associated cell center using both the
value and gradient of the dependent variable. The linear extrapolation
can be limited for stability purposes so that no extrema are introduced
by the extrapolation using the limiters discussed here. This is
generally a requirement for numerical stability when simulating flows on
engineering meshes. Overall, this scheme results in a calculation which
is second-order accurate in space and is the preferred scheme for
production simulations that do not involve the presence of shock waves.
SLAU/SLAU2
The Simple Low-dissipation Advection-Upstream-splitting-method (SLAU)
scheme should be used in compressible simulations that contain shock
waves. This scheme is selected by specifying the value SLAU or SLAU2 for
the inviscidFlux variable in the run control file. The scheme maintains
formal second-order accuracy in regions away from the shocks and
degenerates to lower order in the immediate vicinity of the shocks to
maintain monotonicity in transitioning from the state on one side of the
shock to the state on the other side of the shock. Similar to the
second-order upwinding scheme, the SLAU scheme also involves
extrapolation operations which require the use of the limiters discussed
here. An example showing the specification of the
SLAU scheme is shown below.
inviscidFlux: SLAU
A blended hybrid SLAU scheme is also available in Stream. This mode keeps the
base SLAU or SLAU2 face-flux structure and blends its scalar momentum
dissipation level with a selected backend dissipation model to improve
robustness for strong shocks. It is not a wholesale replacement of the
SLAU-family flux with an HLLE-family Riemann flux. To use it, keep
inviscidFlux as one of the SLAU-family options (SLAU, SLAUHR,
SLAU2, or SLAU2HR) and set slau_hybrid with a string value:
slau_hybrid: off
Valid values are off, vanLeer, HLLE, HLLEM, LM_HLLEM, and
HLLEMCC. The default is off. The HLL-family names identify
HLL-family-inspired scalar dissipation backends used by the blended hybrid
SLAU/SLAU2 correction.
Optional backend tuning parameters are provided through
slauHybridOptionsList:
slauHybridOptionsList: <lowMachFloor=0.05,lowMachCeiling=0.30,contactScale=1.00,carbuncleScale=1.00,pressureNormalizationFloor=1.0e-12,hllStateJumpFloor=1.0e-12>
All entries in slauHybridOptionsList are optional. The available keys are
lowMachFloor, lowMachCeiling, contactScale, carbuncleScale,
pressureNormalizationFloor, and hllStateJumpFloor.
The valid ranges are:
lowMachFloor in (0,1]; lowMachCeiling in (0,1];
contactScale in [0,1]; carbuncleScale in [0,1];
pressureNormalizationFloor > 0; hllStateJumpFloor > 0.
Backend-specific usage:
vanLeer: does not useslauHybridOptionsListcoefficients.HLLE: useshllStateJumpFloor.HLLEM: usescontactScale,pressureNormalizationFloor, andhllStateJumpFloor.LM_HLLEM: useslowMachFloor,lowMachCeiling,contactScale,pressureNormalizationFloor, andhllStateJumpFloor.HLLEMCC: usescarbuncleScale,contactScale,pressureNormalizationFloor, andhllStateJumpFloor.
lowMachFloor, lowMachCeiling, contactScale, and carbuncleScale are dimensionless. Plain numeric values for pressureNormalizationFloor and
hllStateJumpFloor are interpreted in solver units. These two options may also be supplied with pressure and density units, respectively, such as 1 Pa and
1 kg/m/m/m.
Recommended backend selection for the blended hybrid correction:
HLLE: strongest baseline backend dissipation for very strong shocks.HLLEM: reduces the HLLE-inspired backend dissipation in contact/shear-dominated regions when shock robustness is already acceptable.LM_HLLEM: better for mixed low-Mach + compressible regions where the HLLEM-inspired backend is too dissipative at low Mach.HLLEMCC: restores the backend toward HLLE-like dissipation when carbuncle-like behavior appears near strong, grid-aligned shocks.vanLeer: legacy hybrid baseline.
Recommended starting values by backend:
HLLE: keep defaults; typically onlyhllStateJumpFloor=1.0e-12is relevant.HLLEM:contactScale=0.8to1.0; keeppressureNormalizationFloorandhllStateJumpFloorat defaults initially.LM_HLLEM:lowMachFloor=0.03to0.10,lowMachCeiling=0.20to0.50,contactScale=0.8to1.0; keep the two floor parameters at defaults initially.HLLEMCC:carbuncleScale=0.8to1.0,contactScale=0.7to1.0; keeppressureNormalizationFloorandhllStateJumpFloorat defaults initially.
Practical tuning direction:
Increase
contactScaleto reduce dissipation on contact/shear features (can reduce robustness).Increase
carbuncleScaleto increase HLLE-like stabilization near strong shocks.Increase
lowMachFlooror decreaselowMachCeilingto increase low-Mach dissipation.Decrease
lowMachFlooror increaselowMachCeilingto reduce low-Mach dissipation.Keep
pressureNormalizationFloornear default unless the HLLEM/HLLEMCC pressure normalization becomes too small for your case scaling.Keep
hllStateJumpFloornear default unless the HLL-family backend dissipation becomes too sensitive to vanishingly small left/right state jumps under your case scaling.
Inviscid Flux for Turbulence Equations
There may be instances in which one may suspect that the turbulence
equations are the source of nonlinear instability within a time step.
This could be due to any number of factors, including a poor initial
condition or some flow feature that takes the calibration of the
turbulence models far out of the range of their intended validity. In
such circumstances, in order to achieve stability, one may be required
to bring the turbulence equations down to first-order. This is
accomplished using the run control file variable turbulenceInviscidFlux
as shown below (default shown):
turbulenceInviscidFlux: SOU
The default value for this variable is SOU. One should attempt to use
SOU whenever possible, as the use of FOU results in excessively smeared
shear layers, recirculation regions and separated flow features. Often
it is sufficient just to use FOU to get past a bad initial condition,
and then restart to SOU.
Limiters
Limiters are used in conjunction with the second-order convection schemes discussed above as well as throughout the code where projection of cell gradient information to the cell faces is required.
limiter: venkatakrishnan
The venkatakrishnan (default) option can be specified for the
Venkatakrishnan limiter [Venk1993] to be used. The barth option will activate
the Barth limiter [BaJe1989]. If the value none is specified, no limiting will
be performed. The mlp option can be specified to activate a limiter that
is based on the multidimensional limiting process [Zhan2018], which is a
limiter that is more robust than the Venkatakrishnan limiter for flows
with shockwaves. A second, even more tuned limiter [Zhan2018] for flows with
shockwaves can be specified by using mlp_pw. This is an MLP limiter that
uses a pressure function to detect shockwaves and utilizes a larger
stencil of cell and node information in order to determine an
appropriate limiter value. It is important to note that at the current
time the only variable that controls limiting is the limiter variable.
Thus, the same limiter will be used for limiting the convection schemes
as well as other terms in the governing equations. Often, a user may
think that they can use the value zero to select first-order upwinding.
In Stream, one should not use this option, as this turns off
all limiting throughout the code. The proper way to select first-order
upwinding is with the variable inviscidFlux.
The venkatakrishnan, mlp, and mlp_pw limiters utilize something called
the Venkatakrishnan limiting function. This is a simple algebraic
quantity that controls the sensitivity of the limiter. It has a
parameter that can be set to tune the sensitivity of the limiters for
regions of smooth flows. The run control file variable for setting this
parameter is Kl, and an example of its specification is shown below
(default shown).
Kl: 1.0
A rule of thumb for this variable is that if a limiter seems to be limiting the flow field in smooth regions and causing disturbances in the smooth field, to try and increase this value. For very larger values of this variable, say greater than 20, this essentially begins to turn off the limiter completely and will result in numerical instability and eventual crashing of the code. The optimal value is often problem-dependent, but the default value is a good starting choice most of the time.
Option |
Description |
Default |
|---|---|---|
venkatakrishnan |
Standard Venkatakrishnan limiter |
Y |
barth |
Barth-Jespersen limiter |
N |
NB |
Nodal Barth-Jespersen limiter |
N |
none |
No limiting on any equations |
N |
mlp |
Multi-dimensional limiting process |
N |
mlp_pw |
Multi-dimensional limiting process with pressure-weighting |
N |
References
V. Venkatakrishnan, “On the Accuracy of Limiters and Convergence to Steady-State Solutions,” 31st Aerospace Sciences Meeting, Reno, 1993.
T. Barth and D. Jespersen, “The Design and Application of Upwind Schemes on Unstructured Meshes,” 27th Aerospace Sciences Meeting, Reno, 1989.