X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH%2FSMESH_Mesh.cxx;h=3eb08a85c491cba94eef110101f94a834fef3f60;hb=a91b37ceb38f808da171e83d0d6a7a4c2b4bb050;hp=7c634c4deb25ed577fc1a9d3f5751f09091afb27;hpb=88ff35ddd4a4442397bc5f6ba893aaf9c51b1856;p=modules%2Fsmesh.git diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx index 7c634c4de..3eb08a85c 100644 --- a/src/SMESH/SMESH_Mesh.cxx +++ b/src/SMESH/SMESH_Mesh.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2022 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -76,15 +76,18 @@ #ifndef WIN32 #include #include -#else +#else #include #endif +#include +namespace fs=boost::filesystem; + // maximum stored group name length in MED file #define MAX_MED_GROUP_NAME_LENGTH 80 #ifdef _DEBUG_ -static int MYDEBUG = 0; +static int MYDEBUG = 1; #else static int MYDEBUG = 0; #endif @@ -99,7 +102,7 @@ class SMESH_Mesh::SubMeshHolder : public SMESHDS_TSubMeshHolder< SMESH_subMesh > //============================================================================= /*! - * + * */ //============================================================================= @@ -121,6 +124,9 @@ SMESH_Mesh::SMESH_Mesh(int theLocalId, _callUp = NULL; _meshDS->ShapeToMesh( PseudoShape() ); _subMeshHolder = new SubMeshHolder; + // Temporary folder that will be used by parallel computation + tmp_folder = fs::temp_directory_path()/fs::unique_path(fs::path("SMESH_%%%%-%%%%")); + fs::create_directories(tmp_folder); // assure unique persistent ID if ( _document->NbMeshes() > 1 ) @@ -168,13 +174,11 @@ namespace #ifndef WIN32 void deleteMeshDS(SMESHDS_Mesh* meshDS) { - //cout << "deleteMeshDS( " << meshDS << endl; delete meshDS; } #else static void* deleteMeshDS(void* meshDS) { - //cout << "deleteMeshDS( " << meshDS << endl; SMESHDS_Mesh* m = (SMESHDS_Mesh*)meshDS; if(m) { delete m; @@ -235,6 +239,11 @@ SMESH_Mesh::~SMESH_Mesh() int result=pthread_create(&thread, NULL, deleteMeshDS, (void*)_meshDS); #endif } + + if(_pool) + DeletePoolThreads(); + if (!MYDEBUG) + fs::remove_all(tmp_folder); } //================================================================================ @@ -532,7 +541,7 @@ int SMESH_Mesh::MEDToMesh(const char* theFileName, const char* theMeshName) Driver_Mesh::Status status = myReader.Perform(); #ifdef _DEBUG_ SMESH_ComputeErrorPtr er = myReader.GetError(); - if ( er && !er->IsOK() ) std::cout << er->myComment << std::endl; + if ( er && !er->IsOK() ) MESSAGE(er->myComment); #endif // Reading groups (sub-meshes are out of scope of MED import functionality) @@ -629,7 +638,7 @@ SMESH_ComputeErrorPtr SMESH_Mesh::GMFToMesh(const char* theFileName, //============================================================================= /*! - * + * */ //============================================================================= @@ -705,7 +714,7 @@ SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape, while ( smIt->more() ) { SMESH_subMesh* sm = smIt->next(); if ( sm->IsApplicableHypothesis( anHyp )) { - ret2 = sm->CheckConcurrentHypothesis( anHyp->GetType() ); + ret2 = sm->CheckConcurrentHypothesis( anHyp ); if (ret2 > ret) { ret = ret2; break; @@ -724,7 +733,7 @@ SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape, //============================================================================= /*! - * + * */ //============================================================================= @@ -741,7 +750,7 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape, SMESH_Hypothesis *anHyp = sc->mapHypothesis[anHypId]; if(MYDEBUG) { SCRUTE(anHyp->GetType()); } - // shape + // shape bool isAlgo = ( !anHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO ); SMESH_subMesh::algo_event event = isAlgo ? SMESH_subMesh::REMOVE_ALGO : SMESH_subMesh::REMOVE_HYP; @@ -753,7 +762,7 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape, // there may appear concurrent hyps that were covered by the removed hyp if (ret < SMESH_Hypothesis::HYP_CONCURRENT && subMesh->IsApplicableHypothesis( anHyp ) && - subMesh->CheckConcurrentHypothesis( anHyp->GetType() ) != SMESH_Hypothesis::HYP_OK) + subMesh->CheckConcurrentHypothesis( anHyp ) != SMESH_Hypothesis::HYP_OK) ret = SMESH_Hypothesis::HYP_CONCURRENT; // sub-shapes @@ -774,7 +783,7 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape, while ( smIt->more() ) { SMESH_subMesh* sm = smIt->next(); if ( sm->IsApplicableHypothesis( anHyp )) { - ret2 = sm->CheckConcurrentHypothesis( anHyp->GetType() ); + ret2 = sm->CheckConcurrentHypothesis( anHyp ); if (ret2 > ret) { ret = ret2; break; @@ -794,7 +803,7 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape, //============================================================================= /*! - * + * */ //============================================================================= @@ -861,7 +870,7 @@ const SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const SMESH_subMesh * aSubM const_cast< std::vector< SMESH_subMesh * > & > ( aSubMesh->GetAncestors() ); SortByMeshOrder( ancestors ); - std::vector::const_iterator smIt = ancestors.begin(); + std::vector::const_iterator smIt = ancestors.begin(); for ( ; smIt != ancestors.end(); smIt++ ) { const TopoDS_Shape& curSh = (*smIt)->GetSubShape(); @@ -1004,7 +1013,7 @@ SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const int anHypId) const //============================================================================= /*! - * + * */ //============================================================================= @@ -1015,7 +1024,7 @@ const std::list & SMESH_Mesh::GetLog() //============================================================================= /*! - * + * */ //============================================================================= void SMESH_Mesh::ClearLog() @@ -1416,8 +1425,7 @@ void SMESH_Mesh::exportMEDCommmon(DriverMED_W_SMESHDS_Mesh& theWriter, bool theAutoDimension, bool theAddODOnVertices, double theZTolerance, - bool theSaveNumbers, - bool theAllElemsToGroup) + bool theSaveNumbers) { Driver_Mesh::Status status = Driver_Mesh::DRS_OK; @@ -1443,8 +1451,6 @@ void SMESH_Mesh::exportMEDCommmon(DriverMED_W_SMESHDS_Mesh& theWriter, theWriter.AddGroupOf0DElems(); theWriter.AddGroupOfBalls(); } - if ( theAllElemsToGroup ) - theWriter.AddAllToGroup(); // Pass groups to writer. Provide unique group names. //set aGroupNames; // Corrected for Mantis issue 0020028 @@ -1499,8 +1505,7 @@ SMESH_Mesh::ExportMEDCoupling(const char* theMeshName, { DriverMED_W_SMESHDS_Mesh_Mem writer; this->exportMEDCommmon( writer, theMeshName, theAutoGroups, theMeshPart, theAutoDimension, - theAddODOnVertices, theZTolerance, theSaveNumbers, - /*AllElemsToGroup(for ExportSAUV())=*/false); + theAddODOnVertices, theZTolerance, theSaveNumbers); return writer.getData(); } @@ -1525,8 +1530,6 @@ SMESH_Mesh::ExportMEDCoupling(const char* theMeshName, * within a given tolerance, the coordinate is set to zero. * If \a ZTolerance is negative, the node coordinates are kept as is. * \param [in] theSaveNumbers : enable saving numbers of nodes and cells. - * \param [in] theAllElemsToGroup - to make every element to belong to any group (PAL23413). - * It is used by ExportSAUV() only * \return int - mesh index in the file */ //================================================================================ @@ -1539,65 +1542,12 @@ void SMESH_Mesh::ExportMED(const char * theFile, bool theAutoDimension, bool theAddODOnVertices, double theZTolerance, - bool theSaveNumbers, - bool theAllElemsToGroup) + bool theSaveNumbers) { MESSAGE("MED_VERSION:"<< theVersion); DriverMED_W_SMESHDS_Mesh writer; writer.SetFile( theFile, theVersion ); - this->exportMEDCommmon( writer, theMeshName, theAutoGroups, theMeshPart, theAutoDimension, theAddODOnVertices, theZTolerance, theSaveNumbers, theAllElemsToGroup ); -} - -//================================================================================ -/*! - * \brief Export the mesh to a SAUV file - */ -//================================================================================ - -void SMESH_Mesh::ExportSAUV(const char *theFile, - const char* theMeshName, - bool theAutoGroups) -{ - std::string medfilename( theFile ); - medfilename += ".med"; - std::string cmd; -#ifdef WIN32 - cmd = "%PYTHONBIN% "; -#else - cmd = "python3 "; -#endif - cmd += "-c \""; - cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')"; - cmd += "\""; - system(cmd.c_str()); - try { - ExportMED( medfilename.c_str(), theMeshName, theAutoGroups, /*minor=*/-1, - /*meshPart=*/NULL, /*theAutoDimension=*/false, /*theAddODOnVertices=*/false, - /*zTol=*/-1, /*theSaveNumbers=*/false, - /*theAllElemsToGroup=*/true ); // theAllElemsToGroup is for PAL0023413 - } - catch ( TooLargeForExport ) - { - throw TooLargeForExport("SAUV"); - } -#ifdef WIN32 - cmd = "%PYTHONBIN% "; -#else - cmd = "python3 "; -#endif - cmd += "-c \""; - cmd += "from medutilities import convert ; convert(r'" + medfilename + "', 'MED', 'GIBI', 1, r'" + theFile + "')"; - cmd += "\""; - system(cmd.c_str()); -#ifdef WIN32 - cmd = "%PYTHONBIN% "; -#else - cmd = "python3 "; -#endif - cmd += "-c \""; - cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')"; - cmd += "\""; - system(cmd.c_str()); + this->exportMEDCommmon( writer, theMeshName, theAutoGroups, theMeshPart, theAutoDimension, theAddODOnVertices, theZTolerance, theSaveNumbers ); } //================================================================================ @@ -1786,7 +1736,7 @@ double SMESH_Mesh::GetComputeProgress() const const SMESH_subMesh* curSM = _gen->GetCurrentSubMesh(); // get progress of a current algo - TColStd_MapOfInteger currentSubIds; + TColStd_MapOfInteger currentSubIds; if ( curSM ) if ( SMESH_Algo* algo = curSM->GetAlgo() ) { @@ -1820,7 +1770,6 @@ double SMESH_Mesh::GetComputeProgress() const rate = algo->GetProgressByTic(); computedCost += algoDoneCost + rate * algoNotDoneCost; } - // cout << "rate: "<GetMeshInfo().NbElements() << endl; return computedCost / totalCost; } @@ -2094,7 +2040,7 @@ bool SMESH_Mesh::IsNotConformAllowed() const //======================================================================= //function : IsMainShape -//purpose : +//purpose : //======================================================================= bool SMESH_Mesh::IsMainShape(const TopoDS_Shape& theShape) const @@ -2114,7 +2060,7 @@ TopoDS_Shape SMESH_Mesh::GetShapeByEntry(const std::string& entry) const //============================================================================= /*! - * + * */ //============================================================================= @@ -2228,7 +2174,7 @@ std::list SMESH_Mesh::GetGroupIds() const std::map::const_iterator it = _mapGroup.begin(); for ( ; it != _mapGroup.end(); it++ ) anIds.push_back( it->first ); - + return anIds; } @@ -2247,7 +2193,7 @@ void SMESH_Mesh::SetCallUp( TCallUp* upCaller ) //============================================================================= /*! - * + * */ //============================================================================= @@ -2605,7 +2551,7 @@ bool SMESH_Mesh::IsOrderOK( const SMESH_subMesh* smBefore, } } return true; // no order imposed to given sub-meshes -} +} //============================================================================= /*!