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 ExecSpaceType = void>
77  class ArrayTools {
78  public:
79 
97  template<typename outputFieldValueType, class ...outputFieldProperties,
98  typename leftFieldValueType, class ...leftFieldProperties,
99  typename rightFieldValueType, class ...rightFieldProperties>
100  static void
101  contractFieldFieldScalar( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
102  const Kokkos::DynRankView<leftFieldValueType, leftFieldProperties...> leftFields,
103  const Kokkos::DynRankView<rightFieldValueType, rightFieldProperties...> rightFields,
104  const bool sumInto = false );
105 
126  template<typename outputFieldValueType, class ...outputFieldProperties,
127  typename leftFieldValueType, class ...leftFieldProperties,
128  typename rightFieldValueType, class ...rightFieldProperties>
129  static void
130  contractFieldFieldVector( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
131  const Kokkos::DynRankView<leftFieldValueType, leftFieldProperties...> leftFields,
132  const Kokkos::DynRankView<rightFieldValueType, rightFieldProperties...> rightFields,
133  const bool sumInto = false );
134 
156  template<typename outputFieldValueType, class ...outputFieldProperties,
157  typename leftFieldValueType, class ...leftFieldProperties,
158  typename rightFieldValueType, class ...rightFieldProperties>
159  static void
160  contractFieldFieldTensor( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
161  const Kokkos::DynRankView<leftFieldValueType, leftFieldProperties...> leftFields,
162  const Kokkos::DynRankView<rightFieldValueType, rightFieldProperties...> rightFields,
163  const bool sumInto = false );
164 
182  template<typename outputFieldValueType, class ...outputFieldProperties,
183  typename inputDataValueType, class ...inputDataProperties,
184  typename inputFieldValueType, class ...inputFieldProperties>
185  static void
186  contractDataFieldScalar( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
187  const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
188  const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
189  const bool sumInto = false );
190 
209  template<typename outputFieldValueType, class ...outputFieldProperties,
210  typename inputDataValueType, class ...inputDataProperties,
211  typename inputFieldValueType, class ...inputFieldProperties>
212  static void
213  contractDataFieldVector( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
214  const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
215  const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
216  const bool sumInto = false );
217 
237  template<typename outputFieldValueType, class ...outputFieldProperties,
238  typename inputDataValueType, class ...inputDataProperties,
239  typename inputFieldValueType, class ...inputFieldProperties>
240  static void
241  contractDataFieldTensor( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
242  const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
243  const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
244  const bool sumInto = false);
245 
261  template<typename outputDataValueType, class ...outputDataProperties,
262  typename inputDataLeftValueType, class ...inputDataLeftProperties,
263  typename inputDataRightValueType, class ...inputDataRightProperties>
264  static void
265  contractDataDataScalar( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
266  const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
267  const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
268  const bool sumInto = false );
269 
285  template<typename outputDataValueType, class ...outputDataProperties,
286  typename inputDataLeftValueType, class ...inputDataLeftProperties,
287  typename inputDataRightValueType, class ...inputDataRightProperties>
288  static void
289  contractDataDataVector( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
290  const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
291  const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
292  const bool sumInto = false );
293 
310  template<typename outputDataValueType, class ...outputDataProperties,
311  typename inputDataLeftValueType, class ...inputDataLeftProperties,
312  typename inputDataRightValueType, class ...inputDataRightProperties>
313  static void
314  contractDataDataTensor( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
315  const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
316  const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
317  const bool sumInto = false );
318 
348  template<typename outputFieldValueType, class ...outputFieldProperties,
349  typename inputDataValueType, class ...inputDataProperties,
350  typename inputFieldValueType, class ...inputFieldProperties>
351  static void
352  scalarMultiplyDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
353  const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
354  const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
355  const bool reciprocal = false );
356 
385  template<typename outputDataValueType, class ...outputDataProperties,
386  typename inputDataLeftValueType, class ...inputDataLeftProperties,
387  typename inputDataRightValueType, class ...inputDataRightProperties>
388  static void
389  scalarMultiplyDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
390  const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
391  const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
392  const bool reciprocal = false );
393 
421  template<typename outputFieldValueType, class ...outputFieldProperties,
422  typename inputDataValueType, class ...inputDataProperties,
423  typename inputFieldValueType, class ...inputFieldProperties>
424  static void
425  dotMultiplyDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
426  const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
427  const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
428 
455  template<typename outputDataValueType, class ...outputDataProperties,
456  typename inputDataLeftValueType, class ...inputDataLeftProperties,
457  typename inputDataRightValueType, class ...inputDataRightProperties>
458  static void
459  dotMultiplyDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
460  const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
461  const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight );
462 
463 
485  template<typename outputFieldValueType, class ...outputFieldProperties,
486  typename inputDataValueType, class ...inputDataProperties,
487  typename inputFieldValueType, class ...inputFieldProperties>
488  static void
489  crossProductDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
490  const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
491  const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
492 
513  template<typename outputDataValueType, class ...outputDataProperties,
514  typename inputDataLeftValueType, class ...inputDataLeftProperties,
515  typename inputDataRightValueType, class ...inputDataRightProperties>
516  static void
517  crossProductDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
518  const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
519  const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight );
520 
543  template<typename outputFieldValueType, class ...outputFieldProperties,
544  typename inputDataValueType, class ...inputDataProperties,
545  typename inputFieldValueType, class ...inputFieldProperties>
546  static void
547  outerProductDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
548  const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
549  const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
550 
572  template<typename outputDataValueType, class ...outputDataProperties,
573  typename inputDataLeftValuetype, class ...inputDataLeftProperties,
574  typename inputDataRightValueType, class ...inputDataRightProperties>
575  static void
576  outerProductDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
577  const Kokkos::DynRankView<inputDataLeftValuetype, inputDataLeftProperties...> inputDataLeft,
578  const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight );
579 
615  template<typename outputFieldValueType, class ...outputFieldProperties,
616  typename inputDataValueType, class ...inputDataProperties,
617  typename inputFieldValueType, class ...inputFieldProperties>
618  static void
619  matvecProductDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
620  const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
621  const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
622  const char transpose = 'N');
623 
656  template<typename outputDataValueType, class ...outputDataProperties,
657  typename inputDataLeftValueType, class ...inputDataLeftProperties,
658  typename inputDataRightValueType, class ...inputDataRightProperties>
659  static void
660  matvecProductDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
661  const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
662  const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
663  const char transpose = 'N');
664 
699  template<typename outputFieldValueType, class ...outputFieldProperties,
700  typename inputDataValueType, class ...inputDataProperties,
701  typename inputFieldValueType, class ...inputFieldProperties>
702  static void
703  matmatProductDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
704  const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
705  const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
706  const char transpose = 'N' );
707 
741  template<typename outputDataValueType, class ...outputDataProperties,
742  typename inputDataLeftValueType, class ...inputDataLeftProperties,
743  typename inputDataRightValueType, class ...inputDataRightProperties>
744  static void
745  matmatProductDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
746  const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
747  const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
748  const char transpose = 'N' );
749 
766  template<typename outputFieldValueType, class ...outputFieldProperties,
767  typename inputFieldValueType, class ...inputFieldProperties>
768  static void
769  cloneFields( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
770  const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
771 
788  template<typename outputDataValueType, class ...outputDataProperties,
789  typename inputDataValueType, class ...inputDataProperties>
790  static void
791  cloneData( Kokkos::DynRankView<outputDataValueType,outputDataProperties...> outputData,
792  const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData );
793 
794  // =====================================================================================
795  // Internal universal implementations
796  //
797  //
798  private:
799 
800  class Internal {
801  public:
802 
803  template<typename outputFieldValueType, class ...outputFieldProperties,
804  typename leftFieldValueType, class ...leftFieldProperties,
805  typename rightFieldValueType, class ...rightFieldProperties>
806  static void
807  contractFieldField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
808  const Kokkos::DynRankView<leftFieldValueType, leftFieldProperties...> leftFields,
809  const Kokkos::DynRankView<rightFieldValueType, rightFieldProperties...> rightFields,
810  const bool sumInto );
811 
812  template<typename outputFieldValueType, class ...outputFieldProperties,
813  typename inputDataValueType, class ...inputDataProperties,
814  typename inputFieldValuetype, class ...inputFieldProperties>
815  static void
816  contractDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
817  const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
818  const Kokkos::DynRankView<inputFieldValuetype, inputFieldProperties...> inputFields,
819  const bool sumInto );
820 
821  template<typename outputDataValueType, class ...outputDataProperties,
822  typename inputDataLeftValueType, class ...inputDataLeftProperties,
823  typename inputDataRightValueType, class ...inputDataRightProperties>
824  static void
825  contractDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
826  const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
827  const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
828  const bool sumInto );
829 
830  template<typename outputValueType, class ...outputProperties,
831  typename leftInputValueType, class ...leftInputProperties,
832  typename rightInputValueType, class ...rightInputProperties>
833  static void
834  dotMultiply( Kokkos::DynRankView<outputValueType, outputProperties...> output,
835  const Kokkos::DynRankView<leftInputValueType, leftInputProperties...> leftInput,
836  const Kokkos::DynRankView<rightInputValueType,rightInputProperties...> rightInput,
837  const bool hasField );
838 
839  template<typename outputValueType, class ...outputProperties,
840  typename leftInputValueType, class ...leftInputProperties,
841  typename rightInputValueType, class ...rightInputProperties>
842  static void
843  crossProduct( Kokkos::DynRankView<outputValueType, outputProperties...> output,
844  const Kokkos::DynRankView<leftInputValueType, leftInputProperties...> leftInput,
845  const Kokkos::DynRankView<rightInputValueType,rightInputProperties...> rightInput,
846  const bool hasField );
847 
848  template<typename outputValueType, class ...outputProperties,
849  typename leftInputValueType, class ...leftInputProperties,
850  typename rightInputValueType, class ...rightInputProperties>
851  static void
852  outerProduct( Kokkos::DynRankView<outputValueType, outputProperties...> output,
853  const Kokkos::DynRankView<leftInputValueType, leftInputProperties...> leftInput,
854  const Kokkos::DynRankView<rightInputValueType,rightInputProperties...> rightInput,
855  const bool hasField );
856 
857  template<typename outputValueType, class ...outputProperties,
858  typename leftInputValueType, class ...leftInputProperties,
859  typename rightInputValueType, class ...rightInputProperties>
860  static void
861  matvecProduct( Kokkos::DynRankView<outputValueType, outputProperties...> output,
862  const Kokkos::DynRankView<leftInputValueType, leftInputProperties...> leftInput,
863  const Kokkos::DynRankView<rightInputValueType,rightInputProperties...> rightInput,
864  const bool hasField,
865  const bool isTranspose );
866 
867  template<typename outputValueType, class ...outputProperties,
868  typename leftInputValueType, class ...leftInputProperties,
869  typename rightInputValueType, class ...rightInputProperties>
870  static void
871  matmatProduct( Kokkos::DynRankView<outputValueType, outputProperties...> output,
872  const Kokkos::DynRankView<leftInputValueType, leftInputProperties...> leftInput,
873  const Kokkos::DynRankView<rightInputValueType,rightInputProperties...> rightInput,
874  const bool hasField,
875  const bool isTranspose );
876  };
877 
878  }; // end class ArrayTools
879 
880 } // end namespace Intrepid2
881 
882 // include templated definitions
888 
889 #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 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 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...
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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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,...