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
Three numerical treatments are available, a first-order scheme (FOU
), a
second-order scheme (SOU
) and a second-order scheme intended for use in
compressible flows with shock waves (SLAU2
). The FOU
and SOU
schemes may
be used for both incompressible and compressible simulations. The SLAU2
scheme is 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 hybrid SLAU scheme is also available in Stream. This hybrid scheme
is a blend of SLAU or SLAU2 with a vanLeer Hanel Scheme. This allows for
users to have more control of the numerical stability with simulations
of flows that have strong shockwaves. Note: To activate the hybrid SLAU
scheme, the user must still specify either SLAU
or SLAU2
for the
inviscidFlux
variable in the run control file. To activate this scheme,
add the slau_hybrid variable to the run control file as shown below
(default shown):
slau_hybrid: 0
The default value for this variable is 0 if slau_hybrid
is not included
in the run control file, this defaults to the non-hybrid SLAU scheme
that was set by the inviscidFlux
variable. Other options for the
variable are 1
and 2
. Specifying 1
only hybridizes the momentum flux and
specifying 2
hybridizes both the momentum and energy fluxes.
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.