]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
MEDFileUMesh::getGroupsOnASpecifiedLevel
authorageay <ageay>
Thu, 16 Feb 2012 16:02:45 +0000 (16:02 +0000)
committerageay <ageay>
Thu, 16 Feb 2012 16:02:45 +0000 (16:02 +0000)
src/MEDLoader/MEDFileData.cxx
src/MEDLoader/MEDFileMesh.cxx
src/MEDLoader/MEDFileMesh.hxx
src/MEDLoader/Swig/MEDLoader.i
src/MEDLoader/Swig/MEDLoaderTest3.py

index 20c1f82b77c690f13b30283ab21b58e64a7eeae3..67ad6a0a39faedaa6fb44c92ef9bcb06380394ab 100644 (file)
@@ -116,7 +116,8 @@ void MEDFileData::write(const char *fileName, int mode) const throw(INTERP_KERNE
   const MEDFileMeshes *ms=_meshes;
   if(ms)
     ms->write(fileName,mode);
+  int mode2=mode==2?0:mode;
   const MEDFileFields *fs=_fields;
   if(fs)
-    fs->write(fileName,mode);
+    fs->write(fileName,mode2);
 }
index cd2284a5a56390adeb839ec8727d05944d844f15..9653ab1d840810a65c58d9b8a6383c1d6aeb9a38 100644 (file)
@@ -1157,6 +1157,22 @@ std::vector<int> MEDFileUMesh::getFamsNonEmptyLevelsExt(const std::vector<std::s
     return ret0;
 }
 
+/*!
+ * This method retrives all groups that partly or fully appear on the level 'meshDimRelToMaxExt'.
+ */
+std::vector<std::string> MEDFileUMesh::getGroupsOnSpecifiedLev(int meshDimRelToMaxExt) const throw(INTERP_KERNEL::Exception)
+{
+  std::vector<std::string> ret;
+  std::vector<std::string> allGrps=getGroupsNames();
+  for(std::vector<std::string>::const_iterator it=allGrps.begin();it!=allGrps.end();it++)
+    {
+      std::vector<int> levs=getGrpNonEmptyLevelsExt((*it).c_str());
+      if(std::find(levs.begin(),levs.end(),meshDimRelToMaxExt)!=levs.end())
+        ret.push_back(*it);
+    }
+  return ret;
+}
+
 int MEDFileUMesh::getMeshDimension() const throw(INTERP_KERNEL::Exception)
 {
   int lev=0;
@@ -2299,10 +2315,14 @@ MEDFileMeshes *MEDFileMeshes::New(const char *fileName) throw(INTERP_KERNEL::Exc
 void MEDFileMeshes::write(const char *fileName, int mode) const throw(INTERP_KERNEL::Exception)
 {
   checkCoherency();
-  for(std::vector< MEDCouplingAutoRefCountObjectPtr<MEDFileMeshMultiTS> >::const_iterator it=_meshes.begin();it!=_meshes.end();it++)
+  int i=0;
+  for(std::vector< MEDCouplingAutoRefCountObjectPtr<MEDFileMeshMultiTS> >::const_iterator it=_meshes.begin();it!=_meshes.end();it++,i++)
     {
+      int mode2=mode;
+      if(mode==2 && i>0)
+        mode2=0;
       (*it)->copyOptionsFrom(*this);
-      (*it)->write(fileName,mode);
+      (*it)->write(fileName,mode2);
     }
 }
 
index 8aa496ecf285df01da39d181270b4eec252eef0d..62f0bf4cec9089d69c33d792300c8d65fe1696c2 100644 (file)
@@ -159,6 +159,7 @@ namespace ParaMEDMEM
     std::vector<int> getGrpsNonEmptyLevelsExt(const std::vector<std::string>& grps) const throw(INTERP_KERNEL::Exception);
     std::vector<int> getFamsNonEmptyLevels(const std::vector<std::string>& fams) const throw(INTERP_KERNEL::Exception);
     std::vector<int> getFamsNonEmptyLevelsExt(const std::vector<std::string>& fams) const throw(INTERP_KERNEL::Exception);
+    std::vector<std::string> getGroupsOnSpecifiedLev(int meshDimRelToMaxExt) const throw(INTERP_KERNEL::Exception);
     DataArrayDouble *getCoords() const;
     MEDCouplingUMesh *getGroup(int meshDimRelToMaxExt, const char *grp, bool renum=false) const throw(INTERP_KERNEL::Exception);
     MEDCouplingUMesh *getGroups(int meshDimRelToMaxExt, const std::vector<std::string>& grps, bool renum=false) const throw(INTERP_KERNEL::Exception);
index 6cabc1a702164a2fe6b8ea011196101a215bc8cb..c9d9894ce402537d1647f8a239159c15264f0a86 100644 (file)
@@ -468,6 +468,7 @@ namespace ParaMEDMEM
     std::vector<int> getGrpsNonEmptyLevelsExt(const std::vector<std::string>& grps) const throw(INTERP_KERNEL::Exception);
     std::vector<int> getFamsNonEmptyLevels(const std::vector<std::string>& fams) const throw(INTERP_KERNEL::Exception);
     std::vector<int> getFamsNonEmptyLevelsExt(const std::vector<std::string>& fams) const throw(INTERP_KERNEL::Exception);
+    std::vector<std::string> getGroupsOnSpecifiedLev(int meshDimRelToMaxExt) const throw(INTERP_KERNEL::Exception);
     DataArrayDouble *getCoords() const;
     MEDCouplingUMesh *getGroup(int meshDimRelToMaxExt, const char *grp, bool renum=false) const throw(INTERP_KERNEL::Exception);
     DataArrayInt *getGroupArr(int meshDimRelToMaxExt, const char *grp, bool renum=false) const throw(INTERP_KERNEL::Exception);
index ec772ef66f4a83afa4a94f68fec7b63ed3ea63d0..04843325a4037078e06ded4e67eb337e9d3e0f9f 100644 (file)
@@ -346,6 +346,8 @@ class MEDLoaderTest(unittest.TestCase):
         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
+        self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
+        self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
         #
         m.write(fileName,2)
         pass
@@ -364,7 +366,7 @@ class MEDLoaderTest(unittest.TestCase):
         mm.write("Pyfile19_bis.med",2)
         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
         ff.write("Pyfile19_bis.med",0)
-        self.assertEqual([('tyty', 'mm'), ('uiop', 'MW')],MEDLoader.GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
+        self.assertEqual([('tyty','mm'),('uiop','MW')],MEDLoader.GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
         pass
 
     #gauss points
@@ -557,9 +559,10 @@ class MEDLoaderTest(unittest.TestCase):
         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
         d.setFields(fs)
         #
-        d.write(fname,0)
+        fname2="Pyfile29_2.med"
+        d.write(fname2,2)
         #
-        d2=MEDFileData.New(fname)
+        d2=MEDFileData.New(fname2)
         self.assertEqual(2,d2.getNumberOfMeshes())
         self.assertEqual(3,d2.getNumberOfFields())
         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))