6 #ifndef vtkHigherOrderInterpolation_h
7 #define vtkHigherOrderInterpolation_h
9 #include "vtkCommonDataModelModule.h"
16 #define VTK_21_POINT_WEDGE true
18 VTK_ABI_NAMESPACE_BEGIN
31 static int Tensor1ShapeFunctions(
const int order[1],
const double* pcoords,
double* shape,
32 void (*function_evaluate_shape_functions)(
int,
double,
double*));
33 static int Tensor1ShapeDerivatives(
const int order[1],
const double* pcoords,
double* derivs,
34 void (*function_evaluate_shape_and_gradient)(
int,
double,
double*,
double*));
36 static int Tensor2ShapeFunctions(
const int order[2],
const double* pcoords,
double* shape,
37 void (*function_evaluate_shape_functions)(
int,
double,
double*));
38 static int Tensor2ShapeDerivatives(
const int order[2],
const double* pcoords,
double* derivs,
39 void (*function_evaluate_shape_and_gradient)(
int,
double,
double*,
double*));
41 static int Tensor3ShapeFunctions(
const int order[3],
const double* pcoords,
double* shape,
42 void (*function_evaluate_shape_functions)(
int,
double,
double*));
43 static int Tensor3ShapeDerivatives(
const int order[3],
const double* pcoords,
double* derivs,
44 void (*function_evaluate_shape_and_gradient)(
int,
double,
double*,
double*));
46 virtual void Tensor3EvaluateDerivative(
const int order[3],
const double* pcoords,
47 vtkPoints*
points,
const double* fieldVals,
int fieldDim,
double* fieldDerivs) = 0;
49 void Tensor3EvaluateDerivative(
const int order[3],
const double* pcoords,
vtkPoints*
points,
50 const double* fieldVals,
int fieldDim,
double* fieldDerivs,
51 void (*function_evaluate_shape_and_gradient)(
int,
double,
double*,
double*));
53 static void WedgeShapeFunctions(
const int order[3],
vtkIdType numberOfPoints,
55 void (*function_evaluate_shape_functions)(
int,
double,
double*));
56 static void WedgeShapeDerivatives(
const int order[3],
vtkIdType numberOfPoints,
58 void (*function_evaluate_shape_and_gradient)(
int,
double,
double*,
double*));
64 int JacobianInverse(
vtkPoints* points,
const double* derivs,
double** inverse);
65 int JacobianInverseWedge(
vtkPoints* points,
const double* derivs,
double** inverse);
67 virtual void WedgeEvaluate(
const int order[3],
vtkIdType numberOfPoints,
const double* pcoords,
68 double* fieldVals,
int fieldDim,
double* fieldAtPCoords) = 0;
70 void WedgeEvaluate(
const int order[3],
vtkIdType numberOfPoints,
const double* pcoords,
72 void (*function_evaluate_shape_functions)(
int,
double,
double*));
74 virtual void WedgeEvaluateDerivative(
const int order[3],
const double* pcoords,
vtkPoints* points,
75 const double* fieldVals,
int fieldDim,
double* fieldDerivs) = 0;
77 void WedgeEvaluateDerivative(
const int order[3],
const double* pcoords,
vtkPoints* points,
79 void (*function_evaluate_shape_and_gradient)(
int,
double,
double*,
double*));
81 static vtkVector3d GetParametricHexCoordinates(
int vertexId);
82 static vtkVector2i GetPointIndicesBoundingHexEdge(
int edgeId);
83 static int GetVaryingParameterOfHexEdge(
int edgeId);
84 static vtkVector2i GetFixedParametersOfHexEdge(
int edgeId);
86 static const int* GetPointIndicesBoundingHexFace(
int faceId)
VTK_SIZEHINT(4);
87 static const int* GetEdgeIndicesBoundingHexFace(
int faceId)
VTK_SIZEHINT(4);
88 static vtkVector2i GetVaryingParametersOfHexFace(
int faceId);
89 static int GetFixedParameterOfHexFace(
int faceId);
91 static vtkVector3d GetParametricWedgeCoordinates(
int vertexId);
92 static vtkVector2i GetPointIndicesBoundingWedgeEdge(
int edgeId);
93 static int GetVaryingParameterOfWedgeEdge(
int edgeId);
94 static vtkVector2i GetFixedParametersOfWedgeEdge(
int edgeId);
96 static const int* GetPointIndicesBoundingWedgeFace(
int faceId)
VTK_SIZEHINT(4);
97 static const int* GetEdgeIndicesBoundingWedgeFace(
int faceId)
VTK_SIZEHINT(4);
98 static vtkVector2i GetVaryingParametersOfWedgeFace(
int faceId);
99 static int GetFixedParameterOfWedgeFace(
int faceId);
102 static void AppendQuadrilateralCollocationPoints(
104 static void AppendHexahedronCollocationPoints(
109 static int NumberOfIntervals(
const int order[N]);
115 void PrepareForOrder(
const int order[3],
vtkIdType numberOfPoints);
129 for (
int n = 0; n < N; ++n)
136 VTK_ABI_NAMESPACE_END
137 #endif // vtkHigherOrderInterpolation_h
abstract base class for most VTK objects
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
std::vector< double > ShapeSpace
a simple class to control print indentation
Some derived classes for the different vectors commonly used.
static int NumberOfIntervals(const int order[N])
#define VTK_SIZEHINT(...)
A 2D cell that represents an arbitrary order HigherOrder triangle.
std::vector< double > DerivSpace
represent and manipulate 3D points