diff --git a/multigrid/src/main.rs b/multigrid/src/main.rs index f3b2ba2..19f9986 100644 --- a/multigrid/src/main.rs +++ b/multigrid/src/main.rs @@ -16,11 +16,11 @@ struct System { } enum Metrics { - Upwind4(grid::Metrics), - Upwind9(grid::Metrics), - Upwind4h2(grid::Metrics), - Trad4(grid::Metrics), - Trad8(grid::Metrics), + Upwind4(grid::Metrics), + Upwind9(grid::Metrics), + Upwind4h2(grid::Metrics), + Trad4(grid::Metrics), + Trad8(grid::Metrics), } impl System { @@ -42,11 +42,20 @@ impl System { let metrics = grids .iter() .map(|g| match operator { - "upwind4" => Metrics::Upwind4(g.metrics::().unwrap()), - "upwind9" => Metrics::Upwind9(g.metrics::().unwrap()), - "upwind4h2" => Metrics::Upwind4h2(g.metrics::().unwrap()), - "trad4" => Metrics::Trad4(g.metrics::().unwrap()), - "trad8" => Metrics::Trad8(g.metrics::().unwrap()), + "upwind4" => Metrics::Upwind4( + g.metrics::() + .unwrap(), + ), + "upwind9" => Metrics::Upwind9( + g.metrics::() + .unwrap(), + ), + "upwind4h2" => Metrics::Upwind4h2( + g.metrics::() + .unwrap(), + ), + "trad4" => Metrics::Trad4(g.metrics::().unwrap()), + "trad8" => Metrics::Trad8(g.metrics::().unwrap()), op => panic!("operator {} not known", op), }) .collect::>(); diff --git a/sbp/src/euler.rs b/sbp/src/euler.rs index 9a85e08..dbf95ed 100644 --- a/sbp/src/euler.rs +++ b/sbp/src/euler.rs @@ -14,7 +14,7 @@ pub struct System { sys: (Field, Field), k: [Field; 4], wb: WorkBuffers, - grid: (Grid, Metrics), + grid: (Grid, Metrics), } impl System { @@ -403,7 +403,7 @@ fn pressure(gamma: Float, rho: Float, rhou: Float, rhov: Float, e: Float) -> Flo pub fn RHS_trad( k: &mut Field, y: &Field, - metrics: &Metrics, + metrics: &Metrics, boundaries: &BoundaryTerms, tmp: &mut (Field, Field, Field, Field, Field, Field), ) { @@ -437,7 +437,7 @@ pub fn RHS_trad( pub fn RHS_upwind( k: &mut Field, y: &Field, - metrics: &Metrics, + metrics: &Metrics, boundaries: &BoundaryTerms, tmp: &mut (Field, Field, Field, Field, Field, Field), ) { @@ -477,7 +477,7 @@ pub fn RHS_upwind( fn upwind_dissipation( k: (&mut Field, &mut Field), y: &Field, - metrics: &Metrics, + metrics: &Metrics, tmp: (&mut Field, &mut Field), ) { let n = y.nx() * y.ny(); @@ -541,7 +541,7 @@ fn upwind_dissipation( UO::disseta(tmp.1.e(), k.1.e_mut()); } -fn fluxes(k: (&mut Field, &mut Field), y: &Field, metrics: &Metrics) { +fn fluxes(k: (&mut Field, &mut Field), y: &Field, metrics: &Metrics) { let j_dxi_dx = metrics.detj_dxi_dx.view(); let j_dxi_dy = metrics.detj_dxi_dy.view(); let j_deta_dx = metrics.detj_deta_dx.view(); @@ -815,7 +815,7 @@ fn vortexify( fn SAT_characteristics( k: &mut Field, y: &Field, - metrics: &Metrics, + metrics: &Metrics, boundaries: &BoundaryTerms, ) { // North boundary diff --git a/sbp/src/grid.rs b/sbp/src/grid.rs index cda2470..9db994e 100644 --- a/sbp/src/grid.rs +++ b/sbp/src/grid.rs @@ -8,9 +8,10 @@ pub struct Grid { } #[derive(Debug, Clone)] -pub struct Metrics +pub struct Metrics where - SBP: super::operators::SbpOperator, + SBPeta: super::operators::SbpOperator, + SBPxi: super::operators::SbpOperator, { pub(crate) detj: Array2, pub(crate) detj_dxi_dx: Array2, @@ -18,7 +19,8 @@ where pub(crate) detj_deta_dx: Array2, pub(crate) detj_deta_dy: Array2, - operator: std::marker::PhantomData, + operatoreta: std::marker::PhantomData, + operatorxi: std::marker::PhantomData, } impl Grid { @@ -41,9 +43,9 @@ impl Grid { self.y.view() } - pub fn metrics( + pub fn metrics( &self, - ) -> Result, ndarray::ShapeError> { + ) -> Result, ndarray::ShapeError> { Metrics::new(self) } @@ -73,7 +75,9 @@ impl Grid { } } -impl Metrics { +impl + Metrics +{ fn new(grid: &Grid) -> Result { let ny = grid.ny(); let nx = grid.nx(); @@ -81,13 +85,13 @@ impl Metrics { let y = &grid.y; let mut dx_dxi = Array2::zeros((ny, nx)); - SBP::diffxi(x.view(), dx_dxi.view_mut()); + SBPxi::diffxi(x.view(), dx_dxi.view_mut()); let mut dx_deta = Array2::zeros((ny, nx)); - SBP::diffeta(x.view(), dx_deta.view_mut()); + SBPeta::diffeta(x.view(), dx_deta.view_mut()); let mut dy_dxi = Array2::zeros((ny, nx)); - SBP::diffxi(y.view(), dy_dxi.view_mut()); + SBPxi::diffxi(y.view(), dy_dxi.view_mut()); let mut dy_deta = Array2::zeros((ny, nx)); - SBP::diffeta(y.view(), dy_deta.view_mut()); + SBPeta::diffeta(y.view(), dy_deta.view_mut()); let mut detj = Array2::zeros((ny, nx)); ndarray::azip!((detj in &mut detj, @@ -118,7 +122,8 @@ impl Metrics { detj_dxi_dy, detj_deta_dx, detj_deta_dy, - operator: std::marker::PhantomData, + operatorxi: std::marker::PhantomData, + operatoreta: std::marker::PhantomData, }) } } diff --git a/sbp/src/maxwell.rs b/sbp/src/maxwell.rs index 0dacf35..3a00697 100644 --- a/sbp/src/maxwell.rs +++ b/sbp/src/maxwell.rs @@ -78,7 +78,7 @@ pub struct System { sys: (Field, Field), wb: WorkBuffers, grid: Grid, - metrics: Metrics, + metrics: Metrics, } impl System { @@ -119,7 +119,7 @@ impl System { fut: &mut Field, prev: &Field, _time: Float, - c: &(&Grid, &Metrics), + c: &(&Grid, &Metrics), m: &mut (Array2, Array2, Array2, Array2), ) { let (grid, metrics) = c; @@ -147,7 +147,7 @@ impl System { fut: &mut Field, prev: &Field, _time: Float, - c: &(&Grid, &Metrics), + c: &(&Grid, &Metrics), m: &mut (Array2, Array2, Array2, Array2), ) { let (grid, metrics) = c; @@ -199,7 +199,7 @@ fn RHS( k: &mut Field, y: &Field, _grid: &Grid, - metrics: &Metrics, + metrics: &Metrics, tmp: &mut (Array2, Array2, Array2, Array2), ) { fluxes(k, y, metrics, tmp); @@ -223,7 +223,7 @@ fn RHS_upwind( k: &mut Field, y: &Field, _grid: &Grid, - metrics: &Metrics, + metrics: &Metrics, tmp: &mut (Array2, Array2, Array2, Array2), ) { fluxes(k, y, metrics, tmp); @@ -246,7 +246,7 @@ fn RHS_upwind( fn fluxes( k: &mut Field, y: &Field, - metrics: &Metrics, + metrics: &Metrics, tmp: &mut (Array2, Array2, Array2, Array2), ) { // ex = hz_y @@ -320,7 +320,7 @@ fn fluxes( fn dissipation( k: &mut Field, y: &Field, - metrics: &Metrics, + metrics: &Metrics, tmp: &mut (Array2, Array2, Array2, Array2), ) { // ex component @@ -421,7 +421,7 @@ pub struct BoundaryTerms { fn SAT_characteristics( k: &mut Field, y: &Field, - metrics: &Metrics, + metrics: &Metrics, boundaries: &BoundaryTerms, ) { let ny = y.ny();