xref: /petsc/src/dm/impls/plex/gmshlex.h (revision 970231d20df44f79b27787157e39d441e79f434b)
1a4963045SJacob Faibussowitsch #pragma once
23dd0d304SLisandro Dalcin /*
33dd0d304SLisandro Dalcin  S: simplex  B: box
43dd0d304SLisandro Dalcin  N: size     I: index  L: loop
53dd0d304SLisandro Dalcin  p: degree (aka order in Gmsh)
63dd0d304SLisandro Dalcin  1,2,3: topological dimension
73dd0d304SLisandro Dalcin  i,j,k: coordinate indices
83dd0d304SLisandro Dalcin */
93dd0d304SLisandro Dalcin 
103dd0d304SLisandro Dalcin #define SN1(p)          ((p) + 1)
113dd0d304SLisandro Dalcin #define SN2(p)          (SN1(p) * SN1((p) + 1) / 2)
123dd0d304SLisandro Dalcin #define SN3(p)          (SN2(p) * SN1((p) + 2) / 3)
13*f4f49eeaSPierre Jolivet #define SI1(p, i)       (i)
143dd0d304SLisandro Dalcin #define SI2(p, i, j)    ((i) + (SN2(p) - SN2((p) - (j))))
153dd0d304SLisandro Dalcin #define SI3(p, i, j, k) (SI2((p) - (k), i, j) + (SN3(p) - SN3((p) - (k))))
163dd0d304SLisandro Dalcin #define SL1(p, i)       for ((i) = 1; (i) < (p); ++(i))
173dd0d304SLisandro Dalcin #define SL2(p, i, j)    SL1((p) - 1, i) SL1((p) - (i), j)
183dd0d304SLisandro Dalcin #define SL3(p, i, j, k) SL1((p) - 2, i) SL1((p) - (i), j) SL1((p) - (i) - (j), k)
193dd0d304SLisandro Dalcin 
203dd0d304SLisandro Dalcin #define BN1(p)          ((p) + 1)
213dd0d304SLisandro Dalcin #define BN2(p)          (BN1(p) * BN1(p))
223dd0d304SLisandro Dalcin #define BN3(p)          (BN2(p) * BN1(p))
23*f4f49eeaSPierre Jolivet #define BI1(p, i)       (i)
243dd0d304SLisandro Dalcin #define BI2(p, i, j)    ((i) + (j) * BN1(p))
253dd0d304SLisandro Dalcin #define BI3(p, i, j, k) ((i) + BI2(p, j, k) * BN1(p))
263dd0d304SLisandro Dalcin #define BL1(p, i)       for ((i) = 1; (i) < (p); ++(i))
273dd0d304SLisandro Dalcin #define BL2(p, i, j)    BL1(p, i) BL1(p, j)
283dd0d304SLisandro Dalcin #define BL3(p, i, j, k) BL1(p, i) BL1(p, j) BL1(p, k)
293dd0d304SLisandro Dalcin 
303dd0d304SLisandro Dalcin #define GmshNumNodes_VTX(p) (1)
313dd0d304SLisandro Dalcin #define GmshNumNodes_SEG(p) SN1(p)
323dd0d304SLisandro Dalcin #define GmshNumNodes_TRI(p) SN2(p)
333dd0d304SLisandro Dalcin #define GmshNumNodes_QUA(p) BN2(p)
343dd0d304SLisandro Dalcin #define GmshNumNodes_TET(p) SN3(p)
353dd0d304SLisandro Dalcin #define GmshNumNodes_HEX(p) BN3(p)
363dd0d304SLisandro Dalcin #define GmshNumNodes_PRI(p) (SN2(p) * BN1(p))
373dd0d304SLisandro Dalcin #define GmshNumNodes_PYR(p) (((p) + 1) * ((p) + 2) * (2 * (p) + 3) / 6)
383dd0d304SLisandro Dalcin 
393dd0d304SLisandro Dalcin #define GMSH_MAX_ORDER 10
403dd0d304SLisandro Dalcin 
GmshLexOrder_VTX(int p,int lex[],int node)41d71ae5a4SJacob Faibussowitsch static inline int GmshLexOrder_VTX(int p, int lex[], int node)
42d71ae5a4SJacob Faibussowitsch {
439371c9d4SSatish Balay   lex[0] = node++;
449371c9d4SSatish Balay   (void)p;
453dd0d304SLisandro Dalcin   return node;
463dd0d304SLisandro Dalcin }
473dd0d304SLisandro Dalcin 
GmshLexOrder_SEG(int p,int lex[],int node)48d71ae5a4SJacob Faibussowitsch static inline int GmshLexOrder_SEG(int p, int lex[], int node)
49d71ae5a4SJacob Faibussowitsch {
503dd0d304SLisandro Dalcin #define loop1(i) SL1(p, i)
513dd0d304SLisandro Dalcin #define index(i) SI1(p, i)
523dd0d304SLisandro Dalcin   int i;
533dd0d304SLisandro Dalcin   /* trivial case */
543dd0d304SLisandro Dalcin   if (p == 0) lex[0] = node++;
553dd0d304SLisandro Dalcin   if (p == 0) return node;
563dd0d304SLisandro Dalcin   /* vertex nodes */
573dd0d304SLisandro Dalcin   lex[index(0)] = node++;
583dd0d304SLisandro Dalcin   lex[index(p)] = node++;
593dd0d304SLisandro Dalcin   if (p == 1) return node;
603dd0d304SLisandro Dalcin   /* internal cell nodes */
613dd0d304SLisandro Dalcin   loop1(i) lex[index(i)] = node++;
623dd0d304SLisandro Dalcin   return node;
633dd0d304SLisandro Dalcin #undef loop1
643dd0d304SLisandro Dalcin #undef index
653dd0d304SLisandro Dalcin }
663dd0d304SLisandro Dalcin 
GmshLexOrder_TRI(int p,int lex[],int node)67d71ae5a4SJacob Faibussowitsch static inline int GmshLexOrder_TRI(int p, int lex[], int node)
68d71ae5a4SJacob Faibussowitsch {
693dd0d304SLisandro Dalcin #define loop1(i)    SL1(p, i)
703dd0d304SLisandro Dalcin #define loop2(i, j) SL2(p, i, j)
713dd0d304SLisandro Dalcin #define index(i, j) SI2(p, i, j)
723dd0d304SLisandro Dalcin   int i, j, *sub, buf[SN2(GMSH_MAX_ORDER)];
733dd0d304SLisandro Dalcin   /* trivial case */
743dd0d304SLisandro Dalcin   if (p == 0) lex[0] = node++;
753dd0d304SLisandro Dalcin   if (p == 0) return node;
763dd0d304SLisandro Dalcin   /* vertex nodes */
773dd0d304SLisandro Dalcin   lex[index(0, 0)] = node++;
783dd0d304SLisandro Dalcin   lex[index(p, 0)] = node++;
793dd0d304SLisandro Dalcin   lex[index(0, p)] = node++;
803dd0d304SLisandro Dalcin   if (p == 1) return node;
813dd0d304SLisandro Dalcin   /* internal edge nodes */
823dd0d304SLisandro Dalcin   loop1(i) lex[index(i, 0)]     = node++;
833dd0d304SLisandro Dalcin   loop1(j) lex[index(p - j, j)] = node++;
843dd0d304SLisandro Dalcin   loop1(j) lex[index(0, p - j)] = node++;
853dd0d304SLisandro Dalcin   if (p == 2) return node;
863dd0d304SLisandro Dalcin   /* internal cell nodes */
873dd0d304SLisandro Dalcin   node                         = GmshLexOrder_TRI(p - 3, sub = buf, node);
883dd0d304SLisandro Dalcin   loop2(j, i) lex[index(i, j)] = *sub++;
893dd0d304SLisandro Dalcin   return node;
903dd0d304SLisandro Dalcin #undef loop1
913dd0d304SLisandro Dalcin #undef loop2
923dd0d304SLisandro Dalcin #undef index
933dd0d304SLisandro Dalcin }
943dd0d304SLisandro Dalcin 
GmshLexOrder_QUA(int p,int lex[],int node)95d71ae5a4SJacob Faibussowitsch static inline int GmshLexOrder_QUA(int p, int lex[], int node)
96d71ae5a4SJacob Faibussowitsch {
973dd0d304SLisandro Dalcin #define loop1(i)    BL1(p, i)
983dd0d304SLisandro Dalcin #define loop2(i, j) BL2(p, i, j)
993dd0d304SLisandro Dalcin #define index(i, j) BI2(p, i, j)
1003dd0d304SLisandro Dalcin   int i, j, *sub, buf[BN2(GMSH_MAX_ORDER)];
1013dd0d304SLisandro Dalcin   /* trivial case */
1023dd0d304SLisandro Dalcin   if (p == 0) lex[0] = node++;
1033dd0d304SLisandro Dalcin   if (p == 0) return node;
1043dd0d304SLisandro Dalcin   /* vertex nodes */
1053dd0d304SLisandro Dalcin   lex[index(0, 0)] = node++;
1063dd0d304SLisandro Dalcin   lex[index(p, 0)] = node++;
1073dd0d304SLisandro Dalcin   lex[index(p, p)] = node++;
1083dd0d304SLisandro Dalcin   lex[index(0, p)] = node++;
1093dd0d304SLisandro Dalcin   if (p == 1) return node;
1103dd0d304SLisandro Dalcin   /* internal edge nodes */
1113dd0d304SLisandro Dalcin   loop1(i) lex[index(i, 0)]     = node++;
1123dd0d304SLisandro Dalcin   loop1(j) lex[index(p, j)]     = node++;
1133dd0d304SLisandro Dalcin   loop1(i) lex[index(p - i, p)] = node++;
1143dd0d304SLisandro Dalcin   loop1(j) lex[index(0, p - j)] = node++;
1153dd0d304SLisandro Dalcin   /* internal cell nodes */
1163dd0d304SLisandro Dalcin   node                         = GmshLexOrder_QUA(p - 2, sub = buf, node);
1173dd0d304SLisandro Dalcin   loop2(j, i) lex[index(i, j)] = *sub++;
1183dd0d304SLisandro Dalcin   return node;
1193dd0d304SLisandro Dalcin #undef loop1
1203dd0d304SLisandro Dalcin #undef loop2
1213dd0d304SLisandro Dalcin #undef index
1223dd0d304SLisandro Dalcin }
1233dd0d304SLisandro Dalcin 
GmshLexOrder_TET(int p,int lex[],int node)124d71ae5a4SJacob Faibussowitsch static inline int GmshLexOrder_TET(int p, int lex[], int node)
125d71ae5a4SJacob Faibussowitsch {
1263dd0d304SLisandro Dalcin #define loop1(i)       SL1(p, i)
1273dd0d304SLisandro Dalcin #define loop2(i, j)    SL2(p, i, j)
1283dd0d304SLisandro Dalcin #define loop3(i, j, k) SL3(p, i, j, k)
1293dd0d304SLisandro Dalcin #define index(i, j, k) SI3(p, i, j, k)
1303dd0d304SLisandro Dalcin   int i, j, k, *sub, buf[SN3(GMSH_MAX_ORDER)];
1313dd0d304SLisandro Dalcin   /* trivial case */
1323dd0d304SLisandro Dalcin   if (p == 0) lex[0] = node++;
1333dd0d304SLisandro Dalcin   if (p == 0) return node;
1343dd0d304SLisandro Dalcin   /* vertex nodes */
1353dd0d304SLisandro Dalcin   lex[index(0, 0, 0)] = node++;
1363dd0d304SLisandro Dalcin   lex[index(p, 0, 0)] = node++;
1373dd0d304SLisandro Dalcin   lex[index(0, p, 0)] = node++;
1383dd0d304SLisandro Dalcin   lex[index(0, 0, p)] = node++;
1393dd0d304SLisandro Dalcin   if (p == 1) return node;
1403dd0d304SLisandro Dalcin   /* internal edge nodes */
1413dd0d304SLisandro Dalcin   loop1(i) lex[index(i, 0, 0)]     = node++;
1423dd0d304SLisandro Dalcin   loop1(j) lex[index(p - j, j, 0)] = node++;
1433dd0d304SLisandro Dalcin   loop1(j) lex[index(0, p - j, 0)] = node++;
1443dd0d304SLisandro Dalcin   loop1(k) lex[index(0, 0, p - k)] = node++;
1453dd0d304SLisandro Dalcin   loop1(j) lex[index(0, j, p - j)] = node++;
1463dd0d304SLisandro Dalcin   loop1(i) lex[index(i, 0, p - i)] = node++;
1473dd0d304SLisandro Dalcin   if (p == 2) return node;
1483dd0d304SLisandro Dalcin   /* internal face nodes */
1493dd0d304SLisandro Dalcin   node                                    = GmshLexOrder_TRI(p - 3, sub = buf, node);
1503dd0d304SLisandro Dalcin   loop2(i, j) lex[index(i, j, 0)]         = *sub++;
1513dd0d304SLisandro Dalcin   node                                    = GmshLexOrder_TRI(p - 3, sub = buf, node);
1523dd0d304SLisandro Dalcin   loop2(k, i) lex[index(i, 0, k)]         = *sub++;
1533dd0d304SLisandro Dalcin   node                                    = GmshLexOrder_TRI(p - 3, sub = buf, node);
1543dd0d304SLisandro Dalcin   loop2(j, k) lex[index(0, j, k)]         = *sub++;
1553dd0d304SLisandro Dalcin   node                                    = GmshLexOrder_TRI(p - 3, sub = buf, node);
1563dd0d304SLisandro Dalcin   loop2(j, i) lex[index(i, j, p - i - j)] = *sub++;
1573dd0d304SLisandro Dalcin   if (p == 3) return node;
1583dd0d304SLisandro Dalcin   /* internal cell nodes */
1593dd0d304SLisandro Dalcin   node                               = GmshLexOrder_TET(p - 4, sub = buf, node);
1603dd0d304SLisandro Dalcin   loop3(k, j, i) lex[index(i, j, k)] = *sub++;
1613dd0d304SLisandro Dalcin   return node;
1623dd0d304SLisandro Dalcin #undef loop1
1633dd0d304SLisandro Dalcin #undef loop2
1643dd0d304SLisandro Dalcin #undef loop3
1653dd0d304SLisandro Dalcin #undef index
1663dd0d304SLisandro Dalcin }
1673dd0d304SLisandro Dalcin 
GmshLexOrder_HEX(int p,int lex[],int node)168d71ae5a4SJacob Faibussowitsch static inline int GmshLexOrder_HEX(int p, int lex[], int node)
169d71ae5a4SJacob Faibussowitsch {
1703dd0d304SLisandro Dalcin #define loop1(i)       BL1(p, i)
1713dd0d304SLisandro Dalcin #define loop2(i, j)    BL2(p, i, j)
1723dd0d304SLisandro Dalcin #define loop3(i, j, k) BL3(p, i, j, k)
1733dd0d304SLisandro Dalcin #define index(i, j, k) BI3(p, i, j, k)
1743dd0d304SLisandro Dalcin   int i, j, k, *sub, buf[BN3(GMSH_MAX_ORDER)];
1753dd0d304SLisandro Dalcin   /* trivial case */
1763dd0d304SLisandro Dalcin   if (p == 0) lex[0] = node++;
1773dd0d304SLisandro Dalcin   if (p == 0) return node;
1783dd0d304SLisandro Dalcin   /* vertex nodes */
1793dd0d304SLisandro Dalcin   lex[index(0, 0, 0)] = node++;
1803dd0d304SLisandro Dalcin   lex[index(p, 0, 0)] = node++;
1813dd0d304SLisandro Dalcin   lex[index(p, p, 0)] = node++;
1823dd0d304SLisandro Dalcin   lex[index(0, p, 0)] = node++;
1833dd0d304SLisandro Dalcin   lex[index(0, 0, p)] = node++;
1843dd0d304SLisandro Dalcin   lex[index(p, 0, p)] = node++;
1853dd0d304SLisandro Dalcin   lex[index(p, p, p)] = node++;
1863dd0d304SLisandro Dalcin   lex[index(0, p, p)] = node++;
1873dd0d304SLisandro Dalcin   if (p == 1) return node;
1883dd0d304SLisandro Dalcin   /* internal edge nodes */
1893dd0d304SLisandro Dalcin   loop1(i) lex[index(i, 0, 0)]     = node++;
1903dd0d304SLisandro Dalcin   loop1(j) lex[index(0, j, 0)]     = node++;
1913dd0d304SLisandro Dalcin   loop1(k) lex[index(0, 0, k)]     = node++;
1923dd0d304SLisandro Dalcin   loop1(j) lex[index(p, j, 0)]     = node++;
1933dd0d304SLisandro Dalcin   loop1(k) lex[index(p, 0, k)]     = node++;
1943dd0d304SLisandro Dalcin   loop1(i) lex[index(p - i, p, 0)] = node++;
1953dd0d304SLisandro Dalcin   loop1(k) lex[index(p, p, k)]     = node++;
1963dd0d304SLisandro Dalcin   loop1(k) lex[index(0, p, k)]     = node++;
1973dd0d304SLisandro Dalcin   loop1(i) lex[index(i, 0, p)]     = node++;
1983dd0d304SLisandro Dalcin   loop1(j) lex[index(0, j, p)]     = node++;
1993dd0d304SLisandro Dalcin   loop1(j) lex[index(p, j, p)]     = node++;
2003dd0d304SLisandro Dalcin   loop1(i) lex[index(p - i, p, p)] = node++;
2013dd0d304SLisandro Dalcin   /* internal face nodes */
2023dd0d304SLisandro Dalcin   node                                = GmshLexOrder_QUA(p - 2, sub = buf, node);
2033dd0d304SLisandro Dalcin   loop2(i, j) lex[index(i, j, 0)]     = *sub++;
2043dd0d304SLisandro Dalcin   node                                = GmshLexOrder_QUA(p - 2, sub = buf, node);
2053dd0d304SLisandro Dalcin   loop2(k, i) lex[index(i, 0, k)]     = *sub++;
2063dd0d304SLisandro Dalcin   node                                = GmshLexOrder_QUA(p - 2, sub = buf, node);
2073dd0d304SLisandro Dalcin   loop2(j, k) lex[index(0, j, k)]     = *sub++;
2083dd0d304SLisandro Dalcin   node                                = GmshLexOrder_QUA(p - 2, sub = buf, node);
2093dd0d304SLisandro Dalcin   loop2(k, j) lex[index(p, j, k)]     = *sub++;
2103dd0d304SLisandro Dalcin   node                                = GmshLexOrder_QUA(p - 2, sub = buf, node);
2113dd0d304SLisandro Dalcin   loop2(k, i) lex[index(p - i, p, k)] = *sub++;
2123dd0d304SLisandro Dalcin   node                                = GmshLexOrder_QUA(p - 2, sub = buf, node);
2133dd0d304SLisandro Dalcin   loop2(j, i) lex[index(i, j, p)]     = *sub++;
2143dd0d304SLisandro Dalcin   /* internal cell nodes */
2153dd0d304SLisandro Dalcin   node                               = GmshLexOrder_HEX(p - 2, sub = buf, node);
2163dd0d304SLisandro Dalcin   loop3(k, j, i) lex[index(i, j, k)] = *sub++;
2173dd0d304SLisandro Dalcin   return node;
2183dd0d304SLisandro Dalcin #undef loop1
2193dd0d304SLisandro Dalcin #undef loop2
2203dd0d304SLisandro Dalcin #undef loop3
2213dd0d304SLisandro Dalcin #undef index
2223dd0d304SLisandro Dalcin }
2233dd0d304SLisandro Dalcin 
GmshLexOrder_PRI(int p,int lex[],int node)224d71ae5a4SJacob Faibussowitsch static inline int GmshLexOrder_PRI(int p, int lex[], int node)
225d71ae5a4SJacob Faibussowitsch {
2263dd0d304SLisandro Dalcin #define loop1(i)       BL1(p, i)
2273dd0d304SLisandro Dalcin #define loops(i, j)    SL2(p, i, j)
2283dd0d304SLisandro Dalcin #define loopb(i, j)    BL2(p, i, j)
2293dd0d304SLisandro Dalcin #define index(i, j, k) (SI2(p, i, j) + BI1(p, k) * SN2(p))
2303dd0d304SLisandro Dalcin   int i, j, k, *sub, buf[BN2(GMSH_MAX_ORDER)];
2313dd0d304SLisandro Dalcin   /* trivial case */
2323dd0d304SLisandro Dalcin   if (p == 0) lex[0] = node++;
2333dd0d304SLisandro Dalcin   if (p == 0) return node;
2343dd0d304SLisandro Dalcin   /* vertex nodes */
2353dd0d304SLisandro Dalcin   lex[index(0, 0, 0)] = node++;
2363dd0d304SLisandro Dalcin   lex[index(p, 0, 0)] = node++;
2373dd0d304SLisandro Dalcin   lex[index(0, p, 0)] = node++;
2383dd0d304SLisandro Dalcin   lex[index(0, 0, p)] = node++;
2393dd0d304SLisandro Dalcin   lex[index(p, 0, p)] = node++;
2403dd0d304SLisandro Dalcin   lex[index(0, p, p)] = node++;
2413dd0d304SLisandro Dalcin   if (p == 1) return node;
2423dd0d304SLisandro Dalcin   /* internal edge nodes */
2433dd0d304SLisandro Dalcin   loop1(i) lex[index(i, 0, 0)]     = node++;
2443dd0d304SLisandro Dalcin   loop1(j) lex[index(0, j, 0)]     = node++;
2453dd0d304SLisandro Dalcin   loop1(k) lex[index(0, 0, k)]     = node++;
2463dd0d304SLisandro Dalcin   loop1(j) lex[index(p - j, j, 0)] = node++;
2473dd0d304SLisandro Dalcin   loop1(k) lex[index(p, 0, k)]     = node++;
2483dd0d304SLisandro Dalcin   loop1(k) lex[index(0, p, k)]     = node++;
2493dd0d304SLisandro Dalcin   loop1(i) lex[index(i, 0, p)]     = node++;
2503dd0d304SLisandro Dalcin   loop1(j) lex[index(0, j, p)]     = node++;
2513dd0d304SLisandro Dalcin   loop1(j) lex[index(p - j, j, p)] = node++;
2523dd0d304SLisandro Dalcin   if (p >= 3) {
2533dd0d304SLisandro Dalcin     /* internal bottom face nodes */
2543dd0d304SLisandro Dalcin     node                            = GmshLexOrder_TRI(p - 3, sub = buf, node);
2553dd0d304SLisandro Dalcin     loops(i, j) lex[index(i, j, 0)] = *sub++;
2563dd0d304SLisandro Dalcin     /* internal top face nodes */
2573dd0d304SLisandro Dalcin     node                            = GmshLexOrder_TRI(p - 3, sub = buf, node);
2583dd0d304SLisandro Dalcin     loops(j, i) lex[index(i, j, p)] = *sub++;
2593dd0d304SLisandro Dalcin   }
2603dd0d304SLisandro Dalcin   if (p >= 2) {
2613dd0d304SLisandro Dalcin     /* internal front face nodes */
2623dd0d304SLisandro Dalcin     node                            = GmshLexOrder_QUA(p - 2, sub = buf, node);
2633dd0d304SLisandro Dalcin     loopb(k, i) lex[index(i, 0, k)] = *sub++;
2643dd0d304SLisandro Dalcin     /* internal left face nodes */
2653dd0d304SLisandro Dalcin     node                            = GmshLexOrder_QUA(p - 2, sub = buf, node);
2663dd0d304SLisandro Dalcin     loopb(j, k) lex[index(0, j, k)] = *sub++;
2673dd0d304SLisandro Dalcin     /* internal back face nodes */
2683dd0d304SLisandro Dalcin     node                                = GmshLexOrder_QUA(p - 2, sub = buf, node);
2693dd0d304SLisandro Dalcin     loopb(k, j) lex[index(p - j, j, k)] = *sub++;
2703dd0d304SLisandro Dalcin   }
2713dd0d304SLisandro Dalcin   if (p >= 3) {
2723dd0d304SLisandro Dalcin     /* internal cell nodes */
2739371c9d4SSatish Balay     typedef struct {
2749371c9d4SSatish Balay       int i, j;
2759371c9d4SSatish Balay     } pair;
2763dd0d304SLisandro Dalcin     pair ij[SN2(GMSH_MAX_ORDER)], tmp[SN2(GMSH_MAX_ORDER)];
2773dd0d304SLisandro Dalcin     int  m = GmshLexOrder_TRI(p - 3, sub = buf, 0), l = 0;
278d71ae5a4SJacob Faibussowitsch     loops(j, i)
279d71ae5a4SJacob Faibussowitsch     {
2809371c9d4SSatish Balay       tmp[l].i = i;
2819371c9d4SSatish Balay       tmp[l].j = j;
2829371c9d4SSatish Balay       l++;
2839371c9d4SSatish Balay     }
2843dd0d304SLisandro Dalcin     for (l = 0; l < m; ++l) ij[sub[l]] = tmp[l];
2853dd0d304SLisandro Dalcin     for (l = 0; l < m; ++l) {
2869371c9d4SSatish Balay       i                            = ij[l].i;
2879371c9d4SSatish Balay       j                            = ij[l].j;
2883dd0d304SLisandro Dalcin       node                         = GmshLexOrder_SEG(p - 2, sub = buf, node);
2893dd0d304SLisandro Dalcin       loop1(k) lex[index(i, j, k)] = *sub++;
2903dd0d304SLisandro Dalcin     }
2913dd0d304SLisandro Dalcin   }
2923dd0d304SLisandro Dalcin   return node;
2933dd0d304SLisandro Dalcin #undef loop1
2943dd0d304SLisandro Dalcin #undef loops
2953dd0d304SLisandro Dalcin #undef loopb
2963dd0d304SLisandro Dalcin #undef index
2973dd0d304SLisandro Dalcin }
2983dd0d304SLisandro Dalcin 
GmshLexOrder_PYR(int p,int lex[],int node)299d71ae5a4SJacob Faibussowitsch static inline int GmshLexOrder_PYR(int p, int lex[], int node)
300d71ae5a4SJacob Faibussowitsch {
3013dd0d304SLisandro Dalcin   int i, m = GmshNumNodes_PYR(p);
302ad540459SPierre Jolivet   for (i = 0; i < m; ++i) lex[i] = node++; /* TODO */
3033dd0d304SLisandro Dalcin   return node;
3043dd0d304SLisandro Dalcin }
305