#[cfg(feature = "mpi")]
use mpi::traits::Equivalence;
use rlst::{DynArray, RlstScalar};
use strum_macros::EnumIter;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
#[repr(u8)]
pub enum Continuity {
Standard,
Discontinuous,
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
#[repr(u8)]
pub enum MapType {
Identity,
CovariantPiola,
ContravariantPiola,
L2Piola,
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(EnumIter, Debug, PartialEq, Eq, Clone, Copy, Hash)]
#[repr(u8)]
pub enum ReferenceCellType {
Point,
Interval,
Triangle,
Quadrilateral,
Tetrahedron,
Hexahedron,
Prism,
Pyramid,
}
#[cfg(feature = "mpi")]
unsafe impl Equivalence for Continuity {
type Out = <u8 as Equivalence>::Out;
fn equivalent_datatype() -> <u8 as Equivalence>::Out {
<u8 as Equivalence>::equivalent_datatype()
}
}
#[cfg(feature = "mpi")]
unsafe impl Equivalence for MapType {
type Out = <u8 as Equivalence>::Out;
fn equivalent_datatype() -> <u8 as Equivalence>::Out {
<u8 as Equivalence>::equivalent_datatype()
}
}
#[cfg(feature = "mpi")]
unsafe impl Equivalence for ReferenceCellType {
type Out = <u8 as Equivalence>::Out;
fn equivalent_datatype() -> <u8 as Equivalence>::Out {
<u8 as Equivalence>::equivalent_datatype()
}
}
#[derive(Debug)]
#[repr(u8)]
pub enum DofTransformation<T: RlstScalar> {
Identity,
Permutation(Vec<usize>),
Transformation(DynArray<T, 2>, Vec<usize>),
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
#[repr(u8)]
pub enum Transformation {
Reflection,
Rotation,
}