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 tensor multiply operations of the array tools class.
Definition file for scalar multiply operations of the array tools class.
Definition file for clone / scale operations of the array tools interface.
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 &quot;point&quot; and &quot;space&quot; dimensions P, D1, and D2 of two rank-5 containers with dimensions (...
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,D2), representing the values of a scalar, vector or a tensor field, into an output value container of size (C,F,P), (C,F,P,D1) or (C,F,P,D1,D2).
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 contractFieldFieldScalar(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties...> outputFields, const Kokkos::DynRankView< leftFieldValueType, leftFieldProperties...> leftFields, const Kokkos::DynRankView< rightFieldValueType, rightFieldProperties...> rightFields, const bool sumInto=false)
Contracts the &quot;point&quot; dimension P of two rank-3 containers with dimensions (C,L,P) and (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 contractDataFieldTensor(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties...> outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties...> inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties...> inputFields, const bool sumInto=false)
Contracts the &quot;point&quot; and &quot;space&quot; dimensions P, D1 and D2 of a rank-5 container and a rank-4 containe...
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 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 contractDataDataScalar(Kokkos::DynRankView< outputDataValueType, outputDataProperties...> outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties...> inputDataRight, const bool sumInto=false)
Contracts the &quot;point&quot; dimensions P of rank-2 containers with dimensions (C,P), and returns the result...
Definition file for contraction (integration) operations of the array tools class.
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 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 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,D2), representing the values of a scalar, vector or a tensor field, into an output value container of size (C,F,P), (C,F,P,D1) or (C,F,P,D1,D2).
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 contractDataFieldVector(Kokkos::DynRankView< outputFieldValueType, outputFieldProperties...> outputFields, const Kokkos::DynRankView< inputDataValueType, inputDataProperties...> inputData, const Kokkos::DynRankView< inputFieldValueType, inputFieldProperties...> inputFields, const bool sumInto=false)
Contracts the &quot;point&quot; and &quot;space&quot; dimensions P and D of a rank-4 container and a rank-3 container wit...
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 &quot;point&quot; dimensions P of a rank-3 containers and a rank-2 container with dimensions (C...
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 &quot;point&quot; and &quot;space&quot; dimensions P and D of rank-3 containers 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 ...
Contains definitions of custom data types in Intrepid2.
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 contractDataDataTensor(Kokkos::DynRankView< outputDataValueType, outputDataProperties...> outputData, const Kokkos::DynRankView< inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft, const Kokkos::DynRankView< inputDataRightValueType, inputDataRightProperties...> inputDataRight, const bool sumInto=false)
Contracts the &quot;point&quot; and &quot;space&quot; dimensions P, D1 and D2 of rank-4 containers with dimensions (C...
Definition file for dot-multiply operations of the array tools class.
Header file for small functions used in Intrepid2.
Utility class that provides methods for higher-order algebraic manipulation of user-defined arrays...
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 &quot;point&quot; and &quot;space&quot; dimensions P and D1 of two rank-4 containers with dimensions (C...
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 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...