Salome HOME
Merge from V6_main 15/03/2013
[tools/medcoupling.git] / src / MEDCoupling / MEDCouplingMultiFields.cxx
index 3586308b75a63752920aea2597379b9bcbcc10a9..5aab55dd399e3fadd375cdcf11649b5f68e80fde 100644 (file)
@@ -16,6 +16,7 @@
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+// Author : Anthony Geay (CEA/DEN)
 
 #include "MEDCouplingMultiFields.hxx"
 #include "MEDCouplingFieldTemplate.hxx"
@@ -189,6 +190,22 @@ void MEDCouplingMultiFields::updateTime() const
       updateTimeWith(*(*it));
 }
 
+std::size_t MEDCouplingMultiFields::getHeapMemorySize() const
+{
+  std::vector<int> tmp;
+  std::vector< std::vector<int> > tmp2;
+  std::vector<MEDCouplingMesh *> ms=getDifferentMeshes(tmp);
+  std::vector<DataArrayDouble *> arrs=getDifferentArrays(tmp2);
+  std::size_t ret=0;
+  for(std::vector<MEDCouplingMesh *>::const_iterator it=ms.begin();it!=ms.end();it++)
+    if(*it)
+      ret+=(*it)->getHeapMemorySize();
+  for(std::vector<DataArrayDouble *>::const_iterator it=arrs.begin();it!=arrs.end();it++)
+    if(*it)
+      ret+=(*it)->getHeapMemorySize();
+  return ret;
+}
+
 std::vector<MEDCouplingMesh *> MEDCouplingMultiFields::getMeshes() const throw(INTERP_KERNEL::Exception)
 {
   std::vector<MEDCouplingMesh *> ms;
@@ -325,8 +342,8 @@ MEDCouplingMultiFields::MEDCouplingMultiFields(const MEDCouplingMultiFields& oth
     {
       if((const MEDCouplingFieldDouble *)other._fs[i])
         {
-          MEDCouplingFieldTemplate *tmp=MEDCouplingFieldTemplate::New(other._fs[i]);
-          _fs[i]=MEDCouplingFieldDouble::New(tmp,other._fs[i]->getTimeDiscretization());
+          MEDCouplingFieldTemplate *tmp=MEDCouplingFieldTemplate::New(*other._fs[i]);
+          _fs[i]=MEDCouplingFieldDouble::New(*tmp,other._fs[i]->getTimeDiscretization());
           tmp->decrRef();
           if(refs[i]!=-1)
             _fs[i]->setMesh(ms2[refs[i]]);
@@ -420,7 +437,7 @@ void MEDCouplingMultiFields::finishUnserialization(const std::vector<int>& tinyI
   int offD=0;
   for(int i=0;i<sz;i++)
     {
-      _fs[i]=MEDCouplingFieldDouble::New(ft[i],(TypeOfTimeDiscretization)tinyInfoI[2*sz+3+i]);
+      _fs[i]=MEDCouplingFieldDouble::New(*ft[i],(TypeOfTimeDiscretization)tinyInfoI[2*sz+3+i]);
       int sz3=tinyInfoI[sz+i+3];
       std::vector<DataArrayDouble *> tmp(sz3);
       for(int j=0;j<sz3;j++,k++)