]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
*** empty log message ***
authorageay <ageay>
Thu, 25 Aug 2011 11:03:05 +0000 (11:03 +0000)
committerageay <ageay>
Thu, 25 Aug 2011 11:03:05 +0000 (11:03 +0000)
src/MEDLoader/MEDFileField.cxx
src/MEDLoader/MEDFileField.hxx
src/MEDLoader/Swig/MEDLoader.i
src/MEDLoader/Swig/MEDLoaderTest3.py

index 64ac48e871dc3efa4b909f126800b91a5e18ca6f..769e1fd3d8ad434652ba7c8e5cf9c0c81f5f86ba 100644 (file)
@@ -102,6 +102,47 @@ void MEDFileFieldLoc::writeLL(med_idt fid) const
   MEDlocalizationWr(fid,_name.c_str(),typmai3[(int)_geo_type],_dim,&_ref_coo[0],MED_FULL_INTERLACE,_nb_gauss_pt,&_gs_coo[0],&_w[0],MED_NO_INTERPOLATION,MED_NO_MESH_SUPPORT);
 }
 
+std::string MEDFileFieldLoc::repr() const
+{
+  std::ostringstream oss; oss.precision(15);
+  const INTERP_KERNEL::CellModel& cm=INTERP_KERNEL::CellModel::GetCellModel(_geo_type);
+  oss << "Localization \"" << _name << "\" :\n" << "  - Geometric Type : " << cm.getRepr();
+  oss << "\n  - Dimension : " << _dim << "\n  - Number of gauss points : ";
+  oss << _nb_gauss_pt << "\n  - Number of nodes in cell : " << _nb_node_per_cell;
+  oss << "\n  - Ref coords are : ";
+  int sz=_ref_coo.size();
+  if(sz%_dim==0)
+    {
+      int nbOfTuples=sz/_dim;
+      for(int i=0;i<nbOfTuples;i++)
+        {
+          oss << "(";
+          for(int j=0;j<_dim;j++)
+            { oss << _ref_coo[i*_dim+j]; if(j!=_dim-1) oss << ", "; }
+          oss << ") ";
+        }
+    }
+  else
+    std::copy(_ref_coo.begin(),_ref_coo.end(),std::ostream_iterator<double>(oss," "));
+  oss << "\n  - Gauss coords in reference element : ";
+  sz=_gs_coo.size();
+  if(sz%_dim==0)
+    {
+      int nbOfTuples=sz/_dim;
+      for(int i=0;i<nbOfTuples;i++)
+        {
+          oss << "(";
+          for(int j=0;j<_dim;j++)
+            { oss << _gs_coo[i*_dim+j]; if(j!=_dim-1) oss << ", "; }
+          oss << ") ";
+        }
+    }
+  else
+    std::copy(_gs_coo.begin(),_gs_coo.end(),std::ostream_iterator<double>(oss," "));
+  oss << "\n  - Weights of Gauss coords are : "; std::copy(_w.begin(),_w.end(),std::ostream_iterator<double>(oss," "));
+  return oss.str();
+}
+
 void MEDFileFieldPerMeshPerTypePerDisc::assignFieldNoProfile(int offset, int nbOfCells, const MEDCouplingFieldDouble *field, MEDFieldFieldGlobsReal& glob) throw(INTERP_KERNEL::Exception)
 {
   _type=field->getTypeOfField();
@@ -1442,6 +1483,11 @@ int MEDFieldFieldGlobs::getNbOfGaussPtPerCell(int locId) const throw(INTERP_KERN
   return _locs[locId]->getNbOfGaussPtPerCell();
 }
 
+const MEDFileFieldLoc& MEDFieldFieldGlobs::getLocalization(const char *pflName) const throw(INTERP_KERNEL::Exception)
+{
+  return getLocalizationFromId(getLocalizationId(pflName));
+}
+
 const MEDFileFieldLoc& MEDFieldFieldGlobs::getLocalizationFromId(int locId) const throw(INTERP_KERNEL::Exception)
 {
   if(locId<0 || locId>=(int)_locs.size())
@@ -1623,6 +1669,11 @@ std::string MEDFieldFieldGlobsReal::getFileName2() const
   return _globals->getFileName2();
 }
 
+const MEDFileFieldLoc& MEDFieldFieldGlobsReal::getLocalization(const char *pflName) const throw(INTERP_KERNEL::Exception)
+{
+  return _globals->getLocalization(pflName);
+}
+
 const MEDFileFieldLoc& MEDFieldFieldGlobsReal::getLocalizationFromId(int locId) const throw(INTERP_KERNEL::Exception)
 {
   return _globals->getLocalizationFromId(locId);
index 470b19477d4ca4842a8e9a23585d9db68a64fc75..737acee135bdf3998c1e5b6dcaa4b0822f2b0c9a 100644 (file)
@@ -52,7 +52,11 @@ namespace ParaMEDMEM
     static MEDFileFieldLoc *New(const char *locName, INTERP_KERNEL::NormalizedCellType geoType, const std::vector<double>& refCoo, const std::vector<double>& gsCoo, const std::vector<double>& w);
     int getNbOfGaussPtPerCell() const { return _nb_gauss_pt; }
     void writeLL(med_idt fid) const;
+    std::string repr() const;
     bool isName(const char *name) const { return _name==name; }
+    int getDimension() const { return _dim; }
+    int getNumberOfGaussPoints() const { return _nb_gauss_pt; }
+    int getNumberOfPointsInCells() const { return _nb_node_per_cell; }
     const std::vector<double>& getRefCoords() const { return _ref_coo; }
     const std::vector<double>& getGaussCoords() const { return _gs_coo; }
     const std::vector<double>& getGaussWeights() const { return _w; }
@@ -237,6 +241,7 @@ namespace ParaMEDMEM
     const char *getFileName() const { return _file_name.c_str(); }
     std::string getFileName2() const { return _file_name; }
     const MEDFileFieldLoc& getLocalizationFromId(int locId) const throw(INTERP_KERNEL::Exception);
+    const MEDFileFieldLoc& getLocalization(const char *pflName) const throw(INTERP_KERNEL::Exception);
     const DataArrayInt *getProfile(const std::string& pflName) const throw(INTERP_KERNEL::Exception); 
     //
     void appendProfile(DataArrayInt *pfl) throw(INTERP_KERNEL::Exception);
@@ -273,6 +278,7 @@ namespace ParaMEDMEM
     const char *getFileName() const;
     std::string getFileName2() const;
     const MEDFileFieldLoc& getLocalizationFromId(int locId) const throw(INTERP_KERNEL::Exception);
+    const MEDFileFieldLoc& getLocalization(const char *pflName) const throw(INTERP_KERNEL::Exception);
     const DataArrayInt *getProfile(const std::string& pflName) const throw(INTERP_KERNEL::Exception);
     //
     void appendProfile(DataArrayInt *pfl) throw(INTERP_KERNEL::Exception);
index 98bfc961fe5baf24ba635a3ca8bfa809080ddcbc..f70d6a5f6733ceae96d26714eb85f0a531547537 100644 (file)
@@ -102,6 +102,7 @@ using namespace ParaMEDMEM;
 %feature("unref") MEDFileCMesh "$this->decrRef();"
 %feature("unref") MEDFileMeshMultiTS "$this->decrRef();"
 %feature("unref") MEDFileMeshes "$this->decrRef();"
+%feature("unref") MEDFileFieldLoc "$this->decrRef();"
 %feature("unref") MEDFileField1TS "$this->decrRef();"
 %feature("unref") MEDFileFieldMultiTS "$this->decrRef();"
 %feature("unref") MEDFileFields "$this->decrRef();"
@@ -534,6 +535,26 @@ namespace ParaMEDMEM
        }
   };
 
