A class that solves a Boltzmann equation using Strang's splitting. More...
Public Member Functions | |
SplitRightHandSideSolver (IBoltzmannSolver const &vlasov_solver, std::vector< std::reference_wrapper< IRightHandSide const > > rhs) | |
Creates an instance of the split boltzmann solver class. | |
DFieldSpXVx | operator() (DFieldSpXVx allfdistribu, DConstFieldX electric_field, double dt) const override |
Solves a Boltzmann equation on a timestep dt. | |
A class that solves a Boltzmann equation using Strang's splitting.
The solver splits the Boltzmann equation and separates the advective part from the source part. The sources refers to any operator that appears on the right-hand-side of Boltzmann's equation (typically, every operator except the advections). The splitting involves solving all the source terms on a dt/2 timestep, then solving the advections on a dt timestep using a Vlasov solver, then solving the sources again on dt/2 in reverse order.
SplitRightHandSideSolver::SplitRightHandSideSolver | ( | IBoltzmannSolver const & | vlasov_solver, |
std::vector< std::reference_wrapper< IRightHandSide const > > | rhs | ||
) |
Creates an instance of the split boltzmann solver class.
[in] | vlasov_solver | A solver for the associated Vlasov equation (the boltzmann equation with no sources). |
[in] | rhs | A vector containing all of the source terms of the considered Boltzmann equation. |
|
overridevirtual |
Solves a Boltzmann equation on a timestep dt.
[in,out] | allfdistribu | On input: the initial value of the distribution function. On output: the value of the distribution function after solving the Boltzmann equation. |
[in] | electric_field | The electric field computed at all spatial positions. |
[in] | dt | The timestep. |
Implements IBoltzmannSolver.