comac_desk_app/ThirdpartyLibs/Libs/windows-x86_64/vtk/include/vtkAMRInterpolatedVelocityF...

123 lines
4.0 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkAMRInterpolatedVelocityField.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm 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.
=========================================================================*/
/**
* @class vtkAMRInterpolatedVelocityField
* @brief A concrete class for obtaining
* the interpolated velocity values at a point in AMR data.
*
* The main functionality supported here is the point location inside
* vtkOverlappingAMR data set.
*/
#ifndef vtkAMRInterpolatedVelocityField_h
#define vtkAMRInterpolatedVelocityField_h
#include "vtkFiltersFlowPathsModule.h" // For export macro
#include "vtkAbstractInterpolatedVelocityField.h"
class vtkOverlappingAMR;
class VTKFILTERSFLOWPATHS_EXPORT vtkAMRInterpolatedVelocityField
: public vtkAbstractInterpolatedVelocityField
{
public:
///@{
/**
* Standard methods for obtaining type information and printing the object state.
*/
static vtkAMRInterpolatedVelocityField* New();
vtkTypeMacro(vtkAMRInterpolatedVelocityField, vtkAbstractInterpolatedVelocityField);
void PrintSelf(ostream& os, vtkIndent indent) override;
///@}
///@{
/**
*
* Specify the AMR dataset to process.
*/
virtual void SetAmrDataSet(vtkOverlappingAMR*);
vtkGetObjectMacro(AmrDataSet, vtkOverlappingAMR);
void SetAMRData(vtkOverlappingAMR* amr) { this->SetAmrDataSet(amr); }
///@}
/**
* Copy essential parameters between instances of this class. This
* generally is used to copy from instance prototype to another, or to copy
* interpolators between thread instances. Sub-classes can contribute to
* the parameter copying process via chaining.
*/
void CopyParameters(vtkAbstractInterpolatedVelocityField* from) override;
/**
* Set the cell id cached by the last evaluation.
*/
void SetLastCellId(vtkIdType c) override { this->Superclass::SetLastCellId(c); }
using Superclass::FunctionValues;
/**
* Evaluate the velocity field f at point p.
* If it succeeds, then both the last data set (this->LastDataSet) and
* the last data set location (this->LastLevel, this->LastId) will be
* set according to where p is found. If it fails, either p is out of
* bound, in which case both the last data set and the last location
* will be invalid or, in a multi-process setting, p is inbound but not
* on the processor. In the last case, the last data set location is
* still valid
*/
int FunctionValues(double* x, double* f) override;
/**
* Helper function to locator the grid within an AMR dataset.
*/
static bool FindGrid(
double q[3], vtkOverlappingAMR* amrds, unsigned int& level, unsigned int& gridId);
///@{
/**
* Methods to support local caching while searching for AMR datasets.
*/
bool GetLastDataSetLocation(unsigned int& level, unsigned int& id);
bool SetLastDataSet(int level, int id);
void SetLastCellId(vtkIdType c, int dataindex) override;
///@}
protected:
vtkOverlappingAMR* AmrDataSet;
int LastLevel;
int LastId;
vtkAMRInterpolatedVelocityField();
~vtkAMRInterpolatedVelocityField() override;
int FunctionValues(vtkDataSet* ds, double* x, double* f) override
{
return this->Superclass::FunctionValues(ds, x, f);
}
/**
* Method to initialize the velocity field. Generally this must be called when
* performing threaded operations; however if not called apriori it will be called in
* the first call to FunctionValues(), which implicitly assumes that this is being
* used in serial operation.
*/
int SelfInitialize() override;
private:
vtkAMRInterpolatedVelocityField(const vtkAMRInterpolatedVelocityField&) = delete;
void operator=(const vtkAMRInterpolatedVelocityField&) = delete;
};
#endif