Change up some measurement/rendering details

This commit is contained in:
2020-12-14 21:44:07 -08:00
parent 54e414808c
commit cba2e3c3d2
5 changed files with 125 additions and 41 deletions

View File

@@ -63,31 +63,31 @@ fn main() {
// driver.add_term_renderer();
driver.add_measurement(meas::Label(format!("Conductivity: {}, Imax: {:.2e}", conductivity, peak_current)));
//driver.add_measurement(meas::Current(conductor_region.clone()));
driver.add_measurement(meas::Magnetization(
driver.add_measurement(meas::MagnetizationAt(
Meters((half_width + ferro_inner_rad + 2.0*feat_size, half_width, half_depth).into())
));
driver.add_measurement(meas::MagneticFlux(
driver.add_measurement(meas::MagneticFluxAt(
Meters((half_width + ferro_inner_rad + 2.0*feat_size, half_width, half_depth).into())
));
driver.add_measurement(meas::MagneticStrength(
driver.add_measurement(meas::MagneticStrengthAt(
Meters((half_width + ferro_inner_rad + 2.0*feat_size, half_width, half_depth).into())
));
driver.add_measurement(meas::Magnetization(
driver.add_measurement(meas::MagnetizationAt(
Meters((half_width + ferro_inner_rad + 1.0*feat_size, half_width, half_depth).into())
));
driver.add_measurement(meas::MagneticFlux(
driver.add_measurement(meas::MagneticFluxAt(
Meters((half_width + ferro_inner_rad + 1.0*feat_size, half_width, half_depth).into())
));
driver.add_measurement(meas::MagneticStrength(
driver.add_measurement(meas::MagneticStrengthAt(
Meters((half_width + ferro_inner_rad + 1.0*feat_size, half_width, half_depth).into())
));
driver.add_measurement(meas::Magnetization(
driver.add_measurement(meas::MagnetizationAt(
Meters((half_width + 0.5 * (ferro_inner_rad + ferro_outer_rad), half_width, half_depth).into())
));
driver.add_measurement(meas::MagneticFlux(
driver.add_measurement(meas::MagneticFluxAt(
Meters((half_width + 0.5 * (ferro_inner_rad + ferro_outer_rad), half_width, half_depth).into())
));
driver.add_measurement(meas::MagneticStrength(
driver.add_measurement(meas::MagneticStrengthAt(
Meters((half_width + 0.5 * (ferro_inner_rad + ferro_outer_rad), half_width, half_depth).into())
));

View File

@@ -1,11 +1,11 @@
use coremem::{Driver, Flt, mat, meas};
use coremem::geom::{Index, Meters, Torus};
use coremem::stim::{CurlStimulus, Sinusoid1};
use coremem::stim::{CurlStimulus, Sinusoid1, TimeVarying1 as _};
fn main() {
coremem::init_logging();
let feat_size = 10e-6; // feature size
let duration = 3e-9;
let duration = 2e-9;
let width = 2200e-6;
let depth = 1800e-6;
let buffer = 200e-6;
@@ -13,8 +13,9 @@ fn main() {
let ferro_minor = 40e-6;
let wire_minor = 20e-6;
let wire_major = 100e-6;
let peak_current = 2e2;
let current_duration = 0.6e-9; // half-wavelength of the sine wave
let peak_current = 1e4;
let current_duration = 0.5e-9; // half-wavelength of the sine wave
let current_break = 0.5e-9; // time between 'set' pulse and 'clear' pulse
let conductivity = 1.0e9;
let from_m = |m| (m/feat_size) as u32;
@@ -26,8 +27,8 @@ 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(400);
let base = "wrapped_torus-8";
driver.set_steps_per_frame(2000);
let base = "wrapped_torus-9";
let ferro_region = Torus::new_xy(Meters((half_width, half_width, half_depth).into()), ferro_major, ferro_minor);
let drive_region = Torus::new_xz(Meters((half_width - ferro_major, half_width, half_depth).into()), wire_major, wire_minor);
let sense_region = Torus::new_xz(Meters((half_width + ferro_major, half_width, half_depth).into()), wire_major, wire_minor);
@@ -41,19 +42,33 @@ fn main() {
println!("boundary: {}um; {}um", m_to_um(boundary_xy), m_to_um(boundary_z));
driver.add_upml_boundary(Meters((boundary_xy, boundary_xy, boundary_z).into()));
let pos_wave = Sinusoid1::from_wavelength(peak_current, current_duration * 2.0)
.half_cycle();
let neg_wave = Sinusoid1::from_wavelength(-peak_current, current_duration * 2.0)
.half_cycle()
.shifted(current_duration + current_break);
driver.add_stimulus(CurlStimulus::new(
drive_region.clone(),
Sinusoid1::from_wavelength(peak_current, current_duration * 2.0),
pos_wave,
drive_region.center(),
drive_region.axis(),
drive_region.axis()
));
driver.add_stimulus(CurlStimulus::new(
drive_region.clone(),
neg_wave,
drive_region.center(),
drive_region.axis()
));
driver.add_measurement(meas::CurrentLoop::new("sense", sense_region.clone()));
driver.add_measurement(meas::Current::new("sense", sense_region.clone()));
driver.add_measurement(meas::Magnetization::new("mem", ferro_region.clone()));
driver.add_measurement(meas::MagneticFlux::new("mem", ferro_region.clone()));
driver.add_measurement(meas::CurrentLoop::new("drive", drive_region.clone()));
driver.add_measurement(meas::Current::new("drive", drive_region.clone()));
let prefix = format!("{}/{}-flt{}-{}-feat{}um-{}mA-{}ps--radii{}um-{}um-{}um-{}um",
let prefix = format!("out/{}/{}-flt{}-{}-feat{}um-{}mA-{}ps--radii{}um-{}um-{}um-{}um",
base,
base,
std::mem::size_of::<Flt>() * 8,
@@ -66,8 +81,7 @@ fn main() {
m_to_um(wire_major),
m_to_um(wire_minor),
);
let _ = std::fs::create_dir(base);
let _ = std::fs::create_dir(&prefix);
let _ = std::fs::create_dir_all(&prefix);
driver.add_serializer_renderer(&*format!("{}/frame-", prefix));