Salome HOME
Just do it
[tools/medcoupling.git] / src / MEDLoader / MEDFileMeshLL.cxx
index 3dc52b7bc2682f4d06a055253f2a66c91bd485f3..65d4e4c4cde45496570400039e6c177e310a1b7f 100644 (file)
@@ -2064,7 +2064,7 @@ MEDFileEltStruct4Mesh *MEDFileEltStruct4Mesh::New(med_idt fid, const std::string
 
 std::size_t MEDFileEltStruct4Mesh::getHeapMemorySizeWithoutChildren() const
 {
-  return _geo_type_name.capacity();
+  return _geo_type_name.capacity()+_vars.capacity()*sizeof(MCAuto<DataArray>);
 }
 
 std::vector<const MEDCoupling::BigMemoryObject*> MEDFileEltStruct4Mesh::getDirectChildrenWithNull() const
@@ -2072,6 +2072,8 @@ std::vector<const MEDCoupling::BigMemoryObject*> MEDFileEltStruct4Mesh::getDirec
   std::vector<const MEDCoupling::BigMemoryObject*> ret;
   ret.push_back(_conn);
   ret.push_back(_common);
+  for(std::vector< MCAuto<DataArray> >::const_iterator it=_vars.begin();it!=_vars.end();it++)
+    ret.push_back(*it);
   return ret;
 }
 
@@ -2089,10 +2091,24 @@ MEDFileEltStruct4Mesh::MEDFileEltStruct4Mesh(med_idt fid, const std::string& mNa
   }
   MCAuto<MEDFileMeshSupports> mss(MEDFileMeshSupports::New(fid));
   MCAuto<MEDFileStructureElements> mse(MEDFileStructureElements::New(fid,mss));
-  int nbOfNodesPerCell(mse->getNumberOfNodesPerCellOf(_geo_type_name));
-  _conn=DataArrayInt::New(); _conn->alloc(nCells,nbOfNodesPerCell);
+  int nbEntities(mse->getNumberOfNodesPerSE(_geo_type_name));
+  _conn=DataArrayInt::New(); _conn->alloc(nCells*nbEntities);
   MEDFILESAFECALLERRD0(MEDmeshElementConnectivityRd,(fid,mName.c_str(),dt,it,MED_STRUCT_ELEMENT,_geo_type,MED_NODAL,MED_FULL_INTERLACE,_conn->getPointer()));
+  _conn->applyLin(1,-1);
+  _conn->rearrange(nbEntities);
   _common=MEDFileUMeshPerTypeCommon::New();
   _common->loadCommonPart(fid,mName.c_str(),dt,it,nCells,geoType,MED_STRUCT_ELEMENT,mrs);
-  //MEDFILESAFECALLERRD0(MEDmeshElementRd,(mName.c_str(),dt,it,MED_STRUCT_ELEMENT,geoType,MED_NODAL,MED_FULL_INTERLACE,conn,));
+  std::vector<std::string> vns(mse->getVarAttsOf(_geo_type_name));
+  std::size_t sz(vns.size());
+  _vars.resize(sz);
+  for(std::size_t i=0;i<sz;i++)
+    {
+      const MEDFileSEVarAtt *var(mse->getVarAttOf(_geo_type_name,vns[i]));
+      MCAuto<DataArray> gen(var->getGenerator());
+      MCAuto<DataArray> arr(gen->buildNewEmptyInstance());
+      arr->alloc(nCells,var->getNbOfComponents());
+      arr->setName(vns[i]);
+      MEDFILESAFECALLERRD0(MEDmeshStructElementVarAttRd,(fid,mName.c_str(),dt,it,_geo_type,vns[i].c_str(),arr->getVoidStarPointer()));
+      _vars[i]=arr;
+    }
 }