zoomy_core.symsolver.strategies.hyperbolic#
The explicit hyperbolic solver, written once for every backend: a finite-volume
SSP-RK march with MOOD and IMEX options. A HyperbolicTemplate holds the
configuration and its methods are the graphs a backend prints.
Module Contents#
Classes#
The configuration of the explicit hyperbolic solver; its methods ( |
API#
- class zoomy_core.symsolver.strategies.hyperbolic.HyperbolicTemplate(nsm, *, cfl, dimension, mood=False, dt_write=None, imex=False, cfl_check_every=10, wave_speed=CflWaveSpeed.faces, dt_constant=None, time_order=None, dt_checkpoint=None)#
The configuration of the explicit hyperbolic solver; its methods (
step,dt,initial_aux,march) are the graphs a backend prints.Initialization
Set the configuration;
nsmis the NumericalSystemModel.Args
cfl: CFL number.dimension: mesh dimension, enters the CFL step.mood: a-posteriori MOOD guard of the RK step.dt_write: output interval;None: no output.imex:False(implicit slots inside the RK step),Imex.lie(implicit step after it) orImex.ssp2(IMEX-SSP2(2,2,2) stages).cfl_check_every: constantdt: CFL test every N steps (1: each, 0: never).wave_speed: CFL speeds from the first stage’s Riemann problem (CflWaveSpeed.faces) or from the cell states of each face (CflWaveSpeed.cells).dt_constant: constant step, orNonefor the adaptive CFL step.time_order: SSP-RK order;None: the reconstruction order (2 forImex.ssp2).dt_checkpoint: interval ofio.save_state(landed on);None: at the end only.
- property order#
Reconstruction order of the NSM.
- step(Q, Qaux, p, time, dt, mesh, *, coupled=None, dt_rule=None)#
One time step
(Q, Qaux, dt): the (MOOD-guarded) RK step, then the implicit slots by Lie splitting or inside the stages of IMEX-SSP2 whenimexis set.Args
coupled:(mask, flux), the faces carrying a shared answer.dt_rule: the first stage picksdtfrom its own face wave speeds (ssp2: the cell states’).
- dt(Q, Qaux, p, mesh)#
The CFL step from the cell states of each face.
- initial_aux(Q, Qaux, p, mesh)#
The aux of the initial state: pointwise formula and derivative aux.
- march(Q, Qaux, p, time, time_end, mesh)#
March from
timetotime_end.
- precice_march(Q, Qaux, p, time, mesh, *, side, subcycling=False)#
The march as one preCICE participant; preCICE ends the loop and the coupled faces carry the shared interface answer on (own, peer).
Args
side: 0 if this domain is the low side of the interface.subcycling:False: one step per window (warns above the CFL step), mass conserved exactly.True: adaptive steps inside the window, mass not exactly conserved.
References
Chourdakis et al. 2022, https://doi.org/10.12688/openreseurope.14445.2