Skip to content
Snippets Groups Projects
Commit 6812e27c authored by Jean-François Remacle's avatar Jean-François Remacle
Browse files

added support for P2 meshes

parent 6ff7fc4a
No related branches found
No related tags found
No related merge requests found
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "MQuadrangle.h" #include "MQuadrangle.h"
#include "MTetrahedron.h" #include "MTetrahedron.h"
#include "MHexahedron.h" #include "MHexahedron.h"
#include "Context.h"
static bool getVertices(int num, int *indices, std::vector<MVertex*> &vec, static bool getVertices(int num, int *indices, std::vector<MVertex*> &vec,
std::vector<MVertex*> &vertices) std::vector<MVertex*> &vertices)
...@@ -100,6 +101,21 @@ int GModel::readMESH(const std::string &name) ...@@ -100,6 +101,21 @@ int GModel::readMESH(const std::string &name)
elements[1][cl].push_back(new MTriangle(vertices)); elements[1][cl].push_back(new MTriangle(vertices));
} }
} }
else if(!strcmp(str, "TrianglesP2")){
if(!fgets(buffer, sizeof(buffer), fp)) break;
int nbe;
sscanf(buffer, "%d", &nbe);
Msg::Info("%d triangles", nbe);
for(int i = 0; i < nbe; i++) {
if(!fgets(buffer, sizeof(buffer), fp)) break;
int n[6], cl;
sscanf(buffer, "%d %d %d %d", &n[0], &n[1], &n[2], &n[3], &n[4], &n[5],&cl);
for(int j = 0; j < 6; j++) n[j]--;
std::vector<MVertex*> vertices;
if(!getVertices(6, n, vertexVector, vertices)) return 0;
elements[1][cl].push_back(new MTriangle6(vertices));
}
}
else if(!strcmp(str, "Quadrilaterals")) { else if(!strcmp(str, "Quadrilaterals")) {
if(!fgets(buffer, sizeof(buffer), fp)) break; if(!fgets(buffer, sizeof(buffer), fp)) break;
int nbe; int nbe;
...@@ -130,6 +146,21 @@ int GModel::readMESH(const std::string &name) ...@@ -130,6 +146,21 @@ int GModel::readMESH(const std::string &name)
elements[3][cl].push_back(new MTetrahedron(vertices)); elements[3][cl].push_back(new MTetrahedron(vertices));
} }
} }
else if(!strcmp(str, "TetrahedraP2")) {
if(!fgets(buffer, sizeof(buffer), fp)) break;
int nbe;
sscanf(buffer, "%d", &nbe);
Msg::Info("%d tetrahedra", nbe);
for(int i = 0; i < nbe; i++) {
if(!fgets(buffer, sizeof(buffer), fp)) break;
int n[10], cl;
sscanf(buffer, "%d %d %d %d %d %d %d %d %d %d", &n[0], &n[1], &n[2], &n[3],&n[4], &n[5], &n[6], &n[7], &n[9], &n[8], &cl);
for(int j = 0; j < 10; j++) n[j]--;
std::vector<MVertex*> vertices;
if(!getVertices(10, n, vertexVector, vertices)) return 0;
elements[3][cl].push_back(new MTetrahedron10(vertices));
}
}
else if(!strcmp(str, "Hexahedra")) { else if(!strcmp(str, "Hexahedra")) {
if(!fgets(buffer, sizeof(buffer), fp)) break; if(!fgets(buffer, sizeof(buffer), fp)) break;
int nbe; int nbe;
...@@ -216,7 +247,11 @@ int GModel::writeMESH(const std::string &name, int elementTagType, ...@@ -216,7 +247,11 @@ int GModel::writeMESH(const std::string &name, int elementTagType,
} }
} }
if(numTriangles){ if(numTriangles){
fprintf(fp, " Triangles\n"); if(CTX::instance()->mesh.order == 2)
fprintf(fp, " TrianglesP2\n");
else
fprintf(fp, " Triangles\n");
fprintf(fp, " %d\n", numTriangles); fprintf(fp, " %d\n", numTriangles);
for(fiter it = firstFace(); it != lastFace(); ++it){ for(fiter it = firstFace(); it != lastFace(); ++it){
int numPhys = (*it)->physicals.size(); int numPhys = (*it)->physicals.size();
...@@ -240,7 +275,10 @@ int GModel::writeMESH(const std::string &name, int elementTagType, ...@@ -240,7 +275,10 @@ int GModel::writeMESH(const std::string &name, int elementTagType,
} }
} }
if(numTetrahedra){ if(numTetrahedra){
fprintf(fp, " Tetrahedra\n"); if(CTX::instance()->mesh.order == 2)
fprintf(fp, " TetrahedraP2\n");
else
fprintf(fp, " Tetrahedra\n");
fprintf(fp, " %d\n", numTetrahedra); fprintf(fp, " %d\n", numTetrahedra);
for(riter it = firstRegion(); it != lastRegion(); ++it){ for(riter it = firstRegion(); it != lastRegion(); ++it){
int numPhys = (*it)->physicals.size(); int numPhys = (*it)->physicals.size();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment