1*3dd0d304SLisandro Dalcin /* 2*3dd0d304SLisandro Dalcin S: simplex B: box 3*3dd0d304SLisandro Dalcin N: size I: index L: loop 4*3dd0d304SLisandro Dalcin p: degree (aka order in Gmsh) 5*3dd0d304SLisandro Dalcin 1,2,3: topological dimension 6*3dd0d304SLisandro Dalcin i,j,k: coordinate indices 7*3dd0d304SLisandro Dalcin */ 8*3dd0d304SLisandro Dalcin 9*3dd0d304SLisandro Dalcin #define SN1(p) ((p)+1) 10*3dd0d304SLisandro Dalcin #define SN2(p) (SN1(p)*SN1((p)+1)/2) 11*3dd0d304SLisandro Dalcin #define SN3(p) (SN2(p)*SN1((p)+2)/3) 12*3dd0d304SLisandro Dalcin #define SI1(p, i) ((i)) 13*3dd0d304SLisandro Dalcin #define SI2(p, i, j) ((i)+(SN2(p)-SN2((p)-(j)))) 14*3dd0d304SLisandro Dalcin #define SI3(p, i, j, k) (SI2((p)-(k),i,j)+(SN3(p)-SN3((p)-(k)))) 15*3dd0d304SLisandro Dalcin #define SL1(p, i) for ((i)=1;(i)<(p);++(i)) 16*3dd0d304SLisandro Dalcin #define SL2(p, i, j) SL1((p)-1,i) SL1((p)-(i),j) 17*3dd0d304SLisandro Dalcin #define SL3(p, i, j, k) SL1((p)-2,i) SL1((p)-(i),j) SL1((p)-(i)-(j),k) 18*3dd0d304SLisandro Dalcin 19*3dd0d304SLisandro Dalcin #define BN1(p) ((p)+1) 20*3dd0d304SLisandro Dalcin #define BN2(p) (BN1(p)*BN1(p)) 21*3dd0d304SLisandro Dalcin #define BN3(p) (BN2(p)*BN1(p)) 22*3dd0d304SLisandro Dalcin #define BI1(p, i) ((i)) 23*3dd0d304SLisandro Dalcin #define BI2(p, i, j) ((i)+(j)*BN1(p)) 24*3dd0d304SLisandro Dalcin #define BI3(p, i, j, k) ((i)+BI2(p,j,k)*BN1(p)) 25*3dd0d304SLisandro Dalcin #define BL1(p, i) for ((i)=1;(i)<(p);++(i)) 26*3dd0d304SLisandro Dalcin #define BL2(p, i, j) BL1(p,i) BL1(p,j) 27*3dd0d304SLisandro Dalcin #define BL3(p, i, j, k) BL1(p,i) BL1(p,j) BL1(p,k) 28*3dd0d304SLisandro Dalcin 29*3dd0d304SLisandro Dalcin #define GmshNumNodes_VTX(p) (1) 30*3dd0d304SLisandro Dalcin #define GmshNumNodes_SEG(p) SN1(p) 31*3dd0d304SLisandro Dalcin #define GmshNumNodes_TRI(p) SN2(p) 32*3dd0d304SLisandro Dalcin #define GmshNumNodes_QUA(p) BN2(p) 33*3dd0d304SLisandro Dalcin #define GmshNumNodes_TET(p) SN3(p) 34*3dd0d304SLisandro Dalcin #define GmshNumNodes_HEX(p) BN3(p) 35*3dd0d304SLisandro Dalcin #define GmshNumNodes_PRI(p) (SN2(p)*BN1(p)) 36*3dd0d304SLisandro Dalcin #define GmshNumNodes_PYR(p) (((p)+1)*((p)+2)*(2*(p)+3)/6) 37*3dd0d304SLisandro Dalcin 38*3dd0d304SLisandro Dalcin #define GMSH_MAX_ORDER 10 39*3dd0d304SLisandro Dalcin 40*3dd0d304SLisandro Dalcin PETSC_STATIC_INLINE int GmshLexOrder_VTX(int p, int lex[], int node) 41*3dd0d304SLisandro Dalcin { 42*3dd0d304SLisandro Dalcin lex[0] = node++; (void)p; 43*3dd0d304SLisandro Dalcin return node; 44*3dd0d304SLisandro Dalcin } 45*3dd0d304SLisandro Dalcin 46*3dd0d304SLisandro Dalcin PETSC_STATIC_INLINE int GmshLexOrder_SEG(int p, int lex[], int node) 47*3dd0d304SLisandro Dalcin { 48*3dd0d304SLisandro Dalcin #define loop1(i) SL1(p, i) 49*3dd0d304SLisandro Dalcin #define index(i) SI1(p, i) 50*3dd0d304SLisandro Dalcin int i; 51*3dd0d304SLisandro Dalcin /* trivial case */ 52*3dd0d304SLisandro Dalcin if (p == 0) lex[0] = node++; 53*3dd0d304SLisandro Dalcin if (p == 0) return node; 54*3dd0d304SLisandro Dalcin /* vertex nodes */ 55*3dd0d304SLisandro Dalcin lex[index(0)] = node++; 56*3dd0d304SLisandro Dalcin lex[index(p)] = node++; 57*3dd0d304SLisandro Dalcin if (p == 1) return node; 58*3dd0d304SLisandro Dalcin /* internal cell nodes */ 59*3dd0d304SLisandro Dalcin loop1(i) lex[index(i)] = node++; 60*3dd0d304SLisandro Dalcin return node; 61*3dd0d304SLisandro Dalcin #undef loop1 62*3dd0d304SLisandro Dalcin #undef index 63*3dd0d304SLisandro Dalcin } 64*3dd0d304SLisandro Dalcin 65*3dd0d304SLisandro Dalcin PETSC_STATIC_INLINE int GmshLexOrder_TRI(int p, int lex[], int node) 66*3dd0d304SLisandro Dalcin { 67*3dd0d304SLisandro Dalcin #define loop1(i) SL1(p, i) 68*3dd0d304SLisandro Dalcin #define loop2(i, j) SL2(p, i, j) 69*3dd0d304SLisandro Dalcin #define index(i, j) SI2(p, i, j) 70*3dd0d304SLisandro Dalcin int i, j, *sub, buf[SN2(GMSH_MAX_ORDER)]; 71*3dd0d304SLisandro Dalcin /* trivial case */ 72*3dd0d304SLisandro Dalcin if (p == 0) lex[0] = node++; 73*3dd0d304SLisandro Dalcin if (p == 0) return node; 74*3dd0d304SLisandro Dalcin /* vertex nodes */ 75*3dd0d304SLisandro Dalcin lex[index(0, 0)] = node++; 76*3dd0d304SLisandro Dalcin lex[index(p, 0)] = node++; 77*3dd0d304SLisandro Dalcin lex[index(0, p)] = node++; 78*3dd0d304SLisandro Dalcin if (p == 1) return node; 79*3dd0d304SLisandro Dalcin /* internal edge nodes */ 80*3dd0d304SLisandro Dalcin loop1(i) lex[index(i, 0)] = node++; 81*3dd0d304SLisandro Dalcin loop1(j) lex[index(p-j, j)] = node++; 82*3dd0d304SLisandro Dalcin loop1(j) lex[index(0, p-j)] = node++; 83*3dd0d304SLisandro Dalcin if (p == 2) return node; 84*3dd0d304SLisandro Dalcin /* internal cell nodes */ 85*3dd0d304SLisandro Dalcin node = GmshLexOrder_TRI(p-3, sub=buf, node); 86*3dd0d304SLisandro Dalcin loop2(j, i) lex[index(i, j)] = *sub++; 87*3dd0d304SLisandro Dalcin return node; 88*3dd0d304SLisandro Dalcin #undef loop1 89*3dd0d304SLisandro Dalcin #undef loop2 90*3dd0d304SLisandro Dalcin #undef index 91*3dd0d304SLisandro Dalcin } 92*3dd0d304SLisandro Dalcin 93*3dd0d304SLisandro Dalcin PETSC_STATIC_INLINE int GmshLexOrder_QUA(int p, int lex[], int node) 94*3dd0d304SLisandro Dalcin { 95*3dd0d304SLisandro Dalcin #define loop1(i) BL1(p, i) 96*3dd0d304SLisandro Dalcin #define loop2(i, j) BL2(p, i, j) 97*3dd0d304SLisandro Dalcin #define index(i, j) BI2(p, i, j) 98*3dd0d304SLisandro Dalcin int i, j, *sub, buf[BN2(GMSH_MAX_ORDER)]; 99*3dd0d304SLisandro Dalcin /* trivial case */ 100*3dd0d304SLisandro Dalcin if (p == 0) lex[0] = node++; 101*3dd0d304SLisandro Dalcin if (p == 0) return node; 102*3dd0d304SLisandro Dalcin /* vertex nodes */ 103*3dd0d304SLisandro Dalcin lex[index(0, 0)] = node++; 104*3dd0d304SLisandro Dalcin lex[index(p, 0)] = node++; 105*3dd0d304SLisandro Dalcin lex[index(p, p)] = node++; 106*3dd0d304SLisandro Dalcin lex[index(0, p)] = node++; 107*3dd0d304SLisandro Dalcin if (p == 1) return node; 108*3dd0d304SLisandro Dalcin /* internal edge nodes */ 109*3dd0d304SLisandro Dalcin loop1(i) lex[index(i, 0)] = node++; 110*3dd0d304SLisandro Dalcin loop1(j) lex[index(p, j)] = node++; 111*3dd0d304SLisandro Dalcin loop1(i) lex[index(p-i, p)] = node++; 112*3dd0d304SLisandro Dalcin loop1(j) lex[index(0, p-j)] = node++; 113*3dd0d304SLisandro Dalcin /* internal cell nodes */ 114*3dd0d304SLisandro Dalcin node = GmshLexOrder_QUA(p-2, sub=buf, node); 115*3dd0d304SLisandro Dalcin loop2(j, i) lex[index(i, j)] = *sub++; 116*3dd0d304SLisandro Dalcin return node; 117*3dd0d304SLisandro Dalcin #undef loop1 118*3dd0d304SLisandro Dalcin #undef loop2 119*3dd0d304SLisandro Dalcin #undef index 120*3dd0d304SLisandro Dalcin } 121*3dd0d304SLisandro Dalcin 122*3dd0d304SLisandro Dalcin PETSC_STATIC_INLINE int GmshLexOrder_TET(int p, int lex[], int node) 123*3dd0d304SLisandro Dalcin { 124*3dd0d304SLisandro Dalcin #define loop1(i) SL1(p, i) 125*3dd0d304SLisandro Dalcin #define loop2(i, j) SL2(p, i, j) 126*3dd0d304SLisandro Dalcin #define loop3(i, j, k) SL3(p, i, j, k) 127*3dd0d304SLisandro Dalcin #define index(i, j, k) SI3(p, i, j, k) 128*3dd0d304SLisandro Dalcin int i, j, k, *sub, buf[SN3(GMSH_MAX_ORDER)]; 129*3dd0d304SLisandro Dalcin /* trivial case */ 130*3dd0d304SLisandro Dalcin if (p == 0) lex[0] = node++; 131*3dd0d304SLisandro Dalcin if (p == 0) return node; 132*3dd0d304SLisandro Dalcin /* vertex nodes */ 133*3dd0d304SLisandro Dalcin lex[index(0, 0, 0)] = node++; 134*3dd0d304SLisandro Dalcin lex[index(p, 0, 0)] = node++; 135*3dd0d304SLisandro Dalcin lex[index(0, p, 0)] = node++; 136*3dd0d304SLisandro Dalcin lex[index(0, 0, p)] = node++; 137*3dd0d304SLisandro Dalcin if (p == 1) return node; 138*3dd0d304SLisandro Dalcin /* internal edge nodes */ 139*3dd0d304SLisandro Dalcin loop1(i) lex[index(i, 0, 0)] = node++; 140*3dd0d304SLisandro Dalcin loop1(j) lex[index(p-j, j, 0)] = node++; 141*3dd0d304SLisandro Dalcin loop1(j) lex[index(0, p-j, 0)] = node++; 142*3dd0d304SLisandro Dalcin loop1(k) lex[index(0, 0, p-k)] = node++; 143*3dd0d304SLisandro Dalcin loop1(j) lex[index(0, j, p-j)] = node++; 144*3dd0d304SLisandro Dalcin loop1(i) lex[index(i, 0, p-i)] = node++; 145*3dd0d304SLisandro Dalcin if (p == 2) return node; 146*3dd0d304SLisandro Dalcin /* internal face nodes */ 147*3dd0d304SLisandro Dalcin node = GmshLexOrder_TRI(p-3, sub=buf, node); 148*3dd0d304SLisandro Dalcin loop2(i, j) lex[index(i, j, 0)] = *sub++; 149*3dd0d304SLisandro Dalcin node = GmshLexOrder_TRI(p-3, sub=buf, node); 150*3dd0d304SLisandro Dalcin loop2(k, i) lex[index(i, 0, k)] = *sub++; 151*3dd0d304SLisandro Dalcin node = GmshLexOrder_TRI(p-3, sub=buf, node); 152*3dd0d304SLisandro Dalcin loop2(j, k) lex[index(0, j, k)] = *sub++; 153*3dd0d304SLisandro Dalcin node = GmshLexOrder_TRI(p-3, sub=buf, node); 154*3dd0d304SLisandro Dalcin loop2(j, i) lex[index(i, j, p-i-j)] = *sub++; 155*3dd0d304SLisandro Dalcin if (p == 3) return node; 156*3dd0d304SLisandro Dalcin /* internal cell nodes */ 157*3dd0d304SLisandro Dalcin node = GmshLexOrder_TET(p-4, sub=buf, node); 158*3dd0d304SLisandro Dalcin loop3(k, j, i) lex[index(i, j, k)] = *sub++; 159*3dd0d304SLisandro Dalcin return node; 160*3dd0d304SLisandro Dalcin #undef loop1 161*3dd0d304SLisandro Dalcin #undef loop2 162*3dd0d304SLisandro Dalcin #undef loop3 163*3dd0d304SLisandro Dalcin #undef index 164*3dd0d304SLisandro Dalcin } 165*3dd0d304SLisandro Dalcin 166*3dd0d304SLisandro Dalcin PETSC_STATIC_INLINE int GmshLexOrder_HEX(int p, int lex[], int node) 167*3dd0d304SLisandro Dalcin { 168*3dd0d304SLisandro Dalcin #define loop1(i) BL1(p, i) 169*3dd0d304SLisandro Dalcin #define loop2(i, j) BL2(p, i, j) 170*3dd0d304SLisandro Dalcin #define loop3(i, j, k) BL3(p, i, j, k) 171*3dd0d304SLisandro Dalcin #define index(i, j, k) BI3(p, i, j, k) 172*3dd0d304SLisandro Dalcin int i, j, k, *sub, buf[BN3(GMSH_MAX_ORDER)]; 173*3dd0d304SLisandro Dalcin /* trivial case */ 174*3dd0d304SLisandro Dalcin if (p == 0) lex[0] = node++; 175*3dd0d304SLisandro Dalcin if (p == 0) return node; 176*3dd0d304SLisandro Dalcin /* vertex nodes */ 177*3dd0d304SLisandro Dalcin lex[index(0, 0, 0)] = node++; 178*3dd0d304SLisandro Dalcin lex[index(p, 0, 0)] = node++; 179*3dd0d304SLisandro Dalcin lex[index(p, p, 0)] = node++; 180*3dd0d304SLisandro Dalcin lex[index(0, p, 0)] = node++; 181*3dd0d304SLisandro Dalcin lex[index(0, 0, p)] = node++; 182*3dd0d304SLisandro Dalcin lex[index(p, 0, p)] = node++; 183*3dd0d304SLisandro Dalcin lex[index(p, p, p)] = node++; 184*3dd0d304SLisandro Dalcin lex[index(0, p, p)] = node++; 185*3dd0d304SLisandro Dalcin if (p == 1) return node; 186*3dd0d304SLisandro Dalcin /* internal edge nodes */ 187*3dd0d304SLisandro Dalcin loop1(i) lex[index(i, 0, 0)] = node++; 188*3dd0d304SLisandro Dalcin loop1(j) lex[index(0, j, 0)] = node++; 189*3dd0d304SLisandro Dalcin loop1(k) lex[index(0, 0, k)] = node++; 190*3dd0d304SLisandro Dalcin loop1(j) lex[index(p, j, 0)] = node++; 191*3dd0d304SLisandro Dalcin loop1(k) lex[index(p, 0, k)] = node++; 192*3dd0d304SLisandro Dalcin loop1(i) lex[index(p-i, p, 0)] = node++; 193*3dd0d304SLisandro Dalcin loop1(k) lex[index(p, p, k)] = node++; 194*3dd0d304SLisandro Dalcin loop1(k) lex[index(0, p, k)] = node++; 195*3dd0d304SLisandro Dalcin loop1(i) lex[index(i, 0, p)] = node++; 196*3dd0d304SLisandro Dalcin loop1(j) lex[index(0, j, p)] = node++; 197*3dd0d304SLisandro Dalcin loop1(j) lex[index(p, j, p)] = node++; 198*3dd0d304SLisandro Dalcin loop1(i) lex[index(p-i, p, p)] = node++; 199*3dd0d304SLisandro Dalcin /* internal face nodes */ 200*3dd0d304SLisandro Dalcin node = GmshLexOrder_QUA(p-2, sub=buf, node); 201*3dd0d304SLisandro Dalcin loop2(i, j) lex[index(i, j, 0)] = *sub++; 202*3dd0d304SLisandro Dalcin node = GmshLexOrder_QUA(p-2, sub=buf, node); 203*3dd0d304SLisandro Dalcin loop2(k, i) lex[index(i, 0, k)] = *sub++; 204*3dd0d304SLisandro Dalcin node = GmshLexOrder_QUA(p-2, sub=buf, node); 205*3dd0d304SLisandro Dalcin loop2(j, k) lex[index(0, j, k)] = *sub++; 206*3dd0d304SLisandro Dalcin node = GmshLexOrder_QUA(p-2, sub=buf, node); 207*3dd0d304SLisandro Dalcin loop2(k, j) lex[index(p, j, k)] = *sub++; 208*3dd0d304SLisandro Dalcin node = GmshLexOrder_QUA(p-2, sub=buf, node); 209*3dd0d304SLisandro Dalcin loop2(k, i) lex[index(p-i, p, k)] = *sub++; 210*3dd0d304SLisandro Dalcin node = GmshLexOrder_QUA(p-2, sub=buf, node); 211*3dd0d304SLisandro Dalcin loop2(j, i) lex[index(i, j, p)] = *sub++; 212*3dd0d304SLisandro Dalcin /* internal cell nodes */ 213*3dd0d304SLisandro Dalcin node = GmshLexOrder_HEX(p-2, sub=buf, node); 214*3dd0d304SLisandro Dalcin loop3(k, j, i) lex[index(i, j, k)] = *sub++; 215*3dd0d304SLisandro Dalcin return node; 216*3dd0d304SLisandro Dalcin #undef loop1 217*3dd0d304SLisandro Dalcin #undef loop2 218*3dd0d304SLisandro Dalcin #undef loop3 219*3dd0d304SLisandro Dalcin #undef index 220*3dd0d304SLisandro Dalcin } 221*3dd0d304SLisandro Dalcin 222*3dd0d304SLisandro Dalcin PETSC_STATIC_INLINE int GmshLexOrder_PRI(int p, int lex[], int node) 223*3dd0d304SLisandro Dalcin { 224*3dd0d304SLisandro Dalcin #define loop1(i) BL1(p, i) 225*3dd0d304SLisandro Dalcin #define loops(i, j) SL2(p, i, j) 226*3dd0d304SLisandro Dalcin #define loopb(i, j) BL2(p, i, j) 227*3dd0d304SLisandro Dalcin #define index(i, j, k) (SI2(p,i,j)+BI1(p,k)*SN2(p)) 228*3dd0d304SLisandro Dalcin int i, j, k, *sub, buf[BN2(GMSH_MAX_ORDER)]; 229*3dd0d304SLisandro Dalcin /* trivial case */ 230*3dd0d304SLisandro Dalcin if (p == 0) lex[0] = node++; 231*3dd0d304SLisandro Dalcin if (p == 0) return node; 232*3dd0d304SLisandro Dalcin /* vertex nodes */ 233*3dd0d304SLisandro Dalcin lex[index(0, 0, 0)] = node++; 234*3dd0d304SLisandro Dalcin lex[index(p, 0, 0)] = node++; 235*3dd0d304SLisandro Dalcin lex[index(0, p, 0)] = node++; 236*3dd0d304SLisandro Dalcin lex[index(0, 0, p)] = node++; 237*3dd0d304SLisandro Dalcin lex[index(p, 0, p)] = node++; 238*3dd0d304SLisandro Dalcin lex[index(0, p, p)] = node++; 239*3dd0d304SLisandro Dalcin if (p == 1) return node; 240*3dd0d304SLisandro Dalcin /* internal edge nodes */ 241*3dd0d304SLisandro Dalcin loop1(i) lex[index(i, 0, 0)] = node++; 242*3dd0d304SLisandro Dalcin loop1(j) lex[index(0, j, 0)] = node++; 243*3dd0d304SLisandro Dalcin loop1(k) lex[index(0, 0, k)] = node++; 244*3dd0d304SLisandro Dalcin loop1(j) lex[index(p-j, j, 0)] = node++; 245*3dd0d304SLisandro Dalcin loop1(k) lex[index(p, 0, k)] = node++; 246*3dd0d304SLisandro Dalcin loop1(k) lex[index(0, p, k)] = node++; 247*3dd0d304SLisandro Dalcin loop1(i) lex[index(i, 0, p)] = node++; 248*3dd0d304SLisandro Dalcin loop1(j) lex[index(0, j, p)] = node++; 249*3dd0d304SLisandro Dalcin loop1(j) lex[index(p-j, j, p)] = node++; 250*3dd0d304SLisandro Dalcin if (p >= 3) { 251*3dd0d304SLisandro Dalcin /* internal bottom face nodes */ 252*3dd0d304SLisandro Dalcin node = GmshLexOrder_TRI(p-3, sub=buf, node); 253*3dd0d304SLisandro Dalcin loops(i, j) lex[index(i, j, 0)] = *sub++; 254*3dd0d304SLisandro Dalcin /* internal top face nodes */ 255*3dd0d304SLisandro Dalcin node = GmshLexOrder_TRI(p-3, sub=buf, node); 256*3dd0d304SLisandro Dalcin loops(j, i) lex[index(i, j, p)] = *sub++; 257*3dd0d304SLisandro Dalcin } 258*3dd0d304SLisandro Dalcin if (p >= 2) { 259*3dd0d304SLisandro Dalcin /* internal front face nodes */ 260*3dd0d304SLisandro Dalcin node = GmshLexOrder_QUA(p-2, sub=buf, node); 261*3dd0d304SLisandro Dalcin loopb(k, i) lex[index(i, 0, k)] = *sub++; 262*3dd0d304SLisandro Dalcin /* internal left face nodes */ 263*3dd0d304SLisandro Dalcin node = GmshLexOrder_QUA(p-2, sub=buf, node); 264*3dd0d304SLisandro Dalcin loopb(j, k) lex[index(0, j, k)] = *sub++; 265*3dd0d304SLisandro Dalcin /* internal back face nodes */ 266*3dd0d304SLisandro Dalcin node = GmshLexOrder_QUA(p-2, sub=buf, node); 267*3dd0d304SLisandro Dalcin loopb(k, j) lex[index(p-j, j, k)] = *sub++; 268*3dd0d304SLisandro Dalcin } 269*3dd0d304SLisandro Dalcin if (p >= 3) { 270*3dd0d304SLisandro Dalcin /* internal cell nodes */ 271*3dd0d304SLisandro Dalcin typedef struct {int i,j;} pair; 272*3dd0d304SLisandro Dalcin pair ij[SN2(GMSH_MAX_ORDER)], tmp[SN2(GMSH_MAX_ORDER)]; 273*3dd0d304SLisandro Dalcin int m = GmshLexOrder_TRI(p-3, sub=buf, 0), l = 0; 274*3dd0d304SLisandro Dalcin loops(j, i) {tmp[l].i = i; tmp[l].j = j; l++;} 275*3dd0d304SLisandro Dalcin for (l=0; l<m; ++l) ij[sub[l]] = tmp[l]; 276*3dd0d304SLisandro Dalcin for (l=0; l<m; ++l) { 277*3dd0d304SLisandro Dalcin i = ij[l].i; j = ij[l].j; 278*3dd0d304SLisandro Dalcin node = GmshLexOrder_SEG(p-2, sub=buf, node); 279*3dd0d304SLisandro Dalcin loop1(k) lex[index(i, j, k)] = *sub++; 280*3dd0d304SLisandro Dalcin } 281*3dd0d304SLisandro Dalcin } 282*3dd0d304SLisandro Dalcin return node; 283*3dd0d304SLisandro Dalcin #undef loop1 284*3dd0d304SLisandro Dalcin #undef loops 285*3dd0d304SLisandro Dalcin #undef loopb 286*3dd0d304SLisandro Dalcin #undef index 287*3dd0d304SLisandro Dalcin } 288*3dd0d304SLisandro Dalcin 289*3dd0d304SLisandro Dalcin PETSC_STATIC_INLINE int GmshLexOrder_PYR(int p, int lex[], int node) 290*3dd0d304SLisandro Dalcin { 291*3dd0d304SLisandro Dalcin int i, m = GmshNumNodes_PYR(p); 292*3dd0d304SLisandro Dalcin for (i=0; i<m; ++i) {lex[i] = node++; } /* TODO */ 293*3dd0d304SLisandro Dalcin return node; 294*3dd0d304SLisandro Dalcin } 295