30 #define __GmshEnums_H 1
32 #include <boost/bimap.hpp>
33 #include <boost/assign/list_of.hpp>
38 GMSH_PARTITIONER_CHACO = 1,
39 GMSH_PARTITIONER_METIS = 2
43 extern const GMSH_PARTITIONER GMSH_PARTITIONER_DEFAULT;
57 GMSH_FORMAT_ASCII = 0,
58 GMSH_FORMAT_BINARY = 1
115 template<
typename ConvexType>
119 typedef boost::bimap<int,int> id_type;
142 int fromGmshId(
int p )
const
144 return M_id.right.at( p );
150 int toGmshId(
int p )
const
152 return M_id.left.at( p );
158 int id(
int p )
const
160 return M_id.left.at( p );
185 template<
typename ConvexType>
186 GmshOrdering<ConvexType>::GmshOrdering()
188 using namespace boost::assign;
189 typedef typename id_type::relation relation;
191 if ( ConvexType::nDim == 0 )
195 for (
int i = 0; i < ConvexType::numPoints; ++i )
196 M_id.insert( id_type::value_type( i, i ) );
199 else if ( ConvexType::is_simplex )
201 if ( ConvexType::nDim == 1 )
203 M_type = detail::line_type[ConvexType::nOrder];
205 for (
int i = 0; i < ConvexType::numPoints; ++i )
206 M_id.insert( id_type::value_type( i, i ) );
209 if ( ConvexType::nDim == 2 )
211 M_type = detail::triangle_type[ConvexType::nOrder];
213 if ( ConvexType::nOrder == 1 )
214 M_id = list_of<relation>( 0,0 )( 1,1 )( 2,2 );
217 if ( ConvexType::nOrder == 2 )
218 M_id = list_of<relation>( 0,0 )( 1,1 )( 2,2 )( 3,4 )( 4,5 )( 5,3 );
221 if ( ConvexType::nOrder == 3 )
222 M_id = list_of<relation>( 0,0 )( 1,1 )( 2,2 )( 3,5 )( 4,6 )( 5,7 )( 6,8 )( 7,3 )( 8,4 )( 9,9 );
225 if ( ConvexType::nOrder == 4 )
226 M_id = list_of<relation>( 0,0 )( 1,1 )( 2,2 )( 3,6 )( 4,7 )( 5,8 )( 6,9 )( 7,10 )( 8,11 )( 9,3 )( 10,4 )( 11,5 )( 12,12 )( 13,13 )( 14,14 );
229 if ( ConvexType::nOrder == 5 )
230 M_id = list_of<relation>( 0,0 )( 1,1 )( 2,2 )( 3,7 )( 4,8 )( 5,9 )( 6,10 )( 7,11 )( 8,12 )( 9,13 )( 10,14 )( 11,3 )( 12,4 )( 13,5 )( 14,6 )( 15,15 )( 16,18 )( 17,16 )( 18,20 )( 19,19 )( 20,17 );
235 if ( ConvexType::nDim == 3 )
237 M_type = detail::tetrahedron_type[ConvexType::nOrder];
239 if ( ConvexType::nOrder == 1 )
240 M_id = list_of<relation>
241 ( 0,0 )( 1,1 )( 2,2 )( 3,3 )
245 if ( ConvexType::nOrder == 2 )
246 M_id = list_of<relation>
247 ( 0,0 )( 1,1 )( 2,2 )( 3,3 )
257 if ( ConvexType::nOrder == 3 )
258 M_id = list_of<relation>
259 ( 0,0 )( 1,1 )( 2,2 )( 3,3 )
272 if ( ConvexType::nOrder == 4 )
273 M_id = list_of<relation>
274 ( 0,0 )( 1,1 )( 2,2 )( 3,3 )
275 ( 4,7 )( 5,8 )( 6,9 )
276 ( 7,10 )( 8,11 )( 9,12 )
277 ( 10,4 )( 11,5 )( 12,6 )
278 ( 13,15 )( 14,14 )( 15,13 )
279 ( 16,21 )( 17,20 )( 18,19 )
280 ( 19,18 )( 20,17 )( 21,16 )
281 ( 22,32 )( 23,33 )( 24,31 )
282 ( 25,28 )( 26,30 )( 27,29 )
283 ( 28,25 )( 29,26 )( 30,27 )
284 ( 31,22 )( 32,24 )( 33,23 )
288 if ( ConvexType::nOrder > 4 )
289 for (
int i = 0; i < ConvexType::numPoints; ++i )
290 M_id.insert( id_type::value_type( i, i ) );
298 if ( ConvexType::nDim == 1 )
300 M_type = detail::line_type[ConvexType::nOrder];
302 for (
int i = 0; i < ConvexType::numPoints; ++i )
303 M_id.insert( id_type::value_type( i, i ) );
306 if ( ConvexType::nDim == 2 )
308 M_type = detail::quad_type[ConvexType::nOrder];
310 if ( ConvexType::nOrder == 1 )
311 M_id = list_of<relation>( 0,0 )( 1,1 )( 2,2 )( 3,3 );
314 if ( ConvexType::nOrder == 2 )
315 M_id = list_of<relation>( 0,0 )( 1,1 )( 2,2 )( 3,3 )
324 if ( ConvexType::nDim == 3 )
326 M_type = detail::hexa_type[ConvexType::nOrder];
328 if ( ConvexType::nOrder == 1 )
329 M_id = list_of<relation>( 0,0 )( 1,1 )( 2,2 )( 3,3 )( 4,4 )( 5,5 )( 6,6 )( 7,7 );
331 if ( ConvexType::nOrder == 2 )
332 M_id = list_of<relation>
333 ( 0,0 )( 1,1 )( 2,2 )( 3,3 )( 4,4 )( 5,5 )( 6,6 )( 7,7 )
triangle of order 3
Definition: gmshenums.hpp:100
triangle of order 5
Definition: gmshenums.hpp:104
GMSH_ENTITY
Definition: gmshenums.hpp:67
tetra of order 4
Definition: gmshenums.hpp:111
line of order 4
Definition: gmshenums.hpp:107
Second order prism (18 nodes: 6 associated.
Definition: gmshenums.hpp:91
triangle of order 4
Definition: gmshenums.hpp:101
line of order 5
Definition: gmshenums.hpp:108
tetra of order 5
Definition: gmshenums.hpp:112
Second order hexahedron (27 nodes: 8.
Definition: gmshenums.hpp:87
line of order 3
Definition: gmshenums.hpp:106
Prism (6 nodes).
Definition: gmshenums.hpp:74
Quadrangle (4 nodes).
Definition: gmshenums.hpp:71
tetra of order 3
Definition: gmshenums.hpp:110
Tetrahedron (4 nodes).
Definition: gmshenums.hpp:72
Line (2 nodes).
Definition: gmshenums.hpp:69
Second order triangle (6 nodes: 3.
Definition: gmshenums.hpp:78
Point (1 node).
Definition: gmshenums.hpp:97
Second order line (3 nodes: 2 associated.
Definition: gmshenums.hpp:76
Pyramid (5 nodes).
Definition: gmshenums.hpp:75
Second order quadrangle (9 nodes: 4.
Definition: gmshenums.hpp:81
triangle of order 3
Definition: gmshenums.hpp:99
Hexahedron (8 nodes).
Definition: gmshenums.hpp:73
Second order tetrahedron (10 nodes:
Definition: gmshenums.hpp:84
Triangle (3 nodes).
Definition: gmshenums.hpp:70
triangle of order 4
Definition: gmshenums.hpp:102
triangle of order 5
Definition: gmshenums.hpp:103
Second order pyramid (14 nodes: 5.
Definition: gmshenums.hpp:94