Intrepid
/usr/src/RPM/BUILD/trilinos10-10.6.4/packages/intrepid/src/Shared/Intrepid_ArrayTools.hpp
Go to the documentation of this file.
00001 // @HEADER
00002 // ************************************************************************
00003 //
00004 //                           Intrepid Package
00005 //                 Copyright (2007) Sandia Corporation
00006 //
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 //
00010 // This library is free software; you can redistribute it and/or modify
00011 // it under the terms of the GNU Lesser General Public License as
00012 // published by the Free Software Foundation; either version 2.1 of the
00013 // License, or (at your option) any later version.
00014 //
00015 // This library is distributed in the hope that it will be useful, but
00016 // WITHOUT ANY WARRANTY; without even the implied warranty of
00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00018 // Lesser General Public License for more details.
00019 //
00020 // You should have received a copy of the GNU Lesser General Public
00021 // License along with this library; if not, write to the Free Software
00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00023 // USA
00024 // Questions? Contact Pavel Bochev (pbboche@sandia.gov) or
00025 //                    Denis Ridzal (dridzal@sandia.gov).
00026 //
00027 // ************************************************************************
00028 // @HEADER
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   }; // end class ArrayTools
00771 
00772 } // end namespace Intrepid
00773 
00774 // include templated definitions
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