]> SALOME platform Git repositories - plugins/netgenplugin.git/commitdiff
Salome HOME
0019296: EDF 681 SMESH - Pre-evaluation of the number of elements before mesh
authorptv <ptv@opencascade.com>
Tue, 25 Aug 2009 05:47:16 +0000 (05:47 +0000)
committerptv <ptv@opencascade.com>
Tue, 25 Aug 2009 05:47:16 +0000 (05:47 +0000)
Replace hard coded values of element types by new enumeration (added in advanced mesh info Improvement)

src/NETGENPlugin/NETGENPlugin_Mesher.cxx
src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cxx
src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx

index 6f95ba3de544f5fc1cf1cc0fcd9d2fd7ddd7c396..da66ea16827e38459201f572cdc4b853f7fdf401 100644 (file)
@@ -1022,15 +1022,15 @@ bool NETGENPlugin_Mesher::Evaluate(MapShapeNbElems& aResMap)
        nb1d = (int)( aLen/mparams.maxh + 1 );
     }
     fullNbSeg += nb1d;
-    std::vector<int> aVec(17);
-    for(int i=0; i<17; i++) aVec[i]=0;
+    std::vector<int> aVec(SMDSEntity_Last);
+    for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i]=0;
     if( mparams.secondorder > 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<int> aVec(17);
-    for(int i=0; i<17; i++) aVec[i]=0;
+    std::vector<int> aVec(SMDSEntity_Last);
+    for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i]=0;
     if( mparams.secondorder > 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<int> aVec(17);
-    for(int i=0; i<17; i++) aVec[i]=0;
+    std::vector<int> aVec(SMDSEntity_Last);
+    for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i]=0;
     if( mparams.secondorder > 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));
index f2ee367e5d91ffea9aacf8a50a270d87fcc5c246..abef834330824d4f01bb540c0cf88fb3268f3806 100644 (file)
@@ -478,12 +478,12 @@ bool NETGENPlugin_NETGEN_2D_ONLY::Evaluate(SMESH_Mesh& aMesh,
       return false;
     }
     std::vector<int> 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<int> aVec(17);
-  for(int i=0; i<17; i++) aVec[i]=0;
+  std::vector<int> aVec(SMDSEntity_Last);
+  for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i]=0;
   if( IsQuadratic ) {
-    aVec[0] = nbNodes;
-    aVec[4] = nbFaces;
+    aVec[SMDSEntity_Node] = nbNodes;
+    aVec[SMDSEntity_Quad_Triangle] = nbFaces;
   }
   else {
-    aVec[0] = nbNodes;
-    aVec[3] = nbFaces;
+    aVec[SMDSEntity_Node] = nbNodes;
+    aVec[SMDSEntity_Triangle] = nbFaces;
   }
   SMESH_subMesh *sm = aMesh.GetSubMesh(F);
   aResMap.insert(std::make_pair(sm,aVec));
index 33292b48602369f17d03f4b6254e2ff45fc06040..0af8d4fc04c85881b33bfc3a269887aa2490bafd 100644 (file)
@@ -663,8 +663,8 @@ bool NETGENPlugin_NETGEN_3D::Evaluate(SMESH_Mesh& aMesh,
       return false;
     }
     std::vector<int> 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<int> 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<int> aVec(17);
-  for(int i=0; i<17; i++) aVec[i]=0;
+  std::vector<int> aVec(SMDSEntity_Last);
+  for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i]=0;
   if( IsQuadratic ) {
-    aVec[0] = nb1d_in/6 + 1 + nb1d_in;
-    aVec[9] = nbVols - nbqua*2;
-    aVec[11] = nbqua;
+    aVec[SMDSEntity_Node] = nb1d_in/6 + 1 + nb1d_in;
+    aVec[SMDSEntity_Quad_Tetra] = nbVols - nbqua*2;
+    aVec[SMDSEntity_Quad_Pyramid] = nbqua;
   }
   else {
-    aVec[0] = nb1d_in/6 + 1;
-    aVec[8] = nbVols - nbqua*2;
-    aVec[10] = nbqua;
+    aVec[SMDSEntity_Node] = nb1d_in/6 + 1;
+    aVec[SMDSEntity_Tetra] = nbVols - nbqua*2;
+    aVec[SMDSEntity_Pyramid] = nbqua;
   }
   SMESH_subMesh *sm = aMesh.GetSubMesh(aShape);
   aResMap.insert(std::make_pair(sm,aVec));