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).
Generated by