15#ifndef __INTREPID2_TYPES_HPP__
16#define __INTREPID2_TYPES_HPP__
18#include <Kokkos_Core.hpp>
19#include <Kokkos_DynRankView.hpp>
26 typedef int ordinal_type;
27 typedef size_t size_type;
29 template<
typename ValueType>
30 KOKKOS_FORCEINLINE_FUNCTION
36 KOKKOS_FORCEINLINE_FUNCTION
37 double epsilon<double>() {
46 return (s.i64 < 0 ? 1 - s.d64 : s.d64 - 1);
50 KOKKOS_FORCEINLINE_FUNCTION
51 float epsilon<float>() {
60 return (s.i32 < 0 ? 1 - s.f32 : s.f32 - 1);
63 KOKKOS_FORCEINLINE_FUNCTION
65 return epsilon<double>();
68 template<
typename ValueType>
69 KOKKOS_FORCEINLINE_FUNCTION
70 ValueType tolerence() {
71 return 100.0*epsilon<ValueType>();
74 KOKKOS_FORCEINLINE_FUNCTION
76 return tolerence<double>();
79 template<
typename ValueType>
80 KOKKOS_FORCEINLINE_FUNCTION
81 ValueType threshold() {
82 return 10.0*epsilon<ValueType>();
85 KOKKOS_FORCEINLINE_FUNCTION
87 return threshold<double>();
146 POLYTYPE_GAUSS_RADAU_LEFT,
147 POLYTYPE_GAUSS_RADAU_RIGHT,
148 POLYTYPE_GAUSS_LOBATTO,
152 KOKKOS_INLINE_FUNCTION
153 const char* EPolyTypeToString(
const EPolyType polytype) {
155 case POLYTYPE_GAUSS:
return "Gauss";
156 case POLYTYPE_GAUSS_RADAU_LEFT:
return "GaussRadauLeft";
157 case POLYTYPE_GAUSS_RADAU_RIGHT:
return "GaussRadauRight";
158 case POLYTYPE_GAUSS_LOBATTO:
return "GaussRadauLobatto";
159 case POLYTYPE_MAX:
return "Max PolyType";
161 return "INVALID EPolyType";
169 KOKKOS_FORCEINLINE_FUNCTION
171 return( polytype == POLYTYPE_GAUSS ||
172 polytype == POLYTYPE_GAUSS_RADAU_LEFT ||
173 polytype == POLYTYPE_GAUSS_RADAU_RIGHT ||
174 polytype == POLYTYPE_GAUSS_LOBATTO );
182 COORDINATES_CARTESIAN=0,
184 COORDINATES_CYLINDRICAL,
185 COORDINATES_SPHERICAL,
189 KOKKOS_INLINE_FUNCTION
190 const char* ECoordinatesToString(
const ECoordinates coords) {
192 case COORDINATES_CARTESIAN:
return "Cartesian";
193 case COORDINATES_POLAR:
return "Polar";
194 case COORDINATES_CYLINDRICAL:
return "Cylindrical";
195 case COORDINATES_SPHERICAL:
return "Spherical";
196 case COORDINATES_MAX:
return "Max. Coordinates";
198 return "INVALID ECoordinates";
206 KOKKOS_FORCEINLINE_FUNCTION
208 return( coordinateType == COORDINATES_CARTESIAN ||
209 coordinateType == COORDINATES_POLAR ||
210 coordinateType == COORDINATES_CYLINDRICAL ||
211 coordinateType == COORDINATES_SPHERICAL );
225 KOKKOS_INLINE_FUNCTION
226 const char* ENormToString(
const ENorm norm) {
228 case NORM_ONE:
return "1-Norm";
229 case NORM_TWO:
return "2-Norm";
230 case NORM_INF:
return "Infinity Norm";
231 case NORM_FRO:
return "Frobenius Norm";
232 case NORM_MAX:
return "Max. Norm";
234 return "INVALID ENorm";
242 KOKKOS_FORCEINLINE_FUNCTION
244 return( normType == NORM_ONE ||
245 normType == NORM_TWO ||
246 normType == NORM_INF ||
247 normType == NORM_FRO ||
248 normType == NORM_MAX );
256 enum EOperator :
int {
272 OPERATOR_MAX = OPERATOR_Dn
275 KOKKOS_INLINE_FUNCTION
276 const char* EOperatorToString(
const EOperator op) {
278 case OPERATOR_VALUE:
return "Value";
279 case OPERATOR_GRAD:
return "Grad";
280 case OPERATOR_CURL:
return "Curl";
281 case OPERATOR_DIV:
return "Div";
282 case OPERATOR_D1:
return "D1";
283 case OPERATOR_D2:
return "D2";
284 case OPERATOR_D3:
return "D3";
285 case OPERATOR_D4:
return "D4";
286 case OPERATOR_D5:
return "D5";
287 case OPERATOR_D6:
return "D6";
288 case OPERATOR_D7:
return "D7";
289 case OPERATOR_D8:
return "D8";
290 case OPERATOR_D9:
return "D9";
291 case OPERATOR_D10:
return "D10";
292 case OPERATOR_MAX:
return "Dn Operator";
294 return "INVALID EOperator";
302 KOKKOS_FORCEINLINE_FUNCTION
304 return ( operatorType == OPERATOR_VALUE ||
305 operatorType == OPERATOR_GRAD ||
306 operatorType == OPERATOR_CURL ||
307 operatorType == OPERATOR_DIV ||
308 operatorType == OPERATOR_D1 ||
309 operatorType == OPERATOR_D2 ||
310 operatorType == OPERATOR_D3 ||
311 operatorType == OPERATOR_D4 ||
312 operatorType == OPERATOR_D5 ||
313 operatorType == OPERATOR_D6 ||
314 operatorType == OPERATOR_D7 ||
315 operatorType == OPERATOR_D8 ||
316 operatorType == OPERATOR_D9 ||
317 operatorType == OPERATOR_D10 );
324 enum EFunctionSpace {
325 FUNCTION_SPACE_HGRAD = 0,
326 FUNCTION_SPACE_HCURL = 1,
327 FUNCTION_SPACE_HDIV = 2,
328 FUNCTION_SPACE_HVOL = 3,
329 FUNCTION_SPACE_VECTOR_HGRAD = 4,
330 FUNCTION_SPACE_TENSOR_HGRAD = 5,
334 KOKKOS_INLINE_FUNCTION
335 const char* EFunctionSpaceToString(
const EFunctionSpace space) {
337 case FUNCTION_SPACE_HGRAD:
return "H(grad)";
338 case FUNCTION_SPACE_HCURL:
return "H(curl)";
339 case FUNCTION_SPACE_HDIV:
return "H(div)";
340 case FUNCTION_SPACE_HVOL:
return "H(vol)";
341 case FUNCTION_SPACE_VECTOR_HGRAD:
return "Vector H(grad)";
342 case FUNCTION_SPACE_TENSOR_HGRAD:
return "Tensor H(grad)";
343 case FUNCTION_SPACE_MAX:
return "Max. Function space";
345 return "INVALID EFunctionSpace";
353 KOKKOS_FORCEINLINE_FUNCTION
355 return ( spaceType == FUNCTION_SPACE_HGRAD ||
356 spaceType == FUNCTION_SPACE_HCURL ||
357 spaceType == FUNCTION_SPACE_HDIV ||
358 spaceType == FUNCTION_SPACE_HVOL ||
359 spaceType == FUNCTION_SPACE_VECTOR_HGRAD ||
360 spaceType == FUNCTION_SPACE_TENSOR_HGRAD );
371 enum EDiscreteSpace {
372 DISCRETE_SPACE_COMPLETE = 0,
373 DISCRETE_SPACE_INCOMPLETE,
374 DISCRETE_SPACE_BROKEN,
378 KOKKOS_INLINE_FUNCTION
379 const char* EDiscreteSpaceToString(
const EDiscreteSpace space) {
381 case DISCRETE_SPACE_COMPLETE:
return "Complete";
382 case DISCRETE_SPACE_INCOMPLETE:
return "Incomplete";
383 case DISCRETE_SPACE_BROKEN:
return "Broken";
384 case DISCRETE_SPACE_MAX:
return "Max. Rec. Space";
386 return "INVALID EDiscreteSpace";
394 KOKKOS_FORCEINLINE_FUNCTION
396 return ( spaceType == DISCRETE_SPACE_COMPLETE ||
397 spaceType == DISCRETE_SPACE_INCOMPLETE ||
398 spaceType == DISCRETE_SPACE_BROKEN );
405 POINTTYPE_EQUISPACED = 0,
411 KOKKOS_INLINE_FUNCTION
412 const char* EPointTypeToString(
const EPointType pointType) {
414 case POINTTYPE_EQUISPACED:
return "Equispaced Points";
415 case POINTTYPE_WARPBLEND:
return "WarpBlend Points";
416 case POINTTYPE_GAUSS:
return "Gauss Points";
417 case POINTTYPE_DEFAULT:
return "Default Points";
419 return "INVALID EPointType";
426 KOKKOS_FORCEINLINE_FUNCTION
428 return ( pointType == POINTTYPE_EQUISPACED ||
429 pointType == POINTTYPE_WARPBLEND ||
430 pointType == POINTTYPE_GAUSS );
437 BASIS_FEM_DEFAULT = 0,
438 BASIS_FEM_HIERARCHICAL,
439 BASIS_FEM_LAGRANGIAN,
446 KOKKOS_INLINE_FUNCTION
447 const char* EBasisToString(
const EBasis basis) {
449 case BASIS_FEM_DEFAULT:
return "FEM Default";
450 case BASIS_FEM_HIERARCHICAL:
return "FEM Hierarchical";
451 case BASIS_FEM_LAGRANGIAN:
return "FEM FIAT";
452 case BASIS_FVD_DEFAULT:
return "FVD Default";
453 case BASIS_FVD_COVOLUME:
return "FVD Covolume";
454 case BASIS_FVD_MIMETIC:
return "FVD Mimetic";
455 case BASIS_MAX:
return "Max. Basis";
457 return "INVALID EBasis";
465 KOKKOS_FORCEINLINE_FUNCTION
467 return ( basisType == BASIS_FEM_DEFAULT ||
468 basisType == BASIS_FEM_HIERARCHICAL ||
469 basisType == BASIS_FEM_LAGRANGIAN ||
470 basisType == BASIS_FVD_DEFAULT ||
471 basisType == BASIS_FVD_COVOLUME ||
472 basisType == BASIS_FVD_MIMETIC );
KOKKOS_FORCEINLINE_FUNCTION bool isValidFunctionSpace(const EFunctionSpace spaceType)
Verifies validity of a function space enum.
KOKKOS_FORCEINLINE_FUNCTION bool isValidPointType(const EPointType pointType)
Verifies validity of a point type enum.
KOKKOS_FORCEINLINE_FUNCTION bool isValidPolyType(const EPolyType polytype)
Verifies validity of a PolyType enum.
KOKKOS_FORCEINLINE_FUNCTION bool isValidNorm(const ENorm normType)
Verifies validity of a Norm enum.
KOKKOS_FORCEINLINE_FUNCTION bool isValidBasis(const EBasis basisType)
Verifies validity of a basis enum.
KOKKOS_FORCEINLINE_FUNCTION bool isValidCoordinate(const ECoordinates coordinateType)
Verifies validity of a Coordinate enum.
KOKKOS_FORCEINLINE_FUNCTION bool isValidDiscreteSpace(const EDiscreteSpace spaceType)
Verifies validity of a discrete space enum.
KOKKOS_FORCEINLINE_FUNCTION bool isValidOperator(const EOperator operatorType)
Verifies validity of an operator enum.
static constexpr ordinal_type MaxCubatureDegreeTri
The maximum degree of the polynomial that can be integrated exactly by a direct triangle rule.
static constexpr ordinal_type MaxCubatureDegreePyr
The maximum degree of the polynomial that can be integrated exactly by a direct pyramid rule.
static constexpr ordinal_type MaxCubatureDegreeTet
The maximum degree of the polynomial that can be integrated exactly by a direct tetrahedron rule.
static constexpr ordinal_type MaxCubatureDegreeEdge
The maximum degree of the polynomial that can be integrated exactly by a direct edge rule.
static constexpr ordinal_type MaxOrder
The maximum reconstruction order.
static constexpr ordinal_type MaxIntegrationPoints
The maximum number of integration points for direct cubature rules.
static constexpr ordinal_type MaxNewton
Maximum number of Newton iterations used internally in methods such as computing the action of the in...
static constexpr ordinal_type MaxTensorComponents
Maximum number of tensor/Cartesian products that can be taken: this allows hypercube basis in 7D to b...
static constexpr ordinal_type MaxNumPtsPerBasisEval
The maximum number of points to eval in serial mode.
static constexpr ordinal_type MaxVectorComponents
Maximum number of components that a VectorData object will store – 66 corresponds to OPERATOR_D10 on ...
static constexpr ordinal_type MaxDimension
The maximum ambient space dimension.
static constexpr ordinal_type MaxDerivative
Maximum order of derivatives allowed in intrepid.
static constexpr ordinal_type MaxBasisFamilies
Maximum number of families that a VectorData object will store – 3 corresponds to H(div) and H(curl) ...