]> SALOME platform Git repositories - modules/med.git/commitdiff
Salome HOME
On the road of reimplementation of basic MEDLoader API with advanced one.
authorageay <ageay>
Tue, 25 Jun 2013 08:17:13 +0000 (08:17 +0000)
committerageay <ageay>
Tue, 25 Jun 2013 08:17:13 +0000 (08:17 +0000)
src/MEDLoader/MEDFileMesh.cxx
src/MEDLoader/MEDFileMesh.hxx
src/MEDLoader/MEDFileMeshLL.cxx
src/MEDLoader/MEDLoader.cxx
src/MEDLoader/Swig/MEDLoaderCommon.i
src/MEDLoader/Swig/MEDLoaderTest.py
src/MEDLoader/Swig/MEDLoaderTest2.py
src/MEDLoader/Swig/MEDLoaderTest3.py

index 48dc0c5e35b1a88fb2b1e62e1052d77216c46fd7..0230171c811afdc3bbde305f25b023367749f09a 100644 (file)
@@ -2666,9 +2666,7 @@ MEDCouplingUMesh *MEDFileUMesh::getGroup(int meshDimRelToMaxExt, const char *grp
   synchronizeTinyInfoOnLeaves();
   std::vector<std::string> tmp(1);
   tmp[0]=grp;
-  MEDCouplingUMesh *ret=getGroups(meshDimRelToMaxExt,tmp,renum);
-  ret->setName(grp);
-  return ret;
+  return getGroups(meshDimRelToMaxExt,tmp,renum);
 }
 
 /*!
@@ -2689,7 +2687,10 @@ MEDCouplingUMesh *MEDFileUMesh::getGroups(int meshDimRelToMaxExt, const std::vec
 {
   synchronizeTinyInfoOnLeaves();
   std::vector<std::string> fams2=getFamiliesOnGroups(grps);
-  return getFamilies(meshDimRelToMaxExt,fams2,renum);
+  MEDCouplingAutoRefCountObjectPtr<MEDCouplingUMesh> zeRet=getFamilies(meshDimRelToMaxExt,fams2,renum);
+  if(grps.size()==1 && ((MEDCouplingUMesh *)zeRet))
+    zeRet->setName(grps[0].c_str());
+  return zeRet.retn();
 }
 
 /*!
@@ -2711,9 +2712,7 @@ MEDCouplingUMesh *MEDFileUMesh::getFamily(int meshDimRelToMaxExt, const char *fa
   synchronizeTinyInfoOnLeaves();
   std::vector<std::string> tmp(1);
   tmp[0]=fam;
-  MEDCouplingUMesh *ret=getFamilies(meshDimRelToMaxExt,tmp,renum);
-  ret->setName(fam);
-  return ret;
+  return getFamilies(meshDimRelToMaxExt,tmp,renum);
 }
 
 /*!
@@ -2743,10 +2742,14 @@ MEDCouplingUMesh *MEDFileUMesh::getFamilies(int meshDimRelToMaxExt, const std::v
     }
   std::vector<int> famIds=getFamiliesIds(fams);
   const MEDFileUMeshSplitL1 *l1=getMeshAtLevSafe(meshDimRelToMaxExt);
+  MEDCouplingAutoRefCountObjectPtr<MEDCouplingUMesh> zeRet;
   if(!famIds.empty())
-    return l1->getFamilyPart(&famIds[0],&famIds[0]+famIds.size(),renum);
+    zeRet=l1->getFamilyPart(&famIds[0],&famIds[0]+famIds.size(),renum);
   else
-    return l1->getFamilyPart(0,0,renum);
+    zeRet=l1->getFamilyPart(0,0,renum);
+  if(fams.size()==1 && ((MEDCouplingUMesh *)zeRet))
+    zeRet->setName(fams[0].c_str());
+  return zeRet.retn();
 }
 
 /*!
@@ -3439,7 +3442,7 @@ void MEDFileUMesh::setMeshAtLevel(int meshDimRelToMax, MEDCouplingUMesh *m, bool
  *  \throw If names of some meshes in \a ms are equal.
  *  \throw If \a ms includes a mesh with an empty name.
  */
