49 #ifndef __INTREPID2_ARRAYTOOLS_HPP__
50 #define __INTREPID2_ARRAYTOOLS_HPP__
52 #include "Intrepid2_ConfigDefs.hpp"
57 #include "Kokkos_Core.hpp"
76 template<
typename DeviceType>
78 using ExecSpaceType =
typename DeviceType::execution_space;
98 template<
typename outputFieldValueType,
class ...outputFieldProperties,
99 typename leftFieldValueType,
class ...leftFieldProperties,
100 typename rightFieldValueType,
class ...rightFieldProperties>
103 const Kokkos::DynRankView<leftFieldValueType, leftFieldProperties...> leftFields,
104 const Kokkos::DynRankView<rightFieldValueType, rightFieldProperties...> rightFields,
105 const bool sumInto =
false );
127 template<
typename outputFieldValueType,
class ...outputFieldProperties,
128 typename leftFieldValueType,
class ...leftFieldProperties,
129 typename rightFieldValueType,
class ...rightFieldProperties>
132 const Kokkos::DynRankView<leftFieldValueType, leftFieldProperties...> leftFields,
133 const Kokkos::DynRankView<rightFieldValueType, rightFieldProperties...> rightFields,
134 const bool sumInto =
false );
157 template<
typename outputFieldValueType,
class ...outputFieldProperties,
158 typename leftFieldValueType,
class ...leftFieldProperties,
159 typename rightFieldValueType,
class ...rightFieldProperties>
162 const Kokkos::DynRankView<leftFieldValueType, leftFieldProperties...> leftFields,
163 const Kokkos::DynRankView<rightFieldValueType, rightFieldProperties...> rightFields,
164 const bool sumInto =
false );
183 template<
typename outputFieldValueType,
class ...outputFieldProperties,
184 typename inputDataValueType,
class ...inputDataProperties,
185 typename inputFieldValueType,
class ...inputFieldProperties>
188 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
189 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
190 const bool sumInto =
false );
210 template<
typename outputFieldValueType,
class ...outputFieldProperties,
211 typename inputDataValueType,
class ...inputDataProperties,
212 typename inputFieldValueType,
class ...inputFieldProperties>
215 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
216 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
217 const bool sumInto =
false );
238 template<
typename outputFieldValueType,
class ...outputFieldProperties,
239 typename inputDataValueType,
class ...inputDataProperties,
240 typename inputFieldValueType,
class ...inputFieldProperties>
243 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
244 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
245 const bool sumInto =
false);
262 template<
typename outputDataValueType,
class ...outputDataProperties,
263 typename inputDataLeftValueType,
class ...inputDataLeftProperties,
264 typename inputDataRightValueType,
class ...inputDataRightProperties>
267 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
268 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
269 const bool sumInto =
false );
286 template<
typename outputDataValueType,
class ...outputDataProperties,
287 typename inputDataLeftValueType,
class ...inputDataLeftProperties,
288 typename inputDataRightValueType,
class ...inputDataRightProperties>
291 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
292 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
293 const bool sumInto =
false );
311 template<
typename outputDataValueType,
class ...outputDataProperties,
312 typename inputDataLeftValueType,
class ...inputDataLeftProperties,
313 typename inputDataRightValueType,
class ...inputDataRightProperties>
316 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
317 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
318 const bool sumInto =
false );
349 template<
typename outputFieldValueType,
class ...outputFieldProperties,
350 typename inputDataValueType,
class ...inputDataProperties,
351 typename inputFieldValueType,
class ...inputFieldProperties>
354 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
355 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
356 const bool reciprocal =
false );
386 template<
typename outputDataValueType,
class ...outputDataProperties,
387 typename inputDataLeftValueType,
class ...inputDataLeftProperties,
388 typename inputDataRightValueType,
class ...inputDataRightProperties>
391 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
392 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
393 const bool reciprocal =
false );
422 template<
typename outputFieldValueType,
class ...outputFieldProperties,
423 typename inputDataValueType,
class ...inputDataProperties,
424 typename inputFieldValueType,
class ...inputFieldProperties>
426 dotMultiplyDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
427 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
428 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
456 template<
typename outputDataValueType,
class ...outputDataProperties,
457 typename inputDataLeftValueType,
class ...inputDataLeftProperties,
458 typename inputDataRightValueType,
class ...inputDataRightProperties>
460 dotMultiplyDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
461 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
462 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight );
486 template<
typename outputFieldValueType,
class ...outputFieldProperties,
487 typename inputDataValueType,
class ...inputDataProperties,
488 typename inputFieldValueType,
class ...inputFieldProperties>
490 crossProductDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
491 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
492 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
514 template<
typename outputDataValueType,
class ...outputDataProperties,
515 typename inputDataLeftValueType,
class ...inputDataLeftProperties,
516 typename inputDataRightValueType,
class ...inputDataRightProperties>
518 crossProductDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
519 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
520 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight );
544 template<
typename outputFieldValueType,
class ...outputFieldProperties,
545 typename inputDataValueType,
class ...inputDataProperties,
546 typename inputFieldValueType,
class ...inputFieldProperties>
548 outerProductDataField( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
549 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
550 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
573 template<
typename outputDataValueType,
class ...outputDataProperties,
574 typename inputDataLeftValuetype,
class ...inputDataLeftProperties,
575 typename inputDataRightValueType,
class ...inputDataRightProperties>
577 outerProductDataData( Kokkos::DynRankView<outputDataValueType, outputDataProperties...> outputData,
578 const Kokkos::DynRankView<inputDataLeftValuetype, inputDataLeftProperties...> inputDataLeft,
579 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight );
616 template<
typename outputFieldValueType,
class ...outputFieldProperties,
617 typename inputDataValueType,
class ...inputDataProperties,
618 typename inputFieldValueType,
class ...inputFieldProperties>
621 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
622 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
623 const char transpose =
'N');
657 template<
typename outputDataValueType,
class ...outputDataProperties,
658 typename inputDataLeftValueType,
class ...inputDataLeftProperties,
659 typename inputDataRightValueType,
class ...inputDataRightProperties>
662 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
663 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
664 const char transpose =
'N');
700 template<
typename outputFieldValueType,
class ...outputFieldProperties,
701 typename inputDataValueType,
class ...inputDataProperties,
702 typename inputFieldValueType,
class ...inputFieldProperties>
705 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData,
706 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields,
707 const char transpose =
'N' );
742 template<
typename outputDataValueType,
class ...outputDataProperties,
743 typename inputDataLeftValueType,
class ...inputDataLeftProperties,
744 typename inputDataRightValueType,
class ...inputDataRightProperties>
747 const Kokkos::DynRankView<inputDataLeftValueType, inputDataLeftProperties...> inputDataLeft,
748 const Kokkos::DynRankView<inputDataRightValueType,inputDataRightProperties...> inputDataRight,
749 const char transpose =
'N' );
767 template<
typename outputFieldValueType,
class ...outputFieldProperties,
768 typename inputFieldValueType,
class ...inputFieldProperties>
770 cloneFields( Kokkos::DynRankView<outputFieldValueType,outputFieldProperties...> outputFields,
771 const Kokkos::DynRankView<inputFieldValueType, inputFieldProperties...> inputFields );
789 template<
typename outputDataValueType,
class ...outputDataProperties,
790 typename inputDataValueType,
class ...inputDataProperties>
792 cloneData( Kokkos::DynRankView<outputDataValueType,outputDataProperties...> outputData,
793 const Kokkos::DynRankView<inputDataValueType, inputDataProperties...> inputData );
804 template<
typename outputFieldValueType,
class ...outputFieldProperties,
805 typename leftFieldValueType,
class ...leftFieldProperties,
806 typename rightFieldValueType,
class ...rightFieldProperties>
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 );
813 template<
typename outputFieldValueType,
class ...outputFieldProperties,
814 typename inputDataValueType,
class ...inputDataProperties,
815 typename inputFieldValuetype,
class ...inputFieldProperties>
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 );
822 template<
typename outputDataValueType,
class ...outputDataProperties,
823 typename inputDataLeftValueType,
class ...inputDataLeftProperties,
824 typename inputDataRightValueType,
class ...inputDataRightProperties>
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 );
831 template<
typename outputValueType,
class ...outputProperties,
832 typename leftInputValueType,
class ...leftInputProperties,
833 typename rightInputValueType,
class ...rightInputProperties>
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 );
840 template<
typename outputValueType,
class ...outputProperties,
841 typename leftInputValueType,
class ...leftInputProperties,
842 typename rightInputValueType,
class ...rightInputProperties>
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 );
849 template<
typename outputValueType,
class ...outputProperties,
850 typename leftInputValueType,
class ...leftInputProperties,
851 typename rightInputValueType,
class ...rightInputProperties>
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 );
858 template<
typename outputValueType,
class ...outputProperties,
859 typename leftInputValueType,
class ...leftInputProperties,
860 typename rightInputValueType,
class ...rightInputProperties>
862 matvecProduct( Kokkos::DynRankView<outputValueType, outputProperties...> output,
863 const Kokkos::DynRankView<leftInputValueType, leftInputProperties...> leftInput,
864 const Kokkos::DynRankView<rightInputValueType,rightInputProperties...> rightInput,
866 const bool isTranspose );
868 template<
typename outputValueType,
class ...outputProperties,
869 typename leftInputValueType,
class ...leftInputProperties,
870 typename rightInputValueType,
class ...rightInputProperties>
872 matmatProduct( Kokkos::DynRankView<outputValueType, outputProperties...> output,
873 const Kokkos::DynRankView<leftInputValueType, leftInputProperties...> leftInput,
874 const Kokkos::DynRankView<rightInputValueType,rightInputProperties...> rightInput,
876 const bool isTranspose );
Contains definitions of custom data types in Intrepid2.
Header file for small functions used in Intrepid2.