18 #ifndef vtkHigherOrderInterpolation_h
19 #define vtkHigherOrderInterpolation_h
21 #include "vtkCommonDataModelModule.h"
28 #define VTK_21_POINT_WEDGE true
42 static int Tensor1ShapeFunctions(
const int order[1],
const double* pcoords,
double* shape,
43 void (*function_evaluate_shape_functions)(
int,
double,
double*));
44 static int Tensor1ShapeDerivatives(
const int order[1],
const double* pcoords,
double* derivs,
45 void (*function_evaluate_shape_and_gradient)(
int,
double,
double*,
double*));
47 static int Tensor2ShapeFunctions(
const int order[2],
const double* pcoords,
double* shape,
48 void (*function_evaluate_shape_functions)(
int,
double,
double*));
49 static int Tensor2ShapeDerivatives(
const int order[2],
const double* pcoords,
double* derivs,
50 void (*function_evaluate_shape_and_gradient)(
int,
double,
double*,
double*));
52 static int Tensor3ShapeFunctions(
const int order[3],
const double* pcoords,
double* shape,
53 void (*function_evaluate_shape_functions)(
int,
double,
double*));
54 static int Tensor3ShapeDerivatives(
const int order[3],
const double* pcoords,
double* derivs,
55 void (*function_evaluate_shape_and_gradient)(
int,
double,
double*,
double*));
57 virtual void Tensor3EvaluateDerivative(
const int order[3],
const double* pcoords,
58 vtkPoints*
points,
const double* fieldVals,
int fieldDim,
double* fieldDerivs) = 0;
60 void Tensor3EvaluateDerivative(
const int order[3],
const double* pcoords,
vtkPoints*
points,
61 const double* fieldVals,
int fieldDim,
double* fieldDerivs,
62 void (*function_evaluate_shape_and_gradient)(
int,
double,
double*,
double*));
64 static void WedgeShapeFunctions(
const int order[3],
const vtkIdType numberOfPoints,
66 void (*function_evaluate_shape_functions)(
int,
double,
double*));
67 static void WedgeShapeDerivatives(
const int order[3],
const vtkIdType numberOfPoints,
69 void (*function_evaluate_shape_and_gradient)(
int,
double,
double*,
double*));
75 int JacobianInverse(
vtkPoints* points,
const double* derivs,
double** inverse);
76 int JacobianInverseWedge(
vtkPoints* points,
const double* derivs,
double** inverse);
78 virtual void WedgeEvaluate(
const int order[3],
const vtkIdType numberOfPoints,
79 const double* pcoords,
double* fieldVals,
int fieldDim,
double* fieldAtPCoords) = 0;
81 void WedgeEvaluate(
const int order[3],
const vtkIdType numberOfPoints,
const double* pcoords,
83 void (*function_evaluate_shape_functions)(
int,
double,
double*));
85 virtual void WedgeEvaluateDerivative(
const int order[3],
const double* pcoords,
vtkPoints* points,
86 const double* fieldVals,
int fieldDim,
double* fieldDerivs) = 0;
88 void WedgeEvaluateDerivative(
const int order[3],
const double* pcoords,
vtkPoints* points,
90 void (*function_evaluate_shape_and_gradient)(
int,
double,
double*,
double*));
92 static vtkVector3d GetParametricHexCoordinates(
int vertexId);
93 static vtkVector2i GetPointIndicesBoundingHexEdge(
int edgeId);
94 static int GetVaryingParameterOfHexEdge(
int edgeId);
95 static vtkVector2i GetFixedParametersOfHexEdge(
int edgeId);
97 static const int* GetPointIndicesBoundingHexFace(
int faceId)
VTK_SIZEHINT(4);
98 static const int* GetEdgeIndicesBoundingHexFace(
int faceId)
VTK_SIZEHINT(4);
99 static vtkVector2i GetVaryingParametersOfHexFace(
int faceId);
100 static int GetFixedParameterOfHexFace(
int faceId);
102 static vtkVector3d GetParametricWedgeCoordinates(
int vertexId);
103 static vtkVector2i GetPointIndicesBoundingWedgeEdge(
int edgeId);
104 static int GetVaryingParameterOfWedgeEdge(
int edgeId);
105 static vtkVector2i GetFixedParametersOfWedgeEdge(
int edgeId);
107 static const int* GetPointIndicesBoundingWedgeFace(
int faceId)
VTK_SIZEHINT(4);
108 static const int* GetEdgeIndicesBoundingWedgeFace(
int faceId)
VTK_SIZEHINT(4);
109 static vtkVector2i GetVaryingParametersOfWedgeFace(
int faceId);
110 static int GetFixedParameterOfWedgeFace(
int faceId);
113 static void AppendQuadrilateralCollocationPoints(
115 static void AppendHexahedronCollocationPoints(
120 static int NumberOfIntervals(
const int order[N]);
126 void PrepareForOrder(
const int order[3],
const vtkIdType numberOfPoints);
140 for (
int n = 0; n < N; ++n)
147 #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