use super::super::{phasespace::PhaseSpaceRepr, types::*};
pub struct PrimarySnapshot {
pub distribution: PhaseSpaceSnapshot,
pub potential: PotentialField,
pub density: DensityField,
pub acceleration: AccelerationField,
pub time: f64,
}
impl PrimarySnapshot {
pub fn capture(repr: &dyn PhaseSpaceRepr, potential: &PotentialField, time: f64) -> Self {
let density = repr.compute_density();
let n = density.data.len();
let shape = density.shape;
let distribution = repr
.to_snapshot(time)
.unwrap_or_else(|| PhaseSpaceSnapshot {
data: vec![],
shape: [0; 6],
time,
});
Self {
distribution,
potential: PotentialField {
data: potential.data.clone(),
shape: potential.shape,
},
density,
acceleration: AccelerationField {
gx: vec![0.0; n],
gy: vec![0.0; n],
gz: vec![0.0; n],
shape,
},
time,
}
}
}