+  class MEDFileFieldLoc : public RefCountObject
+  {
+  public:
+    const std::string& getName() const;
+    int getDimension() const;
+    int getNumberOfGaussPoints() const;
+    int getNumberOfPointsInCells() const;
+    const std::vector<double>& getRefCoords() const;
+    const std::vector<double>& getGaussCoords() const;
+    const std::vector<double>& getGaussWeights() const;
+    bool isEqual(const MEDFileFieldLoc& other, double eps) const;
+  %extend
+    {
+      std::string __str__() const
+        {
+          return self->repr();
+        }
+    }
+  };
+
   class MEDFieldFieldGlobsReal
   {
   public:
@@ -542,6 +563,30 @@ namespace ParaMEDMEM
     std::vector<std::string> getLocs() const;
     virtual std::vector<std::string> getPflsReallyUsed() const = 0;
     virtual std::vector<std::string> getLocsReallyUsed() const = 0;
+  %extend
+     {
+       PyObject *getProfile(const std::string& pflName) const throw(INTERP_KERNEL::Exception)
+       {
+         const DataArrayInt *ret=self->getProfile(pflName);
+         if(ret)
+           ret->incrRef();
+         return SWIG_NewPointerObj(SWIG_as_voidptr(ret),SWIGTYPE_p_ParaMEDMEM__DataArrayInt, SWIG_POINTER_OWN | 0 );
+       }
+
+       PyObject *getLocalizationFromId(int locId) const throw(INTERP_KERNEL::Exception)
+       {
+         const MEDFileFieldLoc *loc=&self->getLocalizationFromId(locId);
+         loc->incrRef();
+         return SWIG_NewPointerObj(SWIG_as_voidptr(loc),SWIGTYPE_p_ParaMEDMEM__MEDFileFieldLoc, SWIG_POINTER_OWN | 0 );
+       }
+       
+       PyObject *getLocalization(const char *pflName) const throw(INTERP_KERNEL::Exception)
+       {
+         const MEDFileFieldLoc *loc=&self->getLocalization(pflName);
+         loc->incrRef();
+         return SWIG_NewPointerObj(SWIG_as_voidptr(loc),SWIGTYPE_p_ParaMEDMEM__MEDFileFieldLoc, SWIG_POINTER_OWN | 0 );
+       }
+     }
   };
 
   class MEDFileField1TSWithoutDAS : public RefCountObject
index d0d1d8a581a29e1998fa2afaf7e580128faa5d66..9680b6338b0a4a99acee8b12b68985f3208c83ea 100644 (file)
@@ -493,6 +493,13 @@ class MEDLoaderTest(unittest.TestCase):
         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
+        sbt=ff2.getFieldSplitedByType()
+        loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
+        self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
+        self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
+        self.assertEqual(6,loc1.getNumberOfPointsInCells())
+        self.assertEqual(3,loc1.getNumberOfGaussPoints())
+        self.assertEqual(2,loc1.getDimension())
         #
         pass
     
@@ -561,6 +568,15 @@ class MEDLoaderTest(unittest.TestCase):
         self.assertTrue(vals.isEqual(d,1e-14))
         #
         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
+        sbt=ff2.getFieldSplitedByType()
+        self.assertEqual(3,sbt[0][0])#TRI3
+        self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
+        self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
+        self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
+        self.assertEqual(4,sbt[1][0])#QUAD4
+        self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
+        self.assertEqual("sup1_NORM_QUAD4",sbt[1][1][0][2])# profile For QUAD4
+        self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1)
         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
@@ -848,5 +864,5 @@ class MEDLoaderTest(unittest.TestCase):
         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
         pass
     pass
-        
+
 unittest.main()