49 #ifndef INTREPID_INTREPID_TYPES_HPP
50 #define INTREPID_INTREPID_TYPES_HPP
52 #ifdef HAVE_INTREPID_DEBUG
53 #define INTREPID_VALIDATE( A ) A
55 #define INTREPID_VALIDATE( A )
58 #include <Teuchos_ScalarTraits.hpp>
63 #define INTREPID_MAX_ORDER 10
68 #define INTREPID_MAX_INTEGRATION_POINTS 1001
74 #define INTREPID_MAX_CUBATURE_DEGREE_EDGE 61
80 #define INTREPID_MAX_CUBATURE_DEGREE_TRI 20
86 #define INTREPID_MAX_CUBATURE_DEGREE_TET 20
92 #define INTREPID_MAX_CUBATURE_DEGREE_PYR 11
97 #define INTREPID_MAX_DIMENSION 3
103 #define INTREPID_MAX_NEWTON 15
108 #define INTREPID_MAX_DERIVATIVE 10
114 static const double INTREPID_EPSILON = std::abs(Teuchos::ScalarTraits<double>::eps());
118 static const double INTREPID_THRESHOLD = 10.0 * INTREPID_EPSILON;
122 static const double INTREPID_TOL = 10.0* INTREPID_THRESHOLD;
128 COORDINATES_CARTESIAN=0,
130 COORDINATES_CYLINDRICAL,
131 COORDINATES_SPHERICAL,
135 inline std::string ECoordinatesToString(ECoordinates coords) {
136 std::string retString;
138 case COORDINATES_CARTESIAN: retString =
"Cartesian";
break;
139 case COORDINATES_POLAR: retString =
"Polar";
break;
140 case COORDINATES_CYLINDRICAL: retString =
"Cylindrical";
break;
141 case COORDINATES_SPHERICAL: retString =
"Spherical";
break;
142 case COORDINATES_MAX: retString =
"Max. Coordinates";
break;
143 default: retString =
"INVALID ECoordinates";
153 inline int isValidCoordinate(ECoordinates coordinateType){
154 return( ( coordinateType == COORDINATES_CARTESIAN) ||
155 ( coordinateType == COORDINATES_POLAR) ||
156 ( coordinateType == COORDINATES_CYLINDRICAL) ||
157 ( coordinateType == COORDINATES_SPHERICAL) );
173 inline std::string ENormToString(ENorm norm) {
174 std::string retString;
176 case NORM_ONE: retString =
"1-Norm";
break;
177 case NORM_TWO: retString =
"2-Norm";
break;
178 case NORM_INF: retString =
"Infinity Norm";
break;
179 case NORM_FRO: retString =
"Frobenius Norm";
break;
180 case NORM_MAX: retString =
"Max. Norm";
break;
181 default: retString =
"INVALID ENorm";
191 inline int isValidNorm(ENorm normType){
192 return( (normType == NORM_ONE) ||
193 (normType == NORM_TWO) ||
194 (normType == NORM_INF) ||
195 (normType == NORM_FRO) ||
196 (normType == NORM_MAX) );
224 inline std::string EOperatorToString(EOperator op) {
225 std::string retString;
227 case OPERATOR_VALUE: retString =
"Value";
break;
228 case OPERATOR_GRAD: retString =
"Grad";
break;
229 case OPERATOR_CURL: retString =
"Curl";
break;
230 case OPERATOR_DIV: retString =
"Div";
break;
231 case OPERATOR_D1: retString =
"D1";
break;
232 case OPERATOR_D2: retString =
"D2";
break;
233 case OPERATOR_D3: retString =
"D3";
break;
234 case OPERATOR_D4: retString =
"D4";
break;
235 case OPERATOR_D5: retString =
"D5";
break;
236 case OPERATOR_D6: retString =
"D6";
break;
237 case OPERATOR_D7: retString =
"D7";
break;
238 case OPERATOR_D8: retString =
"D8";
break;
239 case OPERATOR_D9: retString =
"D9";
break;
240 case OPERATOR_D10: retString =
"D10";
break;
241 case OPERATOR_MAX: retString =
"Max. Operator";
break;
242 default: retString =
"INVALID EOperator";
247 inline EOperator & operator++(EOperator &type) {
248 return type =
static_cast<EOperator
>(type+1);
251 inline EOperator operator++(EOperator &type,
int) {
252 EOperator oldval = type;
257 inline EOperator & operator--(EOperator &type) {
258 return type =
static_cast<EOperator
>(type-1);
261 inline EOperator operator--(EOperator &type,
int) {
262 EOperator oldval = type;
272 inline int isValidOperator(
const EOperator operatorType){
273 return ( (operatorType == OPERATOR_VALUE) ||
274 (operatorType == OPERATOR_GRAD) ||
275 (operatorType == OPERATOR_CURL) ||
276 (operatorType == OPERATOR_DIV) ||
277 (operatorType == OPERATOR_D1) ||
278 (operatorType == OPERATOR_D2) ||
279 (operatorType == OPERATOR_D3) ||
280 (operatorType == OPERATOR_D4) ||
281 (operatorType == OPERATOR_D5) ||
282 (operatorType == OPERATOR_D6) ||
283 (operatorType == OPERATOR_D7) ||
284 (operatorType == OPERATOR_D8) ||
285 (operatorType == OPERATOR_D9) ||
286 (operatorType == OPERATOR_D10) );
295 FUNCTION_SPACE_HGRAD = 0,
296 FUNCTION_SPACE_HCURL,
299 FUNCTION_SPACE_VECTOR_HGRAD,
300 FUNCTION_SPACE_TENSOR_HGRAD,
304 inline std::string EFunctionSpaceToString(EFunctionSpace space) {
305 std::string retString;
307 case FUNCTION_SPACE_HGRAD: retString =
"H(grad)";
break;
308 case FUNCTION_SPACE_HCURL: retString =
"H(curl)";
break;
309 case FUNCTION_SPACE_HDIV: retString =
"H(div)";
break;
310 case FUNCTION_SPACE_HVOL: retString =
"H(vol)";
break;
311 case FUNCTION_SPACE_VECTOR_HGRAD: retString =
"Vector H(grad)";
break;
312 case FUNCTION_SPACE_TENSOR_HGRAD: retString =
"Tensor H(grad)";
break;
313 case FUNCTION_SPACE_MAX: retString =
"Max. Function space";
break;
314 default: retString =
"INVALID EFunctionSpace";
324 inline int isValidFunctionSpace(
const EFunctionSpace spaceType){
325 return ( (spaceType == FUNCTION_SPACE_HGRAD) ||
326 (spaceType == FUNCTION_SPACE_HCURL) ||
327 (spaceType == FUNCTION_SPACE_HDIV) ||
328 (spaceType == FUNCTION_SPACE_HVOL) ||
329 (spaceType == FUNCTION_SPACE_VECTOR_HGRAD) ||
330 (spaceType == FUNCTION_SPACE_TENSOR_HGRAD) );
345 DISCRETE_SPACE_COMPLETE = 0,
346 DISCRETE_SPACE_INCOMPLETE,
347 DISCRETE_SPACE_BROKEN,
351 inline std::string EDiscreteSpaceToString(EDiscreteSpace space) {
352 std::string retString;
354 case DISCRETE_SPACE_COMPLETE: retString =
"Complete";
break;
355 case DISCRETE_SPACE_INCOMPLETE: retString =
"Incomplete";
break;
356 case DISCRETE_SPACE_BROKEN: retString =
"Broken";
break;
357 case DISCRETE_SPACE_MAX: retString =
"Max. Rec. Space";
break;
358 default: retString =
"INVALID EDiscreteSpace";
368 inline int isValidDiscreteSpace(
const EDiscreteSpace spaceType){
369 return ( (spaceType == DISCRETE_SPACE_COMPLETE) ||
370 (spaceType == DISCRETE_SPACE_INCOMPLETE) ||
371 (spaceType ==DISCRETE_SPACE_BROKEN) );
379 POINTTYPE_EQUISPACED = 0,
381 POINTTYPE_SPECTRAL_OPEN,
385 inline std::string EPointTypeToString(EPointType pointType) {
386 std::string retString;
388 case POINTTYPE_EQUISPACED:
389 retString =
"Equispaced Points";
391 case POINTTYPE_WARPBLEND:
392 retString =
"WarpBlend Points";
394 case POINTTYPE_SPECTRAL:
395 retString =
"Spectral Points";
397 case POINTTYPE_SPECTRAL_OPEN:
398 retString =
"Open Spectral Points";
409 inline int isValidPointType(
const EPointType pointType ) {
410 return ( (pointType == POINTTYPE_EQUISPACED ) ||
411 (pointType == POINTTYPE_WARPBLEND ) );
419 BASIS_FEM_DEFAULT = 0,
420 BASIS_FEM_HIERARCHICAL,
428 inline std::string EBasisToString(EBasis basis) {
429 std::string retString;
431 case BASIS_FEM_DEFAULT: retString =
"FEM Default";
break;
432 case BASIS_FEM_HIERARCHICAL: retString =
"FEM Hierarchical";
break;
433 case BASIS_FEM_FIAT: retString =
"FEM FIAT";
break;
434 case BASIS_FVD_DEFAULT: retString =
"FVD Default";
break;
435 case BASIS_FVD_COVOLUME: retString =
"FVD Covolume";
break;
436 case BASIS_FVD_MIMETIC: retString =
"FVD Mimetic";
break;
437 case BASIS_MAX: retString =
"Max. Basis";
break;
438 default: retString =
"INVALID EBasis";
448 inline int isValidBasis(
const EBasis basisType){
449 return ( (basisType == BASIS_FEM_DEFAULT) ||
450 (basisType == BASIS_FEM_HIERARCHICAL) ||
451 (basisType == BASIS_FEM_FIAT) ||
452 (basisType == BASIS_FVD_DEFAULT) ||
453 (basisType == BASIS_FVD_COVOLUME) ||
454 (basisType == BASIS_FVD_MIMETIC) );
535 inline std::string ECompEngineToString(ECompEngine cEngine) {
536 std::string retString;
538 case COMP_CPP: retString =
"Native C++";
break;
539 case COMP_BLAS: retString =
"BLAS";
break;
540 case COMP_ENGINE_MAX: retString =
"Max. Comp. Engine";
break;
541 default: retString =
"INVALID ECompEngine";
546 inline ECompEngine & operator++(ECompEngine &type) {
547 return type =
static_cast<ECompEngine
>(type+1);
550 inline ECompEngine operator++(ECompEngine &type,
int) {
551 ECompEngine oldval = type;
556 inline ECompEngine & operator--(ECompEngine &type) {
557 return type =
static_cast<ECompEngine
>(type-1);
560 inline ECompEngine operator--(ECompEngine &type,
int) {
561 ECompEngine oldval = type;
572 inline int isValidCompEngine(
const ECompEngine compEngType){
573 return ( (compEngType == COMP_CPP) ||
574 (compEngType == COMP_BLAS) );
#define INTREPID_MAX_DIMENSION
The maximum ambient space dimension.
Template for the cubature rules used by Intrepid. Cubature template consists of cubature points and c...
#define INTREPID_MAX_INTEGRATION_POINTS
The maximum number of integration points for direct cubature rules.
double points_[INTREPID_MAX_INTEGRATION_POINTS][INTREPID_MAX_DIMENSION]
Array with the (X,Y,Z) coordinates of the cubature points.
double weights_[INTREPID_MAX_INTEGRATION_POINTS]
Array with the associated cubature weights.
int numPoints_
Number of cubature points stored in the template.