Type Hierarchies

The type trees below are generated from the loaded package and reflect the current state of the code. They are useful for understanding how algorithms, tableau names, constraints, and ODE function types relate to each other.

import AbstractTrees as AT
import InteractiveUtils as IU
import ClimaTimeSteppers as CTS
AT.children(x::Type) = IU.subtypes(x)

Algorithms

All concrete solvers are subtypes of ClimaTimeSteppers.TimeSteppingAlgorithm:

AT.print_tree(CTS.TimeSteppingAlgorithm)
TimeSteppingAlgorithm
├─ LowStorageRungeKutta2N
│  ├─ LSRK144NiegemannDiehlBusch
│  ├─ LSRK54CarpenterKennedy
│  └─ LSRKEulerMethod
├─ MultirateInfinitesimalStep
│  ├─ MIS2
│  ├─ MIS3C
│  ├─ MIS4
│  ├─ MIS4a
│  ├─ TVDMISA
│  └─ TVDMISB
├─ RosenbrockAlgorithm
├─ WickerSkamarockRungeKutta
│  ├─ WSRK2
│  └─ WSRK3
├─ IMEXAlgorithm
└─ Multirate

Algorithm Names (Tableaux)

Each named tableau is a subtype of AbstractAlgorithmName:

AT.print_tree(CTS.AbstractAlgorithmName)
AbstractAlgorithmName
├─ ERKAlgorithmName
│  ├─ SSPRKAlgorithmName
│  │  ├─ SSP22Heuns
│  │  └─ SSP33ShuOsher
│  └─ RK4
├─ IMEXARKAlgorithmName
│  ├─ ARK2GKC
│  ├─ ARK437L2SA1
│  ├─ ARK548L2SA2
│  ├─ ARS111
│  ├─ ARS121
│  ├─ ARS122
│  ├─ ARS222
│  ├─ ARS232
│  ├─ ARS233
│  ├─ ARS343
│  ├─ ARS443
│  ├─ IMEXSSPRKAlgorithmName
│  │  ├─ SSP222
│  │  ├─ SSP322
│  │  ├─ SSP332
│  │  ├─ SSP333
│  │  └─ SSP433
│  ├─ DBM453
│  ├─ HOMMEM1
│  ├─ IMKG232a
│  ├─ IMKG232b
│  ├─ IMKG242a
│  ├─ IMKG242b
│  ├─ IMKG243a
│  ├─ IMKG252a
│  ├─ IMKG252b
│  ├─ IMKG253a
│  ├─ IMKG253b
│  ├─ IMKG254a
│  ├─ IMKG254b
│  ├─ IMKG254c
│  ├─ IMKG342a
│  └─ IMKG343a
└─ RosenbrockAlgorithmName
   └─ SSPKnoth

Algorithm Constraints

AT.print_tree(CTS.AbstractAlgorithmConstraint)
AbstractAlgorithmConstraint
├─ SSP
└─ Unconstrained

ODE Function Types

AT.print_tree(CTS.AbstractClimaODEFunction)
AbstractClimaODEFunction
└─ ClimaODEFunction

Internal Types

OffsetODEFunction

Multirate algorithms (MIS, Wicker-Skamarock) solve an "inner ODE" representing the fast tendency $f_F$ during each outer stage. The inner problem runs over a substep interval $\tau \in [\tau_{i-1}, \tau_i]$ with the slow tendency $f_S$ held fixed as a constant forcing term.

To reuse standard timesteppers for the inner problem without allocating new functions, ClimaTimeSteppers.jl uses OffsetODEFunction. This wrapper dynamically offsets the inner integration time and adds the constant slow forcing:

\[f_{\text{offset}}(u, p, \tau) = f_F(u, p, \alpha + \beta \tau) + \gamma \cdot x\]

The parameters $\alpha, \beta, \gamma, x$ are mutated in-place by the outer multirate solver at the start of each stage. This design achieves zero-allocation multirate stepping.