You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
4.6 KiB
C++
125 lines
4.6 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkCellDerivatives.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 vtkCellDerivatives
|
|
* @brief compute derivatives of scalars and vectors
|
|
*
|
|
* vtkCellDerivatives is a filter that computes derivatives of scalars
|
|
* and vectors at the center of cells. You can choose to generate
|
|
* different output including the scalar gradient (a vector), computed
|
|
* tensor vorticity (a vector), gradient of input vectors (a tensor),
|
|
* and strain matrix (linearized or Green-Lagrange) of the input vectors
|
|
* (a tensor); or you may choose to pass data through to the output.
|
|
*
|
|
* Note that it is assumed that on input scalars and vector point data
|
|
* is available, which are then used to generate cell vectors and tensors.
|
|
* (The interpolation functions of the cells are used to compute the
|
|
* derivatives which is why point data is required.)
|
|
*
|
|
* Note that the tensor components used to be sent out in column, but they
|
|
* are now sent out not in row.
|
|
*
|
|
* @warning
|
|
* The computed derivatives are cell attribute data; you can convert them to
|
|
* point attribute data by using the vtkCellDataToPointData filter.
|
|
* Note that, due to the interpolation function used (obtained using
|
|
* 1/r**2 normalized sum), the derivatives calculated for polygons
|
|
* with more than 4 vertices are inaccurate in most cases.
|
|
*
|
|
* @warning
|
|
* The point data is passed through the filter to the output.
|
|
*
|
|
* @sa
|
|
* vtkVectorNorm
|
|
*/
|
|
|
|
#ifndef vtkCellDerivatives_h
|
|
#define vtkCellDerivatives_h
|
|
|
|
#include "vtkDataSetAlgorithm.h"
|
|
#include "vtkFiltersGeneralModule.h" // For export macro
|
|
|
|
#define VTK_VECTOR_MODE_PASS_VECTORS 0
|
|
#define VTK_VECTOR_MODE_COMPUTE_GRADIENT 1
|
|
#define VTK_VECTOR_MODE_COMPUTE_VORTICITY 2
|
|
|
|
#define VTK_TENSOR_MODE_PASS_TENSORS 0
|
|
#define VTK_TENSOR_MODE_COMPUTE_GRADIENT 1
|
|
#define VTK_TENSOR_MODE_COMPUTE_STRAIN 2
|
|
#define VTK_TENSOR_MODE_COMPUTE_GREEN_LAGRANGE_STRAIN 3
|
|
|
|
class VTKFILTERSGENERAL_EXPORT vtkCellDerivatives : public vtkDataSetAlgorithm
|
|
{
|
|
public:
|
|
vtkTypeMacro(vtkCellDerivatives, vtkDataSetAlgorithm);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
/**
|
|
* Construct to compute the gradient of the scalars and vectors.
|
|
*/
|
|
static vtkCellDerivatives* New();
|
|
|
|
//@{
|
|
/**
|
|
* Control how the filter works to generate vector cell data. You
|
|
* can choose to pass the input cell vectors, compute the gradient
|
|
* of the input scalars, or extract the vorticity of the computed
|
|
* vector gradient tensor. By default (VectorModeToComputeGradient),
|
|
* the filter will take the gradient of the input scalar data.
|
|
*/
|
|
vtkSetMacro(VectorMode, int);
|
|
vtkGetMacro(VectorMode, int);
|
|
void SetVectorModeToPassVectors() { this->SetVectorMode(VTK_VECTOR_MODE_PASS_VECTORS); }
|
|
void SetVectorModeToComputeGradient() { this->SetVectorMode(VTK_VECTOR_MODE_COMPUTE_GRADIENT); }
|
|
void SetVectorModeToComputeVorticity() { this->SetVectorMode(VTK_VECTOR_MODE_COMPUTE_VORTICITY); }
|
|
const char* GetVectorModeAsString();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Control how the filter works to generate tensor cell data. You can
|
|
* choose to pass the input cell tensors, compute the gradient of
|
|
* the input vectors, or compute the strain tensor (linearized or
|
|
* Green-Lagrange strain)of the vector gradient tensor. By default
|
|
* (TensorModeToComputeGradient), the filter will take the gradient
|
|
* of the vector data to construct a tensor.
|
|
*/
|
|
vtkSetMacro(TensorMode, int);
|
|
vtkGetMacro(TensorMode, int);
|
|
void SetTensorModeToPassTensors() { this->SetTensorMode(VTK_TENSOR_MODE_PASS_TENSORS); }
|
|
void SetTensorModeToComputeGradient() { this->SetTensorMode(VTK_TENSOR_MODE_COMPUTE_GRADIENT); }
|
|
void SetTensorModeToComputeStrain() { this->SetTensorMode(VTK_TENSOR_MODE_COMPUTE_STRAIN); }
|
|
void SetTensorModeToComputeGreenLagrangeStrain()
|
|
{
|
|
this->SetTensorMode(VTK_TENSOR_MODE_COMPUTE_GREEN_LAGRANGE_STRAIN);
|
|
}
|
|
const char* GetTensorModeAsString();
|
|
//@}
|
|
|
|
protected:
|
|
vtkCellDerivatives();
|
|
~vtkCellDerivatives() override {}
|
|
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
|
|
|
|
int VectorMode;
|
|
int TensorMode;
|
|
|
|
private:
|
|
vtkCellDerivatives(const vtkCellDerivatives&) = delete;
|
|
void operator=(const vtkCellDerivatives&) = delete;
|
|
};
|
|
|
|
#endif
|