-void MEDFileUMesh::setGroupsFromScratch(int meshDimRelToMax, const std::vector<const MEDCouplingUMesh *>& ms) throw(INTERP_KERNEL::Exception)
+void MEDFileUMesh::setGroupsFromScratch(int meshDimRelToMax, const std::vector<const MEDCouplingUMesh *>& ms, bool renum) throw(INTERP_KERNEL::Exception)
 {
   if(ms.empty())
     throw INTERP_KERNEL::Exception("MEDFileUMesh::setGroupsFromScratch : expecting a non empty vector !");
@@ -3459,7 +3462,7 @@ void MEDFileUMesh::setGroupsFromScratch(int meshDimRelToMax, const std::vector<c
   std::vector<DataArrayInt *> corr;
   MEDCouplingAutoRefCountObjectPtr<MEDCouplingUMesh> m=MEDCouplingUMesh::FuseUMeshesOnSameCoords(ms,_zipconn_pol,corr);
   std::vector< MEDCouplingAutoRefCountObjectPtr<DataArrayInt> > corr3(corr.begin(),corr.end());
-  setMeshAtLevel(meshDimRelToMax,m);
+  setMeshAtLevel(meshDimRelToMax,m,renum);
   std::vector<const DataArrayInt *> corr2(corr.begin(),corr.end());
   setGroupsAtLevel(meshDimRelToMax,corr2,true);
 }
index 05b7143bc558d1bce206234d2c7f13baafe330d3..4e51589322b1d72fd7315c54f2eb6dda4f20cde8 100644 (file)
@@ -243,7 +243,7 @@ namespace ParaMEDMEM
     void addGroup(int meshDimRelToMaxExt, const DataArrayInt *ids) throw(INTERP_KERNEL::Exception);
     void removeMeshAtLevel(int meshDimRelToMax) throw(INTERP_KERNEL::Exception);
     void setMeshAtLevel(int meshDimRelToMax, MEDCouplingUMesh *m, bool newOrOld=false) throw(INTERP_KERNEL::Exception);
-    void setGroupsFromScratch(int meshDimRelToMax, const std::vector<const MEDCouplingUMesh *>& ms) throw(INTERP_KERNEL::Exception);
+    void setGroupsFromScratch(int meshDimRelToMax, const std::vector<const MEDCouplingUMesh *>& ms, bool renum=false) throw(INTERP_KERNEL::Exception);
     void setGroupsOnSetMesh(int meshDimRelToMax, const std::vector<const MEDCouplingUMesh *>& ms, bool renum) throw(INTERP_KERNEL::Exception);
     void optimizeFamilies() throw(INTERP_KERNEL::Exception);
     // tools
index 7423fdbdef11caf53e948fc44392f95479d08c8e..00eb2c63758c582ef91d2a15aaeec45ade28f558 100644 (file)
@@ -763,7 +763,7 @@ DataArrayInt *MEDFileUMeshSplitL1::getFamilyPartArr(const int *idsBg, const int
 MEDCouplingUMesh *MEDFileUMeshSplitL1::getWholeMesh(bool renum) const
 {
   MEDCouplingAutoRefCountObjectPtr<MEDCouplingUMesh> tmp;
-  if(renum)
+  if(renum && ((const DataArrayInt *)_num))
     tmp=_m;
   else
     tmp=_m_by_types;
index 4126fb9d9edb16c6c2bd56aff200576b5ab96b22..88e97da552c227fbd05e14805cb264f677f0a586 100644 (file)
@@ -21,6 +21,7 @@
 #include "MEDLoader.hxx"
 #include "MEDLoaderBase.hxx"
 #include "MEDFileUtilities.hxx"
+#include "MEDFileMesh.hxx"
 #include "CellModel.hxx"
 #include "MEDCouplingUMesh.hxx"
 #include "MEDCouplingMemArray.hxx"
@@ -165,7 +166,7 @@ namespace MEDLoaderNS
   std::vector<int> getIdsFromGroups(const char *fileName, const char *meshName, const std::vector<std::string>& grps);
   med_int getIdFromMeshName(med_idt fid, const char *meshName, std::string& trueMeshName) throw(INTERP_KERNEL::Exception);
   void dispatchElems(int nbOfElemCell, int nbOfElemFace, int& nbOfElem, med_entity_type& whichEntity);
-  int readUMeshDimFromFile(const char *fileName, const char *meshName, std::vector<int>& possibilities);
+  int readUMeshDimFromFile(const char *fileName, const char *meshName, std::vector<int>& possibilities);//to keep
   void readUMeshDataInMedFile(med_idt fid, med_int meshId, DataArrayDouble *&coords, std::list<MEDLoader::MEDConnOfOneElemType>& conn, std::string& desc);
   int buildMEDSubConnectivityOfOneType(const std::vector<const DataArrayInt *>& conn, const std::vector<const DataArrayInt *>& connIndex, const std::vector<const DataArrayInt *>& families, INTERP_KERNEL::NormalizedCellType type,
                                        std::vector<int>& conn4MEDFile, std::vector<int>& connIndex4MEDFile, std::vector<int>& connIndexRk24MEDFile,
@@ -2069,33 +2070,29 @@ ParaMEDMEM::MEDCouplingFieldDouble *MEDLoaderNS::readFieldDoubleLev1(const char
 MEDCouplingUMesh *MEDLoader::ReadUMeshFromFile(const char *fileName, const char *meshName, int meshDimRelToMax) throw(INTERP_KERNEL::Exception)
 {
   CheckFileForRead(fileName);
-  std::vector<int> familiesToKeep;
-  std::vector<INTERP_KERNEL::NormalizedCellType> typesToKeep;
-  unsigned meshDim;
-  int *cellRenum;
-  ParaMEDMEM::MEDCouplingUMesh *ret=MEDLoaderNS::readUMeshFromFileLev1(fileName,meshName,meshDimRelToMax,familiesToKeep,typesToKeep,meshDim,cellRenum);
-  if(cellRenum)
+  MEDCouplingAutoRefCountObjectPtr<MEDFileMesh> mm=MEDFileMesh::New(fileName,meshName);
+  MEDFileMesh *mmPtr(mm);
+  MEDFileUMesh *mmuPtr=dynamic_cast<MEDFileUMesh *>(mmPtr);
+  if(!mmuPtr)
     {
-      ret->renumberCells(cellRenum,true);
-      delete [] cellRenum;
+      std::ostringstream oss; oss << "MEDLoader::ReadUMeshFromFile : With fileName=\""<< fileName << "\", meshName=\""<< meshName << "\" exists but it is not an unstructured mesh !";
+      throw INTERP_KERNEL::Exception(oss.str().c_str());
     }
 return ret;
return  mmuPtr->getMeshAtLevel(meshDimRelToMax,true);
 }
 
 ParaMEDMEM::MEDCouplingUMesh *MEDLoader::ReadUMeshFromFile(const char *fileName, int meshDimRelToMax) throw(INTERP_KERNEL::Exception)
 {
   CheckFileForRead(fileName);
-  std::vector<int> familiesToKeep;
-  std::vector<INTERP_KERNEL::NormalizedCellType> typesToKeep;
-  unsigned meshDim;
-  int *cellRenum;
-  ParaMEDMEM::MEDCouplingUMesh *ret=MEDLoaderNS::readUMeshFromFileLev1(fileName,0,meshDimRelToMax,familiesToKeep,typesToKeep,meshDim,cellRenum);
-  if(cellRenum)
+  MEDCouplingAutoRefCountObjectPtr<MEDFileMesh> mm=MEDFileMesh::New(fileName);
+  MEDFileMesh *mmPtr(mm);
+  MEDFileUMesh *mmuPtr=dynamic_cast<MEDFileUMesh *>(mmPtr);
+  if(!mmuPtr)
     {
-      ret->renumberCells(cellRenum,true);
-      delete [] cellRenum;
+      std::ostringstream oss; oss << "MEDLoader::ReadUMeshFromFile : With fileName=\""<< fileName << "\", meshName (the first) =\""<< mm->getName() << "\" exists but it is not an unstructured mesh !";
+      throw INTERP_KERNEL::Exception(oss.str().c_str());
     }
 return ret;
return  mmuPtr->getMeshAtLevel(meshDimRelToMax,true);
 }
 
 int MEDLoader::ReadUMeshDimFromFile(const char *fileName, const char *meshName) throw(INTERP_KERNEL::Exception)
@@ -2108,37 +2105,29 @@ int MEDLoader::ReadUMeshDimFromFile(const char *fileName, const char *meshName)
 ParaMEDMEM::MEDCouplingUMesh *MEDLoader::ReadUMeshFromFamilies(const char *fileName, const char *meshName, int meshDimRelToMax, const std::vector<std::string>& fams) throw(INTERP_KERNEL::Exception)
 {
   CheckFileForRead(fileName);
-  std::vector<int> familiesToKeep=MEDLoaderNS::getIdsFromFamilies(fileName,meshName,fams);
-  std::vector<INTERP_KERNEL::NormalizedCellType> typesToKeep;
-  unsigned meshDim;
-  int *cellRenum;
-  ParaMEDMEM::MEDCouplingUMesh *ret=MEDLoaderNS::readUMeshFromFileLev1(fileName,meshName,meshDimRelToMax,familiesToKeep,typesToKeep,meshDim,cellRenum);
-  if(fams.size()==1)
-    ret->setName(fams.back().c_str());
-  if(cellRenum)
+  MEDCouplingAutoRefCountObjectPtr<MEDFileMesh> mm=MEDFileMesh::New(fileName,meshName);
+  MEDFileMesh *mmPtr(mm);
+  MEDFileUMesh *mmuPtr=dynamic_cast<MEDFileUMesh *>(mmPtr);
+  if(!mmuPtr)
     {
-      ret->renumberCells(cellRenum,true);
-      delete [] cellRenum;
+      std::ostringstream oss; oss << "MEDLoader::ReadUMeshFromFamilies : With fileName=\""<< fileName << "\", meshName (the first) =\""<< mm->getName() << "\" exists but it is not an unstructured mesh !";
+      throw INTERP_KERNEL::Exception(oss.str().c_str());
     }
-  return ret;
+    return mmuPtr->getFamilies(meshDimRelToMax,fams,true);
 }
 
 ParaMEDMEM::MEDCouplingUMesh *MEDLoader::ReadUMeshFromGroups(const char *fileName, const char *meshName, int meshDimRelToMax, const std::vector<std::string>& grps) throw(INTERP_KERNEL::Exception)
 {
   CheckFileForRead(fileName);
-  std::vector<int> familiesToKeep=MEDLoaderNS::getIdsFromGroups(fileName,meshName,grps);
-  std::vector<INTERP_KERNEL::NormalizedCellType> typesToKeep;
-  unsigned meshDim;
-  int *cellRenum;
-  ParaMEDMEM::MEDCouplingUMesh *ret=MEDLoaderNS::readUMeshFromFileLev1(fileName,meshName,meshDimRelToMax,familiesToKeep,typesToKeep,meshDim,cellRenum);
-  if(grps.size()==1)
-    ret->setName(grps.back().c_str());
-  if(cellRenum)
+  MEDCouplingAutoRefCountObjectPtr<MEDFileMesh> mm=MEDFileMesh::New(fileName,meshName);
+  MEDFileMesh *mmPtr(mm);
+  MEDFileUMesh *mmuPtr=dynamic_cast<MEDFileUMesh *>(mmPtr);
+  if(!mmuPtr)
     {
-      ret->renumberCells(cellRenum,true);
-      delete [] cellRenum;
+      std::ostringstream oss; oss << "MEDLoader::ReadUMeshFromGroups : With fileName=\""<< fileName << "\", meshName (the first) =\""<< mm->getName() << "\" exists but it is not an unstructured mesh !";
+      throw INTERP_KERNEL::Exception(oss.str().c_str());
     }
-  return ret;
+    return mmuPtr->getGroups(meshDimRelToMax,grps,true);
 }
 
 ParaMEDMEM::MEDCouplingFieldDouble *MEDLoader::ReadField(ParaMEDMEM::TypeOfField type, const char *fileName, const char *meshName, int meshDimRelToMax, const char *fieldName, int iteration, int order) throw(INTERP_KERNEL::Exception)
@@ -2828,68 +2817,17 @@ void MEDLoaderNS::writeFieldTryingToFitExistingMesh(const char *fileName, const
 
 void MEDLoader::WriteUMesh(const char *fileName, const ParaMEDMEM::MEDCouplingUMesh *mesh, bool writeFromScratch) throw(INTERP_KERNEL::Exception)
 {
-  std::string meshName(mesh->getName());
-  if(meshName.empty())
-    throw INTERP_KERNEL::Exception("Trying to write a unstructured mesh with no name ! MED file format needs a not empty mesh name !");
-  int status=MEDLoaderBase::getStatusOfFile(fileName);
-  bool isRenumbering;
-  if(status!=MEDLoaderBase::EXIST_RW && status!=MEDLoaderBase::NOT_EXIST)
-    {
-      std::ostringstream oss; oss << "File with name \'" << fileName << "\' has not valid permissions !";
-      throw INTERP_KERNEL::Exception(oss.str().c_str());
-    }
-  std::vector<const ParaMEDMEM::MEDCouplingUMesh *> meshV(1); meshV[0]=mesh;
-  std::vector<const ParaMEDMEM::DataArrayInt *> famV(1); famV[0]=0;
-  if(writeFromScratch)
-    {
-      MEDLoaderNS::writeUMeshesDirectly(fileName,meshV,famV,true,isRenumbering);
-      return ;
-    }
-  if(status==MEDLoaderBase::NOT_EXIST)
-    {
-      MEDLoaderNS::writeUMeshesDirectly(fileName,meshV,famV,true,isRenumbering);
-      return;
-    }
-  else
-    {
-      std::vector<std::string> meshNames=GetMeshNames(fileName);
-      if(std::find(meshNames.begin(),meshNames.end(),meshName)==meshNames.end())
-        MEDLoaderNS::writeUMeshesDirectly(fileName,meshV,famV,false,isRenumbering);
-      else
-        {
-          std::ostringstream oss; oss << "File \'" << fileName << "\' already exists and has already a mesh called \"";
-          oss << meshName << "\" !";
-          throw INTERP_KERNEL::Exception(oss.str().c_str());
-        }
-    }
+  if(!mesh)
+    throw INTERP_KERNEL::Exception("MEDLoader::WriteUMesh : input mesh is null !");
+  int mod=writeFromScratch?2:0;
+  MEDCouplingAutoRefCountObjectPtr<MEDFileUMesh> m=MEDFileUMesh::New();
+  m->setMeshAtLevel(0,static_cast<MEDCouplingUMesh *>(mesh->deepCpy()),true);
+  m->write(fileName,mod);
 }
 
 void MEDLoader::WriteUMeshDep(const char *fileName, const ParaMEDMEM::MEDCouplingUMesh *mesh, bool writeFromScratch) throw(INTERP_KERNEL::Exception)
 {
-  std::string meshName(mesh->getName());
-  if(meshName.empty())
-    throw INTERP_KERNEL::Exception("Trying to write a unstructured mesh with no name ! MED file format needs a not empty mesh name !");
-  int status=MEDLoaderBase::getStatusOfFile(fileName);
-  bool isRenumbering;
-  if(status!=MEDLoaderBase::EXIST_RW && status!=MEDLoaderBase::NOT_EXIST)
-    {
-      std::ostringstream oss; oss << "File with name \'" << fileName << "\' has not valid permissions !";
-      throw INTERP_KERNEL::Exception(oss.str().c_str());
-    }
-  std::vector<const ParaMEDMEM::MEDCouplingUMesh *> meshV(1); meshV[0]=mesh;
-  std::vector<const ParaMEDMEM::DataArrayInt *> famV(1); famV[0]=0;
-  if(writeFromScratch)
-    {
-      MEDLoaderNS::writeUMeshesDirectly(fileName,meshV,famV,true,isRenumbering);
-      return ;
-    }
-  if(status==MEDLoaderBase::NOT_EXIST)
-    {
-      MEDLoaderNS::writeUMeshesDirectly(fileName,meshV,famV,true,isRenumbering);
-      return;
-    }
-  else
-    MEDLoaderNS::writeUMeshesDirectly(fileName,meshV,famV,false,isRenumbering);
+  MEDLoader::WriteUMesh(fileName,mesh,writeFromScratch);
 }
 
 void MEDLoader::WriteUMeshesPartition(const char *fileName, const char *meshNameC, const std::vector<const ParaMEDMEM::MEDCouplingUMesh *>& meshes, bool writeFromScratch) throw(INTERP_KERNEL::Exception)
@@ -2903,85 +2841,16 @@ void MEDLoader::WriteUMeshesPartition(const char *fileName, const char *meshName
       std::ostringstream oss; oss << "File with name \'" << fileName << "\' has not valid permissions !";
       throw INTERP_KERNEL::Exception(oss.str().c_str());
     }
-  if(meshes.empty())
-    throw INTERP_KERNEL::Exception("List of meshes must be not empty !");
-  const DataArrayDouble *coords=meshes.front()->getCoords();
-  for(std::vector<const ParaMEDMEM::MEDCouplingUMesh *>::const_iterator iter=meshes.begin();iter!=meshes.end();iter++)
-    if(coords!=(*iter)->getCoords())
-      throw INTERP_KERNEL::Exception("Meshes does not not share the same coordinates : try method MEDCouplingPointSet::tryToShareSameCoords !");
-  std::set<std::string> tmp;
-  for(std::vector<const ParaMEDMEM::MEDCouplingUMesh *>::const_iterator iter=meshes.begin();iter!=meshes.end();iter++)
-    {
-      if(tmp.find((*iter)->getName())==tmp.end())
-        tmp.insert((*iter)->getName());
-      else
-        throw INTERP_KERNEL::Exception("The names of meshes must be different each other !");
-    }
-  tmp.clear();
-  if(writeFromScratch)
-    {
-      MEDLoaderNS::writeUMeshesPartitionDirectly(fileName,meshNameC,meshes,true);
-      return ;
-    }
-  if(status==MEDLoaderBase::NOT_EXIST)
-    {
-      MEDLoaderNS::writeUMeshesPartitionDirectly(fileName,meshNameC,meshes,true);
-      return;
-    }
-  else
-    {
-      std::vector<std::string> meshNames=GetMeshNames(fileName);
-      if(std::find(meshNames.begin(),meshNames.end(),meshName)==meshNames.end())
-        MEDLoaderNS::writeUMeshesPartitionDirectly(fileName,meshNameC,meshes,false);
-      else
-        {
-          std::ostringstream oss; oss << "File \'" << fileName << "\' already exists and has already a mesh called \"";
-          oss << meshName << "\" !";
-          throw INTERP_KERNEL::Exception(oss.str().c_str());
-        }
-    }
+  MEDCouplingAutoRefCountObjectPtr<MEDFileUMesh> m=MEDFileUMesh::New();
+  m->setGroupsFromScratch(0,meshes,true);
+  m->setName(meshNameC);
+  int mod=writeFromScratch?2:0;
+  m->write(fileName,mod);
 }
 
 void MEDLoader::WriteUMeshesPartitionDep(const char *fileName, const char *meshNameC, const std::vector<const ParaMEDMEM::MEDCouplingUMesh *>& meshes, bool writeFromScratch) throw(INTERP_KERNEL::Exception)
 {
-  std::string meshName(meshNameC);
-  if(meshName.empty())
-    throw INTERP_KERNEL::Exception("Trying to write a unstructured mesh with no name ! MED file format needs a not empty mesh name : change 2nd parameter !");
-  int status=MEDLoaderBase::getStatusOfFile(fileName);
-  if(status!=MEDLoaderBase::EXIST_RW && status!=MEDLoaderBase::NOT_EXIST)
-    {
-      std::ostringstream oss; oss << "File with name \'" << fileName << "\' has not valid permissions !";
-      throw INTERP_KERNEL::Exception(oss.str().c_str());
-    }
-  if(meshes.empty())
-    throw INTERP_KERNEL::Exception("List of meshes must be not empty !");
-  const DataArrayDouble *coords=meshes.front()->getCoords();
-  for(std::vector<const ParaMEDMEM::MEDCouplingUMesh *>::const_iterator iter=meshes.begin();iter!=meshes.end();iter++)
-    if(coords!=(*iter)->getCoords())
-      throw INTERP_KERNEL::Exception("Meshes does not not share the same coordinates : try method MEDCouplingPointSet::tryToShareSameCoords !");
-  std::set<std::string> tmp;
-  for(std::vector<const ParaMEDMEM::MEDCouplingUMesh *>::const_iterator iter=meshes.begin();iter!=meshes.end();iter++)
-    {
-      if(tmp.find((*iter)->getName())==tmp.end())
-        tmp.insert((*iter)->getName());
-      else
-        throw INTERP_KERNEL::Exception("The names of meshes must be different each other !");
-    }
-  tmp.clear();
-  if(writeFromScratch)
-    {
-      MEDLoaderNS::writeUMeshesPartitionDirectly(fileName,meshNameC,meshes,true);
-      return ;
-    }
-  if(status==MEDLoaderBase::NOT_EXIST)
-    {
-      MEDLoaderNS::writeUMeshesPartitionDirectly(fileName,meshNameC,meshes,true);
-      return;
-    }
-  else
-    {
-      MEDLoaderNS::writeUMeshesPartitionDirectly(fileName,meshNameC,meshes,false);
-    }
+  WriteUMeshesPartition(fileName,meshNameC,meshes,writeFromScratch);
 }
 
 void MEDLoader::WriteUMeshes(const char *fileName, const std::vector<const ParaMEDMEM::MEDCouplingUMesh *>& meshes, bool writeFromScratch) throw(INTERP_KERNEL::Exception)
index 6c813fc0f67767adc3451296759eb5f1cd734f2c..60cac09fb171f311ad40a752fb48b8d957930580 100644 (file)
@@ -663,7 +663,7 @@ namespace ParaMEDMEM
     void addGroup(int meshDimRelToMaxExt, const DataArrayInt *ids) throw(INTERP_KERNEL::Exception);
     void removeMeshAtLevel(int meshDimRelToMax) throw(INTERP_KERNEL::Exception);
     void setMeshAtLevel(int meshDimRelToMax, MEDCouplingUMesh *m, bool newOrOld=false) throw(INTERP_KERNEL::Exception);
-    void setGroupsFromScratch(int meshDimRelToMax, const std::vector<const MEDCouplingUMesh *>& ms) throw(INTERP_KERNEL::Exception);
+    void setGroupsFromScratch(int meshDimRelToMax, const std::vector<const MEDCouplingUMesh *>& ms, bool renum=false) throw(INTERP_KERNEL::Exception);
     void setGroupsOnSetMesh(int meshDimRelToMax, const std::vector<const MEDCouplingUMesh *>& ms, bool renum) throw(INTERP_KERNEL::Exception);
     void optimizeFamilies() throw(INTERP_KERNEL::Exception);
     DataArrayInt *zipCoords() throw(INTERP_KERNEL::Exception);
index 486c00aa0c7f3542e616c73ea22cc7f62ec85f5e..149c40a26f88c6bd1a5e504dde31bb9505ea3b10 100644 (file)
@@ -253,19 +253,19 @@ class MEDLoaderTest(unittest.TestCase):
         mesh1.setName("3DMesh_1");
         self.assertTrue(mesh1_2.isEqual(mesh1,1e-12));
         #
-        vec=["Family_4","Family_2"];
+        vec=["Family_-3","Family_-5"];
         mesh2_2=MEDLoader.MEDLoader.ReadUMeshFromFamilies(fileName,mnane,0,vec);
         mesh2_2.setName("mesh2");
         self.assertTrue(mesh2_2.isEqual(mesh2,1e-12));
         #
         ret=MEDLoader.MEDLoader.GetMeshFamiliesNamesOnGroup(fileName,"3DToto","3DMesh_1");
         self.assertEqual(4,len(ret));
-        self.assertEqual(ret[0],"Family_1");
-        self.assertEqual(ret[1],"Family_2");
-        self.assertEqual(ret[2],"Family_3");
-        self.assertEqual(ret[3],"Family_4");
+        self.assertEqual(ret[0],"Family_-2");
+        self.assertEqual(ret[1],"Family_-3");
+        self.assertEqual(ret[2],"Family_-4");
+        self.assertEqual(ret[3],"Family_-5");
         #
-        ret1=MEDLoader.MEDLoader.GetMeshGroupsNamesOnFamily(fileName,"3DToto","Family_2");
+        ret1=MEDLoader.MEDLoader.GetMeshGroupsNamesOnFamily(fileName,"3DToto","Family_-3");
         self.assertEqual(2,len(ret1));
         self.assertEqual(ret1[0],"3DMesh_1");
         self.assertEqual(ret1[1],"mesh2");
index 84d0691978dd3e6f8e7437d8d83005e808775ed4..8661cbccf52a33d746f71d579f6e6f3a6ed9846e 100644 (file)
@@ -249,7 +249,7 @@ class MEDLoaderTest(unittest.TestCase):
         mesh1.setName("3DMesh_1");
         self.assertTrue(mesh1_2.isEqual(mesh1,1e-12));
         #
-        vec=["Family_4","Family_2"];
+        vec=["Family_-5","Family_-3"];
         mesh2_2=MEDLoader.ReadUMeshFromFamilies(fileName,mnane,0,vec);
         mesh2_2.setName("mesh2");
         self.assertTrue(mesh2_2.isEqual(mesh2,1e-12));
index d56948278903a107e691ee13d4dbc5a6c56c8b89..1e99f137c4fa5cf07aebcad2718310fe6a6dea83 100644 (file)
@@ -38,6 +38,7 @@ class MEDLoaderTest(unittest.TestCase):
         m2_1=MEDLoader.ReadUMeshFromFile(fileName,mname,-1)
         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
         pass
+
     def testMEDMesh2(self):
         fileName="Pyfile10.med"
         mname="3DToto"
@@ -57,25 +58,25 @@ class MEDLoaderTest(unittest.TestCase):
         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
         g1_1.setName(g1_0.getName())
         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
-        g1_0=medmesh.getFamily(0,"Family_2",True)
-        g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2"]);
+        g1_0=medmesh.getFamily(0,"Family_-3",True)
+        g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
-        g1_0=medmesh.getFamilies(0,["Family_2","Family_4"],True)
-        g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2","Family_4"]);
+        g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
+        g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
         g1_1.setName(g1_0.getName())
         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
         medmesh.write(outFileName,2);
-        self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",True).getValues());
-        self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",True).getValues());
-        self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],True).getValues());
-        self.assertEqual([19,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
+        self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
+        self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
+        self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
+        self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
         famn=medmesh.getFamilyNameGivenId(0)
         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
         #without renum
-        self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",False).getValues());
-        self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",False).getValues());
-        self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],False).getValues());
+        self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
+        self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
+        self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
         pass