16 #ifndef __INTREPID2_FUNCTIONSPACETOOLS_HPP__
17 #define __INTREPID2_FUNCTIONSPACETOOLS_HPP__
19 #include "Intrepid2_ConfigDefs.hpp"
21 #include "Shards_CellTopology.hpp"
22 #include "Shards_BasicTopologies.hpp"
37 #include "Kokkos_Core.hpp"
48 template<
typename DeviceType>
50 using ExecSpaceType =
typename DeviceType::execution_space;
51 using MemSpaceType =
typename DeviceType::memory_space;
96 template<
class Scalar>
141 template<
class Scalar>
187 template<
class Scalar>
236 template<
class Scalar>
286 template<
class Scalar>
336 template<
class Scalar>
384 template<
class Scalar>
432 template<
class Scalar>
479 template<
typename outputValueType,
class ...outputProperties,
480 typename inputValueType,
class ...inputProperties>
483 const Kokkos::DynRankView<inputValueType, inputProperties...> input );
498 template<
typename outputValueType,
class ...outputProperties,
499 typename inputValueType,
class ...inputProperties>
502 const Kokkos::DynRankView<inputValueType, inputProperties...> input );
517 template<
typename outputValueType,
class ...outputProperties,
518 typename inputValueType,
class ...inputProperties>
521 const Kokkos::DynRankView<inputValueType, inputProperties...> input );
565 template<
typename OutputValViewType,
566 typename JacobianInverseViewType,
567 typename InputValViewType>
570 const JacobianInverseViewType jacobianInverse,
571 const InputValViewType inputVals );
613 template<
typename outputValValueType,
class ...outputValProperties,
614 typename jacobianInverseValueType,
class ...jacobianInverseProperties,
615 typename inputValValueType,
class ...inputValProperties>
617 HCURLtransformVALUE( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
618 const Kokkos::DynRankView<jacobianInverseValueType,jacobianInverseProperties...> jacobianInverse,
619 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
640 template<
typename outputValValueType,
class ...outputValProperties,
641 typename jacobianValueType,
class ...jacobianProperties,
642 typename inputValValueType,
class ...inputValProperties>
645 const Kokkos::DynRankView<jacobianValueType, jacobianProperties...> jacobian,
646 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
667 template<
typename outputValValueType,
class ...outputValProperties,
668 typename tangentsValueType,
class ...tangentsProperties,
669 typename metricTensorInvValueType,
class ...metricTensorInvProperties,
670 typename metricTensorDetValueType,
class ...metricTensorDetProperties,
671 typename inputValValueType,
class ...inputValProperties>
674 Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
675 const Kokkos::DynRankView<tangentsValueType, tangentsProperties...> tangents,
676 const Kokkos::DynRankView<metricTensorInvValueType,metricTensorInvProperties...> metricTensorInv,
677 const Kokkos::DynRankView<metricTensorDetValueType,metricTensorDetProperties...> metricTensorDet,
678 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
698 template<
typename outputValValueType,
class ...outputValProperties,
699 typename jacobianDetValueType,
class ...jacobianDetProperties,
700 typename inputValValueType,
class ...inputValProperties>
703 Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
704 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> metricTensorDet,
705 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
751 template<
typename outputValValueType,
class ...outputValProperties,
752 typename jacobianValueType,
class ...jacobianProperties,
753 typename jacobianDetValueType,
class ...jacobianDetProperties,
754 typename inputValValueType,
class ...inputValProperties>
756 HCURLtransformCURL( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
757 const Kokkos::DynRankView<jacobianValueType, jacobianProperties...> jacobian,
758 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
759 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
804 template<
typename outputValValueType,
class ...outputValProperties,
805 typename jacobianDetValueType,
class ...jacobianDetProperties,
806 typename inputValValueType,
class ...inputValProperties>
808 HCURLtransformCURL( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
809 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
810 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
856 template<
typename outputValValueType,
class ...outputValProperties,
857 typename jacobianValueType,
class ...jacobianProperties,
858 typename jacobianDetValueType,
class ...jacobianDetProperties,
859 typename inputValValueType,
class ...inputValProperties>
861 HGRADtransformCURL( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
862 const Kokkos::DynRankView<jacobianValueType, jacobianProperties...> jacobian,
863 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
864 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
912 template<
typename outputValValueType,
class ...outputValProperties,
913 typename jacobianValueType,
class ...jacobianProperties,
914 typename jacobianDetValueType,
class ...jacobianDetProperties,
915 typename inputValValueType,
class ...inputValProperties>
917 HDIVtransformVALUE( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
918 const Kokkos::DynRankView<jacobianValueType, jacobianProperties...> jacobian,
919 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
920 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
942 template<
typename outputValValueType,
class ...outputValProperties,
943 typename jacobianInverseValueType,
class ...jacobianInverseProperties,
944 typename jacobianDetValueType,
class ...jacobianDetProperties,
945 typename inputValValueType,
class ...inputValProperties>
948 const Kokkos::DynRankView<jacobianInverseValueType, jacobianInverseProperties...> jacobianInv,
949 const Kokkos::DynRankView<jacobianDetValueType, jacobianDetProperties...> jacobianDet,
950 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
971 template<
typename outputValValueType,
class ...outputValProperties,
972 typename jacobianDetValueType,
class ...jacobianDetProperties,
973 typename inputValValueType,
class ...inputValProperties>
976 Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
977 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> metricTensorDet,
978 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
1022 template<
typename outputValValueType,
class ...outputValProperties,
1023 typename jacobianDetValueType,
class ...jacobianDetProperties,
1024 typename inputValValueType,
class ...inputValProperties>
1026 HDIVtransformDIV( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
1027 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
1028 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
1070 template<
typename outputValValueType,
class ...outputValProperties,
1071 typename jacobianDetValueType,
class ...jacobianDetProperties,
1072 typename inputValValueType,
class ...inputValProperties>
1074 HVOLtransformVALUE( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
1075 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
1076 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
1095 template<
typename outputValValueType,
class ...outputValProperties,
1096 typename jacobianDetValueType,
class ...jacobianDetProperties,
1097 typename inputValValueType,
class ...inputValProperties>
1100 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
1101 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
1116 template<
typename outputValueValueType,
class ...outputValueProperties,
1117 typename leftValueValueType,
class ...leftValueProperties,
1118 typename rightValueValueType,
class ...rightValueProperties>
1120 integrate( Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues,
1121 const Kokkos::DynRankView<leftValueValueType, leftValueProperties...> leftValues,
1122 const Kokkos::DynRankView<rightValueValueType, rightValueProperties...> rightValues,
1123 const bool sumInto =
false);
1155 template<
typename OutputValViewType,
1156 typename InputDetViewType,
1157 typename InputWeightViewType>
1160 const InputDetViewType inputDet,
1161 const InputWeightViewType inputWeights );
1209 template<
typename outputValValueType,
class ...outputValProperties,
1210 typename inputJacValueType,
class ...inputJacProperties,
1211 typename inputWeightValueType,
class ...inputWeightPropertes,
1212 typename scratchValueType,
class ...scratchProperties>
1214 computeFaceMeasure( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
1215 const Kokkos::DynRankView<inputJacValueType, inputJacProperties...> inputJac,
1216 const Kokkos::DynRankView<inputWeightValueType,inputWeightPropertes...> inputWeights,
1217 const int whichFace,
1218 const shards::CellTopology parentCell,
1219 const Kokkos::DynRankView<scratchValueType, scratchProperties...> scratch );
1265 template<
typename outputValValueType,
class ...outputValProperties,
1266 typename inputJacValueType,
class ...inputJacProperties,
1267 typename inputWeightValueType,
class ...inputWeightProperties,
1268 typename scratchValueType,
class ...scratchProperties>
1270 computeEdgeMeasure( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
1271 const Kokkos::DynRankView<inputJacValueType, inputJacProperties...> inputJac,
1272 const Kokkos::DynRankView<inputWeightValueType,inputWeightProperties...> inputWeights,
1273 const int whichEdge,
1274 const shards::CellTopology parentCell,
1275 const Kokkos::DynRankView<scratchValueType, scratchProperties...> scratch );
1285 template<
typename outputValValueType,
class ...outputValProperties,
1286 typename inputMeasureValueType,
class ...inputMeasureProperties,
1287 typename inputValValueType,
class ...inputValProperteis>
1289 multiplyMeasure( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
1290 const Kokkos::DynRankView<inputMeasureValueType,inputMeasureProperties...> inputMeasure,
1291 const Kokkos::DynRankView<inputValValueType, inputValProperteis...> inputVals );
1326 template<
typename outputFieldValueType,
class ...outputFieldProperties,
1327 typename inputDataValueType,
class ...inputDataPropertes,
1328 typename inputFieldValueType,
class ...inputFieldProperties>
1331 const Kokkos::DynRankView<inputDataValueType, inputDataPropertes...> inputData,
1332 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
1333 const bool reciprocal =
false );
1367 template<
typename outputDataValuetype,
class ...outputDataProperties,
1368 typename inputDataLeftValueType,
class ...inputDataLeftProperties,
1369 typename inputDataRightValueType,
class ...inputDataRightProperties>
1372 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
1373 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
1374 const bool reciprocal =
false );
1407 template<
typename outputFieldValueType,
class ...outputFieldProperties,
1408 typename inputDataValueType,
class ...inputDataProperties,
1409 typename inputFieldValueType,
class ...inputFieldProperties>
1411 dotMultiplyDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
1412 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
1413 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
1445 template<
typename outputDataValueType,
class ...outputDataProperties,
1446 typename inputDataLeftValueType,
class ...inputDataLeftProperties,
1447 typename inputDataRightValueType,
class ...inputDataRightProperties>
1449 dotMultiplyDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
1450 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
1451 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight );
1487 template<
typename outputFieldValueType,
class ...outputFieldProperties,
1488 typename inputDataValueType,
class ...inputDataProperties,
1489 typename inputFieldValueType,
class ...inputFieldProperties>
1492 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
1493 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
1529 template<
typename outputDataValueType,
class ...outputDataProperties,
1530 typename inputDataLeftValueType,
class ...inputDataLeftProperties,
1531 typename inputDataRightValueType,
class ...inputDataRightProperties>
1534 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
1535 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight );
1587 template<
typename outputFieldValueType,
class ...outputFieldProperties,
1588 typename inputDataValueType,
class ...inputDataProperties,
1589 typename inputFieldValueType,
class ...inputFieldProperties>
1592 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
1593 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
1594 const char transpose =
'N');
1645 template<
typename outputDataValueType,
class ...outputDataProperties,
1646 typename inputDataLeftValueType,
class ...inputDataLeftProperties,
1647 typename inputDataRightValueType,
class ...inputDataRightProperties>
1650 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
1651 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
1652 const char transpose =
'N' );
1680 template<
typename inoutOperatorValueType,
class ...inoutOperatorProperties,
1681 typename fieldSignValueType,
class ...fieldSignProperties>
1683 applyLeftFieldSigns( Kokkos::DynRankView<inoutOperatorValueType,inoutOperatorProperties...> inoutOperator,
1684 const Kokkos::DynRankView<fieldSignValueType, fieldSignProperties...> fieldSigns );
1712 template<
typename inoutOperatorValueType,
class ...inoutOperatorProperties,
1713 typename fieldSignValueType,
class ...fieldSignProperties>
1715 applyRightFieldSigns( Kokkos::DynRankView<inoutOperatorValueType,inoutOperatorProperties...> inoutOperator,
1716 const Kokkos::DynRankView<fieldSignValueType, fieldSignProperties...> fieldSigns );
1741 template<
typename inoutFunctionValueType,
class ...inoutFunctionProperties,
1742 typename fieldSignValueType,
class ...fieldSignProperties>
1744 applyFieldSigns( Kokkos::DynRankView<inoutFunctionValueType,inoutFunctionProperties...> inoutFunction,
1745 const Kokkos::DynRankView<fieldSignValueType, fieldSignProperties...> fieldSigns );
1783 template<
typename outputPointValueType,
class ...outputPointProperties,
1784 typename inputCoeffValueType,
class ...inputCoeffProperties,
1785 typename inputFieldValueType,
class ...inputFieldProperties>
1787 evaluate( Kokkos::DynRankView<outputPointValueType,outputPointProperties...> outputPointVals,
1788 const Kokkos::DynRankView<inputCoeffValueType, inputCoeffProperties...> inputCoeffs,
1789 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
Defines the Data class, a wrapper around a Kokkos::View that allows data that is constant or repeatin...
Header function for Intrepid2::Util class and other utility functions.
The data containers in Intrepid2 that support sum factorization and other reduced-data optimizations ...
Reference-space field values for a basis, designed to support typical vector-valued bases...
Contains definitions of custom data types in Intrepid2.
Header file for small functions used in Intrepid2.