1#[cfg(feature = "mpi")]
3use mpi::traits::Equivalence;
4use rlst::{DynArray, RlstScalar};
5use strum_macros::EnumIter;
6
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
10#[repr(u8)]
11pub enum Continuity {
12 Standard,
18 Discontinuous,
20}
21
22#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
24#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
25#[repr(u8)]
26pub enum MapType {
27 Identity,
29 CovariantPiola,
33 ContravariantPiola,
37 L2Piola,
39}
40
41#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
43#[derive(EnumIter, Debug, PartialEq, Eq, Clone, Copy, Hash)]
44#[repr(u8)]
45pub enum ReferenceCellType {
46 Point,
48 Interval,
50 Triangle,
52 Quadrilateral,
54 Tetrahedron,
56 Hexahedron,
58 Prism,
60 Pyramid,
62}
63
64#[cfg(feature = "mpi")]
65unsafe impl Equivalence for Continuity {
66 type Out = <u8 as Equivalence>::Out;
67 fn equivalent_datatype() -> <u8 as Equivalence>::Out {
68 <u8 as Equivalence>::equivalent_datatype()
69 }
70}
71#[cfg(feature = "mpi")]
72unsafe impl Equivalence for MapType {
73 type Out = <u8 as Equivalence>::Out;
74 fn equivalent_datatype() -> <u8 as Equivalence>::Out {
75 <u8 as Equivalence>::equivalent_datatype()
76 }
77}
78#[cfg(feature = "mpi")]
79unsafe impl Equivalence for ReferenceCellType {
80 type Out = <u8 as Equivalence>::Out;
81 fn equivalent_datatype() -> <u8 as Equivalence>::Out {
82 <u8 as Equivalence>::equivalent_datatype()
83 }
84}
85
86#[derive(Debug)]
88#[repr(u8)]
89pub enum DofTransformation<T: RlstScalar> {
90 Identity,
92 Permutation(Vec<usize>),
94 Transformation(DynArray<T, 2>, Vec<usize>),
96}
97
98#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
100#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
101#[repr(u8)]
102pub enum Transformation {
103 Reflection,
105 Rotation,
107}