pub struct UnsplitIntegrator {
pub rk_stages: usize,
pub g: f64,
pub domain: Domain,
/* private fields */
}Expand description
Method-of-lines Runge-Kutta integrator for the full 6D Vlasov PDE.
Unlike split integrators (Strang, Yoshida), this evaluates the complete RHS = -v . grad_x f + g . grad_v f at each stage, re-solving Poisson for the intermediate state. This avoids splitting error but is more expensive per timestep and subject to CFL constraints.
Fields§
§rk_stages: usizeNumber of Runge-Kutta stages (2, 3, or 4).
g: f64Gravitational constant G.
domain: DomainComputational domain (grid spacings, extents, BCs).
Implementations§
Trait Implementations§
Source§impl TimeIntegrator for UnsplitIntegrator
impl TimeIntegrator for UnsplitIntegrator
Source§fn advance(
&mut self,
repr: &mut dyn PhaseSpaceRepr,
solver: &dyn PoissonSolver,
advector: &dyn Advector,
dt: f64,
) -> Result<StepProducts, CausticError>
fn advance( &mut self, repr: &mut dyn PhaseSpaceRepr, solver: &dyn PoissonSolver, advector: &dyn Advector, dt: f64, ) -> Result<StepProducts, CausticError>
Advance the distribution by one timestep dt using the configured RK scheme.
Extracts the current state as a flat 6D snapshot, evaluates the Vlasov RHS at each RK stage (re-solving Poisson each time), and loads the result back.
Source§fn max_dt(&self, repr: &dyn PhaseSpaceRepr, cfl_factor: f64) -> f64
fn max_dt(&self, repr: &dyn PhaseSpaceRepr, cfl_factor: f64) -> f64
CFL condition for the unsplit integrator.
dt <= cfl_factor * min(min_dx / v_max, min_dv / g_max)
- v_max is the maximum velocity from the domain velocity extent.
- g_max is estimated from the dynamical time: g_max ~ sqrt(G * rho_max) * L_box, or equivalently the inverse dynamical time 1/sqrt(G * rho_max).
Source§fn set_progress(&mut self, progress: Arc<StepProgress>)
fn set_progress(&mut self, progress: Arc<StepProgress>)
Attach a progress reporter for intra-step TUI updates.
Source§fn last_step_timings(&self) -> Option<&StepTimings>
fn last_step_timings(&self) -> Option<&StepTimings>
advance() call.
Default returns None; instrumented integrators override this.Source§fn suggested_dt(&self) -> Option<f64>
fn suggested_dt(&self) -> Option<f64>
None; adaptive integrators override this.Auto Trait Implementations§
impl Freeze for UnsplitIntegrator
impl RefUnwindSafe for UnsplitIntegrator
impl Send for UnsplitIntegrator
impl Sync for UnsplitIntegrator
impl Unpin for UnsplitIntegrator
impl UnsafeUnpin for UnsplitIntegrator
impl UnwindSafe for UnsplitIntegrator
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more