]> SALOME platform Git repositories - modules/med.git/commitdiff
Salome HOME
MEDReader ready -> debug in process
authorageay <ageay>
Fri, 26 Jul 2013 11:02:30 +0000 (11:02 +0000)
committerageay <ageay>
Fri, 26 Jul 2013 11:02:30 +0000 (11:02 +0000)
src/MEDLoader/MEDFileFieldOverView.cxx
src/MEDLoader/MEDFileMesh.cxx
src/MEDLoader/MEDFileMesh.hxx
src/MEDLoader/MEDFileMeshLL.cxx
src/MEDLoader/MEDFileMeshLL.hxx
src/MEDLoader/Swig/MEDLoaderCommon.i

index 2552ebd478d0363b3853035c86186696830c45b8..ee1c95285f3d194db14e60bf593c5b17bba0156b 100644 (file)
@@ -52,10 +52,7 @@ MEDFileMeshStruct::MEDFileMeshStruct(const MEDFileMesh *mesh):_mesh(mesh)
   _nb_nodes=mesh->getNumberOfNodes();
   _geo_types_distrib.resize(levs.size());
   for(std::vector<int>::const_iterator lev=levs.begin();lev!=levs.end();lev++)
-    {
-      MEDCouplingAutoRefCountObjectPtr<MEDCouplingMesh> mLev=mesh->getGenMeshAtLevel(*lev);
-      _geo_types_distrib[-(*lev)]=mLev->getDistributionOfTypes();
-    }
+    _geo_types_distrib[-(*lev)]=mesh->getDistributionOfTypes(*lev);
 }
 
 int MEDFileMeshStruct::getLevelOfGeoType(INTERP_KERNEL::NormalizedCellType t) const throw(INTERP_KERNEL::Exception)
