Intrepid2
Intrepid2_ArrayTools.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_ARRAYTOOLS_HPP__
50#define __INTREPID2_ARRAYTOOLS_HPP__
51
52#include "Intrepid2_ConfigDefs.hpp"
53#include "Intrepid2_Types.hpp"
54
55#include "Intrepid2_Kernels.hpp"
56
57#include "Kokkos_Core.hpp"
58
59namespace Intrepid2 {
60
76 template<typename DeviceType>
77 class ArrayTools {
78 using ExecSpaceType = typename DeviceType::execution_space;
79 public:
80
98 template<typename outputFieldValueType, class ...outputFieldProperties,
99 typename leftFieldValueType, class ...leftFieldProperties,
100 typename rightFieldValueType, class ...rightFieldProperties>
101 static void
102 contractFieldFieldScalar( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
103 const Kokkos::DynRankView<leftFieldValueType, leftFieldProperties...> leftFields,
104 const Kokkos::DynRankView<rightFieldValueType, rightFieldProperties...> rightFields,
105 const bool sumInto = false );
106
127 template<typename outputFieldValueType, class ...outputFieldProperties,
128 typename leftFieldValueType, class ...leftFieldProperties,
129 typename rightFieldValueType, class ...rightFieldProperties>
130 static void
131 contractFieldFieldVector( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
132 const Kokkos::DynRankView<leftFieldValueType, leftFieldProperties...> leftFields,
133 const Kokkos::DynRankView<rightFieldValueType, rightFieldProperties...> rightFields,
134 const bool sumInto = false );
135
157 template<typename outputFieldValueType, class ...outputFieldProperties,
158 typename leftFieldValueType, class ...leftFieldProperties,
159 typename rightFieldValueType, class ...rightFieldProperties>
160 static void
161 contractFieldFieldTensor( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
162 const Kokkos::DynRankView<leftFieldValueType, leftFieldProperties...> leftFields,
163 const Kokkos::DynRankView<rightFieldValueType, rightFieldProperties...> rightFields,
164 const bool sumInto = false );
165
183 template<typename outputFieldValueType, class ...outputFieldProperties,
184 typename inputDataValueType, class ...inputDataProperties,
185 typename inputFieldValueType, class ...inputFieldProperties>
186 static void
187 contractDataFieldScalar( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
188 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
189 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
190 const bool sumInto = false );
191
210 template<typename outputFieldValueType, class ...outputFieldProperties,
211 typename inputDataValueType, class ...inputDataProperties,
212 typename inputFieldValueType, class ...inputFieldProperties>
213 static void
214 contractDataFieldVector( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
215 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
216 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
217 const bool sumInto = false );
218
238 template<typename outputFieldValueType, class ...outputFieldProperties,
239 typename inputDataValueType, class ...inputDataProperties,
240 typename inputFieldValueType, class ...inputFieldProperties>
241 static void
242 contractDataFieldTensor( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
243 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
244 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
245 const bool sumInto = false);
246
262 template<typename outputDataValueType, class ...outputDataProperties,
263 typename inputDataLeftValueType, class ...inputDataLeftProperties,
264 typename inputDataRightValueType, class ...inputDataRightProperties>
265 static void
266 contractDataDataScalar( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
267 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
268 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
269 const bool sumInto = false );
270
286 template<typename outputDataValueType, class ...outputDataProperties,
287 typename inputDataLeftValueType, class ...inputDataLeftProperties,
288 typename inputDataRightValueType, class ...inputDataRightProperties>
289 static void
290 contractDataDataVector( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
291 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
292 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
293 const bool sumInto = false );
294
311 template<typename outputDataValueType, class ...outputDataProperties,
312 typename inputDataLeftValueType, class ...inputDataLeftProperties,
313 typename inputDataRightValueType, class ...inputDataRightProperties>
314 static void
315 contractDataDataTensor( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
316 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
317 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
318 const bool sumInto = false );
319
349 template<typename outputFieldValueType, class ...outputFieldProperties,
350 typename inputDataValueType, class ...inputDataProperties,
351 typename inputFieldValueType, class ...inputFieldProperties>
352 static void
353 scalarMultiplyDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
354 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
355 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
356 const bool reciprocal = false );
357
386 template<typename outputDataValueType, class ...outputDataProperties,
387 typename inputDataLeftValueType, class ...inputDataLeftProperties,
388 typename inputDataRightValueType, class ...inputDataRightProperties>
389 static void
390 scalarMultiplyDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
391 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
392 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
393 const bool reciprocal = false );
394
422 template<typename outputFieldValueType, class ...outputFieldProperties,
423 typename inputDataValueType, class ...inputDataProperties,
424 typename inputFieldValueType, class ...inputFieldProperties>
425 static void
426 dotMultiplyDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
427 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
428 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
429
456 template<typename outputDataValueType, class ...outputDataProperties,
457 typename inputDataLeftValueType, class ...inputDataLeftProperties,
458 typename inputDataRightValueType, class ...inputDataRightProperties>
459 static void
460 dotMultiplyDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
461 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
462 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight );
463
464
486 template<typename outputFieldValueType, class ...outputFieldProperties,
487 typename inputDataValueType, class ...inputDataProperties,
488 typename inputFieldValueType, class ...inputFieldProperties>
489 static void
490 crossProductDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
491 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
492 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
493
514 template<typename outputDataValueType, class ...outputDataProperties,
515 typename inputDataLeftValueType, class ...inputDataLeftProperties,
516 typename inputDataRightValueType, class ...inputDataRightProperties>
517 static void
518 crossProductDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
519 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
520 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight );
521
544 template<typename outputFieldValueType, class ...outputFieldProperties,
545 typename inputDataValueType, class ...inputDataProperties,
546 typename inputFieldValueType, class ...inputFieldProperties>
547 static void
548 outerProductDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
549 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
550 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
551
573 template<typename outputDataValueType, class ...outputDataProperties,
574 typename inputDataLeftValuetype, class ...inputDataLeftProperties,
575 typename inputDataRightValueType, class ...inputDataRightProperties>
576 static void
577 outerProductDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
578 const Kokkos::DynRankView<inputDataLeftValuetype, inputDataLeftProperties...> inputDataLeft,
579 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight );
580
616 template<typename outputFieldValueType, class ...outputFieldProperties,
617 typename inputDataValueType, class ...inputDataProperties,
618 typename inputFieldValueType, class ...inputFieldProperties>
619 static void
620 matvecProductDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
621 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
622 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
623 const char transpose = 'N');
624
657 template<typename outputDataValueType, class ...outputDataProperties,
658 typename inputDataLeftValueType, class ...inputDataLeftProperties,
659 typename inputDataRightValueType, class ...inputDataRightProperties>
660 static void
661 matvecProductDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
662 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
663 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
664 const char transpose = 'N');
665
700 template<typename outputFieldValueType, class ...outputFieldProperties,
701 typename inputDataValueType, class ...inputDataProperties,
702 typename inputFieldValueType, class ...inputFieldProperties>
703 static void
704 matmatProductDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
705 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
706 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
707 const char transpose = 'N' );
708
742 template<typename outputDataValueType, class ...outputDataProperties,
743 typename inputDataLeftValueType, class ...inputDataLeftProperties,
744 typename inputDataRightValueType, class ...inputDataRightProperties>
745 static void
746 matmatProductDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
747 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
748 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
749 const char transpose = 'N' );
750
767 template<typename outputFieldValueType, class ...outputFieldProperties,
768 typename inputFieldValueType, class ...inputFieldProperties>
769 static void
770 cloneFields( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
771 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
772
789 template<typename outputDataValueType, class ...outputDataProperties,
790 typename inputDataValueType, class ...inputDataProperties>
791 static void
792 cloneData( Kokkos::DynRankView<outputDataValueType,outputDataProperties...> outputData,
793 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData );
794
795 // =====================================================================================
796 // Internal universal implementations
797 //
798 //
799 private:
800
801 class Internal {
802 public:
803
804 template<typename outputFieldValueType, class ...outputFieldProperties,
805 typename leftFieldValueType, class ...leftFieldProperties,
806 typename rightFieldValueType, class ...rightFieldProperties>
807 static void
808 contractFieldField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
809 const Kokkos::DynRankView<leftFieldValueType, leftFieldProperties...> leftFields,
810 const Kokkos::DynRankView<rightFieldValueType, rightFieldProperties...> rightFields,
811 const bool sumInto );
812
813 template<typename outputFieldValueType, class ...outputFieldProperties,
814 typename inputDataValueType, class ...inputDataProperties,
815 typename inputFieldValuetype, class ...inputFieldProperties>
816 static void
817 contractDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
818 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
819 const Kokkos::DynRankView<inputFieldValuetype, inputFieldProperties...> inputFields,
820 const bool sumInto );
821
822 template<typename outputDataValueType, class ...outputDataProperties,
823 typename inputDataLeftValueType, class ...inputDataLeftProperties,
824 typename inputDataRightValueType, class ...inputDataRightProperties>
825 static void
826 contractDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
827 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
828 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
829 const bool sumInto );
830
831 template<typename outputValueType, class ...outputProperties,
832 typename leftInputValueType, class ...leftInputProperties,
833 typename rightInputValueType, class ...rightInputProperties>
834 static void
835 dotMultiply( Kokkos::DynRankView<outputValueType, outputProperties...> output,
836 const Kokkos::DynRankView<leftInputValueType, leftInputProperties...> leftInput,
837 const Kokkos::DynRankView<rightInputValueType,rightInputProperties...> rightInput,
838 const bool hasField );
839
840 template<typename outputValueType, class ...outputProperties,
841 typename leftInputValueType, class ...leftInputProperties,
842 typename rightInputValueType, class ...rightInputProperties>
843 static void
844 crossProduct( Kokkos::DynRankView<outputValueType, outputProperties...> output,
845 const Kokkos::DynRankView<leftInputValueType, leftInputProperties...> leftInput,
846 const Kokkos::DynRankView<rightInputValueType,rightInputProperties...> rightInput,
847 const bool hasField );
848
849 template<typename outputValueType, class ...outputProperties,
850 typename leftInputValueType, class ...leftInputProperties,
851 typename rightInputValueType, class ...rightInputProperties>
852 static void
853 outerProduct( Kokkos::DynRankView<outputValueType, outputProperties...> output,
854 const Kokkos::DynRankView<leftInputValueType, leftInputProperties...> leftInput,
855 const Kokkos::DynRankView<rightInputValueType,rightInputProperties...> rightInput,
856 const bool hasField );
857
858 template<typename outputValueType, class ...outputProperties,
859 typename leftInputValueType, class ...leftInputProperties,
860 typename rightInputValueType, class ...rightInputProperties>
861 static void
862 matvecProduct( Kokkos::DynRankView<outputValueType, outputProperties...> output,
863 const Kokkos::DynRankView<leftInputValueType, leftInputProperties...> leftInput,
864 const Kokkos::DynRankView<rightInputValueType,rightInputProperties...> rightInput,
865 const bool hasField,
866 const bool isTranspose );
867
868 template<typename outputValueType, class ...outputProperties,
869 typename leftInputValueType, class ...leftInputProperties,
870 typename rightInputValueType, class ...rightInputProperties>
871 static void
872 matmatProduct( Kokkos::DynRankView<outputValueType, outputProperties...> output,
873 const Kokkos::DynRankView<leftInputValueType, leftInputProperties...> leftInput,
874 const Kokkos::DynRankView<rightInputValueType,rightInputProperties...> rightInput,
875 const bool hasField,
876 const bool isTranspose );
877 };
878
879 }; // end class ArrayTools
880
881} // end namespace Intrepid2
882
883// include templated definitions
889
890#endif
Definition file for clone / scale operations of the array tools interface.
Definition file for contraction (integration) operations of the array tools class.
Definition file for dot-multiply operations of the array tools class.
Definition file for scalar multiply operations of the array tools class.
Definition file for tensor multiply operations of the array tools class.
Header file for small functions used in Intrepid2.
Contains definitions of custom data types in Intrepid2.
Utility class that provides methods for higher-order algebraic manipulation of user-defined arrays,...
static void contractFieldFieldTensor(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< leftFieldValueType, leftFieldProperties... > leftFields, const Kokkos::DynRankView< rightFieldValueType, rightFieldProperties... > rightFields, const bool sumInto=false)
Contracts the "point" and "space" dimensions P, D1, and D2 of two rank-5 containers with dimensions (...
static void contractDataDataVector(Kokkos::DynRankView< outputDataValueType, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties... > inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties... > inputDataRight, const bool sumInto=false)
Contracts the "point" and "space" dimensions P and D of rank-3 containers with dimensions (C,...
static void scalarMultiplyDataField(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties... > inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields, const bool reciprocal=false)
There are two use cases: (1) multiplies a rank-3, 4, or 5 container inputFields with dimensions (C,...
static void cloneData(Kokkos::DynRankView< outputDataValueType, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataValueType, inputDataProperties... > inputData)
Replicates a rank-2, 3, or 4 container with dimensions (F,P), (F,P,D1) or (F,P,D1,...
static void crossProductDataField(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties... > inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields)
There are two use cases: (1) cross product of a rank-4 container inputFields with dimensions (C,...
static void matmatProductDataField(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties... > inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields, const char transpose='N')
There are two use cases: (1) matrix-matrix product of a rank-5 container inputFields with dimensions ...
static void outerProductDataData(Kokkos::DynRankView< outputDataValueType, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataLeftValuetype, inputDataLeftProperties... > inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties... > inputDataRight)
There are two use cases: (1) outer product of a rank-3 container inputDataRight with dimensions (C,...
static void matmatProductDataData(Kokkos::DynRankView< outputDataValueType, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties... > inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties... > inputDataRight, const char transpose='N')
There are two use cases: (1) matrix-matrix product of a rank-4 container inputDataRight with dimensio...
static void matvecProductDataData(Kokkos::DynRankView< outputDataValueType, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties... > inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties... > inputDataRight, const char transpose='N')
There are two use cases: (1) matrix-vector product of a rank-3 container inputDataRight with dimensio...
static void contractFieldFieldScalar(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< leftFieldValueType, leftFieldProperties... > leftFields, const Kokkos::DynRankView< rightFieldValueType, rightFieldProperties... > rightFields, const bool sumInto=false)
Contracts the "point" dimension P of two rank-3 containers with dimensions (C,L,P) and (C,...
static void contractDataFieldScalar(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties... > inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields, const bool sumInto=false)
Contracts the "point" dimensions P of a rank-3 containers and a rank-2 container with dimensions (C,...
static void contractDataDataTensor(Kokkos::DynRankView< outputDataValueType, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties... > inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties... > inputDataRight, const bool sumInto=false)
Contracts the "point" and "space" dimensions P, D1 and D2 of rank-4 containers with dimensions (C,...
static void dotMultiplyDataData(Kokkos::DynRankView< outputDataValueType, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties... > inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties... > inputDataRight)
There are two use cases: (1) dot product of a rank-2, 3 or 4 container inputDataRight with dimensions...
static void contractDataFieldVector(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties... > inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields, const bool sumInto=false)
Contracts the "point" and "space" dimensions P and D of a rank-4 container and a rank-3 container wit...
static void outerProductDataField(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties... > inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields)
There are two use cases: (1) outer product of a rank-4 container inputFields with dimensions (C,...
static void matvecProductDataField(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties... > inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields, const char transpose='N')
There are two use cases: (1) matrix-vector product of a rank-4 container inputFields with dimensions ...
static void contractDataFieldTensor(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties... > inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields, const bool sumInto=false)
Contracts the "point" and "space" dimensions P, D1 and D2 of a rank-5 container and a rank-4 containe...
static void dotMultiplyDataField(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties... > inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields)
There are two use cases: (1) dot product of a rank-3, 4 or 5 container inputFields with dimensions (C...
static void contractFieldFieldVector(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< leftFieldValueType, leftFieldProperties... > leftFields, const Kokkos::DynRankView< rightFieldValueType, rightFieldProperties... > rightFields, const bool sumInto=false)
Contracts the "point" and "space" dimensions P and D1 of two rank-4 containers with dimensions (C,...
static void scalarMultiplyDataData(Kokkos::DynRankView< outputDataValueType, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties... > inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties... > inputDataRight, const bool reciprocal=false)
There are two use cases: (1) multiplies a rank-2, 3, or 4 container inputDataRight with dimensions (C...
static void crossProductDataData(Kokkos::DynRankView< outputDataValueType, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties... > inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties... > inputDataRight)
There are two use cases: (1) cross product of a rank-3 container inputDataRight with dimensions (C,...
static void cloneFields(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties... > outputFields, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties... > inputFields)
Replicates a rank-2, 3, or 4 container with dimensions (F,P), (F,P,D1) or (F,P,D1,...
static void contractDataDataScalar(Kokkos::DynRankView< outputDataValueType, outputDataProperties... > outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties... > inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties... > inputDataRight, const bool sumInto=false)
Contracts the "point" dimensions P of rank-2 containers with dimensions (C,P), and returns the result...