Salome HOME
Merge branch 'kw_65' into 'master'
[modules/paravis.git] / src / Plugins / MEDReader / plugin / MEDReaderIO / vtkFileSeriesGroupReader.cxx
index 8fdfa7e0f5417f78c65e6e80cdebd000085433a6..cc7549e3095e52e4d091dbc3c046e2fdb5fdf23e 100644 (file)
@@ -3,6 +3,7 @@
 #include <vtkInformation.h>
 #include <vtkInformationVector.h>
 #include <vtkMultiBlockDataSet.h>
+#include <vtkMultiProcessController.h>
 #include <vtkObjectFactory.h>
 #include <vtkSmartPointer.h>
 #include <vtkStreamingDemandDrivenPipeline.h>
@@ -104,10 +105,23 @@ int vtkFileSeriesGroupReader::RequestData(vtkInformation* vtkNotUsed(request),
   vtkInformation* info = outputVector->GetInformationObject(0);
   double time = info->Get(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEP());
 
-  for (unsigned int i = 0; i < this->GetNumberOfFileNames(); i++)
+  vtkMultiProcessController *vmpc(vtkMultiProcessController::GetGlobalController());
+  unsigned int iProc = vmpc ? vmpc->GetLocalProcessId() : 0;
+  unsigned int nProc = vmpc ? vmpc->GetNumberOfProcesses() : 1;
+  unsigned int nFiles = this->GetNumberOfFileNames() / nProc;
+  unsigned int offFile =  iProc * nFiles;
+  unsigned int supFiles = this->GetNumberOfFileNames() % nProc;
+  if (iProc == nProc - 1)
   {
-    this->ReaderSetFileName(this->GetFileName(i));
-    vtkMEDReader::SafeDownCast(this->Reader)->Reload();
+    nFiles += supFiles;
+  }
+
+  for (unsigned int i = 0; i < nFiles; i++)
+  {
+    this->ReaderSetFileName(this->GetFileName(i + offFile));
+    vtkMEDReader::SafeDownCast(this->Reader)->ReloadInternals();
+    vtkMEDReader::SafeDownCast(this->Reader)->SetDistributeWithMPI(false);
+    this->Reader->UpdateInformation();
     this->Reader->UpdateTimeStep(time);
     vtkDataObject* outputReader = this->Reader->GetOutputDataObject(0);
     vtkSmartPointer<vtkDataObject> outputLeaf = vtkSmartPointer<vtkDataObject>::Take(outputReader->NewInstance());
@@ -117,7 +131,7 @@ int vtkFileSeriesGroupReader::RequestData(vtkInformation* vtkNotUsed(request),
 
   return 1;
 }
+
 //------------------------------------------------------------------------------
 int vtkFileSeriesGroupReader::FillOutputPortInformation(
   int vtkNotUsed(port), vtkInformation* info)