UPML boundary now applies to z dimension

This commit is contained in:
2020-09-26 15:13:30 -07:00
parent d39db969b5
commit 9a0f778db5
3 changed files with 81 additions and 57 deletions

View File

@@ -56,13 +56,15 @@ struct RenderSteps<'a> {
im: RgbImage,
sim: &'a dyn GenericSim,
meas: &'a [Box<dyn AbstractMeasurement>],
/// Simulation z coordinate to sample
z: u32,
}
impl<'a> RenderSteps<'a> {
fn render(state: &'a dyn GenericSim, measurements: &'a [Box<dyn AbstractMeasurement>]) -> RgbImage {
fn render(state: &'a dyn GenericSim, measurements: &'a [Box<dyn AbstractMeasurement>], z: u32) -> RgbImage {
let width = 768;
let height = width * state.height() / state.width();
let mut me = Self::new(state, measurements, width, height);
let height = width * state.height() / state.width();
let mut me = Self::new(state, measurements, width, height, z);
me.render_scalar_field(10.0, false, 2, |cell| cell.mat().conductivity().mag());
me.render_scalar_field(100.0, true, 0, |cell| cell.mat().m().mag());
if false {
@@ -75,11 +77,12 @@ impl<'a> RenderSteps<'a> {
me.render_measurements();
me.im
}
fn new(sim: &'a dyn GenericSim, meas: &'a [Box<dyn AbstractMeasurement>], width: u32, height: u32) -> Self {
fn new(sim: &'a dyn GenericSim, meas: &'a [Box<dyn AbstractMeasurement>], width: u32, height: u32, z: u32) -> Self {
RenderSteps {
im: RgbImage::new(width, height),
sim,
meas
meas,
z
}
}
@@ -88,7 +91,8 @@ impl<'a> RenderSteps<'a> {
let x_m = x_prop * (self.sim.width() as Flt * self.sim.feature_size());
let y_prop = y_px as Flt / self.im.height() as Flt;
let y_m = y_prop * (self.sim.height() as Flt * self.sim.feature_size());
self.sim.sample(Vec3::new(x_m, y_m, 0.0))
let z_m = self.z as Flt * self.sim.feature_size();
self.sim.sample(Vec3::new(x_m, y_m, z_m))
}
////////////// Ex/Ey/Bz configuration ////////////
@@ -212,7 +216,7 @@ impl ImageRenderExt for RgbImage {
pub trait Renderer {
fn render(&mut self, state: &dyn GenericSim, measurements: &[Box<dyn AbstractMeasurement>]) {
self.render_with_image(state, &RenderSteps::render(state, measurements));
self.render_with_image(state, &RenderSteps::render(state, measurements, state.depth() / 2));
}
fn render_with_image(&mut self, state: &dyn GenericSim, _im: &RgbImage) {
self.render(state, &[]);
@@ -327,7 +331,7 @@ impl MultiRenderer {
impl Renderer for MultiRenderer {
fn render(&mut self, state: &dyn GenericSim, measurements: &[Box<dyn AbstractMeasurement>]) {
if self.renderers.len() != 0 {
self.render_with_image(state, &RenderSteps::render(state, measurements));
self.render_with_image(state, &RenderSteps::render(state, measurements, state.depth() / 2));
}
}