15#ifndef __INTREPID2_ORIENTATIONTOOLS_HPP__
16#define __INTREPID2_ORIENTATIONTOOLS_HPP__
18#include "Intrepid2_ConfigDefs.hpp"
22#include "Shards_CellTopology.hpp"
23#include "Shards_BasicTopologies.hpp"
72#include "Teuchos_LAPACK.hpp"
96 template<
typename ValueType>
97 KOKKOS_INLINE_FUNCTION
101 const ordinal_type ort);
111 template<
typename ValueType>
112 KOKKOS_INLINE_FUNCTION
118 const ordinal_type ort);
128 template<
typename ValueType>
129 KOKKOS_INLINE_FUNCTION
135 const ordinal_type ort);
144 template<
typename outPointViewType,
145 typename refPointViewType>
149 const refPointViewType refPoints,
150 const shards::CellTopology cellTopo,
151 const ordinal_type cellOrt = 0);
160 template<
typename outPointViewType,
161 typename refPointViewType>
162 KOKKOS_INLINE_FUNCTION
165 const refPointViewType refPoints,
166 const unsigned cellTopoKey,
167 const ordinal_type cellOrt = 0);
175 template<
typename JacobianViewType>
176 KOKKOS_INLINE_FUNCTION
185 template<
typename JacobianViewType>
186 KOKKOS_INLINE_FUNCTION
195 template<
typename JacobianViewType>
196 KOKKOS_INLINE_FUNCTION
207 template<
typename JacobianViewType>
211 const shards::CellTopology cellTopo,
212 const ordinal_type cellOrt);
220 template<
typename JacobianViewType>
221 KOKKOS_INLINE_FUNCTION
224 const unsigned cellTopoKey,
225 const ordinal_type cellOrt);
235 template<
typename TanViewType,
typename ParamViewType>
236 KOKKOS_INLINE_FUNCTION
238 const ParamViewType subCellParametrization,
239 const unsigned subcellTopoKey,
240 const ordinal_type subCellOrd,
241 const ordinal_type ort);
254 template<
typename TanNormViewType,
typename ParamViewType>
255 KOKKOS_INLINE_FUNCTION
257 const ParamViewType subCellParametrization,
258 const unsigned subcellTopoKey,
259 const ordinal_type subCellOrd,
260 const ordinal_type ort);
272 template<
typename coordsViewType,
typename subcellCoordsViewType,
typename ParamViewType>
273 KOKKOS_INLINE_FUNCTION
275 const subcellCoordsViewType subCellCoords,
276 const ParamViewType subcellParametrization,
277 const unsigned subcellTopoKey,
278 const ordinal_type subCellOrd,
279 const ordinal_type ort);
297 template<
typename OutputViewType,
298 typename subcellBasisHostType,
299 typename cellBasisHostType>
303 const subcellBasisHostType& subcellBasis,
304 const cellBasisHostType& cellBasis,
305 const ordinal_type subcellId,
306 const ordinal_type subcellOrt,
307 const bool inverse =
false);
319 template<
typename OutputViewType,
320 typename subcellBasisHostType,
321 typename cellBasisHostType>
325 const subcellBasisHostType& subcellBasis,
326 const cellBasisHostType& cellBasis,
327 const ordinal_type subcellId,
328 const ordinal_type subcellOrt,
329 const bool inverse =
false);
342 template<
typename OutputViewType,
343 typename subcellBasisHostType,
344 typename cellBasisHostType>
348 const subcellBasisHostType& subcellBasis,
349 const cellBasisHostType& cellBasis,
350 const ordinal_type subcellId,
351 const ordinal_type subcellOrt,
352 const bool inverse =
false);
363 template<
typename OutputViewType,
364 typename cellBasisHostType>
368 const cellBasisHostType& cellBasis,
369 const ordinal_type cellOrt,
370 const bool inverse =
false);
378 template<
typename DeviceType>
393 using KeyType = std::pair<const std::string,ordinal_type>;
394 using OrtCoeffDataType = std::map<KeyType,Kokkos::View<double****,DeviceType> >;
396 static OrtCoeffDataType ortCoeffData;
397 static OrtCoeffDataType ortInvCoeffData;
402 using OrtOperatorDataType = std::map<std::pair<std::string,ordinal_type>,Kokkos::View<OrientationOperator<DeviceType>***,DeviceType> >;
409 using OrtStaticDoubleAllocationType = std::vector< Kokkos::View<double*,DeviceType> >;
410 using OrtStaticOrdinalAllocationType = std::vector< Kokkos::View<ordinal_type*,DeviceType> >;
412 static OrtStaticDoubleAllocationType doubleViewAllocations;
413 static OrtStaticOrdinalAllocationType ordinalViewAllocations;
417 template<
typename BasisHostType>
419 static CoeffMatrixDataViewType createCoeffMatrixInternal(
const BasisHostType* basis,
const bool invTrans =
false);
421 template<
typename BasisHostType>
425 template<
typename BasisHostType>
431 const std::vector<ordinal_type> &rowOffsets,
432 const std::vector<ordinal_type> &colIDs,
433 const std::vector<double> &weights,
434 const bool transpose);
438 template<
typename BasisHostType>
441 BasisHostType
const *cellBasis,
442 const bool inverse =
false);
446 template<
typename BasisHostType>
449 BasisHostType
const *cellBasis,
450 const bool inverse =
false);
454 template<
typename BasisHostType>
457 BasisHostType
const *cellBasis,
458 const bool inverse =
false);
462 template<
typename BasisHostType>
465 BasisHostType
const *cellBasis,
466 const bool inverse =
false);
473 template<
typename BasisType>
480 template<
typename BasisType>
492 template<
typename BasisType>
494 static std::tuple<OperatorViewType, OperatorViewType>
createOperators(
const BasisType* basis);
499 template<
typename BasisType>
514 template<
typename elemOrtValueType,
class ...elemOrtProperties,
515 typename elemNodeValueType,
class ...elemNodeProperties>
518 getOrientation(Kokkos::DynRankView<elemOrtValueType,elemOrtProperties...> elemOrts,
519 const Kokkos::DynRankView<elemNodeValueType,elemNodeProperties...> elemNodes,
520 const shards::CellTopology cellTopo,
521 bool isSide =
false);
531 template<
typename outputValueType,
class ...outputProperties,
532 typename inputValueType,
class ...inputProperties,
533 typename OrientationViewType,
538 const Kokkos::DynRankView<inputValueType, inputProperties...> input,
539 const OrientationViewType orts,
540 const BasisType * basis,
541 const bool transpose =
false);
549 template<
typename outputValueType,
class ...outputProperties,
550 typename inputValueType,
class ...inputProperties,
551 typename OrientationViewType,
556 const Kokkos::DynRankView<inputValueType, inputProperties...> input,
557 const OrientationViewType orts,
558 const BasisType * basis);
568 template<
typename outputValueType,
class ...outputProperties,
569 typename inputValueType,
class ...inputProperties,
570 typename OrientationViewType,
575 const Kokkos::DynRankView<inputValueType, inputProperties...> input,
576 const OrientationViewType orts,
577 const BasisType * basis,
578 const bool transpose =
false);
588 template<
typename outputValueType,
class ...outputProperties,
589 typename inputValueType,
class ...inputProperties,
590 typename OrientationViewType,
591 typename BasisTypeLeft,
592 typename BasisTypeRight>
596 const Kokkos::DynRankView<inputValueType, inputProperties...> input,
597 const OrientationViewType orts,
598 const BasisTypeLeft* basisLeft,
599 const BasisTypeRight* basisRight);
633#include "Intrepid2_OrientationToolsDefCoeffMatrix_HCURL.hpp"
Header file for the abstract base class Intrepid2::Basis.
Header file for the Intrepid2::Basis_HCURL_HEX_I1_FEM class.
Header file for the Intrepid2::Basis_HCURL_HEX_In_FEM class.
Header file for the Intrepid2::Basis_HCURL_QUAD_I1_FEM class.
Header file for the Intrepid2::Basis_HCURL_QUAD_In_FEM class.
Header file for the Intrepid2::Basis_HCURL_TET_I1_FEM class.
Header file for the Intrepid2::Basis_HCURL_TET_In_FEM class.
Header file for the Intrepid2::Basis_HCURL_TRI_I1_FEM class.
Header file for the Intrepid2::Basis_HCURL_TRI_In_FEM class.
Header file for the Intrepid2::Basis_HCURL_WEDGE_I1_FEM class.
Header file for the Intrepid2::Basis_HDIV_HEX_I1_FEM class.
Header file for the Intrepid2::Basis_HDIV_HEX_In_FEM class.
Header file for the Intrepid2::Basis_HDIV_QUAD_I1_FEM class.
Header file for the Intrepid2::Basis_HDIV_QUAD_In_FEM class.
Header file for the Intrepid2::Basis_HDIV_TET_I1_FEM class.
Header file for the Intrepid2::Basis_HDIV_TET_In_FEM class.
Header file for the Intrepid2::Basis_HDIV_TRI_I1_FEM class.
Header file for the Intrepid2::Basis_HDIV_TRI_In_FEM class.
Header file for the Intrepid2::Basis_HDIV_WEDGE_I1_FEM class.
Header file for the Intrepid2::Basis_HGRAD_HEX_Cn_FEM class.
Header file for the Intrepid2::Basis_HGRAD_LINE_Cn_FEM class.
Header file for the Intrepid2::Basis_HGRAD_QUAD_Cn_FEM class.
Header file for the Intrepid2::Basis_HGRAD_TET_Cn_FEM class.
Header file for the Intrepid2::Basis_HGRAD_TRI_Cn_FEM class.
Header file for the Intrepid2::Basis_HVOL_LINE_Cn_FEM class.
Header file for the Intrepid2::Basis_HVOL_TRI_Cn_FEM class.
Stateless classes that act as factories for two families of hierarchical bases. HierarchicalBasisFami...
Stateless class that acts as a factory for a family of nodal bases (hypercube topologies only at this...
Header file for the Intrepid2::OrientationOperator class.
Contains definitions of custom data types in Intrepid2.
Header function for Intrepid2::Util class and other utility functions.