#include <vtkInformation.h>
#include <vtkInformationVector.h>
#include <vtkMultiBlockDataSet.h>
+#include <vtkMultiProcessController.h>
#include <vtkObjectFactory.h>
#include <vtkSmartPointer.h>
#include <vtkStreamingDemandDrivenPipeline.h>
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());
return 1;
}
-
+
//------------------------------------------------------------------------------
int vtkFileSeriesGroupReader::FillOutputPortInformation(
int vtkNotUsed(port), vtkInformation* info)