From: ptv Date: Tue, 25 Aug 2009 05:47:16 +0000 (+0000) Subject: 0019296: EDF 681 SMESH - Pre-evaluation of the number of elements before mesh X-Git-Tag: V5_1_3rc1~10 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=10408a1fcd3ed33571ec97f590d7ae0bd3bc3a81;p=plugins%2Fnetgenplugin.git 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) --- diff --git a/src/NETGENPlugin/NETGENPlugin_Mesher.cxx b/src/NETGENPlugin/NETGENPlugin_Mesher.cxx index 6f95ba3..da66ea1 100644 --- a/src/NETGENPlugin/NETGENPlugin_Mesher.cxx +++ b/src/NETGENPlugin/NETGENPlugin_Mesher.cxx @@ -1022,15 +1022,15 @@ bool NETGENPlugin_Mesher::Evaluate(MapShapeNbElems& aResMap) nb1d = (int)( aLen/mparams.maxh + 1 ); } fullNbSeg += nb1d; - std::vector aVec(17); - for(int i=0; i<17; i++) aVec[i]=0; + std::vector aVec(SMDSEntity_Last); + for(int i=SMDSEntity_Node; i 0 ) { - aVec[0] = 2*nb1d - 1; - aVec[2] = nb1d; + aVec[SMDSEntity_Node] = 2*nb1d - 1; + aVec[SMDSEntity_Quad_Edge] = nb1d; } else { - aVec[0] = nb1d - 1; - aVec[1] = nb1d; + aVec[SMDSEntity_Node] = nb1d - 1; + aVec[SMDSEntity_Edge] = nb1d; } aResMap.insert(std::make_pair(sm,aVec)); 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 nbNodes = (int) ( ( nbFaces*3 - (nb1d-1)*2 ) / 6 + 1 ); - std::vector aVec(17); - for(int i=0; i<17; i++) aVec[i]=0; + std::vector aVec(SMDSEntity_Last); + for(int i=SMDSEntity_Node; i 0 ) { int nb1d_in = (nbFaces*3 - nb1d) / 2; - aVec[0] = nbNodes + nb1d_in; - aVec[4] = nbFaces; + aVec[SMDSEntity_Node] = nbNodes + nb1d_in; + aVec[SMDSEntity_Quad_Triangle] = nbFaces; } else { - aVec[0] = nbNodes; - aVec[3] = nbFaces; + aVec[SMDSEntity_Node] = nbNodes; + aVec[SMDSEntity_Triangle] = nbFaces; } 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; int nbVols = (int)aVolume/tetrVol; int nb1d_in = (int) ( nbVols*6 - fullNbSeg ) / 6; - std::vector aVec(17); - for(int i=0; i<17; i++) aVec[i]=0; + std::vector aVec(SMDSEntity_Last); + for(int i=SMDSEntity_Node; i 0 ) { - aVec[0] = nb1d_in/3 + 1 + nb1d_in; - aVec[9] = nbVols; + aVec[SMDSEntity_Node] = nb1d_in/3 + 1 + nb1d_in; + aVec[SMDSEntity_Quad_Tetra] = nbVols; } else { - aVec[0] = nb1d_in/3 + 1; - aVec[8] = nbVols; + aVec[SMDSEntity_Node] = nb1d_in/3 + 1; + aVec[SMDSEntity_Tetra] = nbVols; } SMESH_subMesh *sm = _mesh->GetSubMesh(_shape); aResMap.insert(std::make_pair(sm,aVec)); diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cxx index f2ee367..abef834 100644 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cxx +++ b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cxx @@ -478,12 +478,12 @@ bool NETGENPlugin_NETGEN_2D_ONLY::Evaluate(SMESH_Mesh& aMesh, return false; } std::vector aVec = (*anIt).second; - nb0d += aVec[0]; - nb1d += Max(aVec[1],aVec[2]); + nb0d += aVec[SMDSEntity_Node]; + nb1d += Max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]); double aLen = SMESH_Algo::EdgeLength(E); fullLen += aLen; if(IsFirst) { - IsQuadratic = (aVec[2] > aVec[1]); + IsQuadratic = (aVec[SMDSEntity_Quad_Edge] > aVec[SMDSEntity_Edge]); IsFirst = false; } } @@ -504,15 +504,15 @@ bool NETGENPlugin_NETGEN_2D_ONLY::Evaluate(SMESH_Mesh& aMesh, double anArea = G.Mass(); int nbFaces = (int) ( anArea / ( ELen*ELen*sqrt(3.) / 4 ) ); int nbNodes = (int) ( ( nbFaces*3 - (nb1d-1)*2 ) / 6 + 1 ); - std::vector aVec(17); - for(int i=0; i<17; i++) aVec[i]=0; + std::vector aVec(SMDSEntity_Last); + for(int i=SMDSEntity_Node; i aVec = (*anIt).second; - nbtri += Max(aVec[3],aVec[4]); - nbqua += Max(aVec[5],aVec[6]); + nbtri += Max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]); + nbqua += Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]); GProp_GProps G; BRepGProp::SurfaceProperties(F,G); double anArea = G.Mass(); @@ -684,10 +684,10 @@ bool NETGENPlugin_NETGEN_3D::Evaluate(SMESH_Mesh& aMesh, SMESH_subMesh *aSubMesh = aMesh.GetSubMesh(exp.Current()); MapShapeNbElemsItr anIt = aResMap.find(aSubMesh); std::vector aVec = (*anIt).second; - nb0d_e += aVec[0]; - nb1d_e += Max(aVec[1],aVec[2]); + nb0d_e += aVec[SMDSEntity_Node]; + nb1d_e += Max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]); if(IsFirst) { - IsQuadratic = (aVec[2] > aVec[1]); + IsQuadratic = (aVec[SMDSEntity_Quad_Edge] > aVec[SMDSEntity_Edge]); IsFirst = false; } } @@ -705,17 +705,17 @@ bool NETGENPlugin_NETGEN_3D::Evaluate(SMESH_Mesh& aMesh, int nbVols = (int)aVolume/tetrVol/CoeffQuality; int nb1d_f = (nbtri*3 + nbqua*4 - nb1d_e) / 2; int nb1d_in = (int) ( nbVols*6 - nb1d_e - nb1d_f ) / 5; - std::vector aVec(17); - for(int i=0; i<17; i++) aVec[i]=0; + std::vector aVec(SMDSEntity_Last); + for(int i=SMDSEntity_Node; i