conspire/geometry/mesh/connectivity/
mod.rs1pub mod base;
2pub mod iter;
3pub mod polytopal;
4pub mod primitive;
5
6use crate::{
7 geometry::mesh::connectivity::{
8 polytopal::PolytopalConnectivity, primitive::PrimitiveConnectivity,
9 },
10 math::Set,
11};
12
13pub enum Connectivity {
14 Hexahedral(PrimitiveConnectivity<3, 8>),
15 Polyhedral(PolytopalConnectivity<3>),
16 Polygonal(PolytopalConnectivity<2>),
17 Pyramidal(PrimitiveConnectivity<3, 5>),
18 Quadrilateral(PrimitiveConnectivity<2, 4>),
19 Tetrahedral(PrimitiveConnectivity<3, 4>),
20 Triangular(PrimitiveConnectivity<2, 3>),
21 Wedge(PrimitiveConnectivity<3, 6>),
22}
23
24pub type Connectivities = Set<Vec<Connectivity>>;
25
26macro_rules! try_from_connectivity {
27 ($variant: ident, $m: literal, $n: literal, $error: literal) => {
28 impl TryFrom<Connectivity> for PrimitiveConnectivity<$m, $n> {
29 type Error = &'static str;
30 fn try_from(connectivity: Connectivity) -> Result<Self, Self::Error> {
31 match connectivity {
32 Connectivity::$variant(connectivity) => Ok(connectivity),
33 _ => Err($error),
34 }
35 }
36 }
37 };
38}
39try_from_connectivity!(Hexahedral, 3, 8, "block is not hexahedral");
40try_from_connectivity!(Pyramidal, 3, 5, "block is not pyramidal");
41try_from_connectivity!(Quadrilateral, 2, 4, "block is not quadrilateral");
42try_from_connectivity!(Tetrahedral, 3, 4, "block is not tetrahedral");
43try_from_connectivity!(Triangular, 2, 3, "block is not triangular");
44try_from_connectivity!(Wedge, 3, 6, "block is not a wedge");
45
46impl TryFrom<Connectivity> for PolytopalConnectivity<3> {
47 type Error = &'static str;
48 fn try_from(connectivity: Connectivity) -> Result<Self, Self::Error> {
49 match connectivity {
50 Connectivity::Polyhedral(connectivity) => Ok(connectivity),
51 _ => Err("block is not polyhedral"),
52 }
53 }
54}
55
56impl TryFrom<Connectivity> for PolytopalConnectivity<2> {
57 type Error = &'static str;
58 fn try_from(connectivity: Connectivity) -> Result<Self, Self::Error> {
59 match connectivity {
60 Connectivity::Polygonal(connectivity) => Ok(connectivity),
61 _ => Err("block is not polygonal"),
62 }
63 }
64}