diff --git a/examples/toroid25d.rs b/examples/toroid25d.rs index 1e95214..d76fad5 100644 --- a/examples/toroid25d.rs +++ b/examples/toroid25d.rs @@ -4,18 +4,19 @@ use coremem::stim::{Stimulus, Sinusoid}; fn main() { coremem::init_logging(); - let feat_size = 5e-6; // feature size + let feat_size = 10e-6; // feature size let from_m = |m| (m/feat_size) as u32; let m_to_um = |px| (px * 1e6) as u32; let to_m = |px| px as Flt * feat_size; - let width = 2000e-6; - let depth = 500e-6; + let width = 1000e-6; + let depth = 600e-6; let conductor_inner_rad = 0e-6; - let conductor_outer_rad = 5e-6; - let ferro_inner_rad = 220e-6; - let ferro_outer_rad = 300e-6; - let buffer = 100e-6; - let peak_current = 1e-80; + let conductor_outer_rad = 19e-6; + let ferro_inner_rad = 100e-6; + let ferro_outer_rad = 200e-6; + let buffer = 50e-6; + let peak_current = 2e3; + let current_duration = 1e-9; // half-wavelength of the sine wave let conductivity = 1.0e5; let half_width = width * 0.5; let half_depth = depth * 0.5; @@ -24,14 +25,15 @@ fn main() { let depth_px = from_m(depth); let size_px = Index((width_px, width_px, depth_px).into()); let mut driver = Driver::new(size_px, feat_size); - //driver.set_steps_per_frame(8); + driver.set_steps_per_frame(8); //driver.set_steps_per_frame(40); //driver.set_steps_per_frame(200); - driver.add_y4m_renderer(&*format!("toroid25d-flt{}-{}-feat{}um-{:.1e}A--radii{}um-{}um-{}um.y4m", + driver.add_y4m_renderer(&*format!("toroid25d-flt{}-{}-feat{}um-{:.1e}A-{:.1e}s--radii{}um-{}um-{}um.y4m", std::mem::size_of::() * 8, *size_px, m_to_um(feat_size), peak_current, + current_duration, m_to_um(conductor_outer_rad), m_to_um(ferro_inner_rad), m_to_um(ferro_outer_rad), @@ -90,12 +92,13 @@ fn main() { } let boundary_xy = half_width - ferro_outer_rad - buffer; println!("boundary: {}um", m_to_um(boundary_xy)); - let boundary = Index((from_m(boundary_xy), from_m(boundary_xy), 20).into()); + let boundary = Index((from_m(boundary_xy), from_m(boundary_xy), 0).into()); driver.add_upml_boundary(boundary); driver.add_stimulus(Stimulus::new( conductor_region.clone(), - Sinusoid::new(Vec3::new(0.0, 0.0, peak_current * 1e-18), 1e9))); + Sinusoid::from_wavelength(Vec3::new(0.0, 0.0, peak_current), current_duration * 2.0 +))); loop { driver.step(); diff --git a/src/meas.rs b/src/meas.rs index 4a3a756..3b2e877 100644 --- a/src/meas.rs +++ b/src/meas.rs @@ -21,7 +21,7 @@ pub struct Meta; impl AbstractMeasurement for Meta { fn eval(&self, state: &dyn GenericSim) -> String { - format!("{}x{} feat: {:.1e}m", state.width(), state.height(), state.feature_size()) + format!("{}x{}x{} feat: {:.1e}m", state.width(), state.height(), state.depth(), state.feature_size()) } } diff --git a/src/render.rs b/src/render.rs index cecac29..bbc602b 100644 --- a/src/render.rs +++ b/src/render.rs @@ -62,12 +62,13 @@ struct RenderSteps<'a> { impl<'a> RenderSteps<'a> { fn render(state: &'a dyn GenericSim, measurements: &'a [Box], z: u32) -> RgbImage { - let mut width = 1920; + let mut width = 640; + let max_height = 480; let mut height = width * state.height() / state.width(); - if height > 1080 { - let stretch = 1080 as f32 / height as f32; + if height > max_height { + let stretch = max_height as f32 / height as f32; width = (width as f32 * stretch) as _; - height = 1080; + height = max_height; } trace!("rendering at {}x{}", width, height); let mut me = Self::new(state, measurements, width, height, z); diff --git a/src/stim.rs b/src/stim.rs index be720dd..6e2a1ae 100644 --- a/src/stim.rs +++ b/src/stim.rs @@ -57,6 +57,9 @@ impl Sinusoid { omega: freq * consts::TWO_PI, } } + pub fn from_wavelength(amp: Vec3, lambda: Flt) -> Self { + Self::new(amp, 1.0/lambda) + } } impl TimeVarying for Sinusoid {