diff --git a/src/geometry/geometry_map.rs b/src/geometry/geometry_map.rs index 7aa1f77..06ef6db 100644 --- a/src/geometry/geometry_map.rs +++ b/src/geometry/geometry_map.rs @@ -1,5 +1,5 @@ //! Geometry map -use crate::{traits::GeometryMap as GeometryMapTrait, types::RealScalar}; +use crate::{traits::GeometryMap as GeometryMapTrait, types::Scalar}; use ndelement::{reference_cell, traits::MappedFiniteElement, types::ReferenceCellType}; use rlst::{Array, DynArray, RlstScalar, ValueArrayImpl}; @@ -43,7 +43,7 @@ fn cross(mat: &[T], result: &mut [T]) { } } -impl<'a, T: RealScalar, B2D: ValueArrayImpl, C2D: ValueArrayImpl> +impl<'a, T: Scalar, B2D: ValueArrayImpl, C2D: ValueArrayImpl> GeometryMap<'a, T, B2D, C2D> { /// Create new @@ -71,7 +71,7 @@ impl<'a, T: RealScalar, B2D: ValueArrayImpl, C2D: ValueArrayImpl } } -impl, C2D: ValueArrayImpl> GeometryMapTrait +impl, C2D: ValueArrayImpl> GeometryMapTrait for GeometryMap<'_, T, B2D, C2D> { type T = T; diff --git a/src/geometry/mixed/entity_geometry.rs b/src/geometry/mixed/entity_geometry.rs index cd0e6ed..c856f80 100644 --- a/src/geometry/mixed/entity_geometry.rs +++ b/src/geometry/mixed/entity_geometry.rs @@ -3,13 +3,13 @@ use super::MixedGeometry; use crate::{ geometry::{Point, PointIter}, traits::Geometry, - types::RealScalar, + types::Scalar, }; use ndelement::traits::MappedFiniteElement; /// Geometry of an entity #[derive(Debug)] -pub struct MixedEntityGeometry<'a, T: RealScalar, E: MappedFiniteElement> { +pub struct MixedEntityGeometry<'a, T: Scalar, E: MappedFiniteElement> { geometry: &'a MixedGeometry, element_index: usize, cell_index: usize, @@ -17,7 +17,7 @@ pub struct MixedEntityGeometry<'a, T: RealScalar, E: MappedFiniteElement> { sub_entity_index: usize, } -impl<'a, T: RealScalar, E: MappedFiniteElement> MixedEntityGeometry<'a, T, E> { +impl<'a, T: Scalar, E: MappedFiniteElement> MixedEntityGeometry<'a, T, E> { /// Create new pub fn new( geometry: &'a MixedGeometry, @@ -36,7 +36,7 @@ impl<'a, T: RealScalar, E: MappedFiniteElement> MixedEntityGeometry<'a, T, E> { } } -impl Geometry for MixedEntityGeometry<'_, T, E> { +impl Geometry for MixedEntityGeometry<'_, T, E> { type T = T; type Point<'a> = Point<'a, T> diff --git a/src/geometry/mixed/geometry.rs b/src/geometry/mixed/geometry.rs index d349ce9..0702646 100644 --- a/src/geometry/mixed/geometry.rs +++ b/src/geometry/mixed/geometry.rs @@ -1,7 +1,7 @@ //! Geometry where each entity of a given dimension is represented by the same element #[cfg(feature = "serde")] use crate::traits::ConvertToSerializable; -use crate::types::RealScalar; +use crate::types::Scalar; use itertools::izip; #[cfg(feature = "serde")] use ndelement::{ @@ -19,7 +19,7 @@ use std::collections::HashMap; use std::fmt::{Debug, Formatter}; /// Single element geometry -pub struct MixedGeometry { +pub struct MixedGeometry { points: DynArray, cells: Vec>, elements: Vec>, @@ -27,7 +27,7 @@ pub struct MixedGeometry { pub(crate) insertion_indices_to_cell_indices: Vec, } -impl Debug for MixedGeometry { +impl Debug for MixedGeometry { fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { f.debug_struct("MixedGeometry") .field("points", &self.points) @@ -39,7 +39,7 @@ impl Debug for MixedGeometry { #[cfg(feature = "serde")] #[derive(serde::Serialize, Debug, serde::Deserialize)] #[serde(bound = "for<'de2> T: serde::Deserialize<'de2>")] -pub struct SerializableGeometry +pub struct SerializableGeometry where for<'de2> T: serde::Deserialize<'de2>, { @@ -51,8 +51,8 @@ where } #[cfg(feature = "serde")] -impl ConvertToSerializable - for MixedGeometry> +impl ConvertToSerializable + for MixedGeometry> where for<'de2> T: serde::Deserialize<'de2>, { @@ -115,7 +115,7 @@ where } } -impl MixedGeometry { +impl MixedGeometry { /// Create single element geometry pub fn new( cell_types_in: &[ReferenceCellType], diff --git a/src/geometry/point.rs b/src/geometry/point.rs index cf10589..9ef2ad1 100644 --- a/src/geometry/point.rs +++ b/src/geometry/point.rs @@ -1,20 +1,20 @@ //! Point -use crate::{traits::Point as PointTrait, types::RealScalar}; +use crate::{traits::Point as PointTrait, types::Scalar}; /// A points #[derive(Debug, Clone, Copy)] -pub struct Point<'a, T: RealScalar> { +pub struct Point<'a, T: Scalar> { index: usize, coordinates: &'a [T], } -impl<'a, T: RealScalar> Point<'a, T> { +impl<'a, T: Scalar> Point<'a, T> { /// Create new pub fn new(index: usize, coordinates: &'a [T]) -> Self { Self { index, coordinates } } } -impl PointTrait for Point<'_, T> { +impl PointTrait for Point<'_, T> { type T = T; fn index(&self) -> usize { @@ -32,17 +32,17 @@ impl PointTrait for Point<'_, T> { /// Iterator over points #[derive(Debug)] -pub struct PointIter<'a, T: RealScalar> { +pub struct PointIter<'a, T: Scalar> { points: Vec<(usize, &'a [T])>, index: usize, } -impl<'a, T: RealScalar> PointIter<'a, T> { +impl<'a, T: Scalar> PointIter<'a, T> { /// Create new pub fn new(points: Vec<(usize, &'a [T])>) -> Self { Self { points, index: 0 } } } -impl<'a, T: RealScalar> Iterator for PointIter<'a, T> { +impl<'a, T: Scalar> Iterator for PointIter<'a, T> { type Item = Point<'a, T>; fn next(&mut self) -> Option> { diff --git a/src/geometry/single_element/entity_geometry.rs b/src/geometry/single_element/entity_geometry.rs index 4bcfca5..2438d84 100644 --- a/src/geometry/single_element/entity_geometry.rs +++ b/src/geometry/single_element/entity_geometry.rs @@ -3,20 +3,20 @@ use super::SingleElementGeometry; use crate::{ geometry::{Point, PointIter}, traits::Geometry, - types::RealScalar, + types::Scalar, }; use ndelement::traits::MappedFiniteElement; /// Geometry of an entity #[derive(Debug)] -pub struct SingleElementEntityGeometry<'a, T: RealScalar, E: MappedFiniteElement> { +pub struct SingleElementEntityGeometry<'a, T: Scalar, E: MappedFiniteElement> { geometry: &'a SingleElementGeometry, cell_index: usize, sub_entity_dimension: usize, sub_entity_index: usize, } -impl<'a, T: RealScalar, E: MappedFiniteElement> SingleElementEntityGeometry<'a, T, E> { +impl<'a, T: Scalar, E: MappedFiniteElement> SingleElementEntityGeometry<'a, T, E> { /// Create new pub fn new( geometry: &'a SingleElementGeometry, @@ -33,7 +33,7 @@ impl<'a, T: RealScalar, E: MappedFiniteElement> SingleElementEntityGeometry<'a, } } -impl Geometry for SingleElementEntityGeometry<'_, T, E> { +impl Geometry for SingleElementEntityGeometry<'_, T, E> { type T = T; type Point<'a> = Point<'a, T> diff --git a/src/geometry/single_element/geometry.rs b/src/geometry/single_element/geometry.rs index 72c7ddf..f8fad06 100644 --- a/src/geometry/single_element/geometry.rs +++ b/src/geometry/single_element/geometry.rs @@ -1,7 +1,7 @@ //! Geometry where each entity of a given dimension is represented by the same element #[cfg(feature = "serde")] use crate::traits::ConvertToSerializable; -use crate::types::RealScalar; +use crate::types::Scalar; #[cfg(feature = "serde")] use ndelement::{ ciarlet::{CiarletElement, lagrange}, @@ -18,13 +18,13 @@ use rlst::{DynArray, rlst_dynamic_array}; use std::fmt::{Debug, Formatter}; /// Single element geometry -pub struct SingleElementGeometry { +pub struct SingleElementGeometry { points: DynArray, cells: DynArray, elements: Vec, } -impl Debug for SingleElementGeometry { +impl Debug for SingleElementGeometry { fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { f.debug_struct("SingleElementGeometry") .field("points", &self.points) @@ -36,7 +36,7 @@ impl Debug for SingleElementGeometry +pub struct SerializableGeometry where for<'de2> T: serde::Deserialize<'de2>, { @@ -46,8 +46,8 @@ where } #[cfg(feature = "serde")] -impl ConvertToSerializable - for SingleElementGeometry> +impl ConvertToSerializable + for SingleElementGeometry> where for<'de2> T: serde::Deserialize<'de2>, { @@ -86,7 +86,7 @@ where } } -impl SingleElementGeometry { +impl SingleElementGeometry { /// Create single element geometry pub fn new( cell_type: ReferenceCellType, diff --git a/src/grid/local_grid/mixed/builder.rs b/src/grid/local_grid/mixed/builder.rs index 76ccf58..14651fa 100644 --- a/src/grid/local_grid/mixed/builder.rs +++ b/src/grid/local_grid/mixed/builder.rs @@ -5,7 +5,7 @@ use crate::{ geometry::MixedGeometry, topology::mixed::MixedTopology, traits::{Builder, GeometryBuilder, GridBuilder, TopologyBuilder}, - types::RealScalar, + types::Scalar, }; use itertools::izip; use ndelement::{ @@ -20,10 +20,10 @@ use std::collections::{HashMap, HashSet}; /// Grid builder for a grid with a mixture of element types #[derive(Debug)] -pub struct MixedGridBuilder { +pub struct MixedGridBuilder { gdim: usize, element_indices: HashMap<(ReferenceCellType, usize), usize>, - elements: Vec>, + elements: Vec>, points_per_cell: Vec, pub(crate) points: Vec, cells: Vec, @@ -39,7 +39,7 @@ pub struct MixedGridBuilder { cell_indices: HashSet, } -impl MixedGridBuilder { +impl MixedGridBuilder { /// Create a new grid builder pub fn new(gdim: usize) -> Self { Self { @@ -63,8 +63,8 @@ impl MixedGridBuilder { } } -impl Builder for MixedGridBuilder { - type Grid = MixedGrid>; +impl Builder for MixedGridBuilder { + type Grid = MixedGrid>; type T = T; type CellData<'a> = (ReferenceCellType, usize, &'a [usize]); type EntityDescriptor = ReferenceCellType; @@ -89,7 +89,7 @@ impl Builder for MixedGridBuilder { .entry((cell_data.0, cell_data.1)) .or_insert_with(|| { let n = self.cell_indices_to_ids.len(); - self.elements.push(lagrange::create::( + self.elements.push(lagrange::create::( cell_data.0, cell_data.1, Continuity::Standard, @@ -127,7 +127,7 @@ impl Builder for MixedGridBuilder { self.add_cell(id, (cell_type, cell_degree, nodes)); } - fn create_grid(&self) -> MixedGrid> { + fn create_grid(&self) -> MixedGrid> { let cell_vertices = self.extract_vertices(&self.cells, &self.cell_types, &self.cell_degrees); @@ -209,8 +209,8 @@ impl Builder for MixedGridBuilder { } } -impl GeometryBuilder for MixedGridBuilder { - type GridGeometry = MixedGeometry>; +impl GeometryBuilder for MixedGridBuilder { + type GridGeometry = MixedGeometry>; fn create_geometry( &self, point_ids: &[usize], @@ -218,7 +218,7 @@ impl GeometryBuilder for MixedGridBuilder { cell_points: &[usize], cell_types: &[ReferenceCellType], cell_degrees: &[usize], - ) -> MixedGeometry> { + ) -> MixedGeometry> { let npts = point_ids.len(); let mut points = rlst_dynamic_array!(T, [self.gdim(), npts]); points.data_mut().unwrap().copy_from_slice(coordinates); @@ -229,7 +229,7 @@ impl GeometryBuilder for MixedGridBuilder { for degree in cell_degrees { cell_families.push(*ef_indices.entry(*degree).or_insert_with(|| { let n = element_families.len(); - element_families.push(LagrangeElementFamily::::new( + element_families.push(LagrangeElementFamily::::new( *degree, Continuity::Standard, )); @@ -237,7 +237,7 @@ impl GeometryBuilder for MixedGridBuilder { })) } - MixedGeometry::>::new( + MixedGeometry::>::new( cell_types, points, cell_points, @@ -247,7 +247,7 @@ impl GeometryBuilder for MixedGridBuilder { } } -impl TopologyBuilder for MixedGridBuilder { +impl TopologyBuilder for MixedGridBuilder { type GridTopology = MixedTopology; fn create_topology( &self, @@ -297,7 +297,7 @@ impl TopologyBuilder for MixedGridBuilder { } } -impl GridBuilder for MixedGridBuilder { +impl GridBuilder for MixedGridBuilder { fn create_grid_from_topology_geometry( &self, topology: ::GridTopology, diff --git a/src/grid/local_grid/mixed/grid.rs b/src/grid/local_grid/mixed/grid.rs index 793c294..8cf4d66 100644 --- a/src/grid/local_grid/mixed/grid.rs +++ b/src/grid/local_grid/mixed/grid.rs @@ -16,7 +16,7 @@ use crate::{ geometry::{GeometryMap, MixedEntityGeometry, MixedGeometry}, topology::mixed::{MixedEntityTopology, MixedTopology}, traits::{Entity, Grid}, - types::{Ownership, RealScalar}, + types::{Ownership, Scalar}, }; use itertools::izip; #[cfg(feature = "mpi")] @@ -36,7 +36,7 @@ use std::collections::HashMap; #[derive(Debug)] pub struct MixedGridEntity< 'a, - T: RealScalar, + T: Scalar, E: MappedFiniteElement, > { grid: &'a MixedGrid, @@ -48,7 +48,7 @@ pub struct MixedGridEntity< geometry_cell_index: usize, } -impl<'e, T: RealScalar, E: MappedFiniteElement> +impl<'e, T: Scalar, E: MappedFiniteElement> MixedGridEntity<'e, T, E> { /// Create new @@ -72,7 +72,7 @@ impl<'e, T: RealScalar, E: MappedFiniteElement> Entity +impl> Entity for MixedGridEntity<'_, T, E> { type T = T; @@ -125,7 +125,7 @@ impl> #[derive(Debug)] pub struct MixedGridEntityIter< 'a, - T: RealScalar, + T: Scalar, E: MappedFiniteElement, > { grid: &'a MixedGrid, @@ -133,7 +133,7 @@ pub struct MixedGridEntityIter< index: usize, } -impl<'a, T: RealScalar, E: MappedFiniteElement> +impl<'a, T: Scalar, E: MappedFiniteElement> MixedGridEntityIter<'a, T, E> { /// Create new @@ -145,7 +145,7 @@ impl<'a, T: RealScalar, E: MappedFiniteElement> Iterator +impl<'a, T: Scalar, E: MappedFiniteElement> Iterator for MixedGridEntityIter<'a, T, E> { type Item = MixedGridEntity<'a, T, E>; @@ -158,7 +158,7 @@ impl<'a, T: RealScalar, E: MappedFiniteElement> { +pub struct MixedGrid> { topology: MixedTopology, geometry: MixedGeometry, } @@ -166,7 +166,7 @@ pub struct MixedGrid +pub struct SerializableGrid where for<'de2> T: serde::Deserialize<'de2>, { @@ -175,8 +175,8 @@ where } #[cfg(feature = "serde")] -impl ConvertToSerializable - for MixedGrid> +impl ConvertToSerializable + for MixedGrid> { type SerializableType = SerializableGrid; fn to_serializable(&self) -> SerializableGrid { @@ -193,14 +193,14 @@ impl ConvertToSerializable } } -impl> MixedGrid { +impl> MixedGrid { /// Create new pub fn new(topology: MixedTopology, geometry: MixedGeometry) -> Self { Self { topology, geometry } } } -impl MixedGrid> { +impl MixedGrid> { /// Create new from raw data pub fn new_from_raw_data( coordinates: &[T], @@ -222,13 +222,13 @@ impl MixedGrid> { *element_family_indices.entry(*d).or_insert_with(|| { let index = element_families.len(); element_families - .push(LagrangeElementFamily::::new(*d, Continuity::Standard)); + .push(LagrangeElementFamily::::new(*d, Continuity::Standard)); index }) }) .collect::>(); - let geometry = MixedGeometry::>::new( + let geometry = MixedGeometry::>::new( cell_types, points, cells, @@ -252,7 +252,7 @@ impl MixedGrid> { } } -impl> Grid +impl> Grid for MixedGrid { type T = T; @@ -361,11 +361,11 @@ impl> } #[cfg(feature = "mpi")] -impl> +impl> DistributableGrid for MixedGrid { type ParallelGrid<'a, C: Communicator + 'a> = - ParallelGridImpl<'a, C, MixedGrid>>; + ParallelGridImpl<'a, C, MixedGrid>>; fn distribute<'a, C: Communicator>( &self, diff --git a/src/grid/local_grid/single_element/builder.rs b/src/grid/local_grid/single_element/builder.rs index 6e74f3f..593efef 100644 --- a/src/grid/local_grid/single_element/builder.rs +++ b/src/grid/local_grid/single_element/builder.rs @@ -5,7 +5,7 @@ use crate::{ geometry::SingleElementGeometry, topology::single_type::SingleTypeTopology, traits::{Builder, GeometryBuilder, GridBuilder, TopologyBuilder}, - types::RealScalar, + types::Scalar, }; use ndelement::{ ciarlet::{CiarletElement, LagrangeElementFamily, lagrange}, @@ -41,10 +41,10 @@ use std::collections::{HashMap, HashSet}; /// let grid = builder.create_grid(); /// ``` #[derive(Debug)] -pub struct SingleElementGridBuilder { +pub struct SingleElementGridBuilder { gdim: usize, element_data: (ReferenceCellType, usize), - element: CiarletElement, + element: CiarletElement, points_per_cell: usize, pub(crate) points: Vec, cells: Vec, @@ -56,7 +56,7 @@ pub struct SingleElementGridBuilder { cell_indices: HashSet, } -impl SingleElementGridBuilder { +impl SingleElementGridBuilder { /// Create a new grid builder pub fn new(gdim: usize, data: (ReferenceCellType, usize)) -> Self { Self::new_with_capacity(gdim, 0, 0, data) @@ -69,7 +69,7 @@ impl SingleElementGridBuilder { ncells: usize, data: (ReferenceCellType, usize), ) -> Self { - let element = lagrange::create::(data.0, data.1, Continuity::Standard); + let element = lagrange::create::(data.0, data.1, Continuity::Standard); let points_per_cell = element.dim(); Self { gdim, @@ -88,8 +88,8 @@ impl SingleElementGridBuilder { } } -impl Builder for SingleElementGridBuilder { - type Grid = SingleElementGrid>; +impl Builder for SingleElementGridBuilder { + type Grid = SingleElementGrid>; type T = T; type CellData<'a> = &'a [usize]; type EntityDescriptor = ReferenceCellType; @@ -135,7 +135,7 @@ impl Builder for SingleElementGridBuilder { self.add_cell(id, nodes); } - fn create_grid(&self) -> SingleElementGrid> { + fn create_grid(&self) -> SingleElementGrid> { let cell_vertices = self.extract_vertices(&self.cells, &[self.element_data.0], &[self.element_data.1]); @@ -216,8 +216,8 @@ impl Builder for SingleElementGridBuilder { } } -impl GeometryBuilder for SingleElementGridBuilder { - type GridGeometry = SingleElementGeometry>; +impl GeometryBuilder for SingleElementGridBuilder { + type GridGeometry = SingleElementGeometry>; fn create_geometry( &self, point_ids: &[usize], @@ -225,14 +225,14 @@ impl GeometryBuilder for SingleElementGridBuilder { cell_points: &[usize], _cell_types: &[ReferenceCellType], _cell_degrees: &[usize], - ) -> SingleElementGeometry> { + ) -> SingleElementGeometry> { let npts = point_ids.len(); let mut points = rlst_dynamic_array!(T, [self.gdim(), npts]); points.data_mut().unwrap().copy_from_slice(coordinates); - let family = LagrangeElementFamily::::new(self.element_data.1, Continuity::Standard); + let family = LagrangeElementFamily::::new(self.element_data.1, Continuity::Standard); - SingleElementGeometry::>::new( + SingleElementGeometry::>::new( self.element_data.0, points, cell_points, @@ -241,7 +241,7 @@ impl GeometryBuilder for SingleElementGridBuilder { } } -impl TopologyBuilder for SingleElementGridBuilder { +impl TopologyBuilder for SingleElementGridBuilder { type GridTopology = SingleTypeTopology; fn create_topology( &self, @@ -301,7 +301,7 @@ impl TopologyBuilder for SingleElementGridBuilder { } } -impl GridBuilder for SingleElementGridBuilder { +impl GridBuilder for SingleElementGridBuilder { fn create_grid_from_topology_geometry( &self, topology: ::GridTopology, diff --git a/src/grid/local_grid/single_element/grid.rs b/src/grid/local_grid/single_element/grid.rs index bf9294b..b1b2cdf 100644 --- a/src/grid/local_grid/single_element/grid.rs +++ b/src/grid/local_grid/single_element/grid.rs @@ -16,7 +16,7 @@ use crate::{ geometry::{GeometryMap, SingleElementEntityGeometry, SingleElementGeometry}, topology::single_type::{SingleTypeEntityTopology, SingleTypeTopology}, traits::{Entity, Grid}, - types::{Ownership, RealScalar}, + types::{Ownership, Scalar}, }; #[cfg(feature = "mpi")] use mpi::traits::{Communicator, Equivalence}; @@ -34,7 +34,7 @@ use rlst::{SliceArray, rlst_dynamic_array}; #[derive(Debug)] pub struct SingleElementGridEntity< 'a, - T: RealScalar, + T: Scalar, E: MappedFiniteElement, > { grid: &'a SingleElementGrid, @@ -43,7 +43,7 @@ pub struct SingleElementGridEntity< entity_index: usize, } -impl<'e, T: RealScalar, E: MappedFiniteElement> +impl<'e, T: Scalar, E: MappedFiniteElement> SingleElementGridEntity<'e, T, E> { /// Create new @@ -61,7 +61,7 @@ impl<'e, T: RealScalar, E: MappedFiniteElement> Entity +impl> Entity for SingleElementGridEntity<'_, T, E> { type T = T; @@ -110,7 +110,7 @@ impl> #[derive(Debug)] pub struct SingleElementGridEntityIter< 'a, - T: RealScalar, + T: Scalar, E: MappedFiniteElement, > { grid: &'a SingleElementGrid, @@ -118,7 +118,7 @@ pub struct SingleElementGridEntityIter< index: usize, } -impl<'a, T: RealScalar, E: MappedFiniteElement> +impl<'a, T: Scalar, E: MappedFiniteElement> SingleElementGridEntityIter<'a, T, E> { /// Create new @@ -130,7 +130,7 @@ impl<'a, T: RealScalar, E: MappedFiniteElement> Iterator +impl<'a, T: Scalar, E: MappedFiniteElement> Iterator for SingleElementGridEntityIter<'a, T, E> { type Item = SingleElementGridEntity<'a, T, E>; @@ -143,10 +143,8 @@ impl<'a, T: RealScalar, E: MappedFiniteElement, -> { +pub struct SingleElementGrid> +{ topology: SingleTypeTopology, geometry: SingleElementGeometry, } @@ -154,7 +152,7 @@ pub struct SingleElementGrid< #[cfg(feature = "serde")] #[derive(serde::Serialize, Debug, serde::Deserialize)] #[serde(bound = "for<'de2> T: serde::Deserialize<'de2>")] -pub struct SerializableGrid +pub struct SerializableGrid where for<'de2> T: serde::Deserialize<'de2>, { @@ -163,8 +161,8 @@ where } #[cfg(feature = "serde")] -impl ConvertToSerializable - for SingleElementGrid> +impl ConvertToSerializable + for SingleElementGrid> { type SerializableType = SerializableGrid; fn to_serializable(&self) -> SerializableGrid { @@ -181,7 +179,7 @@ impl ConvertToSerializable } } -impl> +impl> SingleElementGrid { /// Create new @@ -190,7 +188,7 @@ impl> } } -impl SingleElementGrid> { +impl SingleElementGrid> { /// Create new from raw data pub fn new_from_raw_data( coordinates: &[T], @@ -203,9 +201,9 @@ impl SingleElementGrid> { let mut points = rlst_dynamic_array!(T, [gdim, npts]); points.data_mut().unwrap().copy_from_slice(coordinates); - let family = LagrangeElementFamily::::new(geometry_degree, Continuity::Standard); + let family = LagrangeElementFamily::::new(geometry_degree, Continuity::Standard); - let geometry = SingleElementGeometry::>::new( + let geometry = SingleElementGeometry::>::new( cell_type, points, cells, &family, ); @@ -226,7 +224,7 @@ impl SingleElementGrid> { } } -impl> Grid +impl> Grid for SingleElementGrid { type T = T; @@ -325,11 +323,11 @@ impl> } #[cfg(feature = "mpi")] -impl> +impl> DistributableGrid for SingleElementGrid { type ParallelGrid<'a, C: Communicator + 'a> = - ParallelGridImpl<'a, C, SingleElementGrid>>; + ParallelGridImpl<'a, C, SingleElementGrid>>; fn distribute<'a, C: Communicator>( &self, diff --git a/src/grid/parallel_grid.rs b/src/grid/parallel_grid.rs index e66a49e..3a380ee 100644 --- a/src/grid/parallel_grid.rs +++ b/src/grid/parallel_grid.rs @@ -4,7 +4,7 @@ use crate::traits::{ConvertToSerializable, RONImportParallel}; use crate::{ grid::local_grid::LocalGrid, traits::{Grid, ParallelGrid}, - types::{Ownership, RealScalar}, + types::{Ownership, Scalar}, }; use mpi::traits::Communicator; use rlst::distributed_tools::IndexLayout; @@ -60,7 +60,7 @@ where } } -impl + Sync> ParallelGrid +impl + Sync> ParallelGrid for ParallelGridImpl<'_, C, G> { type LocalGrid = LocalGrid; diff --git a/src/shapes/cube.rs b/src/shapes/cube.rs index d19ac5a..4aad4d9 100644 --- a/src/shapes/cube.rs +++ b/src/shapes/cube.rs @@ -3,16 +3,16 @@ use crate::{ grid::local_grid::{SingleElementGrid, SingleElementGridBuilder}, traits::Builder, - types::RealScalar, + types::Scalar, }; use ndelement::{ciarlet::CiarletElement, map::IdentityMap, types::ReferenceCellType}; /// Create a unit interval grid /// /// The unit interval is the interval between (0,) and (1,) -pub fn unit_interval( +pub fn unit_interval( nx: usize, -) -> SingleElementGrid> { +) -> SingleElementGrid> { let mut b = SingleElementGridBuilder::new_with_capacity( 1, nx + 1, @@ -33,11 +33,11 @@ pub fn unit_interval( /// Create a unit square grid /// /// The unit square is the square with corners at (0,0), (1,0), (0,1) and (1,1) -pub fn unit_square( +pub fn unit_square( nx: usize, ny: usize, cell_type: ReferenceCellType, -) -> SingleElementGrid> { +) -> SingleElementGrid> { let mut b = SingleElementGridBuilder::new_with_capacity( 2, (nx + 1) * (ny + 1), @@ -99,10 +99,10 @@ pub fn unit_square( /// Create a grid of the boundary of a unit square /// /// The unit square is the square with corners at (0,0), (1,0), (0,1) and (1,1) -pub fn unit_square_boundary( +pub fn unit_square_boundary( nx: usize, ny: usize, -) -> SingleElementGrid> { +) -> SingleElementGrid> { let mut b = SingleElementGridBuilder::new_with_capacity( 2, 2 * (nx + ny), @@ -153,12 +153,12 @@ pub fn unit_square_boundary( /// /// The unit cube is the cube with corners at (0,0,0), (1,0,0), (0,1,0), (1,1,0), (0,0,1), /// (1,0,1), (0,1,1) and (1,1,1) -pub fn unit_cube( +pub fn unit_cube( nx: usize, ny: usize, nz: usize, cell_type: ReferenceCellType, -) -> SingleElementGrid> { +) -> SingleElementGrid> { let mut b = SingleElementGridBuilder::new_with_capacity( 3, (nx + 1) * (ny + 1) * (nz + 1), @@ -257,12 +257,12 @@ pub fn unit_cube( /// /// The unit cube is the cube with corners at (0,0,0), (1,0,0), (0,1,0), (1,1,0), (0,0,1), /// (1,0,1), (0,1,1) and (1,1,1) -pub fn unit_cube_boundary( +pub fn unit_cube_boundary( nx: usize, ny: usize, nz: usize, cell_type: ReferenceCellType, -) -> SingleElementGrid> { +) -> SingleElementGrid> { let mut b = SingleElementGridBuilder::new_with_capacity( 3, (nx + 1) * (ny + 1) * (nz + 1) - (nx - 1) * (ny - 1) * (nz - 1), @@ -394,11 +394,11 @@ pub fn unit_cube_boundary( /// /// The unit cube is the cube with corners at (0,0,0), (1,0,0), (0,1,0), (1,1,0), (0,0,1), /// (1,0,1), (0,1,1) and (1,1,1) -pub fn unit_cube_edges( +pub fn unit_cube_edges( nx: usize, ny: usize, nz: usize, -) -> SingleElementGrid> { +) -> SingleElementGrid> { let mut b = SingleElementGridBuilder::new_with_capacity( 3, 4 * (nx + ny + nz + 1), diff --git a/src/shapes/regular_sphere.rs b/src/shapes/regular_sphere.rs index a86d9dd..6dfc939 100644 --- a/src/shapes/regular_sphere.rs +++ b/src/shapes/regular_sphere.rs @@ -3,10 +3,9 @@ use crate::{ grid::local_grid::{SingleElementGrid, SingleElementGridBuilder}, traits::Builder, - types::RealScalar, + types::Scalar, }; use ndelement::{ciarlet::CiarletElement, map::IdentityMap, types::ReferenceCellType}; -use num::Float; use std::collections::{HashMap, hash_map::Entry::Vacant}; /// Create a surface grid of a regular sphere @@ -14,9 +13,9 @@ use std::collections::{HashMap, hash_map::Entry::Vacant}; /// A regular sphere is created by starting with a regular octahedron. The shape is then refined `refinement_level` times. /// Each time the grid is refined, each triangle is split into four triangles (by adding lines connecting the midpoints of /// each edge). The new points are then scaled so that they are a distance of 1 from the origin. -pub fn regular_sphere( +pub fn regular_sphere( refinement_level: u32, -) -> SingleElementGrid> { +) -> SingleElementGrid> { let mut b = SingleElementGridBuilder::new_with_capacity( 3, 2 + usize::pow(4, refinement_level + 1), @@ -71,8 +70,7 @@ pub fn regular_sphere( half * (v_i[1] + v_j[1]), half * (v_i[2] + v_j[2]), ]; - let size = - Float::sqrt(new_pt.iter().map(|x| Float::powi(*x, 2)).sum::()); + let size = (new_pt.iter().map(|x| x.powi(2)).sum::()).sqrt(); for i in new_pt.iter_mut() { *i /= size; } diff --git a/src/shapes/screen.rs b/src/shapes/screen.rs index 9726510..2cb25d1 100644 --- a/src/shapes/screen.rs +++ b/src/shapes/screen.rs @@ -3,16 +3,16 @@ use crate::{ grid::local_grid::{SingleElementGrid, SingleElementGridBuilder}, traits::Builder, - types::RealScalar, + types::Scalar, }; use ndelement::{ciarlet::CiarletElement, map::IdentityMap, types::ReferenceCellType}; /// Create a square grid with triangle cells /// /// Create a grid of the square \[0,1\]^2 with triangle cells. The input ncells is the number of cells /// along each side of the square. -pub fn screen_triangles( +pub fn screen_triangles( ncells: usize, -) -> SingleElementGrid> { +) -> SingleElementGrid> { if ncells == 0 { panic!("Cannot create a grid with 0 cells"); } @@ -61,9 +61,9 @@ pub fn screen_triangles( /// /// Create a grid of the square \[0,1\]^2 with quadrilateral cells. The input ncells is the number of /// cells along each side of the square. -pub fn screen_quadrilaterals( +pub fn screen_quadrilaterals( ncells: usize, -) -> SingleElementGrid> { +) -> SingleElementGrid> { if ncells == 0 { panic!("Cannot create a grid with 0 cells"); } @@ -107,7 +107,7 @@ pub fn screen_quadrilaterals( /// Create a grid of the square \[0,2\]x\[0,1\] with triangle cells on the left half and quadrilateral /// cells on the right half. The input ncells is the number of cells along each side of the unit /// square. -pub fn screen_mixed(ncells: usize) -> MixedGrid +pub fn screen_mixed(ncells: usize) -> MixedGrid { if ncells == 0 { panic!("Cannot create a grid with 0 cells"); diff --git a/src/traits/builder.rs b/src/traits/builder.rs index 9e10a9b..3a6125b 100644 --- a/src/traits/builder.rs +++ b/src/traits/builder.rs @@ -1,5 +1,5 @@ //! Grid builder -use crate::{traits::Grid, types::RealScalar}; +use crate::{traits::Grid, types::Scalar}; #[cfg(feature = "mpi")] use crate::{traits::ParallelGrid, types::GraphPartitioner}; #[cfg(feature = "mpi")] @@ -18,7 +18,7 @@ pub trait Builder { /// The type of the grid that the builder creates type Grid: Grid; /// The floating point type used for coordinates - type T: RealScalar; + type T: Scalar; /// The type of the data that is input to add a cell type CellData<'a>; diff --git a/src/traits/entity.rs b/src/traits/entity.rs index 0c27dba..fbd6791 100644 --- a/src/traits/entity.rs +++ b/src/traits/entity.rs @@ -1,6 +1,6 @@ //! Traits for a mesh entity use crate::traits::{Geometry, Topology}; -use crate::types::{Ownership, RealScalar}; +use crate::types::{Ownership, Scalar}; use std::fmt::Debug; use std::hash::Hash; @@ -10,7 +10,7 @@ use std::hash::Hash; /// provides a unified interface to any type of entity. pub trait Entity { /// Scalar type - type T: RealScalar; + type T: Scalar; /// Type used as identifier of different entity types. /// In most cases this is given by [ReferenceCellType](ndelement::types::ReferenceCellType). diff --git a/src/traits/geometry.rs b/src/traits/geometry.rs index 2f54043..738a855 100644 --- a/src/traits/geometry.rs +++ b/src/traits/geometry.rs @@ -1,10 +1,10 @@ //! Entity geometry -use crate::types::RealScalar; +use crate::types::Scalar; /// A point pub trait Point { /// Scalar type - type T: RealScalar; + type T: Scalar; /// The point's index fn index(&self) -> usize; @@ -21,7 +21,7 @@ pub trait Point { /// The geometry contains information about all points that make up the entity. pub trait Geometry { /// Scalar type - type T: RealScalar; + type T: Scalar; /// Point Type type Point<'a>: Point diff --git a/src/traits/geometry_map.rs b/src/traits/geometry_map.rs index 24ee078..5b90c50 100644 --- a/src/traits/geometry_map.rs +++ b/src/traits/geometry_map.rs @@ -1,6 +1,6 @@ //! Map from reference to physical space. -use crate::types::RealScalar; +use crate::types::Scalar; /// A geometry map allows the computation of maps from reference to physical space and their derivatives. /// @@ -11,7 +11,7 @@ use crate::types::RealScalar; /// - The jacobians, transformation determinants and the normals of the physical entity. pub trait GeometryMap { /// Scalar type - type T: RealScalar; + type T: Scalar; /// The topoloical dimension of the entity being mapped. /// diff --git a/src/traits/grid.rs b/src/traits/grid.rs index dea05ff..7a1e96f 100644 --- a/src/traits/grid.rs +++ b/src/traits/grid.rs @@ -2,7 +2,7 @@ use super::{Entity, GeometryMap}; #[cfg(feature = "mpi")] use crate::types::GraphPartitioner; -use crate::types::{Ownership, RealScalar}; +use crate::types::{Ownership, Scalar}; #[cfg(feature = "mpi")] use mpi::traits::Communicator; #[cfg(feature = "mpi")] @@ -16,7 +16,7 @@ use std::rc::Rc; /// A grid provides access to entities, their geometrical and their topological properties. pub trait Grid { /// Scalar type - type T: RealScalar; + type T: Scalar; /// Type used as identifier of different entity types type Entity<'a>: Entity @@ -109,7 +109,7 @@ pub trait Grid { #[cfg(feature = "mpi")] pub trait ParallelGrid { /// Type of the Grid - type T: RealScalar; + type T: Scalar; /// Local grid type type LocalGrid: Grid; diff --git a/src/types.rs b/src/types.rs index d674bc1..98f73d8 100644 --- a/src/types.rs +++ b/src/types.rs @@ -1,17 +1,15 @@ //! Types #[cfg(feature = "mpi")] use mpi::traits::Equivalence; -use num::Float; use rlst::{ RlstScalar, dense::linalg::lapack::interface::{getrf::Getrf, getri::Getri}, }; -/// A real scalar -pub trait RealScalar: Float + RlstScalar + Getrf + Getri {} +/// A scalar. +pub trait Scalar: RlstScalar + Getrf + Getri {} -impl RealScalar for f32 {} -impl RealScalar for f64 {} +impl Scalar for T {} /// A (cell, local index) pair ///