]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
0022875: debug
authoreap <eap@opencascade.com>
Fri, 22 May 2015 18:12:45 +0000 (21:12 +0300)
committereap <eap@opencascade.com>
Fri, 22 May 2015 18:12:45 +0000 (21:12 +0300)
src/MEDPartitioner/MEDPARTITIONER_MEDPartitioner.cxx
src/MEDPartitioner/MEDPARTITIONER_MeshCollection.hxx
src/MEDPartitioner/MEDPARTITIONER_MeshCollectionDriver.cxx

index ff0bb19449fddd908cb92892e483d9d5b50af895..3185a54954fb571dfd551ed27469b7b0906b7f97 100644 (file)
@@ -52,8 +52,16 @@ MEDPARTITIONER::MEDPartitioner::MEDPartitioner(const std::string& filename, int
 
 MEDPARTITIONER::MEDPartitioner::MEDPartitioner(const ParaMEDMEM::MEDFileData* filedata, int ndomains, const std::string& library,bool creates_boundary_faces, bool create_joints, bool mesure_memory)
 {
+  ParaDomainSelector parallelizer(mesure_memory);
   _input_collection=new MeshCollection();
-  _input_collection->getDriver()->readMEDFileData(filedata);
+  _input_collection->setParaDomainSelector( &parallelizer );
+  _input_collection->retrieveDriver()->readMEDFileData(filedata);
+
+  MEDPARTITIONER::ParallelTopology* aPT =
+    (MEDPARTITIONER::ParallelTopology*) _input_collection->getTopology();
+  aPT->setGlobalNumerotationDefault( _input_collection->getParaDomainSelector() );
+  _input_collection->prepareFieldDescriptions();
+
   createPartitionCollection(ndomains, library, creates_boundary_faces, create_joints, mesure_memory);
 }
 
index 1fdad2f404a55009f6a43a141908800e1607dbfa..0ce114712175cca8f971750f15271d09b9d247aa 100644 (file)
@@ -122,6 +122,7 @@ namespace MEDPARTITIONER
     //getting a pointer to topology
     Topology* getTopology() const ;
     ParaDomainSelector* getParaDomainSelector() const { return _domain_selector; }
+    void setParaDomainSelector(ParaDomainSelector* pds) { _domain_selector = pds; }
     //setting a new topology
     void setTopology(Topology* topology);
 
index 2e24082663ec59aa6274e321b6a547b47235df2c..e440100f22c394a214f27323af4b1170c2ae2ec8 100644 (file)
@@ -87,14 +87,33 @@ int MeshCollectionDriver::readSeq(const char* filename, const char* meshname)
 
 void MeshCollectionDriver::readMEDFileData(const ParaMEDMEM::MEDFileData* filedata)
 {
-   for (int i=0; i<filedata->getMeshes()->getNumberOfMeshes(); i++)
-   {
-     ParaMEDMEM::MEDFileUMesh *mfm = dynamic_cast<ParaMEDMEM::MEDFileUMesh *>(filedata->getMeshes()->getMeshAtPos(i));
-     readData(mfm,i);
-     if (i==0)
-       _collection->setName(filedata->getMeshes()->getMeshAtPos(i)->getName());
-     mfm->decrRef();
-   }
+  const int nbDomains = filedata->getMeshes()->getNumberOfMeshes();
+  _collection->getMesh()         .resize( nbDomains, 0 );
+  _collection->getFaceMesh()     .resize( nbDomains, 0 );
+  _collection->getCellFamilyIds().resize( nbDomains, 0 );
+  _collection->getFaceFamilyIds().resize( nbDomains, 0 );
+
+  for (int i=0; i<nbDomains; i++)
+    {
+      ParaMEDMEM::MEDFileUMesh *mfm = dynamic_cast<ParaMEDMEM::MEDFileUMesh *>(filedata->getMeshes()->getMeshAtPos(i));
+      readData(mfm,i);
+      if ( mfm && mfm->getMeshDimension() > 0 )
+        _collection->setNonEmptyMesh( i );
+    }
+
+  ParallelTopology* aPT = new ParallelTopology(_collection->getMesh());
+  _collection->setTopology(aPT);
+  if ( nbDomains > 0 )
+    {
+      _collection->setName( filedata->getMeshes()->getMeshAtPos(0)->getName() );
+      _collection->setDomainNames( _collection->getName() );
+    }
+  if ( ParaDomainSelector* domainSelector = _collection->getParaDomainSelector() )
+    if ( _collection->isParallelMode() )
+      {
+        //to know nb of cells on each proc to compute global cell ids from locally global
+        domainSelector->gatherNbOf(_collection->getMesh());
+      }
 }
 
 void MeshCollectionDriver::readFileData(std::string file,std::string meshname,int idomain) const
@@ -103,6 +122,7 @@ void MeshCollectionDriver::readFileData(std::string file,std::string meshname,in
   readData(mfm,idomain);
   mfm->decrRef();
 }
+
 void MeshCollectionDriver::readData(ParaMEDMEM::MEDFileUMesh* mfm, int idomain) const
 {
   std::vector<int> nonEmpty=mfm->getNonEmptyLevels();
@@ -297,9 +317,9 @@ void MeshCollectionDriver::writeMedFile(int idomain, const std::string& distfile
       size_t found=(*it).first.find(key);
       if (found==std::string::npos)
         continue;
-         ParaMEDMEM::MEDCouplingFieldDouble* field=0;
-         field=getField(key, (*it).first, (*it).second, mfm, idomain);
-         nbfFieldFound++;
+          ParaMEDMEM::MEDCouplingFieldDouble* field=0;
+          field=getField(key, (*it).first, (*it).second, mfm, idomain);
+          nbfFieldFound++;
       try
         {
           MEDLoader::WriteField(distfilename,field,false);
@@ -340,8 +360,8 @@ ParaMEDMEM::MEDFileData* MeshCollectionDriver::getMEDFileData()
       size_t found=(*it).first.find(key);
       if (found==std::string::npos)
         continue;
-         ParaMEDMEM::MEDCouplingFieldDouble* field=0;
-         field=getField(key, (*it).first, (*it).second, mfm, i);
+          ParaMEDMEM::MEDCouplingFieldDouble* field=0;
+          field=getField(key, (*it).first, (*it).second, mfm, i);
       ParaMEDMEM::MEDFileField1TS* f1ts(ParaMEDMEM::MEDFileField1TS::New());
       f1ts->setFieldNoProfileSBT(field);
       fieldsMTS->pushBackTimeStep(f1ts);