Salome HOME
Adding distribution support
[modules/paravis.git] / src / Plugins / MEDReader / plugin / MEDReaderIO / vtkFileSeriesGroupReader.cxx
index 46c226d800e8ac31fcf3bc4b46a94b4deb3d0b99..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,22 @@ 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));
+    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);
@@ -118,7 +131,7 @@ int vtkFileSeriesGroupReader::RequestData(vtkInformation* vtkNotUsed(request),
 
   return 1;
 }
+
 //------------------------------------------------------------------------------
 int vtkFileSeriesGroupReader::FillOutputPortInformation(
   int vtkNotUsed(port), vtkInformation* info)