Salome HOME
23544: SMESH's performance issues
authoreap <eap@opencascade.com>
Tue, 10 Apr 2018 16:14:21 +0000 (19:14 +0300)
committereap <eap@opencascade.com>
Tue, 10 Apr 2018 16:14:21 +0000 (19:14 +0300)
src/SMDS/SMDS_MeshCell.cxx
src/SMDS/SMDS_MeshGroup.cxx
src/SMDS/SMDS_MeshGroup.hxx
src/SMDS/SMDS_SpacePosition.hxx

index ae6d99f..7ee9c92 100644 (file)
@@ -41,6 +41,7 @@ namespace
     SMDSAbs_ElementType  myType;
     SMDSAbs_GeometryType myGeom;
     bool                 myIsPoly;
+    bool                 myIsQuadratic;
     int                  myNbCornerNodes;
     int                  myNbNodes;
     int                  myNbEdges;
@@ -65,12 +66,12 @@ namespace
       myType          = Type;
       myGeom          = Geom;
       myIsPoly        = IsPoly;
+      myIsQuadratic   = ( NbNodes > NbCornerNodes );
       myNbCornerNodes = NbCornerNodes;
       myNbNodes       = NbNodes;
       myNbEdges       = NbEdges;
       myNbFaces       = NbFaces;
     }
-    bool IsQuadratic() const { return myNbNodes > myNbCornerNodes; }
   };
 
   //! return vector a CellProps
