mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
ParaView-5.0.1: Added the source-tree to ThirdParty-dev and patched as described in the README file
Resolves bug-report http://bugs.openfoam.org/view.php?id=2098
This commit is contained in:
@ -0,0 +1,193 @@
|
||||
/*=========================================================================
|
||||
|
||||
Program: ParaView
|
||||
Module: vtkPVCustomTestDriver.cxx
|
||||
|
||||
Copyright (c) Kitware, Inc.
|
||||
All rights reserved.
|
||||
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
|
||||
|
||||
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
PURPOSE. See the above copyright notice for more information.
|
||||
|
||||
=========================================================================*/
|
||||
#include "vtkPVCustomTestDriver.h"
|
||||
|
||||
#include "vtkCommunicator.h"
|
||||
#include "vtkCPDataDescription.h"
|
||||
#include "vtkCPInputDataDescription.h"
|
||||
#include "vtkCPLinearScalarFieldFunction.h"
|
||||
#include "vtkCPNodalFieldBuilder.h"
|
||||
#include "vtkCPProcessor.h"
|
||||
#include "vtkCPPythonScriptPipeline.h"
|
||||
#include "vtkCPUniformGridBuilder.h"
|
||||
#include "vtkDataObject.h"
|
||||
#include "vtkImageData.h"
|
||||
#include "vtkMultiProcessController.h"
|
||||
#include "vtkObjectFactory.h"
|
||||
#include "vtkRectilinearGrid.h"
|
||||
#include "vtkStructuredGrid.h"
|
||||
|
||||
vtkStandardNewMacro(vtkPVCustomTestDriver);
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtkPVCustomTestDriver::vtkPVCustomTestDriver()
|
||||
{
|
||||
this->Processor = vtkCPProcessor::New();
|
||||
this->Processor->Initialize();
|
||||
|
||||
// Specify how the field varies over space and time.
|
||||
vtkCPLinearScalarFieldFunction* fieldFunction =
|
||||
vtkCPLinearScalarFieldFunction::New();
|
||||
fieldFunction->SetConstant(2.);
|
||||
fieldFunction->SetTimeMultiplier(100);
|
||||
fieldFunction->SetXMultiplier(23.);
|
||||
fieldFunction->SetYMultiplier(15.);
|
||||
fieldFunction->SetZMultiplier(8.);
|
||||
|
||||
// Specify how to construct the field over the grid.
|
||||
vtkCPNodalFieldBuilder* fieldBuilder = vtkCPNodalFieldBuilder::New();
|
||||
fieldBuilder->SetArrayName("Pressure");
|
||||
fieldBuilder->SetTensorFieldFunction(fieldFunction);
|
||||
fieldFunction->Delete();
|
||||
|
||||
// Set the type of grid we are building.
|
||||
vtkCPUniformGridBuilder* gridBuilder = vtkCPUniformGridBuilder::New();
|
||||
int dimensions[3] = {50, 50, 50};
|
||||
gridBuilder->SetDimensions(dimensions);
|
||||
double spacing[3] = {.2, .2, .3};
|
||||
gridBuilder->SetSpacing(spacing);
|
||||
double origin[3] = {0,20,300};
|
||||
gridBuilder->SetOrigin(origin);
|
||||
gridBuilder->SetFieldBuilder(fieldBuilder);
|
||||
fieldBuilder->Delete();
|
||||
|
||||
this->SetGridBuilder(gridBuilder);
|
||||
gridBuilder->Delete();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtkPVCustomTestDriver::~vtkPVCustomTestDriver()
|
||||
{
|
||||
if(this->Processor)
|
||||
{
|
||||
this->Processor->Delete();
|
||||
this->Processor = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int vtkPVCustomTestDriver::Run()
|
||||
{
|
||||
vtkCPBaseGridBuilder* gridBuilder = this->GetGridBuilder();
|
||||
if(gridBuilder == 0)
|
||||
{
|
||||
vtkErrorMacro("Need to set the grid builder.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
for(unsigned long i=0;i<this->GetNumberOfTimeSteps();i++)
|
||||
{
|
||||
// now call the coprocessing library
|
||||
vtkCPDataDescription* dataDescription = vtkCPDataDescription::New();
|
||||
double time = this->GetTime(i);
|
||||
dataDescription->SetTimeData(time, i);
|
||||
dataDescription->AddInput("input");
|
||||
|
||||
if(this->Processor->RequestDataDescription(dataDescription))
|
||||
{
|
||||
unsigned int numberOfFields =
|
||||
dataDescription->GetInputDescriptionByName("input")->GetNumberOfFields();
|
||||
if(!numberOfFields)
|
||||
{
|
||||
cout << "No fields for coprocessing.\n";
|
||||
}
|
||||
int builtNewGrid = 0;
|
||||
vtkDataObject* grid = gridBuilder->GetGrid(i, this->GetTime(i), builtNewGrid);
|
||||
dataDescription->GetInputDescriptionByName("input")->SetGrid(grid);
|
||||
// we need to get the whole extent of any structured grids
|
||||
int extent[6];
|
||||
if(vtkImageData* image = vtkImageData::SafeDownCast(grid))
|
||||
{
|
||||
image->GetExtent(extent);
|
||||
}
|
||||
else if(vtkRectilinearGrid* rgrid = vtkRectilinearGrid::SafeDownCast(grid))
|
||||
{
|
||||
rgrid->GetExtent(extent);
|
||||
}
|
||||
else if(vtkStructuredGrid* sgrid = vtkStructuredGrid::SafeDownCast(grid))
|
||||
{
|
||||
sgrid->GetExtent(extent);
|
||||
}
|
||||
for(int j=0;j<3;j++)
|
||||
{
|
||||
extent[2*j] = -extent[2*j];
|
||||
}
|
||||
int wholeExtent[6];
|
||||
vtkMultiProcessController::GetGlobalController()->AllReduce(extent, wholeExtent, 6, vtkCommunicator::MAX_OP);
|
||||
for(int j=0;j<3;j++)
|
||||
{
|
||||
wholeExtent[2*j] = -wholeExtent[2*j];
|
||||
}
|
||||
dataDescription->GetInputDescriptionByName("input")->SetWholeExtent(wholeExtent);
|
||||
this->Processor->CoProcess(dataDescription);
|
||||
}
|
||||
dataDescription->Delete();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int vtkPVCustomTestDriver::Initialize(const char* fileName)
|
||||
{
|
||||
vtkCPPythonScriptPipeline* pipeline = vtkCPPythonScriptPipeline::New();
|
||||
|
||||
int success = pipeline->Initialize(fileName);
|
||||
this->Processor->AddPipeline(pipeline);
|
||||
pipeline->Delete();
|
||||
|
||||
// test adding a second pipeline and then deleting it
|
||||
vtkCPPythonScriptPipeline* tempPipeline = vtkCPPythonScriptPipeline::New();
|
||||
this->Processor->AddPipeline(tempPipeline);
|
||||
tempPipeline->Delete();
|
||||
if(this->Processor->GetNumberOfPipelines() != 2)
|
||||
{
|
||||
vtkErrorMacro("Wrong amount of pipelines.");
|
||||
success = 0;
|
||||
}
|
||||
else if(this->Processor->GetPipeline(0) != pipeline ||
|
||||
this->Processor->GetPipeline(1) != tempPipeline)
|
||||
{
|
||||
vtkErrorMacro("Bad ordering of the processor's pipeline.");
|
||||
success = 0;
|
||||
}
|
||||
this->Processor->RemovePipeline(tempPipeline);
|
||||
if(this->Processor->GetNumberOfPipelines() != 1)
|
||||
{
|
||||
vtkErrorMacro("Wrong amount of pipelines.");
|
||||
success = 0;
|
||||
}
|
||||
else if(this->Processor->GetPipeline(0) != pipeline)
|
||||
{
|
||||
vtkErrorMacro("Bad ordering of the processor's pipeline.");
|
||||
success = 0;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int vtkPVCustomTestDriver::Finalize()
|
||||
{
|
||||
this->Processor->Finalize();
|
||||
return 1;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtkPVCustomTestDriver::PrintSelf(ostream& os, vtkIndent indent)
|
||||
{
|
||||
this->Superclass::PrintSelf(os, indent);
|
||||
os << indent << "Processor: " << this->Processor << endl;
|
||||
}
|
||||
Reference in New Issue
Block a user