#include "vtkMEDReader.h"
#include "vtkGenerateVectors.h"
+#include "MEDUtilities.hxx"
#include "vtkMultiBlockDataSet.h"
#include "vtkInformation.h"
#include "vtkMultiTimeStepAlgorithm.h"
#include "vtkUnstructuredGrid.h"
#include "vtkInformationQuadratureSchemeDefinitionVectorKey.h"
+#include "vtkInformationDoubleVectorKey.h"
#include "vtkQuadratureSchemeDefinition.h"
#include "vtkPointData.h"
#include "vtkCellData.h"
}
return ret;
}
+
+static vtkInformationGaussDoubleVectorKey *vtkMEDReader_GAUSS_DATA=new vtkInformationGaussDoubleVectorKey("GAUSS_DATA","vtkMEDReader");
+
+vtkInformationGaussDoubleVectorKey *vtkMEDReader::GAUSS_DATA()
+{
+ static const char ZE_KEY[]="vtkMEDReader::GAUSS_DATA";
+ vtkInformationGaussDoubleVectorKey *ret(vtkMEDReader_GAUSS_DATA);
+ MEDCoupling::GlobalDict *gd(MEDCoupling::GlobalDict::GetInstance());
+ if(!gd->hasKey(ZE_KEY))
+ {// here META_DATA is put on global var to be exchanged with other filters without dependancy of MEDReader. Please do not change ZE_KEY !
+ vtkInformationDoubleVectorKey *ret2(ret);
+ std::ostringstream oss; oss << ret2;
+ gd->setKeyValue(ZE_KEY,oss.str());
+ }
+ return ret;
+}
// end of overload of vtkInformationKeyMacro
vtkMEDReader::vtkMEDReader():Internal(new vtkMEDReaderInternal(this))
double reqTS(0.);
if(outInfo->Has(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEP()))
reqTS=outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEP());
+ ExportedTinyInfo ti;
#ifndef MEDREADER_USE_MPI
- this->FillMultiBlockDataSetInstance(output,reqTS);
+ this->FillMultiBlockDataSetInstance(output,reqTS,&ti);
#else
if(this->Internal->GCGCP)
{
vtkSmartPointer<vtkPUnstructuredGridGhostCellsGenerator> gcg(vtkSmartPointer<vtkPUnstructuredGridGhostCellsGenerator>::New());
{
- vtkDataSet *ret(RetrieveDataSetAtTime(reqTS));
+ vtkDataSet *ret(RetrieveDataSetAtTime(reqTS,&ti));
gcg->SetInputData(ret);
ret->Delete();
}
output->SetBlock(0,gcg->GetOutput());
}
else
- this->FillMultiBlockDataSetInstance(output,reqTS);
+ this->FillMultiBlockDataSetInstance(output,reqTS,&ti);
#endif
+ if(!ti.empty())
+ {
+ const std::vector<double>& data(ti.getData());
+ outInfo->Set(vtkMEDReader::GAUSS_DATA(),&data[0],data.size());
+ request->Append(vtkExecutive::KEYS_TO_COPY(),vtkMEDReader::GAUSS_DATA());// Thank you to SciberQuest and DIPOLE_CENTER ! Don't understand why ! In RequestInformation it does not work !
+ }
output->GetInformation()->Set(vtkDataObject::DATA_TIME_STEP(),reqTS);
// Is it really needed ? TODO
this->UpdateSIL(request, outInfo);
return tsteps.front();
}
-void vtkMEDReader::FillMultiBlockDataSetInstance(vtkMultiBlockDataSet *output, double reqTS)
+void vtkMEDReader::FillMultiBlockDataSetInstance(vtkMultiBlockDataSet *output, double reqTS, ExportedTinyInfo *internalInfo)
{
if( !this->Internal )
return;
- vtkDataSet *ret(RetrieveDataSetAtTime(reqTS));
+ vtkDataSet *ret(RetrieveDataSetAtTime(reqTS,internalInfo));
output->SetBlock(0,ret);
ret->Delete();
}
-vtkDataSet *vtkMEDReader::RetrieveDataSetAtTime(double reqTS)
+vtkDataSet *vtkMEDReader::RetrieveDataSetAtTime(double reqTS, ExportedTinyInfo *internalInfo)
{
if( !this->Internal )
return 0;
std::string meshName;
- vtkDataSet *ret(this->Internal->Tree.buildVTKInstance(this->Internal->IsStdOrMode,reqTS,meshName,this->Internal->TK));
+ vtkDataSet *ret(this->Internal->Tree.buildVTKInstance(this->Internal->IsStdOrMode,reqTS,meshName,this->Internal->TK,internalInfo));
if(this->Internal->GenerateVect)
{
vtkGenerateVectors::Operate(ret->GetPointData());