Salome HOME
22576: EDF 8029 SMESH: Bug with 3D viscous layer
authoreap <eap@opencascade.com>
Mon, 28 Apr 2014 11:07:53 +0000 (15:07 +0400)
committereap <eap@opencascade.com>
Mon, 28 Apr 2014 11:07:53 +0000 (15:07 +0400)
  Add more smoothing loops after fixing all bad faces

src/StdMeshers/StdMeshers_ViscousLayers.cxx

index 1f6d46263460186259fe57f14cafee07b51facb4..11dec7d1e436f1d4992eb11871e7ca2efa1e33d3 100644 (file)
@@ -2379,8 +2379,8 @@ bool _ViscousBuilder::smoothAndCheck(_SolidData& data,
     else
     {
       // smooth on FACE's
-      int step = 0, badNb = 0; moved = true;
-      while (( ++step <= 5 && moved ) || improved )
+      int step = 0, stepLimit = 5, badNb = 0; moved = true;
+      while (( ++step <= stepLimit && moved ) || improved )
       {
         dumpFunction(SMESH_Comment("smooth")<<data._index<<"_Fa"<<sInd
                      <<"_InfStep"<<nbSteps<<"_"<<step); // debug
@@ -2391,6 +2391,10 @@ bool _ViscousBuilder::smoothAndCheck(_SolidData& data,
           moved |= data._edges[i]->Smooth(badNb);
         improved = ( badNb < oldBadNb );
 
+        // issue 22576. no bad faces but still there are intersections to fix
+        if ( improved && badNb == 0 )
+          stepLimit = step + 3;
+
         dumpFunctionEnd();
       }
       if ( badNb > 0 )