Time schemes
Several time schemes have been implemented, we distinguish explicit time-schemes from implicit time-schemes. You can use the implementation of time schemes provided by Montjoie for your own evolution problem. The model problem is the first-order evolution problem :
An example of use of time schemes for this equation is detailed below
class MyFunction { public : void EvaluateFunction(const Real_wp& t, VectReal_wp& u, VectReal_wp& gU) { // you fill g(t, U) in vector gU gU(0) = u(1); gU(1) = -u(0); } }; // instance of MyFunction MyFunction sys; // for example we consider Runge-Kutta explicit scheme RungeKutta_Iterator<Real_wp> RK; // initialization of coefficients by giving the order RK.SetOrder(4); // initialization of the scheme by providing the first iterate and time step Real_wp t0 = 0, dt = 0.01; VectReal_wp U0(N); U0.Fill(0); RK.SetInitialCondition(t0, dt, U0, sys); // then loop in times for (int nt = 0; nt < nb_max_iterations; nt++) { // computation of U^n+1 // the result is present in RK.Y RK.Advance(t, nt, sys); } // you can release memory used by the time scheme (intermediary vectors) RK.Clear();
Time schemes for first-order evolution systems
RungeKutta_Iterator | explicit Runge-Kutta schemes |
Talezer_Iterator | explicit Tal-ezer schemes |
AdamsBashforth_Moulton_Iterator | explicit Adams-Bashforth-Moulton schemes |
TaylorSeries_Iterator | explicit scheme based on Taylor expansion |
LowStorageRK_Iterator | explicit low-storage Runge-Kutta schemes |
MultiStepButcher_Iterator | explicit multistep Butcher's schemes |
OptimalModifiedEquation_Iterator | optimal modified equation schemes |
SdirkScheme_Iterator | Singly-diagonally implicit Runge-Kutta schemes |
SdirkScheme_Iterator | Singly-diagonally implicit Runge-Kutta schemes |
LocalImperialeScheme_Iterator | local-time stepping with optimal modified equation approach (Imperiale's scheme) |
LocalPipernoScheme_Iterator | local-time stepping with symplectic approach (Piperno's scheme) |
ModifiedEquationSystemIterator | modified equation approach |
Time schemes for second-order evolution systems
TetaScheme_Iterator | implicit theta-scheme |
ModifiedEquationIterator | modified equation approach |
Functions related to unsteady simulations
RunTimeScheme | completes time simulation of a first-order evolution system |
RunFirstOrderScheme | completes time simulation of a first-order evolution system |
RunSecondOrderScheme | completes time simulation of a second-order evolution system |
ExtractSubMesh | extraction of a small mesh for the computation of the local time step |
EvaluateCFL | evaluation of the global CFL number |
ComputeLocalTimeStep | computation of the local CFL for each element of the mesh |
Functions related to unsteady simulations
RunTimeScheme | completes time simulation of a first-order evolution system |
Public methods of VarInstationary
GetNbDof | returns the size of the evolution system |
GetNormeSolution | returns the L2 norm of the solution |
WriteSnapshot | writes outputs (if needed) at a given time |
FirstOrderScheme | returns true if the evolution system involves only first-order derivatives |
ImplicitScheme | returns true if the selected scheme is implicit |
SetTimeScheme | sets the time scheme to use |
InitTimeIterations | initialisation beforing running time iterations |
GetCflScheme | returns the coefficient involved in stability condition of the selected time scheme |
ComputeStiffnessMatrix | computes stiffness matrix |
ComputeMassMatrix | computes mass and damping matrix |
GiveLevelTime | initialization of time levels for local time-stepping |
SetLevel | sets level (which part of stiffness matrix will be involved) |
GetNumberOfUnknowns | computes and returns the size of the evolution system |
GetNbScalarUnknowns | returns the number of degrees of freedom for the scalar unknown |
GetNbVectorialUnknowns | returns the number of degrees of freedom for the vectorial unknown |
GetNbVectorialUnknownsPML | returns the number of degrees of freedom for the vectorial unknown and for PML elements |
RunTimeIterations | runs time iterations |
RunAll | runs complete simulation (from reading input file until writing snapshots at regular time intervals) |
EvaluateFunction | evaluation of g(t,U) in the evolution system du/dt = g(t, U) |
EvaluateDerivativeFunction | evaluation of time derivatives of g(t,U) in the evolution system du/dt = g(t, U) |
ApplyOperatorKh | multiplication by stiffness matrix |
ApplyOperatorDh | multiplication by scalar mass matrix |
ApplyOperatorSh | multiplication by scalar damping matrix |
ApplyOperatorShVectorial | multiplication by vectorial damping matrix |
ApplyOperatorDhMinusdtSh | multiplication by matrix Dh - Δ t/2 Sh |
SolveOperatorDhPlusdtSh | resolution by matrix Dh + Δ t/2 Sh |
SolveOperatorDh | resolution by scalar mass matrix |
SolveCholeskyDh | resolution of system L x = y or LT x = y where Dh = L LT |
SolveOperatorDhPlusGammaKh | resolution by matrix Dh + γ Kh |
ApplyOperatorRhScalar | multiplication by scalar stiffness matrix |
ApplyOperatorRhVectorial | multiplication by vectorial stiffness matrix |
ApplyOperatorBhMinusdtSh | multiplication by matrix Bh - Δ t/2 Sh |
SolveOperatorBhPlusdtSh | resolution by matrix Bh + Δ t/2 Sh |
SolveOperatorBh | resolution by vectorial mass matrix |
SolveMassMatrix | resolution by mass matrix |
Assemble | assembles global vector (for parallel computations) |
SetInitialVector | computation of the initial condition |
GiveIterate | method called in RunTimeScheme to provide an iterate |
GiveVectorialIterate | method called in RunFirstOrderScheme to provide the vectorial iterate |
GiveFinalIterate | method called in RunTimeScheme to provide the final iterate |
GiveNumberIterations | method called in RunTimeScheme to provide the number of iterations |