@@ -1295,9 +1292,10 @@ std::size_t MEDFileField1TSStructItem::getHeapMemorySize() const
 
 MEDMeshMultiLev *MEDFileField1TSStructItem::buildFromScratchDataSetSupportOnCells(const MEDFileMeshStruct *mst, const MEDFileFieldGlobsReal *globs) const throw(INTERP_KERNEL::Exception)
 {
-  std::vector<INTERP_KERNEL::NormalizedCellType> a0;
-  std::vector<const DataArrayInt *> a1;
-  std::vector<int> a2;
+  std::size_t sz(_items.size());
+  std::vector<INTERP_KERNEL::NormalizedCellType> a0(sz);
+  std::vector<const DataArrayInt *> a1(sz);
+  std::vector<int> a2(sz);
   std::size_t i(0);
   for(std::vector< MEDFileField1TSStructItem2 >::const_iterator it=_items.begin();it!=_items.end();it++,i++)
     {
index 615abd7aaace8a0c9bd0483bbbe254288dcb0959..6f2fac6e93a67de4b0c51db09ea9e5f7122769a2 100644 (file)
@@ -1738,6 +1738,12 @@ void MEDFileMesh::appendFamilyEntries(const DataArrayInt *famIds, const std::vec
     }
 }
 
+std::vector<int> MEDFileMesh::getDistributionOfTypes(int meshDimRelToMax) const throw(INTERP_KERNEL::Exception)
+{
+  MEDCouplingAutoRefCountObjectPtr<MEDCouplingMesh> mLev(getGenMeshAtLevel(meshDimRelToMax));
+  return mLev->getDistributionOfTypes();
+}
+
 void MEDFileMesh::TranslateFamilyIds(int offset, DataArrayInt *famArr, std::vector< std::vector<int> >& famIdsPerGrp)
 {
   famArr->applyLin(offset>0?1:-1,offset,0);
@@ -2882,6 +2888,12 @@ MEDCouplingMesh *MEDFileUMesh::getGenMeshAtLevel(int meshDimRelToMax, bool renum
   return getMeshAtLevel(meshDimRelToMax,renum);
 }
 
+std::vector<int> MEDFileUMesh::getDistributionOfTypes(int meshDimRelToMax) const throw(INTERP_KERNEL::Exception)
+{
+  const MEDFileUMeshSplitL1 *l1(getMeshAtLevSafe(meshDimRelToMax));
+  return l1->getDistributionOfTypes();
+}
+
 /*!
  * Returns a MEDCouplingUMesh of a relative dimension == 0.
  *  \param [in] renum - if \c true, the returned mesh is permuted according to the
@@ -2938,6 +2950,7 @@ MEDCouplingUMesh *MEDFileUMesh::getLevelM3Mesh(bool renum) const throw(INTERP_KE
  * This method returns a vector of mesh parts containing each exactly one geometric type.
  * This method will never launch an automatic computation of split by type (an INTERP_KERNEL::Exception will be then thrown).
  * This method is only for memory aware users.
+ * The returned pointers are **NOT** new object pointer. No need to mange them.
  */
 std::vector<MEDCoupling1GTUMesh *> MEDFileUMesh::getDirectUndergroundSingleGeoTypeMeshes(int meshDimRelToMax) const throw(INTERP_KERNEL::Exception)
 {
@@ -2948,6 +2961,7 @@ std::vector<MEDCoupling1GTUMesh *> MEDFileUMesh::getDirectUndergroundSingleGeoTy
 /*!
  * This method returns the part of \a this having the geometric type \a gt.
  * If such part is not existing an exception will be thrown.
+ * The returned pointer is **NOT** new object pointer. No need to mange it.
  */
 MEDCoupling1GTUMesh *MEDFileUMesh::getDirectUndergroundSingleGeoTypeMesh(INTERP_KERNEL::NormalizedCellType gt) const throw(INTERP_KERNEL::Exception)
 {
index 595d432df9a122cfc9d753d100c98f6ef76d5efc..8492b0b4aeef8f0af3933e0f73146af4e134ecd2 100644 (file)
@@ -73,6 +73,7 @@ namespace ParaMEDMEM
     virtual void write(med_idt fid) const throw(INTERP_KERNEL::Exception);
     virtual int getSizeAtLevel(int meshDimRelToMaxExt) const throw(INTERP_KERNEL::Exception) = 0;
     virtual MEDCouplingMesh *getGenMeshAtLevel(int meshDimRelToMax, bool renum=false) const throw(INTERP_KERNEL::Exception) = 0;
+    virtual std::vector<int> getDistributionOfTypes(int meshDimRelToMax) const throw(INTERP_KERNEL::Exception);
     virtual void whichAreNodesFetched(const MEDFileField1TSStructItem& st, const MEDFileFieldGlobsReal *globs, std::vector<bool>& nodesFetched) const throw(INTERP_KERNEL::Exception) = 0;
     //
     bool areFamsEqual(const MEDFileMesh *other, std::string& what) const;
@@ -234,6 +235,7 @@ namespace ParaMEDMEM
     DataArrayInt *getFamiliesArr(int meshDimRelToMaxExt, const std::vector<std::string>& fams, bool renum=false) const throw(INTERP_KERNEL::Exception);
     MEDCouplingUMesh *getMeshAtLevel(int meshDimRelToMaxExt, bool renum=false) const throw(INTERP_KERNEL::Exception);
     MEDCouplingMesh *getGenMeshAtLevel(int meshDimRelToMax, bool renum=false) const throw(INTERP_KERNEL::Exception);
+    std::vector<int> getDistributionOfTypes(int meshDimRelToMax) const throw(INTERP_KERNEL::Exception);
     MEDCouplingUMesh *getLevel0Mesh(bool renum=false) const throw(INTERP_KERNEL::Exception);
     MEDCouplingUMesh *getLevelM1Mesh(bool renum=false) const throw(INTERP_KERNEL::Exception);
     MEDCouplingUMesh *getLevelM2Mesh(bool renum=false) const throw(INTERP_KERNEL::Exception);
index d023393e7b95a2d931d1eededc4e8b849cd56f61..a4722e9b46e62e9218da8be3db0d8f820a1eb019 100644 (file)
@@ -1189,7 +1189,7 @@ int MEDFileUMeshAggregateCompute::getMeshDimension() const
     }
 }
 
-std::vector<int> MEDFileUMeshAggregateCompute::getDistributionOfTypes() const
+std::vector<int> MEDFileUMeshAggregateCompute::getDistributionOfTypes() const throw(INTERP_KERNEL::Exception)
 {
   if(_mp_time<_m_time)
     {
index 9338ea825508c5da07ed1a129bce6fda31c83a7e..56e19db6fbbfad5defa8e6d7138a798f626864b5 100644 (file)
@@ -154,7 +154,7 @@ namespace ParaMEDMEM
     void synchronizeTinyInfo(const MEDFileMesh& master) const;
     bool empty() const;
     int getMeshDimension() const;
-    std::vector<int> getDistributionOfTypes() const;
+    std::vector<int> getDistributionOfTypes() const throw(INTERP_KERNEL::Exception);
     int getSize() const throw(INTERP_KERNEL::Exception);
     void setCoords(DataArrayDouble *coords) throw(INTERP_KERNEL::Exception);
   private:
@@ -193,6 +193,7 @@ namespace ParaMEDMEM
     MEDCouplingUMesh *getWholeMesh(bool renum) const;
     std::vector<MEDCoupling1GTUMesh *> getDirectUndergroundSingleGeoTypeMeshes() const throw(INTERP_KERNEL::Exception) { return _m_by_types.getPartsWithoutComputation(); }
     MEDCoupling1GTUMesh *getDirectUndergroundSingleGeoTypeMesh(INTERP_KERNEL::NormalizedCellType gt) const throw(INTERP_KERNEL::Exception) { return _m_by_types.getPartWithoutComputation(gt); }
+    std::vector<int> getDistributionOfTypes() const throw(INTERP_KERNEL::Exception) { return _m_by_types.getDistributionOfTypes(); }
     DataArrayInt *getOrCreateAndGetFamilyField() throw(INTERP_KERNEL::Exception);
     const DataArrayInt *getFamilyField() const;
     const DataArrayInt *getNumberField() const;
index 864f1307fb82fae153435a7e87ca79f13e9da864..62f72f9b3c9a3bd0fdeec28d34177aa4bdb22044 100644 (file)
@@ -212,6 +212,7 @@ using namespace ParaMEDMEM;
 %feature("unref") MEDUMeshMultiLev "$this->decrRef();"
 %feature("unref") MEDCMeshMultiLev "$this->decrRef();"
 %feature("unref") MEDCurveLinearMeshMultiLev "$this->decrRef();"
+%feature("unref") MEDFileMeshStruct "$this->decrRef();"
 
 class MEDLoader
 {
@@ -473,6 +474,7 @@ namespace ParaMEDMEM
     virtual std::vector<int> getFamArrNonEmptyLevelsExt() const throw(INTERP_KERNEL::Exception);
     virtual std::vector<int> getNumArrNonEmptyLevelsExt() const throw(INTERP_KERNEL::Exception);
     virtual std::vector<int> getNameArrNonEmptyLevelsExt() const throw(INTERP_KERNEL::Exception);
+    virtual std::vector<int> getDistributionOfTypes(int meshDimRelToMax) const throw(INTERP_KERNEL::Exception);
     std::vector<int> getNonEmptyLevels() const throw(INTERP_KERNEL::Exception);
     std::vector<int> getNonEmptyLevelsExt() const throw(INTERP_KERNEL::Exception);
     void write(const char *fileName, int mode) const throw(INTERP_KERNEL::Exception);
@@ -703,7 +705,6 @@ namespace ParaMEDMEM
     MEDCouplingUMesh *getLevelM1Mesh(bool renum=false) const throw(INTERP_KERNEL::Exception);
     MEDCouplingUMesh *getLevelM2Mesh(bool renum=false) const throw(INTERP_KERNEL::Exception);
     MEDCouplingUMesh *getLevelM3Mesh(bool renum=false) const throw(INTERP_KERNEL::Exception);
-    MEDCoupling1GTUMesh *getDirectUndergroundSingleGeoTypeMesh(INTERP_KERNEL::NormalizedCellType gt) const throw(INTERP_KERNEL::Exception);
     //
     void setFamilyNameAttachedOnId(int id, const std::string& newFamName) throw(INTERP_KERNEL::Exception);
     void setCoords(DataArrayDouble *coords) throw(INTERP_KERNEL::Exception);
@@ -785,6 +786,14 @@ namespace ParaMEDMEM
            PyTuple_SetItem(ret,2,SWIG_NewPointerObj(SWIG_as_voidptr(ret2),SWIGTYPE_p_ParaMEDMEM__DataArrayInt, SWIG_POINTER_OWN | 0 ));
            return ret;
          }
+         
+         MEDCoupling1GTUMesh *getDirectUndergroundSingleGeoTypeMesh(INTERP_KERNEL::NormalizedCellType gt) const throw(INTERP_KERNEL::Exception)
+         {
+           MEDCoupling1GTUMesh *ret(self->getDirectUndergroundSingleGeoTypeMesh(gt));
+           if(ret)
+             ret->incrRef();
+           return ret;
+         }
 
          PyObject *getDirectUndergroundSingleGeoTypeMeshes(int meshDimRelToMax) const throw(INTERP_KERNEL::Exception)
          {