Skip to content
Snippets Groups Projects
Commit 2beb51c3 authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

j lechelle

parent d6ee4b8b
No related branches found
No related tags found
No related merge requests found
...@@ -2223,8 +2223,6 @@ int GModel::readDIFF(const std::string &name) ...@@ -2223,8 +2223,6 @@ int GModel::readDIFF(const std::string &name)
return 0; return 0;
} }
// FIXME: todo
#if 0
char str[256] = "XXX"; char str[256] = "XXX";
std::map<int, std::vector<MElement*> > elements[8]; std::map<int, std::vector<MElement*> > elements[8];
std::map<int, std::map<int, std::string> > physicals[4]; std::map<int, std::map<int, std::string> > physicals[4];
...@@ -2266,7 +2264,8 @@ int GModel::readDIFF(const std::string &name) ...@@ -2266,7 +2264,8 @@ int GModel::readDIFF(const std::string &name)
if(!fgets(str, sizeof(str), fp) || feof(fp)) if(!fgets(str, sizeof(str), fp) || feof(fp))
break; break;
} }
if(sscanf(str, "%*s %*s %*s %*s %*s %*s %*s %d", &numVerticesPerElement) != 1) return 0; if(sscanf(str, "%*s %*s %*s %*s %*s %*s %*s %d", &numVerticesPerElement) != 1)
return 0;
Msg::Info("numVerticesPerElement %d",numVerticesPerElement); Msg::Info("numVerticesPerElement %d",numVerticesPerElement);
bool several_subdomains; bool several_subdomains;
...@@ -2347,7 +2346,8 @@ int GModel::readDIFF(const std::string &name) ...@@ -2347,7 +2346,8 @@ int GModel::readDIFF(const std::string &name)
vertexVector[it->first] = it->second; vertexVector[it->first] = it->second;
vertexMap.clear(); vertexMap.clear();
} }
Msg::Info("%d ( %lf , %lf , %lf ) [%d]",i, xyz[0], xyz[1], xyz[2], elementary[i][0]); Msg::Info("%d ( %lf , %lf , %lf ) [%d]", i, xyz[0], xyz[1], xyz[2],
elementary[i][0]);
std::string format_read_bi = "%*d ( %*lf , %*lf , %*lf ) [%*d]"; std::string format_read_bi = "%*d ( %*lf , %*lf , %*lf ) [%*d]";
for(int j = 0; j < elementary[i][0]; j++){ for(int j = 0; j < elementary[i][0]; j++){
if(format_read_bi[format_read_bi.size() - 1] == 'd') { if(format_read_bi[format_read_bi.size() - 1] == 'd') {
...@@ -2356,7 +2356,8 @@ int GModel::readDIFF(const std::string &name) ...@@ -2356,7 +2356,8 @@ int GModel::readDIFF(const std::string &name)
} }
else else
format_read_bi += " %d"; format_read_bi += " %d";
if(sscanf(str, format_read_bi.c_str(), &(elementary[i][j + 1])) != 1) return 0; if(sscanf(str, format_read_bi.c_str(), &(elementary[i][j + 1])) != 1)
return 0;
Msg::Info("elementary[%d][%d]=%d", i + 1, j + 1, elementary[i][j + 1]); Msg::Info("elementary[%d][%d]=%d", i + 1, j + 1, elementary[i][j + 1]);
} }
} }
...@@ -2372,42 +2373,101 @@ int GModel::readDIFF(const std::string &name) ...@@ -2372,42 +2373,101 @@ int GModel::readDIFF(const std::string &name)
} }
char eleType[20]=""; char eleType[20]="";
Msg::ResetProgressMeter(); Msg::ResetProgressMeter();
std::vector<int> mapping;
for(int i = 1; i <= numElements; i++){ for(int i = 1; i <= numElements; i++){
if(!fgets(str, sizeof(str), fp)) return 0; if(!fgets(str, sizeof(str), fp)) return 0;
int num, type, physical = 0, partition = 0; int num, type, physical = 0, partition = 0;
int indices[60]; int indices[60];
if(sscanf(str, "%*d %s %d", eleType, &material[i-1])!=2) return 0; if(sscanf(str, "%*d %s %d", eleType, &material[i-1])!=2) return 0;
int k2; // local number for the element
int NoVertices; // number of vertices per element
if(eleType=="ElmT3n2D"){
NoVertices=3;
static int map[3]={0, 1, 2}; // identical to gmsh
mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
type= MSH_TRI_3;
}
else if(eleType=="ElmT6n2D"){
NoVertices=6;
static int map[6]={0, 1, 2, 3, 4, 5}; // identical to gmsh
mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
type= MSH_TRI_6;
}
else if(eleType=="ElmB4n2D"){
NoVertices=4;
static int map[4]={0, 1, 3, 2}; // local numbering
mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
type= MSH_QUA_4;
}
else if(eleType=="ElmB8n2D"){
NoVertices=8;
static int map[8]={0, 1, 3, 2, 4, 6, 7, 5}; // local numbering
mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
type= MSH_QUA_8;
}
else if(eleType=="ElmB9n2D"){
NoVertices=9;
static int map[9]={0, 4, 1, 7, 8, 5, 3, 6, 2}; // local numbering
mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
type= MSH_QUA_9;
}
else if(eleType=="ElmT4n3D"){
NoVertices=4;
static int map[4]={0, 1, 2, 3}; // identical to gmsh
mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
type= MSH_TET_4;
}
else if(eleType=="ElmT10n3D"){
NoVertices=10;
static int map[10]={1, 0, 2, 3, 4, 6, 5, 9, 7, 8}; // local numbering
mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
type= MSH_TET_10;
}
else if(eleType=="ElmB8n3D"){
NoVertices=8;
static int map[8]={4, 5, 0, 1, 7, 6, 3, 2};
mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
type= MSH_HEX_8;
}
else if(eleType=="ElmB20n3D"){
NoVertices=20;
static int map[20]={4, 5, 0, 1, 7, 6, 3, 2, 16, 8, 19,
13, 15, 12, 14, 17, 18, 9, 11};
mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
type= MSH_HEX_20;
}
else if(eleType=="ElmB27n3D"){
NoVertices=27;
static int map[27]={4, 16, 5, 10, 21, 12, 0, 8, 1, 17, 25, 18, 22,
26, 23, 9, 20, 11, 7, 19, 6, 15, 24, 14, 3, 13, 2};
mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
type= MSH_HEX_27;
}
else
return 0;
std::string format_read_vertices = "%*d %*s %*d"; std::string format_read_vertices = "%*d %*s %*d";
for(int k = 0; k < numVerticesPerElement; k++){ for(int k = 0; k < NoVertices; k++){
if(format_read_vertices[format_read_vertices.size()-2] != '*') { if(format_read_vertices[format_read_vertices.size()-2] != '*') {
format_read_vertices[format_read_vertices.size()-1] = '*'; format_read_vertices[format_read_vertices.size()-1] = '*';
format_read_vertices += "d %d"; format_read_vertices += "d %d";
} }
else else
format_read_vertices += " %d"; format_read_vertices += " %d";
int k2; k2=mapping[k];
if(eleType=="ElmT10n3D"){ if(sscanf(str, format_read_vertices.c_str(), &ElementsNodes[i-1][k2]) != 1)
static int map[10]={1, 0, 2, 3, 4, 6, 5, 9, 7, 8};
k2=map[k];
type= MSH_TET_10;
}
else if(eleType=="ElmT4n3D"){
static int map[4]={1, 0, 2, 3};
k2=map[k];
type= MSH_TET_4;
}
else
return 0; return 0;
if(sscanf(str, format_read_vertices.c_str(), &ElementsNodes[i-1][k2]) != 1) return 0;
} }
for(int j=0;j<numVerticesPerElement;j++) mapping.clear();
for(int j=0;j<NoVertices;j++)
indices[j] = ElementsNodes[i - 1][j]; indices[j] = ElementsNodes[i - 1][j];
std::vector<MVertex*> vertices; std::vector<MVertex*> vertices;
if(vertexVector.size()){ if(vertexVector.size()){
if(!getVertices(numVerticesPerElement, indices, vertexVector, vertices)) return 0; if(!getVertices(numVerticesPerElement, indices, vertexVector, vertices))
return 0;
} }
else{ else{
if(!getVertices(numVerticesPerElement, indices, vertexMap, vertices)) return 0; if(!getVertices(numVerticesPerElement, indices, vertexMap, vertices))
return 0;
} }
createElementMSH(this, num, type, physical, elementary[i-1][1], partition, createElementMSH(this, num, type, physical, elementary[i-1][1], partition,
vertices, elements, physicals); vertices, elements, physicals);
...@@ -2435,8 +2495,6 @@ int GModel::readDIFF(const std::string &name) ...@@ -2435,8 +2495,6 @@ int GModel::readDIFF(const std::string &name)
for(int i = 0; i < 4; i++) for(int i = 0; i < 4; i++)
storePhysicalTagsInEntities(this, i, physicals[i]); storePhysicalTagsInEntities(this, i, physicals[i]);
#endif
fclose(fp); fclose(fp);
return 1; return 1;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment