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 — ModuleClimaTimeSteppersOrdinary differential equation solvers
JuliaDiffEq terminology:
Function: the right-hand side function df/dt.
- by default, a function gets wrapped in an
ODEFunction - define new
IncrementingODEFunctionto 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 someA(matrix free)SplitODEProlem(fL, fR)
ODEProblemfrom SciMLBase.jl- use
jacoption toODEFunctionfor linear + full IMEX (https://docs.sciml.ai/latest/features/performanceoverloads/#odeexplicit_jac-1)
- use
SplitODEProblemfor linear + remainder IMEXMultirateODEProblemfor 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
Multiratefor multirate solversIntegrator: contains everything necessary to solve. Used as:
define new
DistributedODEIntegratorfor 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.