00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00036 #ifndef INTREPID_ARRAYTOOLS_HPP
00037 #define INTREPID_ARRAYTOOLS_HPP
00038
00039 #include "Intrepid_ConfigDefs.hpp"
00040 #include "Intrepid_Types.hpp"
00041 #include "Teuchos_BLAS.hpp"
00042 #include "Teuchos_TestForException.hpp"
00043
00044 namespace Intrepid {
00045
00051 class ArrayTools {
00052 public:
00053
00074 template<class Scalar, class ArrayOutFields, class ArrayInFieldsLeft, class ArrayInFieldsRight>
00075 static void contractFieldFieldScalar(ArrayOutFields & outputFields,
00076 const ArrayInFieldsLeft & leftFields,
00077 const ArrayInFieldsRight & rightFields,
00078 const ECompEngine compEngine,
00079 const bool sumInto = false);
00080
00081
00103 template<class Scalar, class ArrayOutFields, class ArrayInFieldsLeft, class ArrayInFieldsRight>
00104 static void contractFieldFieldVector(ArrayOutFields & outputFields,
00105 const ArrayInFieldsLeft & leftFields,
00106 const ArrayInFieldsRight & rightFields,
00107 const ECompEngine compEngine,
00108 const bool sumInto = false);
00109
00110
00133 template<class Scalar, class ArrayOutFields, class ArrayInFieldsLeft, class ArrayInFieldsRight>
00134 static void contractFieldFieldTensor(ArrayOutFields & outputFields,
00135 const ArrayInFieldsLeft & leftFields,
00136 const ArrayInFieldsRight & rightFields,
00137 const ECompEngine compEngine,
00138 const bool sumInto = false);
00139
00140
00159 template<class Scalar, class ArrayOutFields, class ArrayInData, class ArrayInFields>
00160 static void contractDataFieldScalar(ArrayOutFields & outputFields,
00161 const ArrayInData & inputData,
00162 const ArrayInFields & inputFields,
00163 const ECompEngine compEngine,
00164 const bool sumInto = false);
00165
00166
00186 template<class Scalar, class ArrayOutFields, class ArrayInData, class ArrayInFields>
00187 static void contractDataFieldVector(ArrayOutFields & outputFields,
00188 const ArrayInData & inputData,
00189 const ArrayInFields & inputFields,
00190 const ECompEngine compEngine,
00191 const bool sumInto = false);
00192
00193
00214 template<class Scalar, class ArrayOutFields, class ArrayInData, class ArrayInFields>
00215 static void contractDataFieldTensor(ArrayOutFields & outputFields,
00216 const ArrayInData & inputData,
00217 const ArrayInFields & inputFields,
00218 const ECompEngine compEngine,
00219 const bool sumInto = false);
00220
00221
00238 template<class Scalar, class ArrayOutData, class ArrayInDataLeft, class ArrayInDataRight>
00239 static void contractDataDataScalar(ArrayOutData & outputData,
00240 const ArrayInDataLeft & inputDataLeft,
00241 const ArrayInDataRight & inputDataRight,
00242 const ECompEngine compEngine,
00243 const bool sumInto = false);
00244
00245
00262 template<class Scalar, class ArrayOutData, class ArrayInDataLeft, class ArrayInDataRight>
00263 static void contractDataDataVector(ArrayOutData & outputData,
00264 const ArrayInDataLeft & inputDataLeft,
00265 const ArrayInDataRight & inputDataRight,
00266 const ECompEngine compEngine,
00267 const bool sumInto = false);
00268
00269
00287 template<class Scalar, class ArrayOutData, class ArrayInDataLeft, class ArrayInDataRight>
00288 static void contractDataDataTensor(ArrayOutData & outputData,
00289 const ArrayInDataLeft & inputDataLeft,
00290 const ArrayInDataRight & inputDataRight,
00291 const ECompEngine compEngine,
00292 const bool sumInto = false);
00293
00294
00324 template<class Scalar, class ArrayOutFields, class ArrayInData, class ArrayInFields>
00325 static void scalarMultiplyDataField(ArrayOutFields & outputFields,
00326 const ArrayInData & inputData,
00327 ArrayInFields & inputFields,
00328 const bool reciprocal = false);
00329
00330
00359 template<class Scalar, class ArrayOutData, class ArrayInDataLeft, class ArrayInDataRight>
00360 static void scalarMultiplyDataData(ArrayOutData & outputData,
00361 ArrayInDataLeft & inputDataLeft,
00362 ArrayInDataRight & inputDataRight,
00363 const bool reciprocal = false);
00364
00365
00393 template<class Scalar, class ArrayOutFields, class ArrayInData, class ArrayInFields>
00394 static void dotMultiplyDataField(ArrayOutFields & outputFields,
00395 const ArrayInData & inputData,
00396 const ArrayInFields & inputFields);
00397
00398
00425 template<class Scalar, class ArrayOutData, class ArrayInDataLeft, class ArrayInDataRight>
00426 static void dotMultiplyDataData(ArrayOutData & outputData,
00427 const ArrayInDataLeft & inputDataLeft,
00428 const ArrayInDataRight & inputDataRight);
00429
00430
00452 template<class Scalar, class ArrayOutFields, class ArrayInData, class ArrayInFields>
00453 static void crossProductDataField(ArrayOutFields & outputFields,
00454 const ArrayInData & inputData,
00455 const ArrayInFields & inputFields);
00456
00457
00478 template<class Scalar, class ArrayOutData, class ArrayInDataLeft, class ArrayInDataRight>
00479 static void crossProductDataData(ArrayOutData & outputData,
00480 const ArrayInDataLeft & inputDataLeft,
00481 const ArrayInDataRight & inputDataRight);
00482
00483
00506 template<class Scalar, class ArrayOutFields, class ArrayInData, class ArrayInFields>
00507 static void outerProductDataField(ArrayOutFields & outputFields,
00508 const ArrayInData & inputData,
00509 const ArrayInFields & inputFields);
00510
00511
00533 template<class Scalar, class ArrayOutData, class ArrayInDataLeft, class ArrayInDataRight>
00534 static void outerProductDataData(ArrayOutData & outputData,
00535 const ArrayInDataLeft & inputDataLeft,
00536 const ArrayInDataRight & inputDataRight);
00537
00538
00574 template<class Scalar, class ArrayOutFields, class ArrayInData, class ArrayInFields>
00575 static void matvecProductDataField(ArrayOutFields & outputFields,
00576 const ArrayInData & inputData,
00577 const ArrayInFields & inputFields,
00578 const char transpose = 'N');
00579
00580
00581
00614 template<class Scalar, class ArrayOutData, class ArrayInDataLeft, class ArrayInDataRight>
00615 static void matvecProductDataData(ArrayOutData & outputData,
00616 const ArrayInDataLeft & inputDataLeft,
00617 const ArrayInDataRight & inputDataRight,
00618 const char transpose = 'N');
00619
00620
00621
00656 template<class Scalar, class ArrayOutFields, class ArrayInData, class ArrayInFields>
00657 static void matmatProductDataField(ArrayOutFields & outputFields,
00658 const ArrayInData & inputData,
00659 const ArrayInFields & inputFields,
00660 const char transpose = 'N');
00661
00662
00663
00697 template<class Scalar, class ArrayOutData, class ArrayInDataLeft, class ArrayInDataRight>
00698 static void matmatProductDataData(ArrayOutData & outputData,
00699 const ArrayInDataLeft & inputDataLeft,
00700 const ArrayInDataRight & inputDataRight,
00701 const char transpose = 'N');
00702
00703
00704
00721 template<class Scalar, class ArrayOutFields, class ArrayInFields>
00722 static void cloneFields(ArrayOutFields & outputFields,
00723 const ArrayInFields & inputFields);
00724
00725
00744 template<class Scalar, class ArrayOutFields, class ArrayInFactors, class ArrayInFields>
00745 static void cloneScaleFields(ArrayOutFields & outputFields,
00746 const ArrayInFactors & inputFactors,
00747 const ArrayInFields & inputFields);
00748
00749
00765 template<class Scalar, class ArrayInOutFields, class ArrayInFactors>
00766 static void scaleFields(ArrayInOutFields & inoutFields,
00767 const ArrayInFactors & inputFactors);
00768
00769
00770 };
00771
00772 }
00773
00774
00775 #include <Intrepid_ArrayToolsDefContractions.hpp>
00776 #include <Intrepid_ArrayToolsDefScalar.hpp>
00777 #include <Intrepid_ArrayToolsDefDot.hpp>
00778 #include <Intrepid_ArrayToolsDefTensor.hpp>
00779 #include <Intrepid_ArrayToolsDefCloneScale.hpp>
00780
00781 #endif