include/pops/numerics/time/schemes/splitting.hpp File ReferenceΒΆ

adc_cpp: include/pops/numerics/time/schemes/splitting.hpp File Reference
adc_cpp 0.3.0
Model-free C++23 core for coupled hyperbolic-elliptic systems on adaptive (AMR) meshes, with MPI and GPU (Kokkos) backends
splitting.hpp File Reference

Operator splitting: decomposes dU/dt = T(U) + S(U) into separate substeps. More...

+ Include dependency graph for splitting.hpp:

Go to the source code of this file.

Namespaces

namespace  pops
 

Functions

template<class TransportStep , class SourceStep >
void pops::lie_step (MultiFab &U, Real dt, TransportStep T, SourceStep S)
 
template<class TransportStep , class SourceStep >
void pops::strang_step (MultiFab &U, Real dt, TransportStep T, SourceStep S)
 

Detailed Description

Operator splitting: decomposes dU/dt = T(U) + S(U) into separate substeps.

lie_step (Godunov, 1st order) = T(dt) then S(dt); strang_step (2nd order) = S(dt/2), T(dt), S(dt/2).

Layer: include/pops/numerics/time. Role: handle a stiff source (relaxation, collisions, ionization) with an integrator DIFFERENT from the transport one, without mixing the two stiffnesses. Contract: T and S are callables (MultiFab&, Real)->void that advance their subsystem IN PLACE; the integrator is agnostic to the contents.

Invariants:

  • Strang is 2nd order as soon as each sub-integrator is (commutation error [T,S] is O(dt^3) per step, O(dt^2) globally).