Skip to content

Time discretization

The spatially discretized Navier-Stokes equations form a differential-algebraic system, with an ODE for the velocity

dudt=F(u,t)(Gp+yG)

subject to the algebraic constraint formed by the mass equation

Mu+yM=0.

In the end of the previous section, we differentiated the mass equation in time to obtain a discrete pressure Poisson equation. This equation includes the term dyMdt, which is non-zero if an unsteady flow of mass is added to the domain (Dirichlet boundary conditions). This term ensures that the time-continuous discrete velocity field u(t) stays divergence free (conserves mass). However, if we directly discretize this system in time, the mass preservation may actually not be respected. For this, we will change the definition of the pressure such that the time-discretized velocity field is divergence free at each time step and each time sub-step (to be defined in the following).

Consider the interval [0,T] for some simulation time T. We will divide it into N sub-intervals [tn,tn+1] for n=0,,N1, with t0=0, tN=T, and increment Δtn=tn+1tn. We define unu(tn) as an approximation to the exact discrete velocity field u(tn), with u0=u(0) starting from the exact initial conditions. We say that the time integration scheme (definition of un) is accurate to the order r if un=u(tn)+O(Δtr) for all n.

IncompressibleNavierStokes provides a collection of explicit and implicit Runge-Kutta methods, in addition to Adams-Bashforth Crank-Nicolson and one-leg beta method time steppers.

The code is currently not adapted to time steppers from DifferentialEquations.jl, but they may be integrated in the future.

# IncompressibleNavierStokes.AbstractODEMethodType.
julia
abstract type AbstractODEMethod{T}

Abstract ODE method.

Fields

source


# IncompressibleNavierStokes.isexplicitFunction.
julia
isexplicit(method)

Return true if method is explicit, i.e. the value at a certain time step is given explicitly as a function of the previous time steps only.

source


# IncompressibleNavierStokes.lambda_conv_maxFunction.
julia
lambda_conv_max(method)

Get maximum value of stability region for the convection operator (not a very good indication for the methods that do not include the imaginary axis)

source


# IncompressibleNavierStokes.lambda_diff_maxFunction.
julia
lambda_diff_max(method)

Get maximum value of stability region for the diffusion operator.

source


# IncompressibleNavierStokes.ode_method_cacheFunction.
julia
ode_method_cache(method, setup, u, temp)

Get time stepper cache for the given ODE method.

source


# IncompressibleNavierStokes.runge_kutta_methodFunction.
julia
runge_kutta_method(
    A,
    b,
    c,
    r;
    T,
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod, IncompressibleNavierStokes.ImplicitRungeKuttaMethod}

Get Runge Kutta method. The function checks whether the method is explicit.

p_add_solve: whether to add a pressure solve step to the method.

For implicit RK methods: newton_type, maxiter, abstol, reltol.

source


# IncompressibleNavierStokes.timestepFunction.
julia
timestep(method, stepper, Δt; θ = nothing)

Perform one time step.

Non-mutating/allocating/out-of-place version.

See also timestep!.

source


# IncompressibleNavierStokes.timestep!Function.
julia
timestep!(method, stepper, Δt; θ = nothing, cache)

Perform one time step>

Mutating/non-allocating/in-place version.

See also timestep.

source


Adams-Bashforth Crank-Nicolson method

# IncompressibleNavierStokes.AdamsBashforthCrankNicolsonMethodType.
julia
struct AdamsBashforthCrankNicolsonMethod{T, M} <: IncompressibleNavierStokes.AbstractODEMethod{T}

IMEX AB-CN: Adams-Bashforth for explicit convection (parameters α₁ and α₂) and Crank-Nicolson for implicit diffusion (implicitness θ). The method is second order for θ = 1/2.

The LU decomposition of the LHS matrix is computed every time the time step changes.

Note that, in contrast to explicit methods, the pressure from previous time steps has an influence on the accuracy of the velocity.

We here require that the time step Δt is constant. This methods uses Adams-Bashforth for the convective terms and Crank-Nicolson stepping for the diffusion and body force terms. Given the velocity field u0=u(t0) at a time t0 and its previous value u1=u(t0Δt) at the previous time t1=t0Δt, the predicted velocity field u at the time t=t0+Δt is defined by first computing a tentative velocity:

vu0Δt=(α0C(u0,t0)+α1C(u1,t1))+θ(Du0+yD(t0))+(1θ)(Dv+yD(t))+θf(t0)+(1θ)f(t)(Gp0+yG(t0)),

