diff --git a/src/system/model.rs b/src/system/model.rs index 97a68cb..b3b4dd7 100644 --- a/src/system/model.rs +++ b/src/system/model.rs @@ -8,6 +8,7 @@ use crate::system::{GriddedPosition, Position}; use crate::system::storage::{Storage, VectorStorage}; use crate::system::walker::{LocalRandomWalker, Walker}; use serde::{Serialize, Deserialize}; +use crate::system::nd::{NDPosition, NDVectorStorage}; pub struct DLASystem, W: Walker

> { rng: R, @@ -55,6 +56,31 @@ impl, W: Walker

> DLASystem(rng: R, max_particles: usize, stick_probability: f32) -> DLASystem, NDVectorStorage, LocalRandomWalker> { + let mut sys: DLASystem, NDVectorStorage, LocalRandomWalker> = DLASystem { + rng, + stick_probability, + max_particles, + running: true, + + space: NDVectorStorage::new(1600), + walker: LocalRandomWalker, + particles: vec![], + active_particle: None, + + add_ratio: 1.2, + kill_ratio: 1.7, + + add_circle: 10.0, + kill_circle: 20.0, + cluster_radius: 0.0, + }; + + sys.deposit(&NDPosition::zero()); + + sys + } + pub fn update(&mut self) { if self.active_particle.is_some() { self.move_particle(); diff --git a/src/system/nd.rs b/src/system/nd.rs index a21e223..654a452 100644 --- a/src/system/nd.rs +++ b/src/system/nd.rs @@ -10,6 +10,12 @@ pub struct NDVectorStorage { grid_size: u32, } +impl NDVectorStorage { + pub fn new(grid_size: u32) -> Self { + Self { grid_size, backing: vec![false; grid_size.pow(DIM as u32) as usize] } + } +} + impl Storage> for NDVectorStorage { fn at(&self, position: &NDPosition) -> bool { return self.backing[position.linear_index(self.grid_size)];