Mesh Oriented datABase  (version 5.5.0)
An array-based unstructured mesh library
MBCNArrays.hpp
Go to the documentation of this file.
1 /**
2  * MOAB, a Mesh-Oriented datABase, is a software component for creating,
3  * storing and accessing finite element mesh data.
4  *
5  * Copyright 2004 Sandia Corporation. Under the terms of Contract
6  * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
7  * retains certain rights in this software.
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  */
15 
16 #ifndef MBCN_ARRAYS_HPP
17 #define MBCN_ARRAYS_HPP
18 
19 namespace moab
20 {
21 
22 const CN::ConnMap CN::mConnectivityMap[MBMAXTYPE][3] = {
23  // vertex-edge
24  { { 0,
25  0,
26  { 0 },
29  { { 0 } } },
30  // vertex-face
31  { 0,
32  0,
33  { 0 },
36  { { 0 } } },
37  // vertex-region
38  { 0,
39  0,
40  { 0 },
43  { { 0 } } } },
44 
45  // edge-edge
46  { { 1,
47  1,
48  { 2 },
51  { { 0, 1 } } },
52  // edge-face
53  { 1,
54  0,
55  { 0 },
58  { { 0 } } },
59  // edge-region
60  { 1,
61  0,
62  { 0 },
65  { { 0 } } } },
66 
67  // tri-edge
68  { { 2,
69  3,
70  { 2, 2, 2 },
73  { { 0, 1 }, { 1, 2 }, { 2, 0 } } },
74  // tri-face
75  { 2,
76  1,
77  { 3 },
80  { { 0, 1, 2 } } },
81  // tri-region
82  { 2,
83  0,
84  { 0 },
87  { { 0 } } } },
88 
89  // quad-edge
90  { { 2,
91  4,
92  { 2, 2, 2, 2 },
94  MBMAXTYPE },
95  { { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 0 } } },
96  // quad-face
97  { 2,
98  1,
99  { 4 },
101  MBMAXTYPE, MBMAXTYPE },
102  { { 0, 1, 2, 3 } } },
103  // quad-region
104  { 2,
105  0,
106  { 0 },
108  MBMAXTYPE, MBMAXTYPE },
109  { { 0 } } } },
110 
111  // polygon-edge
112  { { 2,
113  0,
114  { 0 },
116  MBMAXTYPE },
117  { { 0 } } },
118  // polygon-face
119  { 2,
120  1,
121  { 0 },
123  MBMAXTYPE, MBMAXTYPE },
124  { { 0 } } },
125  // polygon-region
126  { 2,
127  0,
128  { 0 },
130  MBMAXTYPE, MBMAXTYPE },
131  { { 0 } } } },
132 
133  // tet-edge
134  { { 3,
135  6,
136  { 2, 2, 2, 2, 2, 2 },
138  MBMAXTYPE },
139  { { 0, 1 }, { 1, 2 }, { 2, 0 }, { 0, 3 }, { 1, 3 }, { 2, 3 } } },
140  // tet-face
141  { 3,
142  4,
143  { 3, 3, 3, 3 },
145  MBMAXTYPE },
146  { { 0, 1, 3 }, { 1, 2, 3 }, { 0, 3, 2 }, { 0, 2, 1 } } },
147  // tet-tet
148  { 3,
149  1,
150  { 4 },
152  MBMAXTYPE, MBMAXTYPE },
153  { { 0, 1, 2, 3 } } } },
154 
155  // pyramid-edge
156  { { 3,
157  8,
158  { 2, 2, 2, 2, 2, 2, 2, 2 },
160  { { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 0 }, { 0, 4 }, { 1, 4 }, { 2, 4 }, { 3, 4 } } },
161  // pyramid-face
162  { 3,
163  5,
164  { 3, 3, 3, 3, 4 },
166  MBMAXTYPE },
167  { { 0, 1, 4 }, { 1, 2, 4 }, { 2, 3, 4 }, { 3, 0, 4 }, { 0, 3, 2, 1 } } },
168  // pyramid-pyramid
169  { 3,
170  1,
171  { 5 },
173  MBMAXTYPE, MBMAXTYPE },
174  { { 0, 1, 2, 3, 4 } } } },
175 
176  // wedge-edge
177  { { 3,
178  9,
179  { 2, 2, 2, 2, 2, 2, 2, 2, 2 },
181  { { 0, 1 }, { 1, 2 }, { 2, 0 }, { 0, 3 }, { 1, 4 }, { 2, 5 }, { 3, 4 }, { 4, 5 }, { 5, 3 } } },
182  // wedge-face
183  { 3,
184  5,
185  { 4, 4, 4, 3, 3 },
187  MBMAXTYPE },
188  { { 0, 1, 4, 3 }, { 1, 2, 5, 4 }, { 0, 3, 5, 2 }, { 0, 2, 1 }, { 3, 4, 5 } } },
189  // wedge-wedge
190  { 3,
191  1,
192  { 6 },
194  MBMAXTYPE, MBMAXTYPE },
195  { { 0, 1, 2, 3, 4, 5 } } } },
196 
197  // knife-edge
198  { { 3,
199  10,
200  { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
202  { { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 0 }, { 0, 4 }, { 1, 5 }, { 2, 6 }, { 3, 5 }, { 4, 5 }, { 5, 6 } } },
203  // knife-face
204  { 3,
205  5,
206  { 4, 4, 4, 4, 4 },
208  MBMAXTYPE },
209  { { 0, 1, 5, 4 }, { 1, 2, 6, 5 }, { 2, 3, 5, 6 }, { 3, 0, 4, 5 }, { 0, 3, 2, 1 } } },
210  // knife-knife
211  { 3,
212  1,
213  { 7 },
215  MBMAXTYPE, MBMAXTYPE },
216  { { 0, 1, 2, 3, 4, 5, 6 } } } },
217 
218  // hex-edge
219  { { 3,
220  12,
221  { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
223  { { 0, 1 },
224  { 1, 2 },
225  { 2, 3 },
226  { 3, 0 },
227  { 0, 4 },
228  { 1, 5 },
229  { 2, 6 },
230  { 3, 7 },
231  { 4, 5 },
232  { 5, 6 },
233  { 6, 7 },
234  { 7, 4 } } },
235  // hex-face
236  { 3,
237  6,
238  { 4, 4, 4, 4, 4, 4 },
240  MBMAXTYPE },
241  { { 0, 1, 5, 4 }, { 1, 2, 6, 5 }, { 2, 3, 7, 6 }, { 3, 0, 4, 7 }, { 0, 3, 2, 1 }, { 4, 5, 6, 7 } } },
242  // hex-hex
243  { 3,
244  1,
245  { 8 },
247  MBMAXTYPE, MBMAXTYPE },
248  { { 0, 1, 2, 3, 4, 5, 6, 7 } } } },
249 
250  // polyhedron-edge
251  { { 3,
252  0,
253  { 0 },
255  MBMAXTYPE, MBMAXTYPE },
256  { { 0 } } },
257  // polyhedron-face
258  { 3,
259  0,
260  { 0 },
262  MBMAXTYPE, MBMAXTYPE },
263  { { 0 } } },
264  // polyhedron-polyhedron
265  { 3,
266  1,
267  { 0 },
270  { { 0 } } } },
271 
272  // meshset-edge
273  { { 4,
274  0,
275  { 0 },
277  MBMAXTYPE, MBMAXTYPE },
278  { { 0 } } }, // not handled yet?
279  // meshset-face
280  { 4,
281  0,
282  { 0 },
284  MBMAXTYPE, MBMAXTYPE },
285  { { 0 } } }, // not handled yet?
286  // meshset-region
287  { 4,
288  0,
289  { 0 },
291  MBMAXTYPE, MBMAXTYPE },
292  { { 0 } } } } // not handled yet?
293 
294  // maxtype
295 };
296 
297 const CN::UpConnMap CN::mUpConnMap[MBMAXTYPE][4][4] = {
298  {
299  // type MBVERTEX
300  { { { 1 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } }, // source dim 0
301  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } }, // source dim 1
302  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } }, // source dim 2
303  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } }, // source dim 3
304  },
305 
306  {
307  // type MBEDGE
308  {
309  // source dim 0
310  { // target dim 0
311  { 1, 1 }, // 1 connected vertices for all vertices
312  { { 1 }, { 0 } } }, // end target dimension 0
313  { // target dimension 1
314  { 1, 1 }, // 1 connected edges for all vertices
315  { { 0 }, { 0 } } }, // end target dimension 1
316  { // target dimension 2
317  { 0 }, // 0 connected faces for all vertices
318  { { 0 } } }, // end target dimension 2
319  { // target dimension 3
320  { 0 }, // 0 connected elements for all vertices
321  { { 0 } } } // end target dimension 3
322  }, // end source dim 0
323 
324  {
325  // source dim 1
326  { // target dim 0
327  { 2 }, // 2 vertices for all edges
328  { { 0, 1 } } }, // end target dim 0
329  { // target dim 1
330  { 0 }, // 0 edges for all edges
331  { { 0 } } }, // end target dim 1
332  { // target dim 2
333  { 0 }, // 2 faces for all edges
334  { { 0 } } }, // end target dim 2
335  { // target dimension 3
336  { 0 }, // 0 connected elements for all vertices
337  { { 0 } } } // end target dimension 3
338  }, // end source dim 1
339 
340  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } }, // source dim 2
341  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } }, // source dim 3
342  }, // end type MBEDGE
343 
344  {
345  // type MBTRI
346  {
347  // source dim 0
348  { // target dim 0
349  { 2, 2, 2 }, // 2 connected vertices for all vertices
350  { { 1, 2 }, { 0, 2 }, { 0, 1 } } }, // end target dimension 0
351  { // target dimension 1
352  { 2, 2, 2 }, // 2 connected edges for all vertices
353  { { 0, 2 }, { 0, 1 }, { 1, 2 } } }, // end target dimension 1
354  { // target dimension 2
355  { 1, 1, 1 }, // 1 connected faces for all vertices
356  { { 0 }, { 0 }, { 0 } } }, // end target dimension 2
357  { // target dimension 3
358  { 0 }, // 0 connected elements for all vertices
359  { { 0 } } } // end target dimension 3
360  }, // end source dim 0
361 
362  {
363  // source dim 1
364  { // target dim 0
365  { 2, 2, 2 }, // 2 vertices for all edges
366  { { 0, 1 }, { 1, 2 }, { 0, 2 } } }, // end target dim 0
367  { // target dim 1
368  { 2, 2, 2 }, // 2 edges for all edges
369  { { 1, 2 }, { 0, 2 }, { 0, 1 } } }, // end target dim 1
370  { // target dim 2
371  { 1, 1, 1 }, // 1 faces for all edges
372  { { 0 }, { 0 }, { 0 } } }, // end target dim 2
373  { // target dimension 3
374  { 0 }, // 0 connected elements for all vertices
375  { { 0 } } } // end target dimension 3
376  }, // end source dim 1
377 
378  {
379  // source dim 2
380  { // target dim 0
381  { 3 }, // 3 vertices for all faces
382  { { 0, 1, 2 } } }, // end target dim 0
383  { // target dim 1
384  { 3 }, // 3 edges for all faces
385  { { 0, 1, 2 } } }, // end target dim 1
386  { // target dim 2
387  { 0 }, // 0 faces for all faces
388  { { 0 } } }, // end target dim 2
389  { // target dimension 3
390  { 0 }, // 0 connected elements for all vertices
391  { { 0 } } } // end target dimension 3
392  }, // end source dim 2
393 
394  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } } // source dim 3
395  }, // end type MBTRI
396 
397  {
398  // type MBQUAD
399  {
400  // source dim 0
401  { // target dim 0
402  { 2, 2, 2, 2 }, // 2 connected vertices for all vertices
403  { { 1, 3 }, { 0, 2 }, { 2, 3 }, { 0, 2 } } }, // end target dimension 0
404  { // target dimension 1
405  { 2, 2, 2, 2 }, // 2 connected edges for all vertices
406  { { 0, 3 }, { 0, 1 }, { 1, 2 }, { 2, 3 } } }, // end target dimension 1
407  { // target dimension 2
408  { 1, 1, 1, 1 }, // 1 connected faces for all vertices
409  { { 0 }, { 0 }, { 0 }, { 0 } } }, // end target dimension 2
410  { // target dimension 3
411  { 0 }, // 0 connected elements for all vertices
412  { { 0 } } } // end target dimension 3
413  }, // end source dim 0
414 
415  {
416  // source dim 1
417  { // target dim 0
418  { 2, 2, 2, 2 }, // 2 vertices for all edges
419  { { 0, 1 }, { 1, 2 }, { 2, 3 }, { 0, 3 } } }, // end target dim 0
420  { // target dim 1
421  { 2, 2, 2, 2 }, // 2 edges for all edges
422  { { 1, 3 }, { 0, 2 }, { 1, 3 }, { 0, 2 } } }, // end target dim 1
423  { // target dim 2
424  { 1, 1, 1, 1 }, // 1 faces for all edges
425  { { 0 }, { 0 }, { 0 }, { 0 } } }, // end target dim 2
426  { // target dimension 3
427  { 0 }, // 0 connected elements for all vertices
428  { { 0 } } } // end target dimension 3
429  }, // end source dim 1
430 
431  {
432  // source dim 2
433  { // target dim 0
434  { 4 }, // 4 vertices for all faces
435  { { 0, 1, 2, 3 } } }, // end target dim 0
436  { // target dim 1
437  { 4 }, // 4 edges for all faces
438  { { 0, 1, 2, 3 } } }, // end target dim 1
439  { // target dim 2
440  { 0 }, // 4 faces for all faces
441  { { 0 } } }, // end target dim 2
442  { // target dimension 3
443  { 0 }, // 0 connected elements for all vertices
444  { { 0 } } } // end target dimension 3
445  }, // end source dim 2
446 
447  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } } // source dim 3
448  }, // end type MBQUAD
449 
450  {
451  // type MBPOLYGON
452  { // source dim 0
453  { // target dim 0
454  { 0 },
455  { { 0 } } },
456  { // target dimension 1
457  { 0 },
458  { { 0 } } },
459  { // target dimension 2
460  { 0 },
461  { { 0 } } },
462  { // target dimension 3
463  { 0 },
464  { { 0 } } } }, // end source dim 0
465 
466  { // source dim 1
467  { // target dim 0
468  { 0 },
469  { { 0 } } },
470  { // target dimension 1
471  { 0 },
472  { { 0 } } },
473  { // target dimension 2
474  { 0 },
475  { { 0 } } },
476  { // target dimension 3
477  { 0 },
478  { { 0 } } } }, // end source dim 1
479 
480  { // source dim 2
481  { // target dim 0
482  { 0 },
483  { { 0 } } },
484  { // target dimension 1
485  { 0 },
486  { { 0 } } },
487  { // target dimension 2
488  { 0 },
489  { { 0 } } },
490  { // target dimension 3
491  { 0 },
492  { { 0 } } } }, // end source dim 2
493 
494  { // source dim 3
495  { // target dim 0
496  { 0 },
497  { { 0 } } },
498  { // target dimension 1
499  { 0 },
500  { { 0 } } },
501  { // target dimension 2
502  { 0 },
503  { { 0 } } },
504  { // target dimension 3
505  { 0 },
506  { { 0 } } } } // end source dim 3
507  }, // end type MBPOLYGON
508 
509  {
510  // type MBTET
511  {
512  // source dim 0
513  { // target dim 0
514  { 3, 3, 3, 3 }, // 3 connected vertices for all vertices
515  { { 1, 2, 3 }, { 0, 2, 3 }, { 0, 1, 3 }, { 0, 1, 2 } } }, // end target dimension 0
516  { // target dimension 1
517  { 3, 3, 3, 3 }, // 3 connected edges for all vertices
518  { { 0, 2, 3 }, { 0, 1, 4 }, { 1, 2, 5 }, { 3, 4, 5 } } }, // end target dimension 1
519  { // target dimension 2
520  { 3, 3, 3, 3 }, // 3 connected faces for all vertices
521  { { 0, 2, 3 }, { 0, 1, 3 }, { 1, 2, 3 }, { 0, 1, 2 } } }, // end target dimension 2
522  { // target dimension 3
523  { 1, 1, 1, 1 }, // 0 connected elements for all vertices
524  { { 0 }, { 0 }, { 0 }, { 0 } } } // end target dimension 3
525  }, // end source dim 0
526 
527  {
528  // source dim 1
529  { // target dim 0
530  { 2, 2, 2, 2, 2, 2 }, // 2 vertices for all edges
531  { { 0, 1 }, { 1, 2 }, { 0, 2 }, { 0, 3 }, { 1, 3 }, { 2, 3 } } }, // end target dim 0
532  { // target dim 1
533  { 4, 4, 4, 4, 4, 4 }, // 4 edges for all edges
534  { { 1, 2, 3, 4 },
535  { 0, 2, 4, 5 },
536  { 0, 1, 3, 5 },
537  { 0, 2, 4, 5 },
538  { 0, 1, 3, 5 },
539  { 1, 2, 3, 4 } } }, // end target dim 1
540  { // target dim 2
541  { 2, 2, 2, 2, 2, 2 }, // 2 faces for all edges
542  { { 0, 3 }, { 1, 3 }, { 2, 3 }, { 0, 2 }, { 0, 1 }, { 1, 2 } } }, // end target dim 2
543  { // target dimension 3
544  { 1, 1, 1, 1, 1, 1 }, // 0 connected elements for all vertices
545  { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } // end target dimension 3
546  }, // end source dim 1
547 
548  {
549  // source dim 2
550  { // target dim 0
551  { 3, 3, 3, 3 }, // 3 vertices for all faces
552  { { 0, 1, 3 }, { 1, 2, 3 }, { 0, 3, 2 }, { 0, 2, 1 } } }, // end target dim 0
553  { // target dim 1
554  { 3, 3, 3, 3 }, // 3 edges for all faces
555  { { 0, 4, 3 }, { 1, 5, 4 }, { 3, 5, 2 }, { 2, 1, 0 } } }, // end target dim 1
556  { // target dim 2
557  { 3, 3, 3, 3 }, // 3 faces for all faces
558  { { 3, 1, 2 }, { 3, 2, 0 }, { 0, 1, 3 }, { 2, 1, 0 } } }, // end target dim 2
559  { // target dimension 3
560  { 1, 1, 1, 1 }, // 0 connected elements for all vertices
561  { { 0 }, { 0 }, { 0 }, { 0 } } } // end target dimension 3
562  }, // end source dim 2
563 
564  {
565  // source dim 3
566  { // target dim 0
567  { 4 }, // 4 vertices for all elements
568  { { 0, 1, 2, 3 } } }, // end target dim 0
569  { // target dim 1
570  { 6 }, // 6 edges for all elements
571  { { 0, 1, 2, 3, 4, 5 } } }, // end target dim 1
572  { // target dim 2
573  { 4 }, // 4 faces for all elements
574  { { 0, 1, 2, 3 } } }, // end target dim 2
575  { // target dimension 3
576  { 0 }, // 0 connected elements for all vertices
577  { { 0 } } } // end target dimension 3
578  } // end source dim 3
579  }, // end type MBTET
580 
581  {
582  // type MBPYRAMID
583  {
584  // source dim 0
585  { // target dim 0
586  { 3, 3, 3, 3, 4 }, // 3 connected vertices for most vertices
587  { { 1, 3, 4 }, { 0, 2, 4 }, { 1, 3, 4 }, { 0, 2, 4 }, { 0, 1, 2, 3 } } }, // end target dimension 0
588  { // target dimension 1
589  { 3, 3, 3, 3, 4 }, // 3 connected edges for most vertices
590  { { 0, 3, 4 }, { 0, 1, 5 }, { 1, 2, 6 }, { 2, 3, 7 }, { 4, 5, 6, 7 } } }, // end target dimension 1
591  { // target dimension 2
592  { 3, 3, 3, 3, 4 }, // 3 connected faces for most vertices
593  { { 0, 3, 4 }, { 0, 1, 4 }, { 1, 2, 4 }, { 2, 3, 4 }, { 0, 1, 2, 3 } } }, // end target dimension 2
594  { // target dimension 3
595  { 1, 1, 1, 1, 1 }, // 0 connected elements for all vertices
596  { { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } // end target dimension 3
597  }, // end source dim 0
598 
599  {
600  // source dim 1
601  { // target dim 0
602  { 2, 2, 2, 2, 2, 2, 2, 2 }, // 2 vertices for all edges
603  { { 0, 1 }, { 1, 2 }, { 2, 3 }, { 0, 3 }, { 0, 4 }, { 1, 4 }, { 2, 4 }, { 3, 4 } } }, // end target dim 0
604  { // target dim 1
605  { 4, 4, 4, 4, 5, 5, 5, 5 }, // 4 edges for some edges, 5 for others
606  { { 1, 3, 4, 5 },
607  { 0, 2, 5, 6 },
608  { 1, 3, 6, 7 },
609  { 0, 2, 4, 7 },
610  { 0, 3, 5, 6, 7 },
611  { 0, 1, 4, 6, 7 },
612  { 1, 2, 4, 5, 7 },
613  { 2, 3, 4, 5, 6 } } }, // end target dim 1
614  { // target dim 2
615  { 2, 2, 2, 2, 2, 2, 2, 2 }, // 2 faces for all edges
616  { { 0, 4 }, { 1, 4 }, { 2, 4 }, { 3, 4 }, { 0, 3 }, { 0, 1 }, { 1, 2 }, { 2, 3 } } }, // end target dim 2
617  { // target dimension 3
618  { 1, 1, 1, 1, 1, 1, 1, 1 }, // 0 connected elements for all vertices
619  { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } // end target dimension
620  // 3
621  }, // end source dim 1
622 
623  {
624  // source dim 2
625  { // target dim 0
626  { 3, 3, 3, 3, 4 }, // 3 vertices for most edges
627  { { 0, 1, 4 }, { 1, 2, 4 }, { 2, 3, 4 }, { 0, 3, 4 }, { 0, 1, 2, 3 } } }, // end target dim 0
628  { // target dim 1
629  { 3, 3, 3, 3, 4 }, // 3 edges for most faces
630  { { 0, 5, 4 }, { 1, 6, 5 }, { 6, 2, 7 }, { 3, 4, 7 }, { 0, 3, 2, 1 } } }, // end target dim 1
631  { // target dim 2
632  { 3, 3, 3, 3, 4 }, // 4 faces for most faces
633  { { 4, 1, 3 }, { 4, 2, 0 }, { 4, 3, 1 }, { 4, 0, 2 }, { 0, 1, 2, 3 } } }, // end target dim 2
634  { // target dimension 3
635  { 1, 1, 1, 1, 1 }, // 0 connected elements for all vertices
636  { { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } // end target dimension 3
637  }, // end source dim 2
638 
639  {
640  // source dim 3
641  { // target dim 0
642  { 5 }, // 5 vertices for all elements
643  { { 0, 1, 2, 3, 4 } } }, // end target dim 0
644  { // target dim 1
645  { 8 }, // 8 edges for all elements
646  { { 0, 1, 2, 3, 4, 5, 6, 7 } } }, // end target dim 1
647  { // target dim 2
648  { 5 }, // 5 faces for all elements
649  { { 0, 1, 2, 3, 4 } } }, // end target dim 2
650  { // target dimension 3
651  { 0 }, // 0 connected elements for all vertices
652  { { 0 } } } // end target dimension 3
653  } // end source dim 3
654  }, // end type MBPYRAMID
655 
656  {
657  // type MBPRISM
658  {
659  // source dim 0
660  { // target dim 0
661  { 3, 3, 3, 3, 3, 3 }, // 3 connected vertices for all vertices
662  { { 1, 2, 3 }, { 0, 2, 4 }, { 0, 1, 5 }, { 0, 4, 5 }, { 1, 3, 5 }, { 2, 3, 4 } } }, // end target
663  // dimension 0
664  { // target dimension 1
665  { 3, 3, 3, 3, 3, 3 }, // 3 connected edges for all vertices
666  { { 0, 2, 3 }, { 0, 1, 4 }, { 1, 2, 5 }, { 3, 6, 8 }, { 4, 6, 7 }, { 5, 7, 8 } } }, // end target
667  // dimension 1
668  { // target dimension 2
669  { 3, 3, 3, 3, 3, 3 }, // 3 connected faces for all vertices
670  { { 0, 2, 3 }, { 0, 1, 3 }, { 1, 2, 3 }, { 0, 2, 4 }, { 0, 1, 4 }, { 1, 2, 4 } } }, // end target
671  // dimension 2
672  { // target dimension 3
673  { 1, 1, 1, 1, 1, 1 }, // 0 connected elements for all vertices
674  { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } // end target dimension 3
675  }, // end source dim 0
676 
677  {
678  // source dim 1
679  { // target dim 0
680  { 2, 2, 2, 2, 2, 2, 2, 2, 2 }, // 2 vertices for all edges
681  { { 0, 1 }, { 1, 2 }, { 0, 2 }, { 0, 3 }, { 1, 4 }, { 2, 5 }, { 3, 4 }, { 4, 5 }, { 3, 5 } } }, // end
682  // target
683  // dim 0
684  { // target dim 1
685  { 4, 4, 4, 4, 4, 4, 4, 4, 4 }, // 4 edges for all edges
686  { { 1, 2, 3, 4 },
687  { 0, 2, 4, 5 },
688  { 0, 1, 3, 5 },
689  { 0, 2, 6, 8 },
690  { 0, 1, 6, 7 },
691  { 1, 2, 7, 8 },
692  { 3, 4, 7, 8 },
693  { 4, 5, 6, 8 },
694  { 3, 5, 6, 7 } } }, // end target dim 1
695  { // target dim 2
696  { 2, 2, 2, 2, 2, 2, 2, 2, 2 }, // 2 faces for all edges
697  { { 0, 3 }, { 1, 3 }, { 2, 3 }, { 0, 2 }, { 0, 1 }, { 1, 2 }, { 0, 4 }, { 1, 4 }, { 2, 4 } } }, // end
698  // target
699  // dim 2
700  { // target dimension 3
701  { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, // 0 connected elements for all vertices
702  { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } // end target
703  // dimension 3
704  }, // end source dim 1
705 
706  {
707  // source dim 2
708  { // target dim 0
709  { 4, 4, 4, 3, 3 }, // 4 vertices for some faces, 3 for others
710  { { 0, 1, 3, 4 }, { 1, 2, 4, 5 }, { 0, 2, 3, 5 }, { 0, 1, 2 }, { 3, 4, 5 } } }, // end target dim 0
711  { // target dim 1
712  { 4, 4, 4, 3, 3 }, // 4 edges for some faces, 3 for others
713  { { 0, 4, 6, 3 }, { 1, 5, 7, 4 }, { 3, 8, 5, 2 }, { 2, 1, 0 }, { 6, 7, 8 } } }, // end target dim 1
714  { // target dim 2
715  { 4, 4, 4, 3, 3 }, // 4 faces for some faces, 3 for others
716  { { 3, 1, 4, 2 }, { 3, 2, 4, 0 }, { 0, 4, 1, 3 }, { 2, 1, 0 }, { 0, 1, 2 } } }, // end target dim 2
717  { // target dimension 3
718  { 1, 1, 1, 1, 1 }, // 0 connected elements for all vertices
719  { { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } // end target dimension 3
720  }, // end source dim 2
721 
722  {
723  // source dim 3
724  { // target dim 0
725  { 6 }, // 6 vertices for all elements
726  { { 0, 1, 2, 3, 4, 5 } } }, // end target dim 0
727  { // target dim 1
728  { 9 }, // 9 edges for all elements
729  { { 0, 1, 2, 3, 4, 5, 6, 7, 8 } } }, // end target dim 1
730  { // target dim 2
731  { 5 }, // 5 faces for all elements
732  { { 0, 1, 2, 3, 4 } } }, // end target dim 2
733  { // target dimension 3
734  { 0 }, // 0 connected elements for all vertices
735  { { 0 } } } // end target dimension 3
736  } // end source dim 3
737  }, // end type MBPRISM
738 
739  {
740  // type MBKNIFE
741  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } }, // source dim 0
742  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } }, // source dim 1
743  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } }, // source dim 2
744  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } } // source dim 3
745  }, // end type MBKNIFE
746 
747  {
748  // type MBHEX
749  {
750  // source dim 0
751  { // target dim 0
752  { 3, 3, 3, 3, 3, 3, 3, 3 }, // 3 connected vertices for all vertices
753  { { 1, 3, 4 },
754  { 0, 2, 5 },
755  { 1, 3, 6 },
756  { 0, 2, 7 },
757  { 0, 5, 7 },
758  { 1, 4, 6 },
759  { 2, 5, 7 },
760  { 3, 4, 6 } } }, // end target dimension 0
761  { // target dimension 1
762  { 3, 3, 3, 3, 3, 3, 3, 3 }, // 3 connected edges for all vertices
763  { { 0, 3, 4 },
764  { 0, 1, 5 },
765  { 1, 2, 6 },
766  { 2, 3, 7 },
767  { 4, 8, 11 },
768  { 5, 8, 9 },
769  { 6, 9, 10 },
770  { 7, 10, 11 } } }, // end target dimension 1
771  { // target dimension 2
772  { 3, 3, 3, 3, 3, 3, 3, 3 }, // 3 connected faces for all vertices
773  { { 0, 3, 4 },
774  { 0, 1, 4 },
775  { 1, 2, 4 },
776  { 2, 3, 4 },
777  { 0, 3, 5 },
778  { 0, 1, 5 },
779  { 1, 2, 5 },
780  { 2, 3, 5 } } }, // end target dimension 2
781  { // target dimension 3
782  { 1, 1, 1, 1, 1, 1, 1, 1 }, // 0 connected elements for all vertices
783  { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } // end target dimension
784  // 3
785  }, // end source dim 0
786 
787  {
788  // source dim 1
789  { // target dim 0
790  { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, // 2 vertices for all edges
791  { { 0, 1 },
792  { 1, 2 },
793  { 2, 3 },
794  { 0, 3 },
795  { 0, 4 },
796  { 1, 5 },
797  { 2, 6 },
798  { 3, 7 },
799  { 4, 5 },
800  { 5, 6 },
801  { 6, 7 },
802  { 4, 7 } } }, // end target dim 0
803  { // target dim 1
804  { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }, // 4 edges for all edges
805  { { 1, 3, 4, 5 },
806  { 0, 2, 5, 6 },
807  { 1, 3, 6, 7 },
808  { 0, 2, 4, 7 },
809  { 0, 3, 8, 11 },
810  { 0, 1, 8, 9 },
811  { 1, 2, 9, 10 },
812  { 2, 3, 10, 11 },
813  { 4, 5, 9, 11 },
814  { 5, 6, 8, 10 },
815  { 6, 7, 9, 11 },
816  { 4, 7, 8, 10 } } }, // end target dim 1
817  { // target dim 2
818  { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, // 2 faces for all edges
819  { { 0, 4 },
820  { 1, 4 },
821  { 2, 4 },
822  { 3, 4 },
823  { 0, 3 },
824  { 0, 1 },
825  { 1, 2 },
826  { 2, 3 },
827  { 0, 5 },
828  { 1, 5 },
829  { 2, 5 },
830  { 3, 5 } } }, // end target dim 2
831  { // target dimension 3
832  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, // 0 connected elements for all vertices
833  { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } // end target
834  // dimension 3
835  }, // end source dim 1
836 
837  {
838  // source dim 2
839  { // target dim 0
840  { 4, 4, 4, 4, 4, 4 }, // 4 vertices for all faces
841  { { 0, 1, 4, 5 },
842  { 1, 2, 5, 6 },
843  { 2, 3, 6, 7 },
844  { 0, 3, 4, 7 },
845  { 0, 1, 2, 3 },
846  { 4, 5, 6, 7 } } }, // end target dim 0
847  { // target dim 1
848  { 4, 4, 4, 4, 4, 4 }, // 4 edges for all faces
849  { { 0, 5, 8, 4 },
850  { 1, 6, 9, 5 },
851  { 2, 7, 10, 6 },
852  { 3, 4, 11, 7 },
853  { 0, 3, 2, 1 },
854  { 8, 9, 10, 11 } } }, // end target dim 1
855  { // target dim 2
856  { 4, 4, 4, 4, 4, 4 }, // 4 faces for all faces
857  { { 4, 1, 5, 3 },
858  { 4, 2, 5, 0 },
859  { 4, 3, 5, 1 },
860  { 4, 0, 5, 2 },
861  { 0, 3, 2, 1 },
862  { 0, 1, 2, 3 } } }, // end target dim 2
863  { // target dimension 3
864  { 1, 1, 1, 1, 1, 1 }, // 0 connected elements for all vertices
865  { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } // end target dimension 3
866  }, // end source dim 2
867 
868  {
869  // source dim 3
870  { // target dim 0
871  { 8 }, // 8 vertices for all elements
872  { { 0, 1, 2, 3, 4, 5, 6, 7 } } }, // end target dim 0
873  { // target dim 1
874  { 12 }, // 12 edges for all elements
875  { { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 } } }, // end target dim 1
876  { // target dim 2
877  { 6 }, // 6 faces for all elements
878  { { 0, 1, 2, 3, 4, 5 } } }, // end target dim 2
879  { // target dimension 3
880  { 0 }, // 0 connected elements for all vertices
881  { { 0 } } } // end target dimension 3
882  } // end source dim 3
883  }, // end type MBHEX
884 
885  {
886  // type MBPOLYHEDRON
887  { // source dim 0
888  { // target dim 0
889  { 0 },
890  { { 0 } } },
891  { // target dimension 1
892  { 0 },
893  { { 0 } } },
894  { // target dimension 2
895  { 0 },
896  { { 0 } } },
897  { // target dimension 3
898  { 0 },
899  { { 0 } } } }, // end source dim 0
900 
901  { // source dim 1
902  { // target dim 0
903  { 0 },
904  { { 0 } } },
905  { // target dimension 1
906  { 0 },
907  { { 0 } } },
908  { // target dimension 2
909  { 0 },
910  { { 0 } } },
911  { // target dimension 3
912  { 0 },
913  { { 0 } } } }, // end source dim 1
914 
915  { // source dim 2
916  { // target dim 0
917  { 0 },
918  { { 0 } } },
919  { // target dimension 1
920  { 0 },
921  { { 0 } } },
922  { // target dimension 2
923  { 0 },
924  { { 0 } } },
925  { // target dimension 3
926  { 0 },
927  { { 0 } } } }, // end source dim 2
928 
929  { // source dim 3
930  { // target dim 0
931  { 0 },
932  { { 0 } } },
933  { // target dimension 1
934  { 0 },
935  { { 0 } } },
936  { // target dimension 2
937  { 0 },
938  { { 0 } } },
939  { // target dimension 3
940  { 0 },
941  { { 0 } } } } // end source dim 3
942  }, // end type MBPOLYHEDRON
943 
944  {
945  // type MBENTITYSET
946  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } }, // source dim 0
947  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } }, // source dim 1
948  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } }, // source dim 2
949  { { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } }, { { 0 }, { { 0 } } } } // source dim 3
950  } // end type MBENTITYSET
951 };
952 const unsigned char E = CN::MID_EDGE_BIT;
953 const unsigned char F = CN::MID_FACE_BIT;
954 const unsigned char R = CN::MID_REGION_BIT;
955 const unsigned char CN::midNodesPerType[MBMAXTYPE][MAX_NODES_PER_ELEMENT + 1] = {
956  // vertex
957  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
958  // edge
959  { 0, 0, 0, E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
960  // tri
961  { 0, 0, 0, 0, F, 0, E, E | F, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
962  // quad
963  { 0, 0, 0, 0, 0, F, 0, 0, E, E | F, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
964  // polygon
965  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
966  // tet 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,13, 14, 15
967  { 0, 0, 0, 0, 0, R, 0, 0, F, F | R, E, E | R, 0, 0, E | F, E | F | R, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
968  // pyramid 3, 4, 5, 6, 7, 8, 9,10, 11, 12,13, 14, 15,16,17, 18, 19
969  { 0, 0, 0, 0, 0, 0, R, 0, 0, 0, F, F | R, 0, E, E | R, 0, 0, 0, E | F, E | F | R, 0, 0, 0, 0, 0, 0, 0, 0 },
970  // prism 2, 3, 4, 5, 6, 7, 8, 9,10,11, 12, 13,14,15, 16, 17,18,19, 20, 21
971  { 0, 0, 0, 0, 0, 0, 0, R, 0, 0, 0, F, F | R, 0, 0, E, E | R, 0, 0, 0, E | F, E | F | R, 0, 0, 0, 0, 0, 0 },
972  // knife 2, 3, 4, 5, 6, 7, 8, 9,10,11, 12,13, 14,15,16,17, 18, 19,20,21, 22, 23
973  { 0, 0, 0, 0, 0, 0, 0, 0, R, 0, 0, 0, F, F | R, 0, 0, 0, E, E | R, 0, 0, 0, E | F, E | F | R, 0, 0, 0, 0 },
974  // hex 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15, 16,17,18,19,20, 21, 22,23,24,25, 26, 27
975  { 0, 0, 0, 0, 0, 0, 0, 0, 0, R, 0, 0, 0, 0, F, F | R, 0, 0, 0, 0, E, E | R, 0, 0, 0, 0, E | F, E | F | R },
976  // polyhedron
977  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
978  // set
979  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
980 };
981 
982 } // namespace moab
983 
984 #endif