@@ -195,60 +195,33 @@ where
195195 fn try_connectivity_from_msh_element ( element : & mshio:: Element < u64 > ) -> eyre:: Result < Self > ;
196196}
197197
198- impl MshConnectivity for Tri3d2Connectivity {
199- fn msh_element_type ( ) -> mshio:: ElementType {
200- mshio:: ElementType :: Tri3
201- }
202-
203- fn reference_dim ( ) -> usize {
204- 2
205- }
206-
207- fn try_connectivity_from_msh_element ( element : & mshio:: Element < u64 > ) -> eyre:: Result < Self > {
208- Ok ( Self ( [
209- element. nodes [ 0 ] as usize - 1 ,
210- element. nodes [ 1 ] as usize - 1 ,
211- element. nodes [ 2 ] as usize - 1 ,
212- ] ) )
213- }
214- }
215-
216- impl MshConnectivity for Tri3d3Connectivity {
217- fn msh_element_type ( ) -> mshio:: ElementType {
218- mshio:: ElementType :: Tri3
219- }
198+ macro_rules! impl_msh_connectivity {
199+ ( $connectivity: ident, $msh_type: ident, num_nodes = $num_nodes: literal) => {
200+ impl MshConnectivity for $connectivity {
201+ fn msh_element_type( ) -> mshio:: ElementType {
202+ mshio:: ElementType :: $msh_type
203+ }
220204
221- fn reference_dim ( ) -> usize {
222- 3
223- }
205+ fn reference_dim( ) -> usize {
206+ use crate :: element:: ElementConnectivity ;
207+ <$connectivity as ElementConnectivity :: <f64 >>:: ReferenceDim :: dim( )
208+ }
224209
225- fn try_connectivity_from_msh_element ( element : & mshio:: Element < u64 > ) -> eyre:: Result < Self > {
226- Ok ( Self ( [
227- element. nodes [ 0 ] as usize - 1 ,
228- element. nodes [ 1 ] as usize - 1 ,
229- element. nodes [ 2 ] as usize - 1 ,
230- ] ) )
231- }
210+ fn try_connectivity_from_msh_element( element: & mshio:: Element <u64 >) -> eyre:: Result <Self > {
211+ assert_eq!( element. nodes. len( ) , $num_nodes, "number of msh element nodes have to match with connectivity" ) ;
212+ let mut nodes = [ 0 ; $num_nodes] ;
213+ for i in 0 ..$num_nodes {
214+ nodes[ i] = element. nodes[ i] as usize - 1 ;
215+ }
216+ Ok ( Self ( nodes) )
217+ }
218+ }
219+ } ;
232220}
233221
234- impl MshConnectivity for Tet4Connectivity {
235- fn msh_element_type ( ) -> mshio:: ElementType {
236- mshio:: ElementType :: Tet4
237- }
238-
239- fn reference_dim ( ) -> usize {
240- 3
241- }
242-
243- fn try_connectivity_from_msh_element ( element : & mshio:: Element < u64 > ) -> eyre:: Result < Self > {
244- Ok ( Self ( [
245- element. nodes [ 0 ] as usize - 1 ,
246- element. nodes [ 1 ] as usize - 1 ,
247- element. nodes [ 2 ] as usize - 1 ,
248- element. nodes [ 3 ] as usize - 1 ,
249- ] ) )
250- }
251- }
222+ impl_msh_connectivity ! ( Tri3d2Connectivity , Tri3 , num_nodes = 3 ) ;
223+ impl_msh_connectivity ! ( Tri3d3Connectivity , Tri3 , num_nodes = 3 ) ;
224+ impl_msh_connectivity ! ( Tet4Connectivity , Tet4 , num_nodes = 4 ) ;
252225
253226#[ cfg( test) ]
254227mod msh_tests {
0 commit comments