From 0d218e93475039361678938cff079439e04fb469 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Mon, 14 Jul 2008 19:02:22 +0000 Subject: [PATCH] cleanup --- Geo/MElement.cpp | 262 ++++++++++--------------------- Geo/MElement.h | 357 ++++++++++++++++++------------------------ Mesh/HighOrder.cpp | 12 +- doc/VERSIONS.txt | 7 +- doc/gmsh.html | 14 +- doc/texinfo/gmsh.texi | 262 ++++++++++++++----------------- 6 files changed, 374 insertions(+), 540 deletions(-) diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp index cebe124219..401bd52975 100644 --- a/Geo/MElement.cpp +++ b/Geo/MElement.cpp @@ -624,11 +624,10 @@ void MElement::writeBDF(FILE *fp, int format, int elementary) } } -void MTriangle::jac(int ord, MVertex *vs[], double uu, double vv, double ww, double j[2][3]) +void MTriangle::jac(int ord, MVertex *vs[], double uu, double vv, double ww, + double j[2][3]) { -#if defined(HAVE_GMSH_EMBEDDED) - return; -#else +#if !defined(HAVE_GMSH_EMBEDDED) double grads[256][2]; int nf = getNumFaceVertices(); @@ -644,11 +643,11 @@ void MTriangle::jac(int ord, MVertex *vs[], double uu, double vv, double ww, dou } else{ switch(ord){ - case 1: gmshFunctionSpaces::find(MSH_TRI_3).df(uu, vv, ww,grads); break; - case 2: gmshFunctionSpaces::find(MSH_TRI_6).df(uu, vv, ww,grads); break; - case 3: gmshFunctionSpaces::find(MSH_TRI_10).df(uu, vv, ww,grads); break; - case 4: gmshFunctionSpaces::find(MSH_TRI_15).df(uu, vv, ww,grads); break; - case 5: gmshFunctionSpaces::find(MSH_TRI_21).df(uu, vv, ww,grads); break; + case 1: gmshFunctionSpaces::find(MSH_TRI_3).df(uu, vv, ww, grads); break; + case 2: gmshFunctionSpaces::find(MSH_TRI_6).df(uu, vv, ww, grads); break; + case 3: gmshFunctionSpaces::find(MSH_TRI_10).df(uu, vv, ww, grads); break; + case 4: gmshFunctionSpaces::find(MSH_TRI_15).df(uu, vv, ww, grads); break; + case 5: gmshFunctionSpaces::find(MSH_TRI_21).df(uu, vv, ww, grads); break; default: Msg::Error("Order %d triangle jac not implemented", ord); break; } } @@ -670,34 +669,33 @@ void MTriangle::jac(int ord, MVertex *vs[], double uu, double vv, double ww, dou #endif } -void MTriangle::pnt(int ord, MVertex *vs[], double uu, double vv, double ww, SPoint3 &p) +void MTriangle::pnt(int ord, MVertex *vs[], double uu, double vv, double ww, + SPoint3 &p) { #if !defined(HAVE_GMSH_EMBEDDED) double sf[256]; int nf = getNumFaceVertices(); - // printf("%d %d\n",nf,ord); if (!nf){ switch(ord){ - case 1: gmshFunctionSpaces::find(MSH_TRI_3).f(uu, vv,sf); break; - case 2: gmshFunctionSpaces::find(MSH_TRI_6).f(uu, vv,sf); break; - case 3: gmshFunctionSpaces::find(MSH_TRI_9).f(uu, vv,sf); break; - case 4: gmshFunctionSpaces::find(MSH_TRI_12).f(uu, vv,sf); break; - case 5: gmshFunctionSpaces::find(MSH_TRI_15I).f(uu, vv,sf); break; + case 1: gmshFunctionSpaces::find(MSH_TRI_3).f(uu, vv, sf); break; + case 2: gmshFunctionSpaces::find(MSH_TRI_6).f(uu, vv, sf); break; + case 3: gmshFunctionSpaces::find(MSH_TRI_9).f(uu, vv, sf); break; + case 4: gmshFunctionSpaces::find(MSH_TRI_12).f(uu, vv, sf); break; + case 5: gmshFunctionSpaces::find(MSH_TRI_15I).f(uu, vv, sf); break; default: Msg::Error("Order %d triangle pnt not implemented", ord); break; } } else{ switch(ord){ - case 1: gmshFunctionSpaces::find(MSH_TRI_3).f(uu, vv,sf); break; - case 2: gmshFunctionSpaces::find(MSH_TRI_6).f(uu, vv,sf); break; - case 3: gmshFunctionSpaces::find(MSH_TRI_10).f(uu, vv,sf); break; - case 4: gmshFunctionSpaces::find(MSH_TRI_15).f(uu, vv,sf); break; - case 5: gmshFunctionSpaces::find(MSH_TRI_21).f(uu, vv,sf); break; + case 1: gmshFunctionSpaces::find(MSH_TRI_3).f(uu, vv, sf); break; + case 2: gmshFunctionSpaces::find(MSH_TRI_6).f(uu, vv, sf); break; + case 3: gmshFunctionSpaces::find(MSH_TRI_10).f(uu, vv, sf); break; + case 4: gmshFunctionSpaces::find(MSH_TRI_15).f(uu, vv, sf); break; + case 5: gmshFunctionSpaces::find(MSH_TRI_21).f(uu, vv, sf); break; default: Msg::Error("Order %d triangle pnt not implemented", ord); break; } } - // printf("coucou\n"); double x = 0 ; for(int i = 0; i < 3; i++) x += sf[i] * _v[i]->x(); double y = 0 ; for(int i = 0; i < 3; i++) y += sf[i] * _v[i]->y(); @@ -711,85 +709,10 @@ void MTriangle::pnt(int ord, MVertex *vs[], double uu, double vv, double ww, SPo #endif } -void MTetrahedron::pnt(int ord, MVertex *vs[], double uu, double vv, double ww,SPoint3 &p) -{ -#if !defined(HAVE_GMSH_EMBEDDED) - double sf[256]; - - int nv = getNumVolumeVertices(); - - if (!nv){ - switch(ord){ - case 1: gmshFunctionSpaces::find(MSH_TET_4).f(uu, vv, ww,sf); break; - case 2: gmshFunctionSpaces::find(MSH_TET_10).f(uu, vv, ww,sf); break; - case 3: gmshFunctionSpaces::find(MSH_TET_20).f(uu, vv, ww,sf); break; - case 4: gmshFunctionSpaces::find(MSH_TET_34).f(uu, vv, ww,sf); break; - case 5: gmshFunctionSpaces::find(MSH_TET_52).f(uu, vv, ww,sf); break; - default: Msg::Error("Order %d tetrahedron pnt not implemented", ord); break; - } - } - else{ - switch(ord){ - case 4: gmshFunctionSpaces::find(MSH_TET_35).f(uu, vv, ww,sf); break; - case 5: gmshFunctionSpaces::find(MSH_TET_56).f(uu, vv, ww,sf); break; - default: Msg::Error("Order %d tetrahedron pnt not implemented", ord); break; - } - } - - double x = 0 ; for(int i = 0; i < 4; i++) x += sf[i] * _v[i]->x(); - double y = 0 ; for(int i = 0; i < 4; i++) y += sf[i] * _v[i]->y(); - double z = 0 ; for(int i = 0; i < 4; i++) z += sf[i] * _v[i]->z(); - - const int N = (ord+1)*(ord+2)*(ord+3)/6; - - - for(int i = 4; i < N; i++) x += sf[i] * vs[i - 4]->x(); - for(int i = 4; i < N; i++) y += sf[i] * vs[i - 4]->y(); - for(int i = 4; i < N; i++) z += sf[i] * vs[i - 4]->z(); - - p = SPoint3(x,y,z); -#endif -} - -void MTetrahedron::pnt(int ord, std::vector<MVertex *> & vs, double uu, double vv, double ww,SPoint3 &p) +void MTetrahedron::jac(int ord, MVertex *vs[], double uu, double vv, double ww, + double j[3][3]) { #if !defined(HAVE_GMSH_EMBEDDED) - double sf[256]; - switch(ord){ - case 1: gmshFunctionSpaces::find(MSH_TET_4) .f(uu, vv, ww,sf); break; - case 2: gmshFunctionSpaces::find(MSH_TET_10).f(uu, vv, ww,sf); break; - case 3: gmshFunctionSpaces::find(MSH_TET_20).f(uu, vv, ww,sf); break; - case 4: gmshFunctionSpaces::find(MSH_TET_35).f(uu, vv, ww,sf); break; - case 5: gmshFunctionSpaces::find(MSH_TET_56).f(uu, vv, ww,sf); break; - default: Msg::Error("Order %d tetrahedron pnt not implemented", ord); break; - } - - double x = 0 ; for(int i = 0; i < 4; i++) x += sf[i] * _v[i]->x(); - double y = 0 ; for(int i = 0; i < 4; i++) y += sf[i] * _v[i]->y(); - double z = 0 ; for(int i = 0; i < 4; i++) z += sf[i] * _v[i]->z(); - - const int N = (ord+1)*(ord+2)*(ord+3)/6; - - - for(int i = 4; i < N; i++) x += sf[i] * vs[i - 4]->x(); - for(int i = 4; i < N; i++) y += sf[i] * vs[i - 4]->y(); - for(int i = 4; i < N; i++) z += sf[i] * vs[i - 4]->z(); - - p = SPoint3(x,y,z); -#endif -} - -void MTetrahedron::pnt(double uu, double vv ,double ww, SPoint3& p) { - return pnt(1,0,uu,vv,ww,p); -} - - -void MTetrahedron::jac(int ord, MVertex *vs[], double uu, double vv, double ww, double j[3][3]) -{ -#if defined(HAVE_GMSH_EMBEDDED) - return; -#else - double grads[256][3]; switch(ord){ case 1: gmshFunctionSpaces::find(MSH_TET_4) .df(uu, vv, ww, grads); break; @@ -827,124 +750,113 @@ void MTetrahedron::jac(int ord, MVertex *vs[], double uu, double vv, double ww, for(int i = 4; i < N; i++) j[0][2] += grads[i][0] * vs[i - 4]->z(); for(int i = 4; i < N; i++) j[1][2] += grads[i][1] * vs[i - 4]->z(); for(int i = 4; i < N; i++) j[2][2] += grads[i][2] * vs[i - 4]->z(); - #endif } -void MTetrahedron::jac(int ord, std::vector<MVertex *>& vs, double uu, double vv, double ww, double j[3][3]) +void MTetrahedron::pnt(int ord, MVertex *vs[], double uu, double vv, double ww, + SPoint3 &p) { -#if defined(HAVE_GMSH_EMBEDDED) - return; -#else - - double grads[256][3]; - switch(ord){ - case 1: gmshFunctionSpaces::find(MSH_TET_4).df(uu, vv, ww,grads); break; - case 2: gmshFunctionSpaces::find(MSH_TET_10).df(uu, vv, ww, grads); break; - case 3: gmshFunctionSpaces::find(MSH_TET_20).df(uu, vv, ww, grads); break; - case 4: gmshFunctionSpaces::find(MSH_TET_35).df(uu, vv, ww, grads); break; - case 5: gmshFunctionSpaces::find(MSH_TET_56).df(uu, vv, ww, grads); break; - default: Msg::Error("Order %d tetrahedron jac not implemented", ord); break; - } - - j[0][0] = 0 ; for(int i = 0; i < 4; i++) j[0][0] += grads [i][0] * _v[i]->x(); - j[1][0] = 0 ; for(int i = 0; i < 4; i++) j[1][0] += grads [i][1] * _v[i]->x(); - j[2][0] = 0 ; for(int i = 0; i < 4; i++) j[2][0] += grads [i][2] * _v[i]->x(); - j[0][1] = 0 ; for(int i = 0; i < 4; i++) j[0][1] += grads [i][0] * _v[i]->y(); - j[1][1] = 0 ; for(int i = 0; i < 4; i++) j[1][1] += grads [i][1] * _v[i]->y(); - j[2][1] = 0 ; for(int i = 0; i < 4; i++) j[2][1] += grads [i][2] * _v[i]->y(); - j[0][2] = 0 ; for(int i = 0; i < 4; i++) j[0][2] += grads [i][0] * _v[i]->z(); - j[1][2] = 0 ; for(int i = 0; i < 4; i++) j[1][2] += grads [i][1] * _v[i]->z(); - j[2][2] = 0 ; for(int i = 0; i < 4; i++) j[2][2] += grads [i][2] * _v[i]->z(); - - if (ord == 1) return; - - const int N = (ord+1)*(ord+2)*(ord+3)/6; +#if !defined(HAVE_GMSH_EMBEDDED) + double sf[256]; - for(int i = 4; i < N; i++) j[0][0] += grads[i][0] * vs[i - 4]->x(); - for(int i = 4; i < N; i++) j[1][0] += grads[i][1] * vs[i - 4]->x(); - for(int i = 4; i < N; i++) j[2][0] += grads[i][2] * vs[i - 4]->x(); + int nv = getNumVolumeVertices(); - for(int i = 4; i < N; i++) j[0][1] += grads[i][0] * vs[i - 4]->y(); - for(int i = 4; i < N; i++) j[1][1] += grads[i][1] * vs[i - 4]->y(); - for(int i = 4; i < N; i++) j[2][1] += grads[i][2] * vs[i - 4]->y(); + if (!nv){ + switch(ord){ + case 1: gmshFunctionSpaces::find(MSH_TET_4).f(uu, vv, ww, sf); break; + case 2: gmshFunctionSpaces::find(MSH_TET_10).f(uu, vv, ww, sf); break; + case 3: gmshFunctionSpaces::find(MSH_TET_20).f(uu, vv, ww, sf); break; + case 4: gmshFunctionSpaces::find(MSH_TET_34).f(uu, vv, ww, sf); break; + case 5: gmshFunctionSpaces::find(MSH_TET_52).f(uu, vv, ww, sf); break; + default: Msg::Error("Order %d tetrahedron pnt not implemented", ord); break; + } + } + else{ + switch(ord){ + case 4: gmshFunctionSpaces::find(MSH_TET_35).f(uu, vv, ww, sf); break; + case 5: gmshFunctionSpaces::find(MSH_TET_56).f(uu, vv, ww, sf); break; + default: Msg::Error("Order %d tetrahedron pnt not implemented", ord); break; + } + } + + double x = 0 ; for(int i = 0; i < 4; i++) x += sf[i] * _v[i]->x(); + double y = 0 ; for(int i = 0; i < 4; i++) y += sf[i] * _v[i]->y(); + double z = 0 ; for(int i = 0; i < 4; i++) z += sf[i] * _v[i]->z(); - for(int i = 4; i < N; i++) j[0][2] += grads[i][0] * vs[i - 4]->z(); - for(int i = 4; i < N; i++) j[1][2] += grads[i][1] * vs[i - 4]->z(); - for(int i = 4; i < N; i++) j[2][2] += grads[i][2] * vs[i - 4]->z(); + const int N = (ord+1)*(ord+2)*(ord+3)/6; -#endif -} + + for(int i = 4; i < N; i++) x += sf[i] * vs[i - 4]->x(); + for(int i = 4; i < N; i++) y += sf[i] * vs[i - 4]->y(); + for(int i = 4; i < N; i++) z += sf[i] * vs[i - 4]->z(); -void MTetrahedron::jac( double uu, double vv, double ww, double j[3][3]) { - return jac(1,0,uu,vv,ww,j); + p = SPoint3(x,y,z); +#endif } const int numSubEdges = 6; int MTriangleN::getNumFacesRep(){ return numSubEdges * numSubEdges; } -void MTriangleN::getFaceRep(int num, double *x, double *y, double *z, SVector3 *n){ - +void MTriangleN::getFaceRep(int num, double *x, double *y, double *z, SVector3 *n) +{ // on the first layer, we have (numSubEdges-1) * 2 + 1 triangles // on the second layer, we have (numSubEdges-2) * 2 + 1 triangles // on the ith layer, we have (numSubEdges-1-i) * 2 + 1 triangles - int ix, iy; int nbt = 0; - for (int i=0;i<numSubEdges;i++){ - int nbl = (numSubEdges-i-1)*2 + 1; + for (int i = 0; i < numSubEdges; i++){ + int nbl = (numSubEdges - i - 1) * 2 + 1; nbt += nbl; if (nbt > num){ iy = i; - ix = nbl-(nbt-num); + ix = nbl - (nbt - num); break; } } - const double d = 1./numSubEdges; + const double d = 1. / numSubEdges; SPoint3 pnt1, pnt2, pnt3; - double J1[2][3],J2[2][3],J3[2][3]; - if (ix %2 == 0){ - pnt(ix/2*d, iy*d, 0,pnt1); - pnt((ix/2+1)*d, iy*d, 0,pnt2); - pnt(ix/2*d, (iy+1)*d, 0,pnt3); - jac(ix/2*d, iy*d, 0,J1); - jac((ix/2+1)*d, iy*d, 0,J2); - jac(ix/2*d, (iy+1)*d, 0,J3); + double J1[2][3], J2[2][3], J3[2][3]; + if (ix % 2 == 0){ + pnt(ix / 2 * d, iy * d, 0, pnt1); + pnt((ix / 2 + 1) * d, iy * d, 0, pnt2); + pnt(ix / 2 * d, (iy + 1) * d, 0, pnt3); + jac(ix / 2 * d, iy * d, 0, J1); + jac((ix / 2 + 1) * d, iy * d, 0, J2); + jac(ix / 2 * d, (iy + 1) * d, 0, J3); } else{ - pnt((ix/2+1)*d, iy*d, 0,pnt1); - pnt((ix/2+1)*d, (iy+1)*d, 0,pnt2); - pnt(ix/2*d, (iy+1)*d, 0,pnt3); - jac((ix/2+1)*d, iy*d, 0,J1); - jac((ix/2+1)*d, (iy+1)*d, 0,J2); - jac(ix/2*d, (iy+1)*d, 0,J3); + pnt((ix / 2 + 1) * d, iy * d, 0, pnt1); + pnt((ix / 2 + 1) * d, (iy + 1) * d, 0, pnt2); + pnt(ix / 2 * d, (iy + 1) * d, 0, pnt3); + jac((ix / 2 + 1) * d, iy * d, 0, J1); + jac((ix / 2 + 1) * d, (iy + 1) * d, 0, J2); + jac(ix / 2 * d, (iy + 1) * d, 0, J3); } { - SVector3 d1 (J1[0][0],J1[0][1],J1[0][2]); - SVector3 d2 (J1[1][0],J1[1][1],J1[1][2]); - n[0] = crossprod(d1,d2); + SVector3 d1(J1[0][0], J1[0][1], J1[0][2]); + SVector3 d2(J1[1][0], J1[1][1], J1[1][2]); + n[0] = crossprod(d1, d2); n[0].normalize(); } { - SVector3 d1 (J2[0][0],J2[0][1],J2[0][2]); - SVector3 d2 (J2[1][0],J2[1][1],J2[1][2]); - n[1] = crossprod(d1,d2); + SVector3 d1(J2[0][0], J2[0][1], J2[0][2]); + SVector3 d2(J2[1][0], J2[1][1], J2[1][2]); + n[1] = crossprod(d1, d2); n[1].normalize(); } { - SVector3 d1 (J3[0][0],J3[0][1],J3[0][2]); - SVector3 d2 (J3[1][0],J3[1][1],J3[1][2]); - n[2] = crossprod(d1,d2); + SVector3 d1(J3[0][0], J3[0][1], J3[0][2]); + SVector3 d2(J3[1][0], J3[1][1], J3[1][2]); + n[2] = crossprod(d1, d2); n[2].normalize(); } x[0] = pnt1.x(); x[1] = pnt2.x(); x[2] = pnt3.x(); y[0] = pnt1.y(); y[1] = pnt2.y(); y[2] = pnt3.y(); z[0] = pnt1.z(); z[1] = pnt2.z(); z[2] = pnt3.z(); - } int MTriangleN::getNumEdgesRep(){ return 3 * numSubEdges; } @@ -956,7 +868,7 @@ void MTriangleN::getEdgeRep(int num, double *x, double *y, double *z, SVector3 * if (num < N){ SPoint3 pnt1, pnt2; pnt((double)num / N, 0., 0,pnt1); - pnt((double)(num + 1) / N, 0., 0,pnt2); + pnt((double)(num + 1) / N, 0., 0, pnt2); x[0] = pnt1.x(); x[1] = pnt2.x(); y[0] = pnt1.y(); y[1] = pnt2.y(); z[0] = pnt1.z(); z[1] = pnt2.z(); @@ -965,8 +877,8 @@ void MTriangleN::getEdgeRep(int num, double *x, double *y, double *z, SVector3 * if (num < 2 * N){ SPoint3 pnt1, pnt2; num -= N; - pnt(1. - (double)num / N, (double)num / N, 0,pnt1); - pnt(1. - (double)(num + 1) / N, (double)(num + 1) / N, 0,pnt2); + pnt(1. - (double)num / N, (double)num / N, 0, pnt1); + pnt(1. - (double)(num + 1) / N, (double)(num + 1) / N, 0, pnt2); x[0] = pnt1.x(); x[1] = pnt2.x(); y[0] = pnt1.y(); y[1] = pnt2.y(); z[0] = pnt1.z(); z[1] = pnt2.z(); diff --git a/Geo/MElement.h b/Geo/MElement.h index 5ae3569fcc..ef855b77c2 100644 --- a/Geo/MElement.h +++ b/Geo/MElement.h @@ -234,10 +234,6 @@ class MElementFactory{ /* * MLine * - * v - * - * ^ - * | * 0----------1 --> u * */ @@ -317,11 +313,7 @@ class MLine : public MElement { /* * MLine3 * - * v - * - * ^ - * | - * 0-----2----1 --> u + * 0-----2----1 * */ class MLine3 : public MLine { @@ -373,11 +365,7 @@ class MLine3 : public MLine { /* * MLineN * - * v - * - * ^ - * | - * 0---2---...-(N-1)-1 --> u + * 0---2---...-(N-1)-1 * */ class MLineN : public MLine { @@ -424,10 +412,10 @@ class MLineN : public MLine { } }; -/* MTriangle +/* + * MTriangle * * v - * * ^ * | * 2 @@ -521,16 +509,6 @@ class MTriangle : public MElement { { MVertex *tmp = _v[1]; _v[1] = _v[2]; _v[2] = tmp; } - virtual void jac(int order, MVertex *verts[], double u, double v, double w, double jac[2][3]); - virtual void jac(double u, double v, double w, double j[2][3]) - { - jac(1, 0, u, v, w, j); - } - virtual void pnt(int order, MVertex *verts[], double u, double v, double w, SPoint3 &); - virtual void pnt(double u, double v, double w, SPoint3 &p) - { - pnt(1, 0, u, v, w, p); - } virtual void getShapeFunction(int num, double u, double v, double w, double &s) { switch(num){ @@ -555,6 +533,18 @@ class MTriangle : public MElement { return false; return true; } + virtual void jac(int order, MVertex *verts[], double u, double v, double w, + double j[2][3]); + virtual void jac(double u, double v, double w, double j[2][3]) + { + jac(1, 0, u, v, w, j); + } + virtual void pnt(int order, MVertex *verts[], double u, double v, double w, + SPoint3 &p); + virtual void pnt(double u, double v, double w, SPoint3 &p) + { + pnt(1, 0, u, v, w, p); + } virtual void getIntegrationPoints(int pOrder, int *npts, IntPt **pts) const; private: int edges_tri(const int edge, const int vert) const @@ -571,17 +561,13 @@ class MTriangle : public MElement { /* * MTriangle6 * - * v - * - * ^ - * | * 2 * |`\ * | `\ * 5 `4 * | `\ * | `\ - * 0-----3----1 --> u + * 0-----3----1 * */ class MTriangle6 : public MTriangle { @@ -671,12 +657,8 @@ class MTriangle6 : public MTriangle { }; /* - * MTriangleN - * - * v + * MTriangleN FIXME: check the plot * - * ^ - * | * 2 * |`\ E = order - 1; * | `\ N = total number of vertices @@ -687,7 +669,7 @@ class MTriangle6 : public MTriangle { * 2+3E 3+E * | 3+3E to N-1 `\ * | `\ - * 0---3--...---2+E---1 --> u + * 0---3--...---2+E---1 * */ class MTriangleN : public MTriangle { @@ -769,28 +751,27 @@ class MTriangleN : public MTriangle { } virtual void jac(double u, double v, double w, double j[2][3]) { - MTriangle::jac(_order, &(*(_vs.begin())), u, v, w, j); + MTriangle::jac(_order, &_vs[0], u, v, w, j); } virtual void pnt(double u, double v, double w, SPoint3 &p) { - MTriangle::pnt(_order, &(*(_vs.begin())), u, v, w, p); + MTriangle::pnt(_order, &_vs[0], u, v, w, p); } }; /* * MQuadrangle * - * v - * - * ^ - * | - * 3----------2 - * | | - * | | - * | | - * | | - * | | - * 0----------1 --> u + * v + * ^ + * | + * 3-----------2 + * | | | + * | | | + * | +---- | --> u + * | | + * | | + * 0-----------1 * */ class MQuadrangle : public MElement { @@ -912,17 +893,13 @@ class MQuadrangle : public MElement { /* * MQuadrangle8 * - * v - * - * ^ - * | - * 3-----6----2 - * | | - * | | - * 7 5 - * | | - * | | - * 0-----4----1 --> u + * 3-----6-----2 + * | | + * | | + * 7 5 + * | | + * | | + * 0-----4-----1 * */ class MQuadrangle8 : public MQuadrangle { @@ -1008,17 +985,13 @@ class MQuadrangle8 : public MQuadrangle { /* * MQuadrangle9 * - * v - * - * ^ - * | - * 3-----6----2 - * | | - * | | - * 7 8 5 - * | | - * | | - * 0-----4----1 --> u + * 3-----6-----2 + * | | + * | | + * 7 8 5 + * | | + * | | + * 0-----4-----1 * */ class MQuadrangle9 : public MQuadrangle { @@ -1105,7 +1078,7 @@ class MQuadrangle9 : public MQuadrangle { * ,/ '. `\ * ,/ | `\ * ,/ | `\ - * 0-----------'+--------1 --> u + * 0-----------'.--------1 --> u * `\. | ,/ * `\. | ,/ * `\. '. ,/ @@ -1220,14 +1193,6 @@ class MTetrahedron : public MElement { default : s = 0.; break; } } - virtual void jac(int order, MVertex *verts[], double u, double v, double w, double jac[3][3]); - virtual void jac(int order,std::vector<MVertex*>& verts,double u, double v, double w , double jac[3][3]); - virtual void jac(double u,double v,double w,double [3][3]); - - virtual void pnt(int order, MVertex *verts[], double u, double v, double w, SPoint3 &); - virtual void pnt(int order, std::vector<MVertex *>& verts, double u, double v, double w, SPoint3 &); - virtual void pnt(double u, double v, double w, SPoint3 &); - virtual void getGradShapeFunction(int num, double u, double v, double w, double s[3]) { switch(num) { @@ -1244,6 +1209,28 @@ class MTetrahedron : public MElement { return false; return true; } + virtual void jac(int order, MVertex *verts[], double u, double v, double w, + double j[3][3]); + virtual void jac(int order, std::vector<MVertex*>& verts, double u, double v, double w, + double j[3][3]) + { + jac(order, &verts[0], u, v, w, j); + } + virtual void jac(double u, double v, double w, double j[3][3]) + { + jac(1, 0, u, v, w, j); + } + virtual void pnt(int order, MVertex *verts[], double u, double v, double w, + SPoint3 &p); + virtual void pnt(int order, std::vector<MVertex*> &verts, double u, double v, double w, + SPoint3 &p) + { + pnt(order, &verts[0], u, v, w, p); + } + virtual void pnt(double u, double v, double w, SPoint3 &p) + { + pnt(1, 0, u, v, w, p); + } virtual void getIntegrationPoints(int pOrder, int *npts, IntPt **pts) const; private: int edges_tetra(const int edge, const int vert) const @@ -1273,24 +1260,18 @@ class MTetrahedron : public MElement { /* * MTetrahedron10 * - * v - * . - * ,/ - * / * 2 * ,/|`\ * ,/ | `\ * ,6 '. `5 * ,/ 8 `\ * ,/ | `\ - * 0--------4--'+--------1 --> u + * 0--------4--'.--------1 * `\. | ,/ * `\. | ,9 * `7. '. ,/ * `\. |/ * `3 - * `\. - * ` w * */ class MTetrahedron10 : public MTetrahedron { @@ -1389,38 +1370,31 @@ class MTetrahedron10 : public MTetrahedron { tmp = _vs[1]; _vs[1] = _vs[2]; _vs[2] = tmp; tmp = _vs[5]; _vs[5] = _vs[3]; _vs[3] = tmp; } - - virtual void jac(double u,double v,double w, double jac[3][3]) { + virtual void jac(double u,double v,double w, double jac[3][3]) + { MTetrahedron::jac(2,_vs,u,v,w,jac); } - - virtual void pnt(double u,double v,double w, SPoint3& p) { + virtual void pnt(double u,double v,double w, SPoint3& p) + { MTetrahedron::pnt(2, _vs, u, v, w, p); } - }; /* - * MTetrahedronN + * MTetrahedronN FIXME: check the plot * - * v E = order - 1 - * . C = 4 + 6*E - * ,/ F = ((order - 1)*(order - 2))/2 - * / N = total number of vertices * 2 - * ,/|`\ Interior vertex numbers - * ,/ | `\ for edge 0 <= i <= 5: 4+i*E to 3+(i+1)*E - * ,/ '. `\ for face 0 <= j <= 3: C+j*F to C-1+(j+1)*F - * ,/ | `\ in volume : C+4*F to N-1 - * ,/ | `\ - * 0-----------'+--------1 --> u - * `\. | ,/ - * `\. | ,/ - * `\. '. ,/ - * `\. |/ + * ,/|`\ + * ,/ | `\ E = order - 1 + * ,/ '. `\ C = 4 + 6*E + * ,/ | `\ F = ((order - 1)*(order - 2))/2 + * ,/ | `\ N = total number of vertices + * 0-----------'.--------1 + * `\. | ,/ Interior vertex numbers + * `\. | ,/ for edge 0 <= i <= 5: 4+i*E to 3+(i+1)*E + * `\. '. ,/ for face 0 <= j <= 3: C+j*F to C-1+(j+1)*F + * `\. |/ in volume : C+4*F to N-1 * `3 - * `\. - * ` w * */ class MTetrahedronN : public MTetrahedron { @@ -1506,24 +1480,18 @@ class MTetrahedronN : public MTetrahedron { /* * MHexahedron * - * v - * - * ^ - * | + * v * 3----------2 - * |\ |\ - * | \ | \ - * | \ | \ + * |\ ^ |\ + * | \ | | \ + * | \ | | \ * | 7------+---6 - * | | | | - * 0---+------1 | --> u - * \ | \ | - * \ | \ | - * \| \| + * | | +-- |-- | -> u + * 0---+---\--1 | + * \ | \ \ | + * \ | \ \ | + * \| w \| * 4----------5 - * \ - * \ - * w * */ class MHexahedron : public MElement { @@ -1707,24 +1675,17 @@ class MHexahedron : public MElement { /* * MHexahedron20 * - * v - * - * ^ - * | * 3----13----2 * |\ |\ - * |15 | 14 + * | 15 | 14 * 9 \ 11 \ * | 7----19+---6 * | | | | - * 0---+-8----1 | --> u - * \ 17 \ 18 + * 0---+-8----1 | + * \ 17 \ 18 * 10 | 12| * \| \| * 4----16----5 - * \ - * \ - * w * */ class MHexahedron20 : public MHexahedron { @@ -1851,24 +1812,17 @@ class MHexahedron20 : public MHexahedron { /* * MHexahedron27 * - * v - * - * ^ - * | * 3----13----2 * |\ |\ * |15 24 | 14 * 9 \ 20 11 \ * | 7----19+---6 * |22 | 26 | 23| - * 0---+-8----1 | --> u + * 0---+-8----1 | * \ 17 25 \ 18 * 10 | 21 12| * \| \| * 4----16----5 - * \ - * \ - * w * */ class MHexahedron27 : public MHexahedron { @@ -1991,7 +1945,6 @@ class MHexahedron27 : public MHexahedron { * MPrism * * w - * * ^ * | * 3 @@ -2000,14 +1953,15 @@ class MHexahedron27 : public MHexahedron { * ,/ | `\ * 4------+------5 * | | | - * | 0 | - * | ,/ `\ | + * | ,/|`\ | + * | ,/ | `\ | + * |,/ | `\| + * ,| | `\ + * ,/ | 0 | `\ + * u | ,/ `\ | v * | ,/ `\ | * |,/ `\| * 1-------------2 - * ,/ `\ - * ,/ `\ - * u v * */ class MPrism : public MElement { @@ -2182,24 +2136,21 @@ class MPrism : public MElement { /* * MPrism15 * - * w - * - * ^ - * | * 3 * ,/|`\ * 12 | 13 - * ,/ 8 `\ + * ,/ | `\ * 4------14-----5 + * | 8 | + * | | | * | | | + * | | | + * 10 | 11 * | 0 | - * 10 ,/ `\ 11 + * | ,/ `\ | * | ,6 `7 | * |,/ `\| * 1------9------2 - * ,/ `\ - * ,/ `\ - * u v * */ class MPrism15 : public MPrism { @@ -2312,24 +2263,21 @@ class MPrism15 : public MPrism { /* * MPrism18 * - * w - * - * ^ - * | * 3 * ,/|`\ * 12 | 13 - * ,/ 8 `\ + * ,/ | `\ * 4------14-----5 + * | 8 | + * | ,/|`\ | * | 15 | 16 | - * |,/ 0 `\| - * 10------17-----11 + * |,/ | `\| + * 10-----17-----11 + * | 0 | + * | ,/ `\ | * | ,6 `7 | * |,/ `\| * 1------9------2 - * ,/ `\ - * ,/ `\ - * u v * */ class MPrism18 : public MPrism { @@ -2441,19 +2389,18 @@ class MPrism18 : public MPrism { * ,/|\ * ,/ .'|\ * ,/ | | \ - * w ,/ .' | `. - * ,/ | '. \ - * ^ ,/ .' | \ - * |,/ | | \ - * 0----------.'----3 \ --> v - * `\ | `\ `. - * `\ .' `\ \ - * `\ | `\\ - * `\.' `\ - * 1----------------2 - * `\ - * `\ - * u + * ,/ .' | `. + * ,/ | '. \ + * ,/ .' w | \ + * ,/ | ^ | \ + * 0----------.'--|-3 `. + * `\ | | `\ \ + * `\ .' +----`\ - \ -> v + * `\ | `\ `\ \ + * `\.' `\ `\` + * 1----------------2 + * `\ + * u * */ class MPyramid : public MElement { @@ -2636,20 +2583,17 @@ class MPyramid : public MElement { * ,/|\ * ,/ .'|\ * ,/ | | \ - * w ,7 .' | `. - * ,/ | 12 \ - * ^ ,/ .' | \ - * |,/ 9 | 11 - * 0--------6-.'----3 \ --> v - * `\ | `\ `. - * `5 .' 10 \ - * `\ | `\\ - * `\.' `\ - * 1--------8-------2 - * `\ - * `\ - * u - * + * ,/ .' | `. + * ,7 | 12 \ + * ,/ .' | \ + * ,/ 9 | 11 + * 0--------6-.'----3 `. + * `\ | `\ \ + * `5 .' 10 \ + * `\ | `\ \ + * `\.' `\` + * 1--------8-------2 + * */ class MPyramid13 : public MPyramid { protected: @@ -2755,19 +2699,16 @@ class MPyramid13 : public MPyramid { * ,/|\ * ,/ .'|\ * ,/ | | \ - * w ,7 .' | `. - * ,/ | 12 \ - * ^ ,/ .' | \ - * |,/ 9 | 11 - * 0--------6-.'----3 \ --> v - * `\ `| `\ `. - * `5-----.'13------10 \ - * `\ | `\ `\\ - * `\.' `\ `\ - * 1--------8-------2 - * `\ - * `\ - * u + * ,/ .' | `. + * ,7 | 12 \ + * ,/ .' | \ + * ,/ 9 | 11 + * 0--------6-.'----3 `. + * `\ | `\ \ + * `5 .' 13 10 \ + * `\ | `\ \ + * `\.' `\` + * 1--------8-------2 * */ class MPyramid14 : public MPyramid { diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp index 44546225c4..4e5a3c78da 100644 --- a/Mesh/HighOrder.cpp +++ b/Mesh/HighOrder.cpp @@ -945,7 +945,7 @@ static double mesh_functional_distorsion(MTriangle *t, double u, double v) { // compute uncurved element jacobian d_u x and d_v x double mat[2][3]; - t->jac(1, 0, 0, 0, 0,mat); + t->jac(1, 0, 0, 0, 0, mat); double v1[3] = {mat[0][0], mat[0][1], mat[0][2]}; double v2[3] = {mat[1][0], mat[1][1], mat[1][2]}; double normal1[3]; @@ -953,7 +953,7 @@ static double mesh_functional_distorsion(MTriangle *t, double u, double v) double nn = sqrt(SQU(normal1[0]) + SQU(normal1[1]) + SQU(normal1[2])); // compute uncurved element jacobian d_u x and d_v x - t->jac(u, v, 0,mat); + t->jac(u, v, 0, mat); double v1b[3] = {mat[0][0], mat[0][1], mat[0][2]}; double v2b[3] = {mat[1][0], mat[1][1], mat[1][2]}; double normal[3]; @@ -972,7 +972,7 @@ void getMinMaxJac (MTriangle *t, double &minJ, double &maxJ) { double mat[2][3]; int n = 3; - t->jac(1, 0, 0, 0, 0,mat); + t->jac(1, 0, 0, 0, 0, mat); double v1[3] = {mat[0][0], mat[0][1], mat[0][2]}; double v2[3] = {mat[1][0], mat[1][1], mat[1][2]}; double normal1[3], normal[3]; @@ -980,7 +980,7 @@ void getMinMaxJac (MTriangle *t, double &minJ, double &maxJ) double nn = sqrt(SQU(normal1[0]) + SQU(normal1[1]) + SQU(normal1[2])); for(int i = 0; i < n; i++){ for(int k = 0; k < n - i; k++){ - t->jac((double)i / (n - 1), (double)k / (n - 1), 0,mat); + t->jac((double)i / (n - 1), (double)k / (n - 1), 0, mat); double v1b[3] = {mat[0][0], mat[0][1], mat[0][2]}; double v2b[3] = {mat[1][0], mat[1][1], mat[1][2]}; prodve(v1b, v2b, normal); @@ -1409,8 +1409,8 @@ void printJacobians(GModel *m, const char *nm) SPoint3 pt; double u = (double)i / (n - 1); double v = (double)k / (n - 1); - t->pnt(u,v,0, pt); - D[i][k] = mesh_functional_distorsion (t,u,v); + t->pnt(u, v, 0, pt); + D[i][k] = mesh_functional_distorsion(t, u, v); X[i][k] = pt.x(); Y[i][k] = pt.y(); Z[i][k] = pt.z(); diff --git a/doc/VERSIONS.txt b/doc/VERSIONS.txt index 4f148c258d..0e621e2a31 100644 --- a/doc/VERSIONS.txt +++ b/doc/VERSIONS.txt @@ -1,7 +1,8 @@ -$Id: VERSIONS.txt,v 1.1 2008-07-11 15:55:53 geuzaine Exp $ +$Id: VERSIONS.txt,v 1.2 2008-07-14 19:02:22 geuzaine Exp $ -2.2.3 (): enhanced clipping interface; fixed small bugs (Integrate -plugin). +2.2.3 (Jul 14, 2008): enhanced clipping interface; API cleanup; fixed +various bugs (Plugin(Integrate), high order meshes, surface info +crash). 2.2.2 (Jun 20, 2008): added geometrical transformations on volumes; fixed bug in high order mesh generation. diff --git a/doc/gmsh.html b/doc/gmsh.html index 292bb1cd55..a2df058084 100644 --- a/doc/gmsh.html +++ b/doc/gmsh.html @@ -25,7 +25,7 @@ generator with built-in pre- and post-processing facilities</h1> <p> <h3 align="center">Christophe Geuzaine and Jean-François Remacle</h3> <p> -<h3 align=center>Version 2.2.2, June 20 2008</h3> +<h3 align=center>Version 2.2.3, July 14 2008</h3> <p> <center> <a href="#Description">Description</a> | @@ -66,10 +66,10 @@ binary). Tutorial and demos files are included in all the archives. <ul> <li> <strong>Current stable release</strong>: -<a href="/gmsh/bin/Windows/gmsh-2.2.2-Windows.zip"><strong>Windows</strong></a>, -<a href="/gmsh/bin/Linux/gmsh-2.2.2-Linux.tgz"><strong>Linux</strong></a>, -<a href="/gmsh/bin/MacOSX/gmsh-2.2.2-MacOSX.tgz"><strong>Mac OS X</strong></a> and -<a href="/gmsh/src/gmsh-2.2.2-source.tgz"><strong>source code</strong></a> +<a href="/gmsh/bin/Windows/gmsh-2.2.3-Windows.zip"><strong>Windows</strong></a>, +<a href="/gmsh/bin/Linux/gmsh-2.2.3-Linux.tgz"><strong>Linux</strong></a>, +<a href="/gmsh/bin/MacOSX/gmsh-2.2.3-MacOSX.tgz"><strong>Mac OS X</strong></a> and +<a href="/gmsh/src/gmsh-2.2.3-source.tgz"><strong>source code</strong></a> <a href="#build-footnote" name="build-footmark"><sup>2</sup></a> <p> <li>Experimental versions (these might be buggy, or might not even @@ -115,8 +115,8 @@ questions or bug reports. <a href="/gmsh/doc/texinfo/gmsh-full.html">single html file</a>) <li>Screencasts: <ul> - <li><a href="/gmsh/screencasts/gmsh_3d.mov">creating a simple 3D model</a> (5'18, 14.7 Mb) - <li><a href="/gmsh/screencasts/gmsh_postpro.mov">post-processing basics</a> (5'07, 15.0 Mb) + <li><a href="/gmsh/screencasts/gmsh_3d.mov">creating a simple 3D model</a> (5m18s, 14.7Mb) + <li><a href="/gmsh/screencasts/gmsh_postpro.mov">post-processing basics</a> (5m07s, 15Mb) </ul> <li><a href="/gmsh/doc/FAQ.txt">Frequently asked questions (FAQ)</a> <li><a href="/gmsh/doc/VERSIONS.txt">Version history</a> diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi index 410f284267..f1720a9672 100644 --- a/doc/texinfo/gmsh.texi +++ b/doc/texinfo/gmsh.texi @@ -2481,12 +2481,7 @@ The coordinates are given `by node', i.e., etc. @end itemize -The ordering of the nodes is given in @ref{Node ordering}. For second -order elements, the first order nodes are given first, followed by the nodes -associated with the edges, followed by the nodes associated with the -quadrangular faces (if any), followed by the nodes associated with the -volume (if any). The ordering of these additional nodes follows the ordering -of the edges and quadrangular faces given in @ref{Node ordering}. +The ordering of the nodes is given in @ref{Node ordering}. The values are given by time step, by node and by component, i.e.: @example @@ -3122,12 +3117,7 @@ must be postive integers, or zero. A zero tag is equivalent to no tag. @item @var{node-number-list} is the list of the node numbers of the @var{n}-th element. The ordering of -the nodes is given in @ref{Node ordering}; for second order elements, -the first order nodes are given first, followed by the nodes associated with -the edges, followed by the nodes associated with the quadrangular faces (if -any), followed by the nodes associated with the volume (if any). The -ordering of these additional nodes follows the ordering of the edges and -quadrangular faces given in @ref{Node ordering}. +the nodes is given in @ref{Node ordering}. @item @var{number-of-string-tags} gives the number of string tags that follow. By default the first @@ -3275,146 +3265,148 @@ for(i = 0; i < number_of_triangles; i++)@{ @section Node ordering @cindex Nodes, ordering -@cindex Edges, ordering -@cindex Faces, ordering For all mesh and post-processing file formats, the reference elements -are defined as follows. For high-order elements, the ordering of the -edges/quad faces defines the ordering of high-order vertices associated -with edges/faces. +are defined as follows. -@c FIXME: changer la doc des faces pour les definir de maniere sensee -@c sans butterflies. - -@example +@smallexample @group -Point: - v - | - | - -----1-----u - | - | -@end group -@end example +Line: Line3: + +0----------1 --> u 0-----2----1 -@example -@group -Line: - edge 1: nodes 1 2 - v - | - | - --1-----2--u - | - | @end group -@end example +@end smallexample -@example +@smallexample @group -Triangle: - edge 1: nodes 1 2 - v 2: 2 3 - | 3: 3 1 - | - 3 - |\ - | \ - |__\___u - 1 2 +Triangle: Triangle6: + +v +^ +| +2 2 +|`\ |`\ +| `\ | `\ +| `\ 5 `4 +| `\ | `\ +| `\ | `\ +0----------1 --> u 0-----3----1 + @end group -@end example +@end smallexample -@example +@smallexample @group -Quadrangle: - edge 1: nodes 1 2 quad. face 1: nodes 1 2 3 4 - v 2: 2 3 - | 3: 3 4 - 4--|--3 4: 4 1 - | | | - -----------u - | | | - 1--|--2 - | +Quadrangle: Quadrangle8: Quadrangle9: + + v + ^ + | +3-----------2 3-----6-----2 3-----6-----2 +| | | | | | | +| | | | | | | +| +---- | --> u 7 5 7 8 5 +| | | | | | +| | | | | | +0-----------1 0-----4-----1 0-----4-----1 + @end group -@end example +@end smallexample -@example +@smallexample @group -Tetrahedron: - edge 1: nodes 1 2 - v 2: 2 3 - | 3: 3 1 - | 4: 4 1 - | 5: 4 3 - 3 6: 4 2 - |\ - | \ - |__\2_____u - 1\ / - \4 - \ - w +Tetrahedron: Tetrahedron10: + + v + . + ,/ + / + 2 2 + ,/|`\ ,/|`\ + ,/ | `\ ,/ | `\ + ,/ '. `\ ,6 '. `5 + ,/ | `\ ,/ 8 `\ + ,/ | `\ ,/ | `\ +0-----------'.--------1 --> u 0--------4--'.--------1 + `\. | ,/ `\. | ,/ + `\. | ,/ `\. | ,9 + `\. '. ,/ `7. '. ,/ + `\. |/ `\. |/ + `3 `3 + `\. + ` w @end group -@end example +@end smallexample -@example +@smallexample @group -Hexahedron: - edge 1: nodes 1 2 quad. face 1: nodes 1 4 3 2 - v 2: 1 4 2: 1 2 6 5 - | 3: 1 5 3: 1 5 8 4 - | 4: 2 3 4: 2 3 7 6 - 4----|--3 5: 2 6 5: 3 4 8 7 - |\ | |\ 6: 3 4 6: 5 6 7 8 - | 8-------7 7: 3 7 - | | ----|---u 8: 4 8 - 1-|---\-2 | 9: 5 6 - \| \ \| 10: 5 8 - 5-----\-6 11: 6 7 - \ 12: 7 8 - w +Hexahedron: Hexahedron20: Hexahedron27: + + v +3----------2 3----13----2 3----13----2 +|\ ^ |\ |\ |\ |\ |\ +| \ | | \ | 15 | 14 |15 24 | 14 +| \ | | \ 9 \ 11 \ 9 \ 20 11 \ +| 7------+---6 | 7----19+---6 | 7----19+---6 +| | +-- |-- | -> u | | | | |22 | 26 | 23| +0---+---\--1 | 0---+-8----1 | 0---+-8----1 | + \ | \ \ | \ 17 \ 18 \ 17 25 \ 18 + \ | \ \ | 10 | 12| 10 | 21 12| + \| w \| \| \| \| \| + 4----------5 4----16----5 4----16----5 + @end group -@end example +@end smallexample -@example +@smallexample @group -Prism: - edge 1: nodes 1 2 quad. face 1: nodes 1 2 5 4 - v 2: 1 3 2: 1 4 6 3 - 3 | 3: 1 4 3: 2 3 6 5 - |\| 4: 2 3 - | | 5: 2 5 - 1_|2 6: 3 6 - \| 6 7: 4 5 - |_|_\___u 8: 4 6 - \| \ 9: 5 6 - 4 __5 - \ - \ +Prism: Prism15: Prism18: + w + ^ + | + 3 3 3 + ,/|`\ ,/|`\ ,/|`\ + ,/ | `\ 12 | 13 12 | 13 + ,/ | `\ ,/ | `\ ,/ | `\ + 4------+------5 4------14-----5 4------14-----5 + | | | | 8 | | 8 | + | ,/|`\ | | | | | ,/|`\ | + | ,/ | `\ | | | | | 15 | 16 | + |,/ | `\| | | | |,/ | `\| + ,| | `\ 10 | 11 10-----17-----11 + ,/ | 0 | `\ | 0 | | 0 | +u | ,/ `\ | v | ,/ `\ | | ,/ `\ | + | ,/ `\ | | ,6 `7 | | ,6 `7 | + |,/ `\| |,/ `\| |,/ `\| + 1-------------2 1------9------2 1------9------2 + @end group -@end example +@end smallexample -@example +@smallexample @group -Pyramid: - edge 1: nodes 1 2 quad. face 1: nodes 1 4 3 2 - v 2 1 4 - | 3 1 5 - | 4 2 3 - 4---|---3 5 2 5 - | \ | /| 6 3 4 - | \ -/-|---u 7 3 5 - | / 5\ | 8 4 5 - 1/----\-2 - \ - \ - w +Pyramid: Pyramid13: Pyramid14: + + 4 4 4 + ,/|\ ,/|\ ,/|\ + ,/ .'|\ ,/ .'|\ ,/ .'|\ + ,/ | | \ ,/ | | \ ,/ | | \ + ,/ .' | `. ,/ .' | `. ,/ .' | `. + ,/ | '. \ ,7 | 12 \ ,7 | 12 \ + ,/ .' w | \ ,/ .' | \ ,/ .' | \ + ,/ | ^ | \ ,/ 9 | 11 ,/ 9 | 11 +0----------.'--|-3 `. 0--------6-.'----3 `. 0--------6-.'----3 `. + `\ | | `\ \ `\ | `\ \ `\ | `\ \ + `\ .' +----`\ - \ -> v `5 .' 10 \ `5 .' 13 10 \ + `\ | `\ `\ \ `\ | `\ \ `\ | `\ \ + `\.' `\ `\` `\.' `\` `\.' `\` + 1----------------2 1--------8-------2 1--------8-------2 + `\ + u @end group -@end example +@end smallexample @c ------------------------------------------------------------------------- @c Legacy formats @@ -3553,13 +3545,7 @@ kept for backward compatibility. @item @var{node-number-list} is the list of the @var{number-of-nodes} node numbers of the @var{n}-th -element. The ordering of the nodes is given in @ref{Node ordering}; for -second order elements, the first order nodes are given first, followed -by the nodes associated with the edges, followed by the nodes associated -with the quadrangular faces (if any), followed by the nodes associated -with the volume (if any). The ordering of these additional nodes follows -the ordering of the edges and quadrangular faces given in @ref{Node -ordering}. +element. The ordering of the nodes is given in @ref{Node ordering}. @end table @c ......................................................................... @@ -3688,13 +3674,7 @@ For example, @var{vector-triangle-value} is defined as: @dots{} @end example -The ordering of the nodes is given in @ref{Node ordering}. For second -order elements, the first order nodes are given first, followed by the -nodes associated with the edges, followed by the nodes associated with -the quadrangular faces (if any), followed by the nodes associated with -the volume (if any). The ordering of these additional nodes follows the -ordering of the edges and quadrangular faces given in @ref{Node -ordering}. +The ordering of the nodes is given in @ref{Node ordering}. @item @var{text2d} is a list of 4 double precision numbers: -- GitLab