22222: [CEA 820] GHS3D in salome 7.2.0 ten times slower than in salome 6.6.0

Choose a compute event (COMPUTE or COMPUTE_SUBMESH) depending on an
explicit parameter aShapeOnly.

   bool Compute(::SMESH_Mesh &        aMesh,
                const TopoDS_Shape &  aShape,
+               const bool            aShapeOnly=false,
                const bool            anUpward=false,
                const ::MeshDimension aDim=::MeshDim_3D,
                TSetOfInt*            aShapesId=0);
This commit is contained in:
eap 2013-05-29 15:29:19 +00:00
parent ccd189545b
commit e884e4cd7e
2 changed files with 16 additions and 11 deletions

View File

@ -120,16 +120,17 @@ SMESH_Mesh* SMESH_Gen::CreateMesh(int theStudyId, bool theIsEmbeddedMode)
} }
//============================================================================= //=============================================================================
/*! /*
* Compute a mesh * Compute a mesh
*/ */
//============================================================================= //=============================================================================
bool SMESH_Gen::Compute(SMESH_Mesh & aMesh, bool SMESH_Gen::Compute(SMESH_Mesh & aMesh,
const TopoDS_Shape & aShape, const TopoDS_Shape & aShape,
const bool anUpward, const bool aShapeOnly /*=false*/,
const ::MeshDimension aDim, const bool anUpward /*=false*/,
TSetOfInt* aShapesId) const ::MeshDimension aDim /*=::MeshDim_3D*/,
TSetOfInt* aShapesId /*=0*/)
{ {
MESSAGE("SMESH_Gen::Compute"); MESSAGE("SMESH_Gen::Compute");
MEMOSTAT; MEMOSTAT;
@ -143,11 +144,12 @@ bool SMESH_Gen::Compute(SMESH_Mesh & aMesh,
const int globalAlgoDim = 100; const int globalAlgoDim = 100;
SMESH_subMeshIteratorPtr smIt; SMESH_subMeshIteratorPtr smIt;
SMESH_subMesh::compute_event computeEvent;
if ( !anUpward && aShape.IsSame( aMesh.GetShapeToMesh() )) // Fix of Issue 22150. Due to !BLSURF->OnlyUnaryInput(), BLSURF computes edges
computeEvent = SMESH_subMesh::COMPUTE; // that must be computed by Projection 1D-2D when Projection asks to compute
else // one face only.
computeEvent = SMESH_subMesh::COMPUTE_SUBMESH; SMESH_subMesh::compute_event computeEvent =
aShapeOnly ? SMESH_subMesh::COMPUTE_SUBMESH : SMESH_subMesh::COMPUTE;
if ( anUpward ) // is called from the below code in this method if ( anUpward ) // is called from the below code in this method
{ {
@ -331,7 +333,7 @@ bool SMESH_Gen::Compute(SMESH_Mesh & aMesh,
SMESH_Hypothesis::Hypothesis_Status status; SMESH_Hypothesis::Hypothesis_Status status;
if ( subAlgo->CheckHypothesis( aMesh, aSubShape, status )) if ( subAlgo->CheckHypothesis( aMesh, aSubShape, status ))
// mesh a lower smToCompute starting from vertices // mesh a lower smToCompute starting from vertices
Compute( aMesh, aSubShape, /*anUpward=*/true, aDim, aShapesId ); Compute( aMesh, aSubShape, aShapeOnly, /*anUpward=*/true, aDim, aShapesId );
} }
} }
} }
@ -363,7 +365,7 @@ bool SMESH_Gen::Compute(SMESH_Mesh & aMesh,
// ----------------------------------------------- // -----------------------------------------------
// mesh the rest sub-shapes starting from vertices // mesh the rest sub-shapes starting from vertices
// ----------------------------------------------- // -----------------------------------------------
ret = Compute( aMesh, aShape, /*anUpward=*/true, aDim, aShapesId ); ret = Compute( aMesh, aShape, aShapeOnly, /*anUpward=*/true, aDim, aShapesId );
} }
MESSAGE( "VSR - SMESH_Gen::Compute() finished, OK = " << ret); MESSAGE( "VSR - SMESH_Gen::Compute() finished, OK = " << ret);

View File

@ -70,6 +70,8 @@ public:
/*! /*!
* \brief Computes aMesh on aShape * \brief Computes aMesh on aShape
* \param aShapeOnly - if true, algo->OnlyUnaryInput() feature is ignored and
* only \a aShape is computed.
* \param anUpward - compute from vertices up to more complex shape (internal usage) * \param anUpward - compute from vertices up to more complex shape (internal usage)
* \param aDim - upper level dimension of the mesh computation * \param aDim - upper level dimension of the mesh computation
* \param aShapesId - list of shapes with computed mesh entities (elements or nodes) * \param aShapesId - list of shapes with computed mesh entities (elements or nodes)
@ -77,6 +79,7 @@ public:
*/ */
bool Compute(::SMESH_Mesh & aMesh, bool Compute(::SMESH_Mesh & aMesh,
const TopoDS_Shape & aShape, const TopoDS_Shape & aShape,
const bool aShapeOnly=false,
const bool anUpward=false, const bool anUpward=false,
const ::MeshDimension aDim=::MeshDim_3D, const ::MeshDimension aDim=::MeshDim_3D,
TSetOfInt* aShapesId=0); TSetOfInt* aShapesId=0);