Salome HOME
- MEDLoader ReadField is now dealing int32, float64 and float32
[tools/medcoupling.git] / src / MEDPartitioner / MEDPARTITIONER_MeshCollectionMedAsciiDriver.cxx
old mode 100755 (executable)
new mode 100644 (file)
index d5adb95..81231da
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2014  CEA/DEN, EDF R&D
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -33,6 +33,7 @@
 #include <string>
 #include <fstream>
 #include <iostream>
+#include <sstream>
 
 #include <libxml/tree.h>
 #include <libxml/parser.h>
@@ -52,6 +53,40 @@ MeshCollectionMedAsciiDriver::MeshCollectionMedAsciiDriver(MeshCollection* colle
  *\param filename ascii file containing the list of MED v2.3 files
  * */
 
+int MeshCollectionMedAsciiDriver::read(MEDCoupling::MEDFileData* filedata)
+{
+  readMEDFileData(filedata);
+
+  std::vector<MEDPARTITIONER::ConnectZone*> cz; // to fill from filedata
+  std::vector<int*> cellglobal;
+  std::vector<int*> nodeglobal;
+  std::vector<int*> faceglobal;
+  int size = (_collection->getMesh()).size();
+  cellglobal.resize(size);
+  nodeglobal.resize(size);
+  faceglobal.resize(size);
+  for ( int idomain = 0; idomain < size; ++idomain )
+    {
+      cellglobal[idomain]=0;
+      faceglobal[idomain]=0;
+      nodeglobal[idomain]=0;
+      if ( (_collection->getMesh())[idomain] && (_collection->getMesh())[idomain]->getNumberOfNodes() > 0 )
+        _collection->setNonEmptyMesh(idomain);
+    }
+  //creation of topology from mesh and connect zones
+  ParallelTopology* aPT = new ParallelTopology((_collection->getMesh()), cz, cellglobal, nodeglobal, faceglobal);
+  _collection->setTopology(aPT,true);
+
+  return 0;
+}
+
+/*!reads a MED File v>=2.3
+ * and mounts the corresponding meshes in memory
+ * the connect zones are created from the joints
+ *
+ *\param filename ascii file containing the list of MED v2.3 files
+ * */
+
 int MeshCollectionMedAsciiDriver::read(const char* filename, ParaDomainSelector* domainSelector)
 {
   //distributed meshes
@@ -105,7 +140,7 @@ int MeshCollectionMedAsciiDriver::read(const char* filename, ParaDomainSelector*
               throw INTERP_KERNEL::Exception("domain must be written from 1 to N in ASCII file descriptor");
             }
           if ( !domainSelector || domainSelector->isMyDomain(i))
-            readSubdomain(cellglobal,faceglobal,nodeglobal, i);
+            readSubdomain(i);
 
         } //loop on domains
     } //of try
@@ -116,7 +151,7 @@ int MeshCollectionMedAsciiDriver::read(const char* filename, ParaDomainSelector*
 
   //creation of topology from mesh and connect zones
   ParallelTopology* aPT = new ParallelTopology((_collection->getMesh()), (_collection->getCZ()), cellglobal, nodeglobal, faceglobal);
-  _collection->setTopology(aPT);
+  _collection->setTopology(aPT, true);
 
   for (int i=0; i<nbdomain; i++)
     {
@@ -127,7 +162,6 @@ int MeshCollectionMedAsciiDriver::read(const char* filename, ParaDomainSelector*
   return 0;
 }
 
-
 /*! writes the collection of meshes in a MED v2.3 file
  * with the connect zones being written as joints
  * \param filename name of the ascii file containing the meshes description
@@ -149,8 +183,9 @@ void MeshCollectionMedAsciiDriver::write(const char* filename, ParaDomainSelecto
 
       if ( !domainSelector || domainSelector->isMyDomain( idomain ) )
         {
-          if ( !_collection->getMesh()[idomain]->getNumberOfCells()==0 ) continue;//empty domain
-          MEDLoader::WriteUMesh(distfilename.c_str(),(_collection->getMesh())[idomain],true);
+          // [ABN] spurious test in 8.2 - fixed as I think it should be:
+          if ( _collection->getMesh()[idomain]->getNumberOfCells() == 0 ) continue;
+          WriteUMesh(distfilename.c_str(),(_collection->getMesh())[idomain],true);
           //writeSubdomain(idomain, nbdomains, distfilename.c_str(), domainSelector);
         }
     }