|
Intrepid
|
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
1.7.6.1