Intrepid2
Intrepid2_FunctionSpaceTools.hpp
Go to the documentation of this file.
1// @HEADER
2// ************************************************************************
3//
4// Intrepid2 Package
5// Copyright (2007) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact Kyungjoo Kim (kyukim@sandia.gov), or
38// Mauro Perego (mperego@sandia.gov)
39//
40// ************************************************************************
41// @HEADER
42
49#ifndef __INTREPID2_FUNCTIONSPACETOOLS_HPP__
50#define __INTREPID2_FUNCTIONSPACETOOLS_HPP__
51
52#include "Intrepid2_ConfigDefs.hpp"
53
54#include "Shards_CellTopology.hpp"
55#include "Shards_BasicTopologies.hpp"
56
57#include "Intrepid2_Types.hpp"
58#include "Intrepid2_Utils.hpp"
59
60#include "Intrepid2_Kernels.hpp"
61
65
66#include "Intrepid2_Data.hpp"
69
70#include "Kokkos_Core.hpp"
71
72
73namespace Intrepid2 {
74
81 template<typename DeviceType>
83 using ExecSpaceType = typename DeviceType::execution_space;
84 using MemSpaceType = typename DeviceType::memory_space;
85 public:
129 template<class Scalar>
131 {
132 return TransformedBasisValues<Scalar,DeviceType>(jacobianInverse,refBasisGradValues);
133 }
134
174 template<class Scalar>
176 getHGRADtransformVALUE(const ordinal_type &numCells, const BasisValues<Scalar,DeviceType> &refBasisValues)
177 {
178 return TransformedBasisValues<Scalar,DeviceType>(numCells,refBasisValues);
179 }
180
220 template<class Scalar>
223 const BasisValues<Scalar,DeviceType> &refBasisValues )
224 {
225 return TransformedBasisValues<Scalar,DeviceType>(jacobianInverse,refBasisValues);
226 }
227
269 template<class Scalar>
271 getHCURLtransformCURL(const Data<Scalar,DeviceType> &jacobianDividedByJacobianDet,
272 const BasisValues<Scalar,DeviceType> &refBasisValues )
273 {
274 return TransformedBasisValues<Scalar,DeviceType>(jacobianDividedByJacobianDet,refBasisValues);
275 }
276
319 template<class Scalar>
322 const BasisValues<Scalar,DeviceType> &refBasisValues )
323 {
324 return TransformedBasisValues<Scalar,DeviceType>(jacobianDetInverse,refBasisValues);
325 }
326
369 template<class Scalar>
371 getHDIVtransformVALUE(const Data<Scalar,DeviceType> &jacobianDividedByJacobianDet,
372 const BasisValues<Scalar,DeviceType> &refBasisValues )
373 {
374 return TransformedBasisValues<Scalar,DeviceType>(jacobianDividedByJacobianDet,refBasisValues);
375 }
376
417 template<class Scalar>
420 const BasisValues<Scalar,DeviceType> &refBasisDivValues )
421 {
422 return TransformedBasisValues<Scalar,DeviceType>(jacobianDetInverse,refBasisDivValues);
423 }
424
465 template<class Scalar>
468 const BasisValues<Scalar,DeviceType> &refBasisValues )
469 {
470 return TransformedBasisValues<Scalar,DeviceType>(jacobianDetInverse,refBasisValues);
471 }
472
512 template<typename outputValueType, class ...outputProperties,
513 typename inputValueType, class ...inputProperties>
514 static void
515 HGRADtransformVALUE( Kokkos::DynRankView<outputValueType,outputProperties...> output,
516 const Kokkos::DynRankView<inputValueType, inputProperties...> input );
517
518
531 template<typename outputValueType, class ...outputProperties,
532 typename inputValueType, class ...inputProperties>
533 static void
534 mapHGradDataFromPhysToRef( Kokkos::DynRankView<outputValueType,outputProperties...> output,
535 const Kokkos::DynRankView<inputValueType, inputProperties...> input );
536
537
550 template<typename outputValueType, class ...outputProperties,
551 typename inputValueType, class ...inputProperties>
552 static void
553 mapHGradDataFromPhysSideToRefSide( Kokkos::DynRankView<outputValueType,outputProperties...> output,
554 const Kokkos::DynRankView<inputValueType, inputProperties...> input );
555
556
598 template<typename outputValValueType, class ...outputValProperties,
599 typename jacobianInverseValueType, class ...jacobianInverseProperties,
600 typename inputValValueType, class ...inputValProperties>
601 static void
602 HGRADtransformGRAD( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
603 const Kokkos::DynRankView<jacobianInverseValueType,jacobianInverseProperties...> jacobianInverse,
604 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
605
646 template<typename outputValValueType, class ...outputValProperties,
647 typename jacobianInverseValueType, class ...jacobianInverseProperties,
648 typename inputValValueType, class ...inputValProperties>
649 static void
650 HCURLtransformVALUE( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
651 const Kokkos::DynRankView<jacobianInverseValueType,jacobianInverseProperties...> jacobianInverse,
652 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
653
654
673 template<typename outputValValueType, class ...outputValProperties,
674 typename jacobianValueType, class ...jacobianProperties,
675 typename inputValValueType, class ...inputValProperties>
676 static void
677 mapHCurlDataFromPhysToRef( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
678 const Kokkos::DynRankView<jacobianValueType, jacobianProperties...> jacobian,
679 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
680
681
700 template<typename outputValValueType, class ...outputValProperties,
701 typename tangentsValueType, class ...tangentsProperties,
702 typename metricTensorInvValueType, class ...metricTensorInvProperties,
703 typename metricTensorDetValueType, class ...metricTensorDetProperties,
704 typename inputValValueType, class ...inputValProperties>
705 static void
707 Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
708 const Kokkos::DynRankView<tangentsValueType, tangentsProperties...> tangents,
709 const Kokkos::DynRankView<metricTensorInvValueType,metricTensorInvProperties...> metricTensorInv,
710 const Kokkos::DynRankView<metricTensorDetValueType,metricTensorDetProperties...> metricTensorDet,
711 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
712
713
731 template<typename outputValValueType, class ...outputValProperties,
732 typename jacobianDetValueType, class ...jacobianDetProperties,
733 typename inputValValueType, class ...inputValProperties>
734 static void
736 Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
737 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> metricTensorDet,
738 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
739
740
784 template<typename outputValValueType, class ...outputValProperties,
785 typename jacobianValueType, class ...jacobianProperties,
786 typename jacobianDetValueType, class ...jacobianDetProperties,
787 typename inputValValueType, class ...inputValProperties>
788 static void
789 HCURLtransformCURL( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
790 const Kokkos::DynRankView<jacobianValueType, jacobianProperties...> jacobian,
791 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
792 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
793
794
837 template<typename outputValValueType, class ...outputValProperties,
838 typename jacobianDetValueType, class ...jacobianDetProperties,
839 typename inputValValueType, class ...inputValProperties>
840 static void
841 HCURLtransformCURL( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
842 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
843 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
844
845
889 template<typename outputValValueType, class ...outputValProperties,
890 typename jacobianValueType, class ...jacobianProperties,
891 typename jacobianDetValueType, class ...jacobianDetProperties,
892 typename inputValValueType, class ...inputValProperties>
893 static void
894 HGRADtransformCURL( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
895 const Kokkos::DynRankView<jacobianValueType, jacobianProperties...> jacobian,
896 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
897 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
898
899
900
945 template<typename outputValValueType, class ...outputValProperties,
946 typename jacobianValueType, class ...jacobianProperties,
947 typename jacobianDetValueType, class ...jacobianDetProperties,
948 typename inputValValueType, class ...inputValProperties>
949 static void
950 HDIVtransformVALUE( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
951 const Kokkos::DynRankView<jacobianValueType, jacobianProperties...> jacobian,
952 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
953 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
954
955
975 template<typename outputValValueType, class ...outputValProperties,
976 typename jacobianInverseValueType, class ...jacobianInverseProperties,
977 typename jacobianDetValueType, class ...jacobianDetProperties,
978 typename inputValValueType, class ...inputValProperties>
979 static void
980 mapHDivDataFromPhysToRef( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
981 const Kokkos::DynRankView<jacobianInverseValueType, jacobianInverseProperties...> jacobianInv,
982 const Kokkos::DynRankView<jacobianDetValueType, jacobianDetProperties...> jacobianDet,
983 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
984
985
1004 template<typename outputValValueType, class ...outputValProperties,
1005 typename jacobianDetValueType, class ...jacobianDetProperties,
1006 typename inputValValueType, class ...inputValProperties>
1007 static void
1009 Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
1010 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> metricTensorDet,
1011 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
1012
1013
1055 template<typename outputValValueType, class ...outputValProperties,
1056 typename jacobianDetValueType, class ...jacobianDetProperties,
1057 typename inputValValueType, class ...inputValProperties>
1058 static void
1059 HDIVtransformDIV( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
1060 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
1061 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
1062
1103 template<typename outputValValueType, class ...outputValProperties,
1104 typename jacobianDetValueType, class ...jacobianDetProperties,
1105 typename inputValValueType, class ...inputValProperties>
1106 static void
1107 HVOLtransformVALUE( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
1108 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
1109 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
1110
1128 template<typename outputValValueType, class ...outputValProperties,
1129 typename jacobianDetValueType, class ...jacobianDetProperties,
1130 typename inputValValueType, class ...inputValProperties>
1131 static void
1132 mapHVolDataFromPhysToRef( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
1133 const Kokkos::DynRankView<jacobianDetValueType,jacobianDetProperties...> jacobianDet,
1134 const Kokkos::DynRankView<inputValValueType, inputValProperties...> inputVals );
1135
1149 template<typename outputValueValueType, class ...outputValueProperties,
1150 typename leftValueValueType, class ...leftValueProperties,
1151 typename rightValueValueType, class ...rightValueProperties>
1152 static void
1153 integrate( Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues,
1154 const Kokkos::DynRankView<leftValueValueType, leftValueProperties...> leftValues,
1155 const Kokkos::DynRankView<rightValueValueType, rightValueProperties...> rightValues,
1156 const bool sumInto = false);
1157
1188 template<typename outputValValueType, class ...outputValProperties,
1189 typename inputDetValueType, class ...inputDetPropertes,
1190 typename inputWeightValueType, class ...inputWeightPropertes>
1191 static bool
1192 computeCellMeasure( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
1193 const Kokkos::DynRankView<inputDetValueType, inputDetPropertes...> inputDet,
1194 const Kokkos::DynRankView<inputWeightValueType,inputWeightPropertes...> inputWeights );
1195
1242 template<typename outputValValueType, class ...outputValProperties,
1243 typename inputJacValueType, class ...inputJacProperties,
1244 typename inputWeightValueType, class ...inputWeightPropertes,
1245 typename scratchValueType, class ...scratchProperties>
1246 static void
1247 computeFaceMeasure( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
1248 const Kokkos::DynRankView<inputJacValueType, inputJacProperties...> inputJac,
1249 const Kokkos::DynRankView<inputWeightValueType,inputWeightPropertes...> inputWeights,
1250 const int whichFace,
1251 const shards::CellTopology parentCell,
1252 const Kokkos::DynRankView<scratchValueType, scratchProperties...> scratch );
1253
1298 template<typename outputValValueType, class ...outputValProperties,
1299 typename inputJacValueType, class ...inputJacProperties,
1300 typename inputWeightValueType, class ...inputWeightProperties,
1301 typename scratchValueType, class ...scratchProperties>
1302 static void
1303 computeEdgeMeasure( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
1304 const Kokkos::DynRankView<inputJacValueType, inputJacProperties...> inputJac,
1305 const Kokkos::DynRankView<inputWeightValueType,inputWeightProperties...> inputWeights,
1306 const int whichEdge,
1307 const shards::CellTopology parentCell,
1308 const Kokkos::DynRankView<scratchValueType, scratchProperties...> scratch );
1309
1318 template<typename outputValValueType, class ...outputValProperties,
1319 typename inputMeasureValueType, class ...inputMeasureProperties,
1320 typename inputValValueType, class ...inputValProperteis>
1321 static void
1322 multiplyMeasure( Kokkos::DynRankView<outputValValueType, outputValProperties...> outputVals,
1323 const Kokkos::DynRankView<inputMeasureValueType,inputMeasureProperties...> inputMeasure,
1324 const Kokkos::DynRankView<inputValValueType, inputValProperteis...> inputVals );
1325
1359 template<typename outputFieldValueType, class ...outputFieldProperties,
1360 typename inputDataValueType, class ...inputDataPropertes,
1361 typename inputFieldValueType, class ...inputFieldProperties>
1362 static void
1363 scalarMultiplyDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
1364 const Kokkos::DynRankView<inputDataValueType, inputDataPropertes...> inputData,
1365 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
1366 const bool reciprocal = false );
1367
1400 template<typename outputDataValuetype, class ...outputDataProperties,
1401 typename inputDataLeftValueType, class ...inputDataLeftProperties,
1402 typename inputDataRightValueType, class ...inputDataRightProperties>
1403 static void
1404 scalarMultiplyDataData( Kokkos::DynRankView<outputDataValuetype, outputDataProperties...> outputData,
1405 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
1406 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
1407 const bool reciprocal = false );
1408
1440 template<typename outputFieldValueType, class ...outputFieldProperties,
1441 typename inputDataValueType, class ...inputDataProperties,
1442 typename inputFieldValueType, class ...inputFieldProperties>
1443 static void
1444 dotMultiplyDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
1445 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
1446 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
1447
1478 template<typename outputDataValueType, class ...outputDataProperties,
1479 typename inputDataLeftValueType, class ...inputDataLeftProperties,
1480 typename inputDataRightValueType, class ...inputDataRightProperties>
1481 static void
1482 dotMultiplyDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
1483 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
1484 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight );
1485
1520 template<typename outputFieldValueType, class ...outputFieldProperties,
1521 typename inputDataValueType, class ...inputDataProperties,
1522 typename inputFieldValueType, class ...inputFieldProperties>
1523 static void
1524 vectorMultiplyDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
1525 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
1526 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
1527
1528
1562 template<typename outputDataValueType, class ...outputDataProperties,
1563 typename inputDataLeftValueType, class ...inputDataLeftProperties,
1564 typename inputDataRightValueType, class ...inputDataRightProperties>
1565 static void
1566 vectorMultiplyDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
1567 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
1568 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight );
1569
1620 template<typename outputFieldValueType, class ...outputFieldProperties,
1621 typename inputDataValueType, class ...inputDataProperties,
1622 typename inputFieldValueType, class ...inputFieldProperties>
1623 static void
1624 tensorMultiplyDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
1625 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
1626 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
1627 const char transpose = 'N');
1628
1678 template<typename outputDataValueType, class ...outputDataProperties,
1679 typename inputDataLeftValueType, class ...inputDataLeftProperties,
1680 typename inputDataRightValueType, class ...inputDataRightProperties>
1681 static void
1682 tensorMultiplyDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
1683 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
1684 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
1685 const char transpose = 'N' );
1686
1713 template<typename inoutOperatorValueType, class ...inoutOperatorProperties,
1714 typename fieldSignValueType, class ...fieldSignProperties>
1715 static void
1716 applyLeftFieldSigns( Kokkos::DynRankView<inoutOperatorValueType,inoutOperatorProperties...> inoutOperator,
1717 const Kokkos::DynRankView<fieldSignValueType, fieldSignProperties...> fieldSigns );
1718
1745 template<typename inoutOperatorValueType, class ...inoutOperatorProperties,
1746 typename fieldSignValueType, class ...fieldSignProperties>
1747 static void
1748 applyRightFieldSigns( Kokkos::DynRankView<inoutOperatorValueType,inoutOperatorProperties...> inoutOperator,
1749 const Kokkos::DynRankView<fieldSignValueType, fieldSignProperties...> fieldSigns );
1750
1751
1774 template<typename inoutFunctionValueType, class ...inoutFunctionProperties,
1775 typename fieldSignValueType, class ...fieldSignProperties>
1776 static void
1777 applyFieldSigns( Kokkos::DynRankView<inoutFunctionValueType,inoutFunctionProperties...> inoutFunction,
1778 const Kokkos::DynRankView<fieldSignValueType, fieldSignProperties...> fieldSigns );
1779
1780
1816 template<typename outputPointValueType, class ...outputPointProperties,
1817 typename inputCoeffValueType, class ...inputCoeffProperties,
1818 typename inputFieldValueType, class ...inputFieldProperties>
1819 static void
1820 evaluate( Kokkos::DynRankView<outputPointValueType,outputPointProperties...> outputPointVals,
1821 const Kokkos::DynRankView<inputCoeffValueType, inputCoeffProperties...> inputCoeffs,
1822 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
1823
1824 };
1825
1826} // end namespace Intrepid2
1827
1828// include templated definitions
1830
1831#endif
1832
1833/***************************************************************************************************
1834 ** **
1835 ** D O C U M E N T A T I O N P A G E S **
1836 ** **
1837 **************************************************************************************************/
1838
Header file for Intrepid2::ArrayTools class providing utilities for array operations.
Header file for the Intrepid2::CellTools class.
Defines the Data class, a wrapper around a Kokkos::View that allows data that is constant or repeatin...
Definition file for the Intrepid2::FunctionSpaceTools class.
Header file for small functions used in Intrepid2.
Header file for Intrepid2::RealSpaceTools class providing basic linear algebra functionality in 1D,...
Structure-preserving representation of transformed basis values; reference space values and transform...
Contains definitions of custom data types in Intrepid2.
Header function for Intrepid2::Util class and other utility functions.
Reference-space field values for a basis, designed to support typical vector-valued bases.
The data containers in Intrepid2 that support sum factorization and other reduced-data optimizations ...
Wrapper around a Kokkos::View that allows data that is constant or repeating in various logical dimen...
Defines expert-level interfaces for the evaluation of functions and operators in physical space (supp...
static TransformedBasisValues< Scalar, DeviceType > getHCURLtransformCURL2D(const Data< Scalar, DeviceType > &jacobianDetInverse, const BasisValues< Scalar, DeviceType > &refBasisValues)
Transformation of a 2D curl field in the H-curl space, defined at points on a reference cell,...
static void computeFaceMeasure(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< inputJacValueType, inputJacProperties... > inputJac, const Kokkos::DynRankView< inputWeightValueType, inputWeightPropertes... > inputWeights, const int whichFace, const shards::CellTopology parentCell, const Kokkos::DynRankView< scratchValueType, scratchProperties... > scratch)
Returns the weighted integration measures outputVals with dimensions (C,P) used for the computation o...
static void HVOLtransformVALUE(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< jacobianDetValueType, jacobianDetProperties... > jacobianDet, const Kokkos::DynRankView< inputValValueType, inputValProperties... > inputVals)
Transformation of a (scalar) value field in the H-vol space, defined at points on a reference cell,...
static TransformedBasisValues< Scalar, DeviceType > getHGRADtransformVALUE(const ordinal_type &numCells, const BasisValues< Scalar, DeviceType > &refBasisValues)
Transformation of a (scalar) value field in the H-grad space, defined at points on a reference cell,...
static void integrate(Kokkos::DynRankView< outputValueValueType, outputValueProperties... > outputValues, const Kokkos::DynRankView< leftValueValueType, leftValueProperties... > leftValues, const Kokkos::DynRankView< rightValueValueType, rightValueProperties... > rightValues, const bool sumInto=false)
Contracts leftValues and rightValues arrays on the point and possibly space dimensions and stores the...
static void applyRightFieldSigns(Kokkos::DynRankView< inoutOperatorValueType, inoutOperatorProperties... > inoutOperator, const Kokkos::DynRankView< fieldSignValueType, fieldSignProperties... > fieldSigns)
Applies right (column) signs, stored in the user-provided container fieldSigns and indexed by (C,...
static TransformedBasisValues< Scalar, DeviceType > getHCURLtransformVALUE(const Data< Scalar, DeviceType > &jacobianInverse, const BasisValues< Scalar, DeviceType > &refBasisValues)
Transformation of a (vector) value field in the H-curl space, defined at points on a reference cell,...
static void HGRADtransformGRAD(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< jacobianInverseValueType, jacobianInverseProperties... > jacobianInverse, const Kokkos::DynRankView< inputValValueType, inputValProperties... > inputVals)
Transformation of a gradient field in the H-grad space, defined at points on a reference cell,...
static void tensorMultiplyDataData(Kokkos::DynRankView< outputDataValueType, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties... > inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties... > inputDataRight, const char transpose='N')
Matrix-vector or matrix-matrix product of data and data; please read the description below.
static void HCURLtransformCURL(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< jacobianValueType, jacobianProperties... > jacobian, const Kokkos::DynRankView< jacobianDetValueType, jacobianDetProperties... > jacobianDet, const Kokkos::DynRankView< inputValValueType, inputValProperties... > inputVals)
Transformation of a 3D curl field in the H-curl space, defined at points on a reference cell,...
static void computeEdgeMeasure(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< inputJacValueType, inputJacProperties... > inputJac, const Kokkos::DynRankView< inputWeightValueType, inputWeightProperties... > inputWeights, const int whichEdge, const shards::CellTopology parentCell, const Kokkos::DynRankView< scratchValueType, scratchProperties... > scratch)
Returns the weighted integration measures outVals with dimensions (C,P) used for the computation of e...
static void mapHGradDataFromPhysToRef(Kokkos::DynRankView< outputValueType, outputProperties... > output, const Kokkos::DynRankView< inputValueType, inputProperties... > input)
Transformation of a (scalar) data in the H-grad space, defined in physical space, stored in the user-...
static void mapHDivDataDotNormalFromPhysSideToRefSide(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< jacobianDetValueType, jacobianDetProperties... > metricTensorDet, const Kokkos::DynRankView< inputValValueType, inputValProperties... > inputVals)
Transformation of HDIV data from physical side to reference side. It takes the input defined on phys...
static void dotMultiplyDataData(Kokkos::DynRankView< outputDataValueType, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties... > inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties... > inputDataRight)
Dot product of data and data; please read the description below.
static void multiplyMeasure(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< inputMeasureValueType, inputMeasureProperties... > inputMeasure, const Kokkos::DynRankView< inputValValueType, inputValProperteis... > inputVals)
Multiplies fields inputVals by weighted measures inputMeasure and returns the field array outputVals;...
static bool computeCellMeasure(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< inputDetValueType, inputDetPropertes... > inputDet, const Kokkos::DynRankView< inputWeightValueType, inputWeightPropertes... > inputWeights)
Returns the weighted integration measures outputVals with dimensions (C,P) used for the computation o...
static TransformedBasisValues< Scalar, DeviceType > getHGRADtransformGRAD(const Data< Scalar, DeviceType > &jacobianInverse, const BasisValues< Scalar, DeviceType > &refBasisGradValues)
Transformation of a gradient field in the H-grad space, defined at points on a reference cell,...
static void mapHGradDataFromPhysSideToRefSide(Kokkos::DynRankView< outputValueType, outputProperties... > output, const Kokkos::DynRankView< inputValueType, inputProperties... > input)
Transformation of a (scalar) data in the H-grad space, defined in physical space, stored in the user-...
static void HGRADtransformCURL(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< jacobianValueType, jacobianProperties... > jacobian, const Kokkos::DynRankView< jacobianDetValueType, jacobianDetProperties... > jacobianDet, const Kokkos::DynRankView< inputValValueType, inputValProperties... > inputVals)
Transformation of a 2D curl field in the H-grad space, defined at points on a reference cell,...
static void mapHCurlDataCrossNormalFromPhysSideToRefSide(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< tangentsValueType, tangentsProperties... > tangents, const Kokkos::DynRankView< metricTensorInvValueType, metricTensorInvProperties... > metricTensorInv, const Kokkos::DynRankView< metricTensorDetValueType, metricTensorDetProperties... > metricTensorDet, const Kokkos::DynRankView< inputValValueType, inputValProperties... > inputVals)
Transformation of 3D HCURL data from physical side to reference side. It takes the input vector defi...
static void mapHCurlDataFromPhysToRef(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< jacobianValueType, jacobianProperties... > jacobian, const Kokkos::DynRankView< inputValValueType, inputValProperties... > inputVals)
Transformation of a (vector) data in the H-curl space, defined in the physical space,...
static TransformedBasisValues< Scalar, DeviceType > getHDIVtransformDIV(const Data< Scalar, DeviceType > &jacobianDetInverse, const BasisValues< Scalar, DeviceType > &refBasisDivValues)
Transformation of a divergence field in the H-div space, defined at points on a reference cell,...
static void evaluate(Kokkos::DynRankView< outputPointValueType, outputPointProperties... > outputPointVals, const Kokkos::DynRankView< inputCoeffValueType, inputCoeffProperties... > inputCoeffs, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields)
Computes point values outPointVals of a discrete function specified by the basis inFields and coeffic...
static TransformedBasisValues< Scalar, DeviceType > getHCURLtransformCURL(const Data< Scalar, DeviceType > &jacobianDividedByJacobianDet, const BasisValues< Scalar, DeviceType > &refBasisValues)
Transformation of a 3D curl field in the H-curl space, defined at points on a reference cell,...
static void scalarMultiplyDataField(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataPropertes... > inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields, const bool reciprocal=false)
Scalar multiplication of data and fields; please read the description below.
static void dotMultiplyDataField(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties... > inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields)
Dot product of data and fields; please read the description below.
static void applyLeftFieldSigns(Kokkos::DynRankView< inoutOperatorValueType, inoutOperatorProperties... > inoutOperator, const Kokkos::DynRankView< fieldSignValueType, fieldSignProperties... > fieldSigns)
Applies left (row) signs, stored in the user-provided container fieldSigns and indexed by (C,...
static void applyFieldSigns(Kokkos::DynRankView< inoutFunctionValueType, inoutFunctionProperties... > inoutFunction, const Kokkos::DynRankView< fieldSignValueType, fieldSignProperties... > fieldSigns)
Applies field signs, stored in the user-provided container fieldSigns and indexed by (C,...
static TransformedBasisValues< Scalar, DeviceType > getHDIVtransformVALUE(const Data< Scalar, DeviceType > &jacobianDividedByJacobianDet, const BasisValues< Scalar, DeviceType > &refBasisValues)
Transformation of a (vector) value field in the H-div space, defined at points on a reference cell,...
static void HCURLtransformVALUE(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< jacobianInverseValueType, jacobianInverseProperties... > jacobianInverse, const Kokkos::DynRankView< inputValValueType, inputValProperties... > inputVals)
Transformation of a (vector) value field in the H-curl space, defined at points on a reference cell,...
static void vectorMultiplyDataData(Kokkos::DynRankView< outputDataValueType, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties... > inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties... > inputDataRight)
Cross or outer product of data and data; please read the description below.
static TransformedBasisValues< Scalar, DeviceType > getHVOLtransformVALUE(const Data< Scalar, DeviceType > &jacobianDetInverse, const BasisValues< Scalar, DeviceType > &refBasisValues)
Transformation of a (scalar) value field in the H-vol space, defined at points on a reference cell,...
static void vectorMultiplyDataField(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties... > inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields)
Cross or outer product of data and fields; please read the description below.
static void scalarMultiplyDataData(Kokkos::DynRankView< outputDataValuetype, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties... > inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties... > inputDataRight, const bool reciprocal=false)
Scalar multiplication of data and data; please read the description below.
static void HDIVtransformVALUE(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< jacobianValueType, jacobianProperties... > jacobian, const Kokkos::DynRankView< jacobianDetValueType, jacobianDetProperties... > jacobianDet, const Kokkos::DynRankView< inputValValueType, inputValProperties... > inputVals)
Transformation of a (vector) value field in the H-div space, defined at points on a reference cell,...
static void mapHDivDataFromPhysToRef(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< jacobianInverseValueType, jacobianInverseProperties... > jacobianInv, const Kokkos::DynRankView< jacobianDetValueType, jacobianDetProperties... > jacobianDet, const Kokkos::DynRankView< inputValValueType, inputValProperties... > inputVals)
Transformation of a (vector) data in the H-div space, defined in the physical space,...
static void mapHVolDataFromPhysToRef(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< jacobianDetValueType, jacobianDetProperties... > jacobianDet, const Kokkos::DynRankView< inputValValueType, inputValProperties... > inputVals)
Transformation of a (scalar) data in the H-vol space, defined in the physical space,...
static void HDIVtransformDIV(Kokkos::DynRankView< outputValValueType, outputValProperties... > outputVals, const Kokkos::DynRankView< jacobianDetValueType, jacobianDetProperties... > jacobianDet, const Kokkos::DynRankView< inputValValueType, inputValProperties... > inputVals)
Transformation of a divergence field in the H-div space, defined at points on a reference cell,...
static void tensorMultiplyDataField(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties... > inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields, const char transpose='N')
Matrix-vector or matrix-matrix product of data and fields; please read the description below.
static void HGRADtransformVALUE(Kokkos::DynRankView< outputValueType, outputProperties... > output, const Kokkos::DynRankView< inputValueType, inputProperties... > input)
Transformation of a (scalar) value field in the H-grad space, defined at points on a reference cell,...
Structure-preserving representation of transformed vector data; reference space values and transforma...