Intrepid
/usr/src/RPM/BUILD/trilinos-11.0.3/packages/intrepid/src/Discretization/TensorProductSpaceTools/Intrepid_TensorProductSpaceTools.hpp
Go to the documentation of this file.
00001 // @HEADER
00002 // ************************************************************************
00003 //
00004 //                           Intrepid Package
00005 //                 Copytest (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 
00035 #ifndef INTREPID_TENSORPRODUCTSPACETOOLS_HPP
00036 #define INTREPID_TENSORPRODUCTSPACETOOLS_HPP
00037 
00038 #include "Intrepid_Basis.hpp"
00039 #include "Intrepid_FieldContainer.hpp"
00040 #include "Teuchos_Array.hpp"
00041 #include "Teuchos_RCP.hpp"
00042 
00043 using Teuchos::Array;
00044 using Teuchos::RCP;
00045 using Intrepid::FieldContainer;
00046 
00047 namespace Intrepid {
00048 
00055 class TensorProductSpaceTools
00056 {
00057 public:
00072   template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
00073            class ArrayTypeBasis>
00074   static void evaluate(  ArrayTypeOut &vals ,
00075                          const ArrayTypeCoeffs &coeffs ,
00076                          const Array<RCP<ArrayTypeBasis> > &bases );
00077 
00094   template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
00095            class ArrayTypeBasis>
00096   static void evaluateCollocated(  ArrayTypeOut &vals ,
00097                                    const ArrayTypeCoeffs &coeffs ,
00098                                    const Array<RCP<ArrayTypeBasis> > &bases );
00099 
00115   template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
00116            class ArrayTypeBasis>
00117   static void evaluateGradient(  ArrayTypeOut &vals ,
00118                                  const ArrayTypeCoeffs &coeffs ,
00119                                  const Array<RCP<ArrayTypeBasis> > &bases ,
00120                                  const Array<RCP<ArrayTypeBasis> > &Dbases );
00121 
00139   template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
00140            class ArrayTypeBasis>
00141   static void evaluateGradientCollocated( ArrayTypeOut &vals ,
00142                                           const ArrayTypeCoeffs &coeffs ,
00143                                           const Array<RCP<ArrayTypeBasis> > &bases ,
00144                                           const Array<RCP<ArrayTypeBasis> > &Dbases );
00145 
00156   template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
00157            class ArrayTypeBasis, class ArrayTypeWeights>
00158   static void moments( ArrayTypeOut &vals ,
00159                        const ArrayTypeData &data ,
00160                        const Array<RCP<ArrayTypeBasis> > &basisVals ,
00161                        const Array<RCP<ArrayTypeWeights> > &wts );
00162 
00174   template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
00175            class ArrayTypeBasis, class ArrayTypeWeights>
00176   static void momentsCollocated( ArrayTypeOut &vals ,
00177                                  const ArrayTypeData &data ,
00178                                  const Array<RCP<ArrayTypeBasis> > &basisVals ,
00179                        const Array<RCP<ArrayTypeWeights> > &wts );
00180 
00193   template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
00194            class ArrayTypeBasis, class ArrayTypeWeights>
00195   static void momentsGrad( ArrayTypeOut &vals ,
00196                            const ArrayTypeData &data ,
00197                            const Array<RCP<ArrayTypeBasis> > &basisVals ,
00198                            const Array<RCP<ArrayTypeBasis> > &basisDVals ,
00199                            const Array<RCP<ArrayTypeWeights> > &wts );
00200 
00214   template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
00215            class ArrayTypeBasis, class ArrayTypeWeights>
00216   static void momentsGradCollocated( ArrayTypeOut &vals ,
00217                                      const ArrayTypeData &data ,
00218                                      const Array<RCP<ArrayTypeBasis> > &basisVals ,
00219                                      const Array<RCP<ArrayTypeBasis> > &basisDVals ,
00220                                      const Array<RCP<ArrayTypeWeights> > &wts );
00221 
00222 
00223 private:
00224   template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
00225            class ArrayTypeBasis>
00226   static void evaluate2D( ArrayTypeOut &vals ,
00227                           const ArrayTypeCoeffs &coeffs ,
00228                           const Array<RCP<ArrayTypeBasis> > &basisVals );
00229 
00230   template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
00231            class ArrayTypeBasis>
00232   static void evaluate3D( ArrayTypeOut &vals ,
00233                           const ArrayTypeCoeffs &coeffs ,
00234                           const Array<RCP<ArrayTypeBasis> > &basisDVals );
00235 
00236   template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
00237            class ArrayTypeBasis>
00238   static void evaluateCollocated2D( ArrayTypeOut &vals ,
00239                                     const ArrayTypeCoeffs &coeffs ,
00240                                     const Array<RCP<ArrayTypeBasis> > &basisVals );
00241 
00242   template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
00243            class ArrayTypeBasis>
00244   static void evaluateCollocated3D( ArrayTypeOut &vals ,
00245                                     const ArrayTypeCoeffs &coeffs ,
00246                                     const Array<RCP<ArrayTypeBasis> > &basisDVals );
00247 
00248   template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
00249            class ArrayTypeBasis>
00250   static void evaluateGradient2D( ArrayTypeOut &vals ,
00251                                   const ArrayTypeCoeffs &coeffs ,
00252                                   const Array<RCP<ArrayTypeBasis> > &basisVals ,
00253                                   const Array<RCP<ArrayTypeBasis> > &basisDVals );
00254 
00255   template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
00256            class ArrayTypeBasis>
00257   static void evaluateGradient3D( ArrayTypeOut &vals ,
00258                                   const ArrayTypeCoeffs &coeffs ,
00259                                   const Array<RCP<ArrayTypeBasis> > &basisVals ,
00260                                   const Array<RCP<ArrayTypeBasis> > &basisDVals );
00261 
00262 
00263   template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
00264            class ArrayTypeBasis>
00265   static void evaluateGradientCollocated2D( ArrayTypeOut &vals ,
00266                                   const ArrayTypeCoeffs &coeffs ,
00267                                   const Array<RCP<ArrayTypeBasis> > &basisVals ,
00268                                   const Array<RCP<ArrayTypeBasis> > &basisDVals );
00269 
00270   template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
00271            class ArrayTypeBasis>
00272   static void evaluateGradientCollocated3D( ArrayTypeOut &vals ,
00273                                   const ArrayTypeCoeffs &coeffs ,
00274                                   const Array<RCP<ArrayTypeBasis> > &basisVals ,
00275                                   const Array<RCP<ArrayTypeBasis> > &basisDVals );
00276 
00277   template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
00278            class ArrayTypeBasis, class ArrayTypeWeights>
00279   static void moments2D( ArrayTypeOut &vals ,
00280                          const ArrayTypeData &data ,
00281                          const Array<RCP<ArrayTypeBasis> > &basisVals ,
00282                          const Array<RCP<ArrayTypeWeights> > &wts );
00283 
00284   template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
00285            class ArrayTypeBasis, class ArrayTypeWeights>
00286   static void moments3D( ArrayTypeOut &vals ,
00287                          const ArrayTypeData &data ,
00288                          const Array<RCP<ArrayTypeBasis> > &basisVals ,
00289                          const Array<RCP<ArrayTypeWeights> > &wts );
00290 
00291   template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
00292            class ArrayTypeBasis, class ArrayTypeWeights>
00293   static void momentsCollocated2D( ArrayTypeOut &vals ,
00294                          const ArrayTypeData &data ,
00295                          const Array<RCP<ArrayTypeBasis> > &basisVals ,
00296                          const Array<RCP<ArrayTypeWeights> > &wts );
00297 
00298   template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
00299            class ArrayTypeBasis, class ArrayTypeWeights>
00300   static void momentsCollocated3D( ArrayTypeOut &vals ,
00301                          const ArrayTypeData &data ,
00302                          const Array<RCP<ArrayTypeBasis> > &basisVals ,
00303                          const Array<RCP<ArrayTypeWeights> > &wts );
00304 
00305   template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
00306            class ArrayTypeBasis, class ArrayTypeWeights>
00307   static void momentsGradCollocated2D( ArrayTypeOut &vals ,
00308                              const ArrayTypeData &data ,
00309                              const Array<RCP<ArrayTypeBasis> > &basisVals ,
00310                              const Array<RCP<ArrayTypeBasis> > &basisDVals ,
00311                              const Array<RCP<ArrayTypeWeights> > &wts );
00312 
00313   template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
00314            class ArrayTypeBasis, class ArrayTypeWeights>
00315   static void momentsGradCollocated3D( ArrayTypeOut &vals ,
00316                              const ArrayTypeData &data ,
00317                              const Array<RCP<ArrayTypeBasis> > &basisVals ,
00318                              const Array<RCP<ArrayTypeBasis> > &basisDVals ,
00319                              const Array<RCP<ArrayTypeWeights> > &wts );
00320 
00321  template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
00322            class ArrayTypeBasis, class ArrayTypeWeights>
00323   static void momentsGrad2D( ArrayTypeOut &vals ,
00324                              const ArrayTypeData &data ,
00325                              const Array<RCP<ArrayTypeBasis> > &basisVals ,
00326                              const Array<RCP<ArrayTypeBasis> > &basisDVals ,
00327                              const Array<RCP<ArrayTypeWeights> > &wts );
00328 
00329   template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
00330            class ArrayTypeBasis, class ArrayTypeWeights>
00331   static void momentsGrad3D( ArrayTypeOut &vals ,
00332                              const ArrayTypeData &data ,
00333                              const Array<RCP<ArrayTypeBasis> > &basisVals ,
00334                              const Array<RCP<ArrayTypeBasis> > &basisDVals ,
00335                              const Array<RCP<ArrayTypeWeights> > &wts );
00336 };
00337 
00338 } //end namespace Intrepid
00339 
00340 #include "Intrepid_TensorProductSpaceToolsDef.hpp"
00341 #endif