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 
59 namespace 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...