diff --git a/crates/coremem/src/geom/mod.rs b/crates/coremem/src/geom/mod.rs index 6c0beac..839be23 100644 --- a/crates/coremem/src/geom/mod.rs +++ b/crates/coremem/src/geom/mod.rs @@ -2,8 +2,6 @@ mod line; mod polygon; pub mod region; mod units; -mod vec; -mod vecu; pub use line::Line2d; pub use polygon::Polygon2d; @@ -11,6 +9,6 @@ pub use region::{ Cube, CylinderZ, Dilate, InvertedRegion, Memoize, Region, Sphere, Spiral, SwapXZ, SwapYZ, Torus, Translate, Union, WorldRegion, Wrap }; pub use units::{Coord, Meters, OrdMeters, Index}; -pub use vec::{Vec2, Vec3}; -pub use vecu::Vec3u; +pub use coremem_types::vec::{Vec2, Vec3}; +pub use coremem_types::vecu::Vec3u; diff --git a/crates/coremem/src/mat/linear.rs b/crates/coremem/src/mat/linear.rs index 287b2eb..01118d0 100644 --- a/crates/coremem/src/mat/linear.rs +++ b/crates/coremem/src/mat/linear.rs @@ -12,11 +12,24 @@ pub struct Conductor { pub conductivity: V, } -pub type IsomorphicConductor = Conductor; +pub type IsomorphicConductor = Conductor<(R,)>; pub type AnisomorphicConductor = Conductor>; -impl Conductor { +impl IsomorphicConductor { pub fn new(conductivity: V) -> Self { + Self { + conductivity: (conductivity,) + } + } +} +impl IsomorphicConductor { + pub fn iso_conductivity(&self) -> V { + self.conductivity.0.clone() + } +} + +impl AnisomorphicConductor { + pub fn new(conductivity: Vec3) -> Self { Self { conductivity } @@ -25,7 +38,7 @@ impl Conductor { impl Into> for IsomorphicConductor { fn into(self) -> AnisomorphicConductor { - AnisomorphicConductor::new(Vec3::uniform(self.conductivity)) + AnisomorphicConductor::new(Vec3::uniform(self.conductivity.0)) } } @@ -45,7 +58,7 @@ impl Material for AnisomorphicConductor { impl Material for IsomorphicConductor { fn step_parameters_mut<'a>(&'a mut self) -> StepParametersMut<'a, R> { - StepParametersMut::default().with_conductivity(Vec3::uniform(self.conductivity)) + StepParametersMut::default().with_conductivity(Vec3::uniform(self.conductivity.0)) } } diff --git a/crates/coremem/src/mat/mod.rs b/crates/coremem/src/mat/mod.rs index 9420cd0..7a04431 100644 --- a/crates/coremem/src/mat/mod.rs +++ b/crates/coremem/src/mat/mod.rs @@ -132,7 +132,7 @@ impl From> for GenericMaterial { impl From> for GenericMaterial { fn from(inner: IsomorphicConductor) -> Self { - let iso_r = IsomorphicConductor::new(inner.conductivity.cast::()); + let iso_r = IsomorphicConductor::new(inner.iso_conductivity().cast::()); Self::Conductor(iso_r.into()) } } @@ -208,7 +208,7 @@ impl Material for GenericMaterial { // #[enum_dispatch(Material)] #[derive(Clone, Serialize, Deserialize)] pub enum GenericMaterialNoPml { - Conductor(Conductor), + Conductor(AnisomorphicConductor), LinearMagnet(LinearMagnet), MBFerromagnet(MBFerromagnet), Ferroxcube3R1(Ferroxcube3R1), @@ -217,12 +217,12 @@ pub enum GenericMaterialNoPml { impl Default for GenericMaterialNoPml { fn default() -> Self { - Conductor::default().into() + AnisomorphicConductor::default().into() } } -impl From> for GenericMaterialNoPml { - fn from(inner: Conductor) -> Self { +impl From> for GenericMaterialNoPml { + fn from(inner: AnisomorphicConductor) -> Self { Self::Conductor(inner) } } @@ -267,19 +267,19 @@ impl Material for GenericMaterialNoPml { // #[enum_dispatch(Material)] #[derive(Clone, Serialize, Deserialize)] pub enum GenericMaterialOneField { - Conductor(Conductor), + Conductor(AnisomorphicConductor), Ferroxcube3R1(Ferroxcube3R1), MinimalSquare(MinimalSquare), } impl Default for GenericMaterialOneField { fn default() -> Self { - Conductor::default().into() + AnisomorphicConductor::default().into() } } -impl From> for GenericMaterialOneField { - fn from(inner: Conductor) -> Self { +impl From> for GenericMaterialOneField { + fn from(inner: AnisomorphicConductor) -> Self { Self::Conductor(inner) } } diff --git a/crates/coremem/src/sim/mod.rs b/crates/coremem/src/sim/mod.rs index d5fe657..961455f 100644 --- a/crates/coremem/src/sim/mod.rs +++ b/crates/coremem/src/sim/mod.rs @@ -1066,12 +1066,12 @@ impl<'a, R: Real, M: Material> HCell<'a, R, M> { let aux = &mut pml.aux_h; // (S^-1 \nabla) x E Vec3::from(( - aux.sy_conv_dfz_dy.step_only_sigma(e.y, delta_ez_y) - - aux.sz_conv_dfy_dz.step_only_sigma(e.z, delta_ey_z), - aux.sz_conv_dfx_dz.step_only_sigma(e.z, delta_ex_z) - - aux.sx_conv_dfz_dx.step_only_sigma(e.x, delta_ez_x), - aux.sx_conv_dfy_dx.step_only_sigma(e.x, delta_ey_x) - - aux.sy_conv_dfx_dy.step_only_sigma(e.y, delta_ex_y), + aux.sy_conv_dfz_dy.step_only_sigma(e.y(), delta_ez_y) + - aux.sz_conv_dfy_dz.step_only_sigma(e.z(), delta_ey_z), + aux.sz_conv_dfx_dz.step_only_sigma(e.z(), delta_ex_z) + - aux.sx_conv_dfz_dx.step_only_sigma(e.x(), delta_ez_x), + aux.sx_conv_dfy_dx.step_only_sigma(e.x(), delta_ey_x) + - aux.sy_conv_dfx_dy.step_only_sigma(e.y(), delta_ex_y), )) } }; @@ -1183,12 +1183,12 @@ impl<'a, R: Real, M: Material> ECell<'a, R, M> { let aux = &mut pml.aux_e; // (S^-1 \nabla) x H Vec3::from(( - aux.sy_conv_dfz_dy.step_only_sigma(e.y, delta_hz_y) - - aux.sz_conv_dfy_dz.step_only_sigma(e.z, delta_hy_z), - aux.sz_conv_dfx_dz.step_only_sigma(e.z, delta_hx_z) - - aux.sx_conv_dfz_dx.step_only_sigma(e.x, delta_hz_x), - aux.sx_conv_dfy_dx.step_only_sigma(e.x, delta_hy_x) - - aux.sy_conv_dfx_dy.step_only_sigma(e.y, delta_hx_y), + aux.sy_conv_dfz_dy.step_only_sigma(e.y(), delta_hz_y) + - aux.sz_conv_dfy_dz.step_only_sigma(e.z(), delta_hy_z), + aux.sz_conv_dfx_dz.step_only_sigma(e.z(), delta_hx_z) + - aux.sx_conv_dfz_dx.step_only_sigma(e.x(), delta_hz_x), + aux.sx_conv_dfy_dx.step_only_sigma(e.x(), delta_hy_x) + - aux.sy_conv_dfx_dy.step_only_sigma(e.y(), delta_hx_y), )) } }; diff --git a/crates/coremem/src/sim/spirv/bindings.rs b/crates/coremem/src/sim/spirv/bindings.rs index b07420f..a707bc7 100644 --- a/crates/coremem/src/sim/spirv/bindings.rs +++ b/crates/coremem/src/sim/spirv/bindings.rs @@ -275,7 +275,7 @@ impl IntoLib for ffi::IsoConductorOr { impl From> for IsoConductorOr { fn from(m: IsomorphicConductor) -> Self { IsoConductorOr { - value: m.conductivity, + value: m.iso_conductivity(), mat: Default::default(), } } diff --git a/crates/types/src/lib.rs b/crates/types/src/lib.rs index 69d116d..9d1ea96 100644 --- a/crates/types/src/lib.rs +++ b/crates/types/src/lib.rs @@ -1 +1,3 @@ pub mod real; +pub mod vec; +pub mod vecu; diff --git a/crates/coremem/src/geom/vec.rs b/crates/types/src/vec.rs similarity index 98% rename from crates/coremem/src/geom/vec.rs rename to crates/types/src/vec.rs index e751a90..9be933a 100644 --- a/crates/coremem/src/geom/vec.rs +++ b/crates/types/src/vec.rs @@ -1,11 +1,11 @@ use crate::real::{Real, ToFloat}; -use super::Vec3u; +use super::vecu::Vec3u; use serde::{Serialize, Deserialize}; -use std::convert::From; -use std::fmt; -use std::iter::Sum; -use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Sub}; +use core::convert::From; +use core::fmt; +use core::iter::Sum; +use core::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Sub}; #[derive(Copy, Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] pub struct Vec2 { diff --git a/crates/coremem/src/geom/vecu.rs b/crates/types/src/vecu.rs similarity index 91% rename from crates/coremem/src/geom/vecu.rs rename to crates/types/src/vecu.rs index 19e42ec..94834b8 100644 --- a/crates/coremem/src/geom/vecu.rs +++ b/crates/types/src/vecu.rs @@ -1,9 +1,9 @@ -use crate::geom::Vec3; -use crate::real::Real; +use super::vec::Vec3; +use super::real::Real; use serde::{Serialize, Deserialize}; -use std::fmt::{self, Display}; -use std::ops::{Add, Div, Mul, Sub}; +use core::fmt::{self, Display}; +use core::ops::{Add, Div, Mul, Sub}; #[derive(Copy, Clone, Debug, Default, Hash, Eq, PartialEq, Ord, PartialOrd, Serialize, Deserialize)] pub struct Vec3u { @@ -29,7 +29,7 @@ impl Vec3u { self.z } /// Convert for use with ndarray indexing - pub(crate) fn row_major_idx(&self) -> [usize; 3] { + pub fn row_major_idx(&self) -> [usize; 3] { [self.z as _, self.y as _, self.x as _] }