ClimaTimeSteppers.jl
ClimaTimeSteppers.jl is a suite of ordinary differential equation (ODE) solvers for use as time-stepping methods in a partial differential equation (PDE) solver, such as ClimateMachine.jl. They are specifically written to support distributed and GPU computation, while minimising the memory footprint.
ClimaTimeSteppers.jl is built on top of DiffEqBase.jl, and aims to be compatible with the DifferentialEquations.jl ecosystem.
ClimaTimeSteppers
— ModuleClimaTimeSteppers
Ordinary differential equation solvers
JuliaDiffEq terminology:
Function: the right-hand side function df/dt.
- by default, a function gets wrapped in an
ODEFunction
- define new
IncrementingODEFunction
to support incrementing function calls.
- by default, a function gets wrapped in an
Problem: Function, initial u, time span, parameters and options
du/dt = f(u,p,t) = fL(u,p,t) + fR(u,p,t)
fR(u,p,t) == f(u.p,t) - fL(u,p,t)
fL(u,_,_) == A*u for some
A(matrix free)
SplitODEProlem(fL, fR)
ODEProblem
from SciMLBase.jl- use
jac
option toODEFunction
for linear + full IMEX (https://docs.sciml.ai/latest/features/performanceoverloads/#odeexplicit_jac-1)
- use
SplitODEProblem
for linear + remainder IMEXMultirateODEProblem
for true multirateAlgorithm: small objects (often singleton) which indicate what algorithm + options (e.g. linear solver type)
define new abstract
DistributedODEAlgorithm
, algorithms in this pacakge will be subtypes of thisdefine new
Multirate
for multirate solversIntegrator: contains everything necessary to solve. Used as:
define new
DistributedODEIntegrator
for solvers in this packageinit(prob, alg, options...) => integrator step!(int) => runs single step solve!(int) => runs it to end solve(prob, alg, options...) => init + solve!
Solution (not implemented): contains the "solution" to the ODE.