Trait Domain

pub trait Domain<C, S, Ci = Vec<C>> {
    type SubDomainIndex;
    type VoxelIndex;

    // Required method
    fn decompose(
        self,
        n_subdomains: NonZero<usize>,
        cells: Ci,
    ) -> Result<DecomposedDomain<Self::SubDomainIndex, S, C>, DecomposeError>;
}
Expand description

Provides an abstraction of the physical total simulation domain.

cellular_raza uses domain-decomposition algorithms to split up the computational workload over multiple physical regions. That’s why the domain itself is mostly responsible for being deconstructed into smaller SubDomains which can then be used to numerically solve our system.

This trait can be automatically implemented when the SortCells, DomainRngSeed, and DomainCreateSubDomains are satisfied together with a small number of trait bounds to hash and compare indices.

Required Associated Types§

type SubDomainIndex

Subdomains can be identified by their unique SubDomainIndex. The backend uses this property to construct a mapping (graph) between subdomains.

type VoxelIndex

Similarly to the SubDomainIndex, voxels can be accessed by their unique index. The backend will use this information to construct a mapping (graph) between voxels inside their respective subdomains.

Required Methods§

fn decompose( self, n_subdomains: NonZero<usize>, cells: Ci, ) -> Result<DecomposedDomain<Self::SubDomainIndex, S, C>, DecomposeError>

Deconstructs the Domain into its respective subdomains.

When using the blanket implementation of this function, the following steps are carried out: Its functionality consists of the following steps:

  1. Decompose the Domain into Subdomains
  2. Build a neighbor map between SubDomains
  3. Sort cells to their respective SubDomain However, to increase performance or avoid trait bounds, one can also opt to implement this trait directly.

Implementors§

§

impl<C, Ci, F, const D: usize> Domain<C, CartesianSubDomain<F, D>, Ci> for CartesianCuboid<F, D>
where C: Position<Matrix<F, Const<D>, Const<1>, ArrayStorage<F, D, 1>>>, F: 'static + Float<Output = F> + Copy + Debug + FromPrimitive + ToPrimitive + SubAssign + Div + DivAssign, Ci: IntoIterator<Item = C>,

§

impl<C, I> Domain<C, CartesianSubDomain1, I> for CartesianCuboid1New
where I: IntoIterator<Item = C>, C: Position<Matrix<f64, Const<1>, Const<1>, ArrayStorage<f64, 1, 1>>>,

§

impl<C, I> Domain<C, CartesianSubDomain1F32, I> for CartesianCuboid1NewF32
where I: IntoIterator<Item = C>, C: Position<Matrix<f32, Const<1>, Const<1>, ArrayStorage<f32, 1, 1>>>,

§

impl<C, I> Domain<C, CartesianSubDomain2, I> for CartesianCuboid2New
where I: IntoIterator<Item = C>, C: Position<Matrix<f64, Const<2>, Const<1>, ArrayStorage<f64, 2, 1>>>,

§

impl<C, I> Domain<C, CartesianSubDomain2F32, I> for CartesianCuboid2NewF32
where I: IntoIterator<Item = C>, C: Position<Matrix<f32, Const<2>, Const<1>, ArrayStorage<f32, 2, 1>>>,

§

impl<C, I> Domain<C, CartesianSubDomain3, I> for CartesianCuboid3New
where I: IntoIterator<Item = C>, C: Position<Matrix<f64, Const<3>, Const<1>, ArrayStorage<f64, 3, 1>>>,

§

impl<C, I> Domain<C, CartesianSubDomain3F32, I> for CartesianCuboid3NewF32
where I: IntoIterator<Item = C>, C: Position<Matrix<f32, Const<3>, Const<1>, ArrayStorage<f32, 3, 1>>>,

§

impl<F, const D: usize, __cr_private_Cell, __cr_private_SubDomain, __cr_private_CellIterator> Domain<__cr_private_Cell, __cr_private_SubDomain, __cr_private_CellIterator> for CartesianCuboidRods<F, D>
where CartesianCuboidRods<F, D>: DomainRngSeed + DomainCreateSubDomains<__cr_private_SubDomain> + SortCells<__cr_private_Cell, VoxelIndex = <CartesianCuboidRods<F, D> as DomainCreateSubDomains<__cr_private_SubDomain>>::VoxelIndex>, __cr_private_SubDomain: SubDomain<VoxelIndex = <CartesianCuboidRods<F, D> as DomainCreateSubDomains<__cr_private_SubDomain>>::VoxelIndex>, <CartesianCuboidRods<F, D> as DomainCreateSubDomains<__cr_private_SubDomain>>::SubDomainIndex: Clone + Hash + Eq + Ord, <CartesianCuboidRods<F, D> as DomainCreateSubDomains<__cr_private_SubDomain>>::VoxelIndex: Clone + Hash + Eq + Ord, __cr_private_CellIterator: IntoIterator<Item = __cr_private_Cell>,

§

type SubDomainIndex = <CartesianCuboidRods<F, D> as DomainCreateSubDomains<__cr_private_SubDomain>>::SubDomainIndex

§

type VoxelIndex = <CartesianCuboidRods<F, D> as DomainCreateSubDomains<__cr_private_SubDomain>>::VoxelIndex