where θ[0,1] is the Crank-Nicolson parameter (θ=12 for second order convergence), (α0,α1)=(32,12) are the Adams-Bashforth coefficients, and v is a tentative velocity yet to be made divergence free. We can group the terms containing v on the left hand side, to obtain

(1ΔtI(1θ)D)v=(1ΔtIθD)u0(α0C(u0,t0)+α1C(u1,t1))+θyD(t0)+(1θ)yD(t)+θf(t0)+(1θ)f(t)(Gp0+yG(t0)).

We can compute v by inverting the positive definite matrix (1ΔtIθD) for the given right hand side using a suitable linear solver. Assuming Δt is constant, we can precompute a Cholesky factorization of this matrix before starting time stepping.

We then compute the pressure difference Δp by solving

LΔp=WMv+yM(t)ΔtWM(yG(t)yG(t0)),

after which a divergence free velocity u can be enforced:

u=vΔt(GΔp+yG(t)yG(t0)).

A first order accurate prediction of the corresponding pressure is p=p0+Δp. However, since this pressure is reused in the next time step, we perform an additional pressure solve to avoid accumulating first order errors. The resulting pressure p is then accurate to the same order as u.

Fields

  • α₁

  • α₂

  • θ

  • p_add_solve

  • method_startup

source


One-leg beta method

# IncompressibleNavierStokes.OneLegMethodType.
julia
struct OneLegMethod{T, M} <: IncompressibleNavierStokes.AbstractODEMethod{T}

Explicit one-leg β-method following symmetry-preserving discretization of turbulent flow. See Verstappen and Veldman [15] [17] for details.

We here require that the time step Δt is constant. Given the velocity u0 and pressure p0 at the current time t0 and their previous values u1 and p1 at the time t1=t0Δt, we start by computing the "offstep" values v=(1+β)v0βv1 and Q=(1+β)p0βp1 for some β=12.

A tentative velocity field v~ is then computed as follows:

v~=1β+12(2βu0(β12)u1+ΔtF(v,t)Δt(GQ+yG(t))).

A pressure correction Δp is obtained by solving the Poisson equation

LΔp=β+12ΔtW(Mv~+yM(t)).

Finally, the divergence free velocity field is given by

u=v~Δtβ+12GΔp,

while the second order accurate pressure is given by

p=2p0p1+43Δp.

Fields

  • β

  • p_add_solve

  • method_startup

source


Runge-Kutta methods

# IncompressibleNavierStokes.AbstractRungeKuttaMethodType.
julia
abstract type AbstractRungeKuttaMethod{T} <: IncompressibleNavierStokes.AbstractODEMethod{T}

Abstract Runge Kutta method.

Fields

source


# IncompressibleNavierStokes.ExplicitRungeKuttaMethodType.
julia
struct ExplicitRungeKuttaMethod{T} <: IncompressibleNavierStokes.AbstractRungeKuttaMethod{T}

Explicit Runge Kutta method. See Sanderse [18].

Consider the velocity field u0 at a certain time t0. We will now perform one time step to t=t0+Δt. For explicit Runge-Kutta methods, this time step is divided into s sub-steps ti=t0+Δti with increment Δti=ciΔt. The final substep performs the full time step Δts=Δt such that ts=t.

For i=1,,s, the intermediate velocity ui and pressure pi are computed as follows:

ki=F(ui1,ti1)yG(ti1)vi=u0+Δtj=1iaijkjLpi=WM1cij=1iaijkj+WyM(ti)yM(t0)Δti=W(Mvi+yM(ti))(Mu0+yM(t0))Δtin=WMvi+yM(ti)Δtinui=viΔtiGpi,

where (aij)ij are the Butcher tableau coefficients of the RK-method, with the convention ci=j=1iaij.

Finally, we return us. If u0=u(t0), we get the accuracy us=u(t)+O(Δtr+1), where r is the order of the RK-method. If we perform n RK time steps instead of one, starting at exact initial conditions u0=u(0), then un=u(tn)+O(Δtr) for all n{1,,N}. Note that for a given u, the corresponding pressure p can be calculated to the same accuracy as u by doing an additional pressure projection after each outer time step Δt (if we know dyMdt(t)), or to first order accuracy by simply returning ps.

Note that each of the sub-step velocities ui is divergence free, after projecting the tentative velocities vi. This is ensured due to the judiciously chosen replacement of dyMdt(ti) with (yM(ti)yM(t0))/Δti. The space-discrete divergence-freeness is thus perfectly preserved, even though the time discretization introduces other errors.

Fields

  • A

  • b

  • c

  • r

  • p_add_solve

source


# IncompressibleNavierStokes.ImplicitRungeKuttaMethodType.
julia
struct ImplicitRungeKuttaMethod{T} <: IncompressibleNavierStokes.AbstractRungeKuttaMethod{T}

Implicit Runge Kutta method. See Sanderse [19].

The implicit linear system is solved at each time step using Newton's method. The newton_type may be one of the following:

  • :no: Replace iteration matrix with I/Δt (no Jacobian)

  • :approximate: Build Jacobian once before iterations only

  • :full: Build Jacobian at each iteration

Fields

  • A

  • b

  • c

  • r

  • newton_type

  • maxiter

  • abstol

  • reltol

  • p_add_solve

source


# IncompressibleNavierStokes.RKMethodsModule.

Set up Butcher arrays A, b, and c, as well as and SSP coefficient r. For families of methods, optional input s is the number of stages.

Original (MATLAB) by David Ketcheson, extended by Benjamin Sanderse.

Exports

source


Explicit Methods

# IncompressibleNavierStokes.RKMethods.FE11Function.
julia
FE11(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

FE11 (Forward Euler).

source


# IncompressibleNavierStokes.RKMethods.SSP22Function.
julia
SSP22(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

SSP22.

source


# IncompressibleNavierStokes.RKMethods.SSP42Function.
julia
SSP42(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

SSP42.

source


# IncompressibleNavierStokes.RKMethods.SSP33Function.
julia
SSP33(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

SSP33.

source


# IncompressibleNavierStokes.RKMethods.SSP43Function.
julia
SSP43(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

SSP43.

source


# IncompressibleNavierStokes.RKMethods.SSP104Function.
julia
SSP104(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

SSP104.

source


# IncompressibleNavierStokes.RKMethods.rSSPs2Function.
julia
rSSPs2(
;
    ...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod, IncompressibleNavierStokes.ImplicitRungeKuttaMethod}
rSSPs2(
    s;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod, IncompressibleNavierStokes.ImplicitRungeKuttaMethod}

Rational (optimal, low-storage) s-stage 2nd order SSP.

source


# IncompressibleNavierStokes.RKMethods.rSSPs3Function.
julia
rSSPs3(
;
    ...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod, IncompressibleNavierStokes.ImplicitRungeKuttaMethod}
rSSPs3(
    s;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod, IncompressibleNavierStokes.ImplicitRungeKuttaMethod}

Rational (optimal, low-storage) s^2-stage 3rd order SSP.

source


# IncompressibleNavierStokes.RKMethods.Wray3Function.
julia
Wray3(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

Wray's RK3.

source


# IncompressibleNavierStokes.RKMethods.RK56Function.
julia
RK56(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

RK56.

source


# IncompressibleNavierStokes.RKMethods.DOPRI6Function.
julia
DOPRI6(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

Dormand-Price pair.

source


Implicit Methods

# IncompressibleNavierStokes.RKMethods.BE11Function.
julia
BE11(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

Backward Euler.

source


# IncompressibleNavierStokes.RKMethods.SDIRK34Function.
julia
SDIRK34(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

3-stage, 4th order singly diagonally implicit (SSP).

source


# IncompressibleNavierStokes.RKMethods.ISSPm2Function.
julia
ISSPm2(
;
    ...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}
ISSPm2(
    s;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod, IncompressibleNavierStokes.ImplicitRungeKuttaMethod}

Optimal DIRK SSP schemes of order 2.

source


# IncompressibleNavierStokes.RKMethods.ISSPs3Function.
julia
ISSPs3(
;
    ...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}
ISSPs3(
    s;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod, IncompressibleNavierStokes.ImplicitRungeKuttaMethod}

Optimal DIRK SSP schemes of order 3.

source


Half explicit methods

# IncompressibleNavierStokes.RKMethods.HEM3Function.
julia
HEM3(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

Brasey and Hairer.

source


# IncompressibleNavierStokes.RKMethods.HEM3BSFunction.
julia
HEM3BS(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

HEM3BS.

source


# IncompressibleNavierStokes.RKMethods.HEM5Function.
julia
HEM5(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

Brasey and Hairer, 5 stage, 4th order.

source


Classical Methods

# IncompressibleNavierStokes.RKMethods.GL1Function.
julia
GL1(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

GL1.

source


# IncompressibleNavierStokes.RKMethods.GL2Function.
julia
GL2(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

GL2.

source


# IncompressibleNavierStokes.RKMethods.GL3Function.
julia
GL3(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

GL3.

source


# IncompressibleNavierStokes.RKMethods.RIA1Function.
julia
RIA1(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

This is implicit Euler.

source


# IncompressibleNavierStokes.RKMethods.RIA2Function.
julia
RIA2(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

RIA2.

source


# IncompressibleNavierStokes.RKMethods.RIA3Function.
julia
RIA3(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

RIA3.

source


# IncompressibleNavierStokes.RKMethods.RIIA1Function.
julia
RIIA1(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

RIIA1.

source


# IncompressibleNavierStokes.RKMethods.RIIA2Function.
julia
RIIA2(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

RIIA2.

source


# IncompressibleNavierStokes.RKMethods.RIIA3Function.
julia
RIIA3(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

RIIA3.

source


# IncompressibleNavierStokes.RKMethods.LIIIA2Function.
julia
LIIIA2(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

LIIIA2.

source


# IncompressibleNavierStokes.RKMethods.LIIIA3Function.
julia
LIIIA3(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

LIIIA3.

source


Chebyshev methods

# IncompressibleNavierStokes.RKMethods.CHDIRK3Function.
julia
CHDIRK3(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

Chebyshev based DIRK (not algebraically stable).

source


# IncompressibleNavierStokes.RKMethods.CHCONS3Function.
julia
CHCONS3(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

CHCONS3.

source


# IncompressibleNavierStokes.RKMethods.CHC3Function.
julia
CHC3(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

Chebyshev quadrature and C(3) satisfied. Note this equals Lobatto IIIA.

source


# IncompressibleNavierStokes.RKMethods.CHC5Function.
julia
CHC5(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

CHC5.

source


Miscellaneous Methods

# IncompressibleNavierStokes.RKMethods.Mid22Function.
julia
Mid22(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

Midpoint 22 method.

source


# IncompressibleNavierStokes.RKMethods.MTE22Function.
julia
MTE22(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

Minimal truncation error 22 method (Heun).

source


# IncompressibleNavierStokes.RKMethods.CN22Function.
julia
CN22(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

Crank-Nicholson.

source


# IncompressibleNavierStokes.RKMethods.Heun33Function.
julia
Heun33(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

Heun33.

source


# IncompressibleNavierStokes.RKMethods.RK33C2Function.
julia
RK33C2(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

RK3 satisfying C(2) for i=3.

source


# IncompressibleNavierStokes.RKMethods.RK33P2Function.
julia
RK33P2(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

RK3 satisfying the second order condition for the pressure.

source


# IncompressibleNavierStokes.RKMethods.RK44Function.
julia
RK44(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

Classical fourth order.

source


# IncompressibleNavierStokes.RKMethods.RK44C2Function.
julia
RK44C2(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

RK4 satisfying C(2) for i=3.

source


# IncompressibleNavierStokes.RKMethods.RK44C23Function.
julia
RK44C23(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

RK4 satisfying C(2) for i=3 and c2=c3.

source


# IncompressibleNavierStokes.RKMethods.RK44P2Function.
julia
RK44P2(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

RK4 satisfying the second order condition for the pressure (but not third order).

source


DSRK Methods

# IncompressibleNavierStokes.RKMethods.DSso2Function.
julia
DSso2(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

CBM's DSRKso2.

source


# IncompressibleNavierStokes.RKMethods.DSRK2Function.
julia
DSRK2(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

CBM's DSRK2.

source


# IncompressibleNavierStokes.RKMethods.DSRK3Function.
julia
DSRK3(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

Zennaro's DSRK3.

source


"Non-SSP" Methods of Wong & Spiteri

# IncompressibleNavierStokes.RKMethods.NSSP21Function.
julia
NSSP21(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

NSSP21.

source


# IncompressibleNavierStokes.RKMethods.NSSP32Function.
julia
NSSP32(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

NSSP32.

source


# IncompressibleNavierStokes.RKMethods.NSSP33Function.
julia
NSSP33(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

NSSP33.

source


# IncompressibleNavierStokes.RKMethods.NSSP53Function.
julia
NSSP53(
;
    kwargs...
) -> Union{IncompressibleNavierStokes.ExplicitRungeKuttaMethod{Float64}, IncompressibleNavierStokes.ImplicitRungeKuttaMethod{Float64}}

NSSP53.

source