0019296: EDF 681 SMESH - Pre-evaluation of the number of elements before mesh
Replace hard coded values of element types by new enumeration (added in advanced mesh info Improvement)
This commit is contained in:
parent
f40c6eace6
commit
10408a1fcd
@ -1022,15 +1022,15 @@ bool NETGENPlugin_Mesher::Evaluate(MapShapeNbElems& aResMap)
|
|||||||
nb1d = (int)( aLen/mparams.maxh + 1 );
|
nb1d = (int)( aLen/mparams.maxh + 1 );
|
||||||
}
|
}
|
||||||
fullNbSeg += nb1d;
|
fullNbSeg += nb1d;
|
||||||
std::vector<int> aVec(17);
|
std::vector<int> aVec(SMDSEntity_Last);
|
||||||
for(int i=0; i<17; i++) aVec[i]=0;
|
for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i]=0;
|
||||||
if( mparams.secondorder > 0 ) {
|
if( mparams.secondorder > 0 ) {
|
||||||
aVec[0] = 2*nb1d - 1;
|
aVec[SMDSEntity_Node] = 2*nb1d - 1;
|
||||||
aVec[2] = nb1d;
|
aVec[SMDSEntity_Quad_Edge] = nb1d;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
aVec[0] = nb1d - 1;
|
aVec[SMDSEntity_Node] = nb1d - 1;
|
||||||
aVec[1] = nb1d;
|
aVec[SMDSEntity_Edge] = nb1d;
|
||||||
}
|
}
|
||||||
aResMap.insert(std::make_pair(sm,aVec));
|
aResMap.insert(std::make_pair(sm,aVec));
|
||||||
EdgesMap.Bind(E,nb1d);
|
EdgesMap.Bind(E,nb1d);
|
||||||
@ -1064,16 +1064,16 @@ bool NETGENPlugin_Mesher::Evaluate(MapShapeNbElems& aResMap)
|
|||||||
}
|
}
|
||||||
int nbFaces = (int) ( anArea / ( mparams.maxh*mparams.maxh*sqrt(3.) / 4 ) );
|
int nbFaces = (int) ( anArea / ( mparams.maxh*mparams.maxh*sqrt(3.) / 4 ) );
|
||||||
int nbNodes = (int) ( ( nbFaces*3 - (nb1d-1)*2 ) / 6 + 1 );
|
int nbNodes = (int) ( ( nbFaces*3 - (nb1d-1)*2 ) / 6 + 1 );
|
||||||
std::vector<int> aVec(17);
|
std::vector<int> aVec(SMDSEntity_Last);
|
||||||
for(int i=0; i<17; i++) aVec[i]=0;
|
for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i]=0;
|
||||||
if( mparams.secondorder > 0 ) {
|
if( mparams.secondorder > 0 ) {
|
||||||
int nb1d_in = (nbFaces*3 - nb1d) / 2;
|
int nb1d_in = (nbFaces*3 - nb1d) / 2;
|
||||||
aVec[0] = nbNodes + nb1d_in;
|
aVec[SMDSEntity_Node] = nbNodes + nb1d_in;
|
||||||
aVec[4] = nbFaces;
|
aVec[SMDSEntity_Quad_Triangle] = nbFaces;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
aVec[0] = nbNodes;
|
aVec[SMDSEntity_Node] = nbNodes;
|
||||||
aVec[3] = nbFaces;
|
aVec[SMDSEntity_Triangle] = nbFaces;
|
||||||
}
|
}
|
||||||
aResMap.insert(std::make_pair(sm,aVec));
|
aResMap.insert(std::make_pair(sm,aVec));
|
||||||
}
|
}
|
||||||
@ -1102,15 +1102,15 @@ bool NETGENPlugin_Mesher::Evaluate(MapShapeNbElems& aResMap)
|
|||||||
double tetrVol = 0.1179*mparams.maxh*mparams.maxh*mparams.maxh;
|
double tetrVol = 0.1179*mparams.maxh*mparams.maxh*mparams.maxh;
|
||||||
int nbVols = (int)aVolume/tetrVol;
|
int nbVols = (int)aVolume/tetrVol;
|
||||||
int nb1d_in = (int) ( nbVols*6 - fullNbSeg ) / 6;
|
int nb1d_in = (int) ( nbVols*6 - fullNbSeg ) / 6;
|
||||||
std::vector<int> aVec(17);
|
std::vector<int> aVec(SMDSEntity_Last);
|
||||||
for(int i=0; i<17; i++) aVec[i]=0;
|
for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i]=0;
|
||||||
if( mparams.secondorder > 0 ) {
|
if( mparams.secondorder > 0 ) {
|
||||||
aVec[0] = nb1d_in/3 + 1 + nb1d_in;
|
aVec[SMDSEntity_Node] = nb1d_in/3 + 1 + nb1d_in;
|
||||||
aVec[9] = nbVols;
|
aVec[SMDSEntity_Quad_Tetra] = nbVols;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
aVec[0] = nb1d_in/3 + 1;
|
aVec[SMDSEntity_Node] = nb1d_in/3 + 1;
|
||||||
aVec[8] = nbVols;
|
aVec[SMDSEntity_Tetra] = nbVols;
|
||||||
}
|
}
|
||||||
SMESH_subMesh *sm = _mesh->GetSubMesh(_shape);
|
SMESH_subMesh *sm = _mesh->GetSubMesh(_shape);
|
||||||
aResMap.insert(std::make_pair(sm,aVec));
|
aResMap.insert(std::make_pair(sm,aVec));
|
||||||
|
@ -478,12 +478,12 @@ bool NETGENPlugin_NETGEN_2D_ONLY::Evaluate(SMESH_Mesh& aMesh,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
std::vector<int> aVec = (*anIt).second;
|
std::vector<int> aVec = (*anIt).second;
|
||||||
nb0d += aVec[0];
|
nb0d += aVec[SMDSEntity_Node];
|
||||||
nb1d += Max(aVec[1],aVec[2]);
|
nb1d += Max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
|
||||||
double aLen = SMESH_Algo::EdgeLength(E);
|
double aLen = SMESH_Algo::EdgeLength(E);
|
||||||
fullLen += aLen;
|
fullLen += aLen;
|
||||||
if(IsFirst) {
|
if(IsFirst) {
|
||||||
IsQuadratic = (aVec[2] > aVec[1]);
|
IsQuadratic = (aVec[SMDSEntity_Quad_Edge] > aVec[SMDSEntity_Edge]);
|
||||||
IsFirst = false;
|
IsFirst = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -504,15 +504,15 @@ bool NETGENPlugin_NETGEN_2D_ONLY::Evaluate(SMESH_Mesh& aMesh,
|
|||||||
double anArea = G.Mass();
|
double anArea = G.Mass();
|
||||||
int nbFaces = (int) ( anArea / ( ELen*ELen*sqrt(3.) / 4 ) );
|
int nbFaces = (int) ( anArea / ( ELen*ELen*sqrt(3.) / 4 ) );
|
||||||
int nbNodes = (int) ( ( nbFaces*3 - (nb1d-1)*2 ) / 6 + 1 );
|
int nbNodes = (int) ( ( nbFaces*3 - (nb1d-1)*2 ) / 6 + 1 );
|
||||||
std::vector<int> aVec(17);
|
std::vector<int> aVec(SMDSEntity_Last);
|
||||||
for(int i=0; i<17; i++) aVec[i]=0;
|
for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i]=0;
|
||||||
if( IsQuadratic ) {
|
if( IsQuadratic ) {
|
||||||
aVec[0] = nbNodes;
|
aVec[SMDSEntity_Node] = nbNodes;
|
||||||
aVec[4] = nbFaces;
|
aVec[SMDSEntity_Quad_Triangle] = nbFaces;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
aVec[0] = nbNodes;
|
aVec[SMDSEntity_Node] = nbNodes;
|
||||||
aVec[3] = nbFaces;
|
aVec[SMDSEntity_Triangle] = nbFaces;
|
||||||
}
|
}
|
||||||
SMESH_subMesh *sm = aMesh.GetSubMesh(F);
|
SMESH_subMesh *sm = aMesh.GetSubMesh(F);
|
||||||
aResMap.insert(std::make_pair(sm,aVec));
|
aResMap.insert(std::make_pair(sm,aVec));
|
||||||
|
@ -663,8 +663,8 @@ bool NETGENPlugin_NETGEN_3D::Evaluate(SMESH_Mesh& aMesh,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
std::vector<int> aVec = (*anIt).second;
|
std::vector<int> aVec = (*anIt).second;
|
||||||
nbtri += Max(aVec[3],aVec[4]);
|
nbtri += Max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
|
||||||
nbqua += Max(aVec[5],aVec[6]);
|
nbqua += Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
|
||||||
GProp_GProps G;
|
GProp_GProps G;
|
||||||
BRepGProp::SurfaceProperties(F,G);
|
BRepGProp::SurfaceProperties(F,G);
|
||||||
double anArea = G.Mass();
|
double anArea = G.Mass();
|
||||||
@ -684,10 +684,10 @@ bool NETGENPlugin_NETGEN_3D::Evaluate(SMESH_Mesh& aMesh,
|
|||||||
SMESH_subMesh *aSubMesh = aMesh.GetSubMesh(exp.Current());
|
SMESH_subMesh *aSubMesh = aMesh.GetSubMesh(exp.Current());
|
||||||
MapShapeNbElemsItr anIt = aResMap.find(aSubMesh);
|
MapShapeNbElemsItr anIt = aResMap.find(aSubMesh);
|
||||||
std::vector<int> aVec = (*anIt).second;
|
std::vector<int> aVec = (*anIt).second;
|
||||||
nb0d_e += aVec[0];
|
nb0d_e += aVec[SMDSEntity_Node];
|
||||||
nb1d_e += Max(aVec[1],aVec[2]);
|
nb1d_e += Max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
|
||||||
if(IsFirst) {
|
if(IsFirst) {
|
||||||
IsQuadratic = (aVec[2] > aVec[1]);
|
IsQuadratic = (aVec[SMDSEntity_Quad_Edge] > aVec[SMDSEntity_Edge]);
|
||||||
IsFirst = false;
|
IsFirst = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -705,17 +705,17 @@ bool NETGENPlugin_NETGEN_3D::Evaluate(SMESH_Mesh& aMesh,
|
|||||||
int nbVols = (int)aVolume/tetrVol/CoeffQuality;
|
int nbVols = (int)aVolume/tetrVol/CoeffQuality;
|
||||||
int nb1d_f = (nbtri*3 + nbqua*4 - nb1d_e) / 2;
|
int nb1d_f = (nbtri*3 + nbqua*4 - nb1d_e) / 2;
|
||||||
int nb1d_in = (int) ( nbVols*6 - nb1d_e - nb1d_f ) / 5;
|
int nb1d_in = (int) ( nbVols*6 - nb1d_e - nb1d_f ) / 5;
|
||||||
std::vector<int> aVec(17);
|
std::vector<int> aVec(SMDSEntity_Last);
|
||||||
for(int i=0; i<17; i++) aVec[i]=0;
|
for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i]=0;
|
||||||
if( IsQuadratic ) {
|
if( IsQuadratic ) {
|
||||||
aVec[0] = nb1d_in/6 + 1 + nb1d_in;
|
aVec[SMDSEntity_Node] = nb1d_in/6 + 1 + nb1d_in;
|
||||||
aVec[9] = nbVols - nbqua*2;
|
aVec[SMDSEntity_Quad_Tetra] = nbVols - nbqua*2;
|
||||||
aVec[11] = nbqua;
|
aVec[SMDSEntity_Quad_Pyramid] = nbqua;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
aVec[0] = nb1d_in/6 + 1;
|
aVec[SMDSEntity_Node] = nb1d_in/6 + 1;
|
||||||
aVec[8] = nbVols - nbqua*2;
|
aVec[SMDSEntity_Tetra] = nbVols - nbqua*2;
|
||||||
aVec[10] = nbqua;
|
aVec[SMDSEntity_Pyramid] = nbqua;
|
||||||
}
|
}
|
||||||
SMESH_subMesh *sm = aMesh.GetSubMesh(aShape);
|
SMESH_subMesh *sm = aMesh.GetSubMesh(aShape);
|
||||||
aResMap.insert(std::make_pair(sm,aVec));
|
aResMap.insert(std::make_pair(sm,aVec));
|
||||||
|
Loading…
Reference in New Issue
Block a user