@@ -259,7 +260,7 @@ bool SMDS_MeshCell::ChangeNodes(const SMDS_MeshNode* nodes[], const int theNbNod
 ///////////////////////////////////////////////////////////////////////////////
 int SMDS_MeshCell::NbNodes() const
 {
-  if ( GetEntityType() == SMDSEntity_Polyhedra )
+  if ( GetVtkType() == VTK_POLYHEDRON )
     return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::NbNodes();
   vtkIdType *pts, npts;
   getGrid()->GetCellPoints( GetVtkID(), npts, pts );
@@ -268,7 +269,7 @@ int SMDS_MeshCell::NbNodes() const
 
 int SMDS_MeshCell::NbFaces() const
 {
-  if ( GetEntityType() == SMDSEntity_Polyhedra )
+  if ( GetVtkType() == VTK_POLYHEDRON )
     return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::NbFaces();
   return getCellProps( GetVtkType() ).myNbFaces;
 }
@@ -290,13 +291,13 @@ int SMDS_MeshCell::NbEdges() const
 
 int SMDS_MeshCell::NbCornerNodes() const
 {
-  switch ( GetEntityType() )
+  switch ( GetVtkType() )
   {
-  case SMDSEntity_Polyhedra:
+  case VTK_POLYHEDRON:
     return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::NbCornerNodes();
-  case SMDSEntity_Polygon:
+  case VTK_POLYGON:
     return NbNodes();
-  case SMDSEntity_Quad_Polygon:
+  case VTK_QUADRATIC_POLYGON:
     return NbNodes() / 2;
   default:;
   }
@@ -308,7 +309,7 @@ int SMDS_MeshCell::NbCornerNodes() const
 ///////////////////////////////////////////////////////////////////////////////
 SMDS_ElemIteratorPtr SMDS_MeshCell::nodesIterator() const
 {
-  if ( GetEntityType() == SMDSEntity_Polyhedra )
+  if ( GetVtkType() == VTK_POLYHEDRON )
     return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::nodesIterator();
 
   return boost::make_shared< SMDS_VtkCellIterator<> >( GetMesh(), GetVtkID(), GetEntityType());
@@ -319,7 +320,7 @@ SMDS_ElemIteratorPtr SMDS_MeshCell::nodesIterator() const
 ///////////////////////////////////////////////////////////////////////////////
 SMDS_NodeIteratorPtr SMDS_MeshCell::nodeIterator() const
 {
-  if ( GetEntityType() == SMDSEntity_Polyhedra )
+  if ( GetVtkType() == VTK_POLYHEDRON )
     return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::nodeIterator();
 
   return SMDS_NodeIteratorPtr
@@ -340,7 +341,7 @@ SMDS_NodeIteratorPtr SMDS_MeshCell::nodesIteratorToUNV() const
 
 SMDSAbs_ElementType SMDS_MeshCell::GetType() const
 {
-  return ElemType( GetEntityType() );
+  return getCellProps( GetVtkType() ).myType;
 }
 
 SMDSAbs_EntityType SMDS_MeshCell::GetEntityType() const
@@ -365,12 +366,12 @@ bool SMDS_MeshCell::IsPoly() const
 
 bool SMDS_MeshCell::IsQuadratic() const
 {
-  return getCellProps( GetVtkType() ).IsQuadratic();
+  return getCellProps( GetVtkType() ).myIsQuadratic;
 }
 
 const SMDS_MeshNode* SMDS_MeshCell::GetNode(const int ind) const
 {
-  if ( GetEntityType() == SMDSEntity_Polyhedra )
+  if ( GetVtkType() == VTK_POLYHEDRON )
     return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::GetNode( ind );
 
   vtkIdType npts, *pts;
@@ -381,7 +382,7 @@ const SMDS_MeshNode* SMDS_MeshCell::GetNode(const int ind) const
 
 int SMDS_MeshCell::GetNodeIndex( const SMDS_MeshNode* node ) const
 {
-  if ( GetEntityType() == SMDSEntity_Polyhedra )
+  if ( GetVtkType() == VTK_POLYHEDRON )
     return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::GetNodeIndex( node );
 
   vtkIdType npts, *pts;
@@ -767,7 +768,7 @@ bool SMDS_MeshCell::IsPoly( SMDSAbs_EntityType entityType )
 
 bool SMDS_MeshCell::IsQuadratic( SMDSAbs_EntityType entityType )
 {
-  return getCellProps( entityType ).IsQuadratic();
+  return getCellProps( entityType ).myIsQuadratic;
 }
 
 int SMDS_MeshCell::NbCornerNodes( SMDSAbs_EntityType entityType )
index 80e7c60..e2f5fbc 100644 (file)
@@ -45,7 +45,7 @@
 
 SMDS_MeshGroup::SMDS_MeshGroup(const SMDS_Mesh *         theMesh,
                                const SMDSAbs_ElementType theType)
-  : SMDS_ElementHolder( theMesh ), myType(theType), myTic(0)
+  : SMDS_ElementHolder( theMesh ), myType( theType ), myTic( 0 )
 {
 }
 
@@ -69,15 +69,15 @@ void SMDS_MeshGroup::Clear()
 bool SMDS_MeshGroup::Add(const SMDS_MeshElement * theElem)
 {
   // the type of the group is determined by the first element added
-  if (myElements.empty()) {
+  if ( myElements.empty() ) {
     myType = theElem->GetType();
   }
-  else if (theElem->GetType() != myType) {
+  else if ( theElem->GetType() != myType ) {
     MESSAGE("SMDS_MeshGroup::Add : Type Mismatch "<<theElem->GetType()<<"!="<<myType);
     return false;
   }
 
-  myElements.insert(theElem);
+  myElements.insert( theElem );
   ++myTic;
 
   return true;
@@ -88,12 +88,12 @@ bool SMDS_MeshGroup::Add(const SMDS_MeshElement * theElem)
 //purpose  :
 //=======================================================================
 
-bool SMDS_MeshGroup::Remove(const SMDS_MeshElement * theElem)
+bool SMDS_MeshGroup::Remove( const SMDS_MeshElement * theElem )
 {
   TElementSet::iterator found = myElements.find(theElem);
   if ( found != myElements.end() ) {
-    myElements.erase(found);
-    if (myElements.empty()) myType = SMDSAbs_All;
+    myElements.erase( found );
+    if ( myElements.empty() ) myType = SMDSAbs_All;
     ++myTic;
     return true;
   }
@@ -102,12 +102,12 @@ bool SMDS_MeshGroup::Remove(const SMDS_MeshElement * theElem)
 
 //=======================================================================
 //function : Contains
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool SMDS_MeshGroup::Contains(const SMDS_MeshElement * theElem) const
 {
-  return myElements.find(theElem) != myElements.end();
+  return myElements.find( theElem ) != myElements.end();
 }
 
 //=======================================================================
@@ -152,6 +152,5 @@ void SMDS_MeshGroup::operator=( SMDS_MeshGroup && other )
 
 void SMDS_MeshGroup::tmpClear()
 {
-  compact();
   myElements.clear();
 }
index b605737..3b39c70 100644 (file)
@@ -33,8 +33,6 @@
 #include "SMDS_Mesh.hxx"
 #include <set>
 
-#include <boost/container/flat_set.hpp>
-
 class SMDS_EXPORT SMDS_MeshGroup: public SMDS_MeshObject, SMDS_ElementHolder
 {
  public:
@@ -43,7 +41,7 @@ class SMDS_EXPORT SMDS_MeshGroup: public SMDS_MeshObject, SMDS_ElementHolder
 
   void SetType (const SMDSAbs_ElementType theType);
   void Clear();
-  void Reserve(size_t nbElems) { myElements.reserve( nbElems ); }
+  void Reserve(size_t nbElems) {}
   bool Add(const SMDS_MeshElement * theElem);
   bool Remove(const SMDS_MeshElement * theElem);
   bool IsEmpty() const { return myElements.empty(); }
@@ -62,12 +60,12 @@ class SMDS_EXPORT SMDS_MeshGroup: public SMDS_MeshObject, SMDS_ElementHolder
   virtual SMDS_ElemIteratorPtr getElements() { return GetElements(); }
   virtual void tmpClear();
   virtual void add( const SMDS_MeshElement* element ) { Add( element ); }
-  virtual void compact() { myElements.shrink_to_fit(); }
+  virtual void compact() {}
 
  private:
 
-  typedef boost::container::flat_set< const SMDS_MeshElement* > TElementSet;
-  typedef TElementSet::const_iterator                           TIterator;
+  typedef std::set< const SMDS_MeshElement* > TElementSet;
+  typedef TElementSet::const_iterator         TIterator;
 
   const SMDS_Mesh *   myMesh;
   SMDSAbs_ElementType myType;
index 1bbac7b..71afda9 100644 (file)
@@ -36,7 +36,7 @@ class SMDS_EXPORT SMDS_SpacePosition : public SMDS_Position
  public:
 
   virtual SMDS_TypeOfPosition GetTypeOfPosition() const { return SMDS_TOP_3DSPACE; }
-  static  SMDS_PositionPtr     originSpacePosition();
+  static  SMDS_PositionPtr    originSpacePosition();
   virtual const double* GetParameters() const { return 0; }
 
  private: