mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
141 lines
4.2 KiB
C++
141 lines
4.2 KiB
C++
/*=========================================================================
|
|
|
|
Program: ParaView
|
|
Module: vtkCPUniformGridBuilder.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 "vtkCPUniformGridBuilder.h"
|
|
|
|
#include "vtkCPBaseFieldBuilder.h"
|
|
#include "vtkMultiProcessController.h"
|
|
#include "vtkObjectFactory.h"
|
|
#include "vtkUniformGrid.h"
|
|
|
|
vtkStandardNewMacro(vtkCPUniformGridBuilder);
|
|
vtkCxxSetObjectMacro(vtkCPUniformGridBuilder, UniformGrid, vtkUniformGrid);
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkCPUniformGridBuilder::vtkCPUniformGridBuilder()
|
|
{
|
|
for(int i=0;i<3;i++)
|
|
{
|
|
this->Dimensions[i] = 0;
|
|
this->Spacing[i] = 0;
|
|
this->Origin[i] = 0;
|
|
}
|
|
this->UniformGrid = 0;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkCPUniformGridBuilder::~vtkCPUniformGridBuilder()
|
|
{
|
|
this->SetUniformGrid(0);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkDataObject* vtkCPUniformGridBuilder::GetGrid(
|
|
unsigned long timeStep, double time, int & builtNewGrid)
|
|
{
|
|
vtkCPBaseFieldBuilder* fieldBuilder = this->GetFieldBuilder();
|
|
if(!fieldBuilder)
|
|
{
|
|
vtkErrorMacro("FieldBuilder is not defined.");
|
|
return 0;
|
|
}
|
|
|
|
builtNewGrid = this->CreateUniformGrid();
|
|
|
|
fieldBuilder->BuildField(timeStep, time, this->UniformGrid);
|
|
|
|
return this->UniformGrid;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkUniformGrid* vtkCPUniformGridBuilder::GetUniformGrid()
|
|
{
|
|
return this->UniformGrid;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int* vtkCPUniformGridBuilder::GetDimensions()
|
|
{
|
|
return this->Dimensions;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
double* vtkCPUniformGridBuilder::GetSpacing()
|
|
{
|
|
return this->Spacing;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
double* vtkCPUniformGridBuilder::GetOrigin()
|
|
{
|
|
return this->Origin;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool vtkCPUniformGridBuilder::CreateUniformGrid()
|
|
{
|
|
bool builtNewGrid = 0;
|
|
if(this->UniformGrid == 0)
|
|
{
|
|
builtNewGrid = 1;
|
|
}
|
|
else
|
|
{
|
|
for(int i=0;i<3;i++)
|
|
{
|
|
if(this->Dimensions[i] != this->UniformGrid->GetDimensions()[i] ||
|
|
this->Spacing[i] != this->UniformGrid->GetSpacing()[i] ||
|
|
this->Origin[i] != this->UniformGrid->GetOrigin()[i])
|
|
{
|
|
builtNewGrid = 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if(builtNewGrid)
|
|
{
|
|
vtkUniformGrid* newGrid = vtkUniformGrid::New();
|
|
newGrid->SetSpacing(this->Spacing);
|
|
newGrid->SetOrigin(this->Origin);
|
|
|
|
vtkMultiProcessController* controller =
|
|
vtkMultiProcessController::GetGlobalController();
|
|
int numberOfProcesses = controller->GetNumberOfProcesses();
|
|
int processId = controller->GetLocalProcessId();
|
|
// partition in the x-direction
|
|
int extents[6] = {this->Dimensions[0]*processId/numberOfProcesses,
|
|
this->Dimensions[0]*(processId+1)/numberOfProcesses,
|
|
0, this->Dimensions[1], 0, this->Dimensions[2]};
|
|
newGrid->SetExtent(extents);
|
|
|
|
this->SetUniformGrid(newGrid);
|
|
newGrid->Delete();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkCPUniformGridBuilder::PrintSelf(ostream& os, vtkIndent indent)
|
|
{
|
|
this->Superclass::PrintSelf(os, indent);
|
|
os << indent << "UniformGrid: " << this->UniformGrid << "\n";
|
|
os << indent << "Dimensions: " << this->Dimensions[0]
|
|
<< " " << this->Dimensions[1] << " " << this->Dimensions[2] << "\n";
|
|
os << indent << "Spacing: " << this->Spacing[0]
|
|
<< " " << this->Spacing[1] << " " << this->Spacing[2] << "\n";
|
|
os << indent << "Origin: " << this->Origin[0]
|
|
<< " " << this->Origin[1] << " " << this->Origin[2] << "\n";
|
|
|
|
}
|