pub struct LoMaC {
pub kfvs: KfvsSolver,
pub spatial_shape: [usize; 3],
pub velocity_shape: [usize; 3],
pub dv: [f64; 3],
pub v_min: [f64; 3],
pub active: bool,
}Expand description
LoMaC conservation manager.
Maintains the macroscopic state alongside the kinetic solution, and provides the projection step after each truncation.
Fields§
§kfvs: KfvsSolverKFVS macroscopic solver for evolving (ρ, J, e).
spatial_shape: [usize; 3]Spatial grid shape [nx, ny, nz].
velocity_shape: [usize; 3]Velocity grid shape [nv1, nv2, nv3].
dv: [f64; 3]Velocity cell spacings.
v_min: [f64; 3]Minimum velocity coordinates.
active: boolWhether LoMaC is active. When false, acts as passthrough.
Implementations§
Source§impl LoMaC
impl LoMaC
Sourcepub fn new(
spatial_shape: [usize; 3],
velocity_shape: [usize; 3],
dx: [f64; 3],
dv: [f64; 3],
v_min: [f64; 3],
) -> Self
pub fn new( spatial_shape: [usize; 3], velocity_shape: [usize; 3], dx: [f64; 3], dv: [f64; 3], v_min: [f64; 3], ) -> Self
Create a new LoMaC manager.
Sourcepub fn initialize_from_kinetic(&mut self, f: &[f64])
pub fn initialize_from_kinetic(&mut self, f: &[f64])
Initialize from a kinetic distribution function.
Extracts macroscopic moments from f and initializes the KFVS solver.
Sourcepub fn advance_macroscopic(&mut self, dt: f64, acceleration: &[[f64; 3]])
pub fn advance_macroscopic(&mut self, dt: f64, acceleration: &[[f64; 3]])
Step 2: Advance macroscopic state by dt using KFVS.
Call this BEFORE advancing the kinetic equation.
Sourcepub fn project(&self, f_truncated: &[f64]) -> Vec<f64>
pub fn project(&self, f_truncated: &[f64]) -> Vec<f64>
Step 4: Project the truncated kinetic solution to restore moments.
Call this AFTER advancing and truncating the kinetic equation. Returns the corrected distribution function with exact conservation.
Sourcepub fn apply(
&mut self,
dt: f64,
acceleration: &[[f64; 3]],
f_truncated: &[f64],
) -> Vec<f64>
pub fn apply( &mut self, dt: f64, acceleration: &[[f64; 3]], f_truncated: &[f64], ) -> Vec<f64>
Combined step: advance macroscopic, then project kinetic solution.
This is the main LoMaC entry point for use after each time step:
- Advance KFVS: (ρ,J,e)^n → (ρ,J,e)^{n+1}
- Project: f̃^{n+1} → f^{n+1} matching (ρ,J,e)^{n+1}
Sourcepub fn total_mass(&self) -> f64
pub fn total_mass(&self) -> f64
Get the current total mass from the macroscopic solver.
Sourcepub fn total_momentum(&self) -> [f64; 3]
pub fn total_momentum(&self) -> [f64; 3]
Get the current total momentum from the macroscopic solver.
Sourcepub fn total_energy(&self) -> f64
pub fn total_energy(&self) -> f64
Get the current total energy from the macroscopic solver.
Auto Trait Implementations§
impl Freeze for LoMaC
impl RefUnwindSafe for LoMaC
impl Send for LoMaC
impl Sync for LoMaC
impl Unpin for LoMaC
impl UnsafeUnpin for LoMaC
impl UnwindSafe for LoMaC
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