It is mendatory to define a time integration scheme in order to perform a TRUST calculation. Solving a stationary problem is currently not possible (work in progress in a private application but not yet finalized).
TRUST implements a large selection of time schemes where the use selection is kept as a choice for the user. It is possible to perform completely pure explicit or even pure implicit integration. The code also allows to employ a semi-implicit time integration. All the implemented classes derive from the base class Schema_Temps_base
. Click here to see the Doxygen documentation of this class.
The basic point that should be taken into account is to pay attention to the time-step and the stability criteria. For example, if one selects an explicit time scheme, both the Courant–Friedrichs–Lewy (CFL) and the Von-Neumann criteria must be respected in order to obtain stable results. This constraint can be relaxed when employing an implicit integrator.
In cases where the diffusion time step is more critcal than the convective one, TRUST offers the possibility to implicitly treat the diffusion operator (the convective remains explicit). In such a case, respecting the CFL criterion is sufficient. This can play an important role in accelerating the computational time in some cases.
The stability of the time scheme can be controled in a TRUST’s data file by the parameter facsec
and facsec_max
(please have a look to the TRUST documentation for a detailed discription). Keep in mind that the non-linear term of the Navier-Stokes equation is not fully implicited, although if one uses a pure implicit time scheme. For this reason, we recommend you to use the facsec
parameter with moderation !
Here is the list of the time integration schemes available in the platform.
Explicit schemes
-
Euler Scheme
The C++ class is
Scheme_euler_explicit
. This is the Euler explicit scheme of first order. -
Runge Kutta Series
-
The C++ class is
Runge_kutta_ordre_2
. This is a low-storage Runge-Kutta scheme of second order that uses 2 integration points. The method is presented here by Williamson (case 1). -
The C++ class is
Runge_kutta_ordre_3
. This is a low-storage Runge-Kutta scheme of third order that uses 3 integration points. The method is presented here by Williamson (case 7). -
The C++ class is
Runge_kutta-_ordre_4_d3p
. This is a low-storage Runge-Kutta scheme of third order that uses 3 integration points. The method is presented here by Williamson (case 17). -
The C++ class is
Runge_kutta_rationnel_ordre_2
. This is the Runge-Kutta rational scheme of second order. The method is described in the note: Wambeck - Rational Runge-Kutta methods for solving systems of ordinary differential equations, here. Although rational methods require more computational work than linear ones, they can have some other properties, such as a stable behaviour with explicitness, which make them preferable. The CFD application of this RRK2 scheme is described in this note. -
The C++ class is
Runge_kutta_ordre_2_classique
. This is a classical Runge-Kutta scheme of second order that uses 2 integration points. -
The C++ class is
Runge_kutta_ordre_3_classique
. This is a classical Runge-Kutta scheme of third order that uses 3 integration points. -
The C++ class is
Runge_kutta_ordre_4_classique
. This is a classical Runge-Kutta scheme of fourth order that uses 4 integration points. -
The C++ class is
Runge_kutta_ordre_4_classique_3_8
. This is a classical Runge-Kutta scheme of fourth order that uses 4 integration points and the 3/8 rule. -
The C++ class is
Schema_Adams_Bashforth_order_2
. This is the Adams Bashforth second order scheme. -
The C++ class is
Schema_Adams_Bashforth_order_3
. This is the Adams Bashforth third order scheme.
-
Implicit schemes
-
Euler Scheme
The C++ class is
Schema_Euler_Implicite
. This is the Euler implicit scheme of first order. -
Crank Nicholson
The C++ class is
Sch_CN_iteratif
. This is the Crank-Nicholson method of second order accuracy. A mid-point rule formulation is used (Euler-centered scheme). The time derivative at the mid-level is calculated iteratively with a simple under-relaxations method. Since the method is implicit, neither the cfl nor the fourier stability criteria must be respected. The time step is calculated in a way that the iterative procedure converges with the less iterations as possible. -
Adams Moulton Series
Two available C++ classes are available:
Schema_Adams_Moulton_order_2
andSchema_Adams_Moulton_order_3
. -
Backward Differentiation Series
Two available C++ classes are available:
Schema_Backward_Differentiation_order_2
andSchema_Backward_Differentiation_order_3
.
Semi-Implicit schemes
-
Predictor Corrector
The C++ class is
Schema_predictor_corrector
. This is the predictor-corrector scheme (second order). It is more accurate and economic than MacCormack scheme. It gives best results with a second ordre convective scheme like quick, centre (VDF). -
Crank Nicholson
The C++ class is
Sch_CN_EX_iteratif
. It describes a Crank-Nicholson (CN) method of second order accuracy but here, for scalars, because of instablities encountered when dt > dt_CFL, the Crank Nicholson scheme is not applied to scalar quantities. Scalars are treated according to Euler-Explicite scheme at the end of the CN treatment for velocity flow fields (by doing p Euler explicite under-iterations at dt <= dt_CFL). Parameters are the sames (but default values may change) compare to theSch_CN_iterative
scheme plus a relaxation keyword: niter_min (2 by default), niter_max (6 by default), niter_avg (3 by default), facsec_max (20 by default), seuil (0.05 by default) -
Leap Frog
The C++ class is
leap_frog
. This is the leap-frog scheme.