Intrepid
Intrepid_TensorProductSpaceTools.hpp
Go to the documentation of this file.
1// @HEADER
2// ************************************************************************
3//
4// Intrepid Package
5// Copytest (2007) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
9//
10// This library is free software; you can redistribute it and/or modify
11// it under the terms of the GNU Lesser General Public License as
12// published by the Free Software Foundation; either version 2.1 of the
13// License, or (at your option) any later version.
14//
15// This library is distributed in the hope that it will be useful, but
16// WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18// Lesser General Public License for more details.
19//
20// You should have received a copy of the GNU Lesser General Public
21// License along with this library; if not, write to the Free Software
22// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
23// USA
24// Questions? Contact Pavel Bochev (pbboche@sandia.gov) or
25// Denis Ridzal (dridzal@sandia.gov).
26//
27// ************************************************************************
28// @HEADER
29
35#ifndef INTREPID_TENSORPRODUCTSPACETOOLS_HPP
36#define INTREPID_TENSORPRODUCTSPACETOOLS_HPP
37
38#include "Intrepid_Basis.hpp"
40#include "Teuchos_Array.hpp"
41#include "Teuchos_RCP.hpp"
42
43using Teuchos::Array;
44using Teuchos::RCP;
46
47namespace Intrepid {
48
56{
57public:
72 template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
73 class ArrayTypeBasis>
74 static void evaluate( ArrayTypeOut &vals ,
75 const ArrayTypeCoeffs &coeffs ,
76 const Array<RCP<ArrayTypeBasis> > &bases );
77
78 // /** \brief Computes point values of a set of array-valued
79 // polynomials expressed in a
80 // tensor product basis at output points. The array
81 // <b>coeffs</b> is assumed to have dimensions (C,F1,F2),
82 // where F1 runs over the number of different polynomials per cell and
83 // F2 runs over the coefficients run over a tensor product
84 // basis (lowest space dimension runs fastest). The
85 // Teuchos::Array of (pointers to) Arrays bases
86 // have the one-dimensional bases tabulated at the
87 // one-dimensional points. The output array is (C,F1,P,D).
88 // This method assumes that the nodes for the basis coincide with
89 // the evaluation points, which leads to a big simplification.
90
91 // \param vals [out] - output point values of the discrete function
92 // \param coeffs [in] - coefficients of the input function
93 // \param bases [in] - one-dimensional bases tabulated at points
94 // */
95 // template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
96 // class ArrayTypeBasis>
97 // static void evaluateCollocated( ArrayTypeOut &vals ,
98 // const ArrayTypeCoeffs &coeffs ,
99 // const Array<Array<RCP<ArrayTypeBasis> > > &bases );
100
117 template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
118 class ArrayTypeBasis>
119 static void evaluateCollocated( ArrayTypeOut &vals ,
120 const ArrayTypeCoeffs &coeffs ,
121 const Array<RCP<ArrayTypeBasis> > &bases );
122
138 template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
139 class ArrayTypeBasis>
140 static void evaluateGradient( ArrayTypeOut &vals ,
141 const ArrayTypeCoeffs &coeffs ,
142 const Array<RCP<ArrayTypeBasis> > &bases ,
143 const Array<RCP<ArrayTypeBasis> > &Dbases );
144
162 template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
163 class ArrayTypeBasis>
164 static void evaluateGradientCollocated( ArrayTypeOut &vals ,
165 const ArrayTypeCoeffs &coeffs ,
166 const Array<RCP<ArrayTypeBasis> > &bases ,
167 const Array<RCP<ArrayTypeBasis> > &Dbases );
168
179 template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
180 class ArrayTypeBasis, class ArrayTypeWeights>
181 static void moments( ArrayTypeOut &vals ,
182 const ArrayTypeData &data ,
183 const Array<RCP<ArrayTypeBasis> > &basisVals ,
184 const Array<RCP<ArrayTypeWeights> > &wts );
185
197 template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
198 class ArrayTypeBasis, class ArrayTypeWeights>
199 static void momentsCollocated( ArrayTypeOut &vals ,
200 const ArrayTypeData &data ,
201 const Array<RCP<ArrayTypeBasis> > &basisVals ,
202 const Array<RCP<ArrayTypeWeights> > &wts );
203
216 template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
217 class ArrayTypeBasis, class ArrayTypeWeights>
218 static void momentsGrad( ArrayTypeOut &vals ,
219 const ArrayTypeData &data ,
220 const Array<RCP<ArrayTypeBasis> > &basisVals ,
221 const Array<RCP<ArrayTypeBasis> > &basisDVals ,
222 const Array<RCP<ArrayTypeWeights> > &wts );
223
237 template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
238 class ArrayTypeBasis, class ArrayTypeWeights>
239 static void momentsGradCollocated( ArrayTypeOut &vals ,
240 const ArrayTypeData &data ,
241 const Array<RCP<ArrayTypeBasis> > &basisVals ,
242 const Array<RCP<ArrayTypeBasis> > &basisDVals ,
243 const Array<RCP<ArrayTypeWeights> > &wts );
244
245
246private:
247 template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
248 class ArrayTypeBasis>
249 static void evaluate2D( ArrayTypeOut &vals ,
250 const ArrayTypeCoeffs &coeffs ,
251 const Array<RCP<ArrayTypeBasis> > &basisVals );
252
253 template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
254 class ArrayTypeBasis>
255 static void evaluate3D( ArrayTypeOut &vals ,
256 const ArrayTypeCoeffs &coeffs ,
257 const Array<RCP<ArrayTypeBasis> > &basisDVals );
258
259 template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
260 class ArrayTypeBasis>
261 static void evaluateCollocated2D( ArrayTypeOut &vals ,
262 const ArrayTypeCoeffs &coeffs ,
263 const Array<RCP<ArrayTypeBasis> > &basisVals );
264
265 template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
266 class ArrayTypeBasis>
267 static void evaluateCollocated3D( ArrayTypeOut &vals ,
268 const ArrayTypeCoeffs &coeffs ,
269 const Array<RCP<ArrayTypeBasis> > &basisDVals );
270
271 template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
272 class ArrayTypeBasis>
273 static void evaluateGradient2D( ArrayTypeOut &vals ,
274 const ArrayTypeCoeffs &coeffs ,
275 const Array<RCP<ArrayTypeBasis> > &basisVals ,
276 const Array<RCP<ArrayTypeBasis> > &basisDVals );
277
278 template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
279 class ArrayTypeBasis>
280 static void evaluateGradient3D( ArrayTypeOut &vals ,
281 const ArrayTypeCoeffs &coeffs ,
282 const Array<RCP<ArrayTypeBasis> > &basisVals ,
283 const Array<RCP<ArrayTypeBasis> > &basisDVals );
284
285
286 template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
287 class ArrayTypeBasis>
288 static void evaluateGradientCollocated2D( ArrayTypeOut &vals ,
289 const ArrayTypeCoeffs &coeffs ,
290 const Array<RCP<ArrayTypeBasis> > &basisVals ,
291 const Array<RCP<ArrayTypeBasis> > &basisDVals );
292
293 template<class Scalar, class ArrayTypeOut, class ArrayTypeCoeffs,
294 class ArrayTypeBasis>
295 static void evaluateGradientCollocated3D( ArrayTypeOut &vals ,
296 const ArrayTypeCoeffs &coeffs ,
297 const Array<RCP<ArrayTypeBasis> > &basisVals ,
298 const Array<RCP<ArrayTypeBasis> > &basisDVals );
299
300 template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
301 class ArrayTypeBasis, class ArrayTypeWeights>
302 static void moments2D( ArrayTypeOut &vals ,
303 const ArrayTypeData &data ,
304 const Array<RCP<ArrayTypeBasis> > &basisVals ,
305 const Array<RCP<ArrayTypeWeights> > &wts );
306
307 template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
308 class ArrayTypeBasis, class ArrayTypeWeights>
309 static void moments3D( ArrayTypeOut &vals ,
310 const ArrayTypeData &data ,
311 const Array<RCP<ArrayTypeBasis> > &basisVals ,
312 const Array<RCP<ArrayTypeWeights> > &wts );
313
314 template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
315 class ArrayTypeBasis, class ArrayTypeWeights>
316 static void momentsCollocated2D( ArrayTypeOut &vals ,
317 const ArrayTypeData &data ,
318 const Array<RCP<ArrayTypeBasis> > &basisVals ,
319 const Array<RCP<ArrayTypeWeights> > &wts );
320
321 template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
322 class ArrayTypeBasis, class ArrayTypeWeights>
323 static void momentsCollocated3D( ArrayTypeOut &vals ,
324 const ArrayTypeData &data ,
325 const Array<RCP<ArrayTypeBasis> > &basisVals ,
326 const Array<RCP<ArrayTypeWeights> > &wts );
327
328 template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
329 class ArrayTypeBasis, class ArrayTypeWeights>
330 static void momentsGradCollocated2D( ArrayTypeOut &vals ,
331 const ArrayTypeData &data ,
332 const Array<RCP<ArrayTypeBasis> > &basisVals ,
333 const Array<RCP<ArrayTypeBasis> > &basisDVals ,
334 const Array<RCP<ArrayTypeWeights> > &wts );
335
336 template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
337 class ArrayTypeBasis, class ArrayTypeWeights>
338 static void momentsGradCollocated3D( ArrayTypeOut &vals ,
339 const ArrayTypeData &data ,
340 const Array<RCP<ArrayTypeBasis> > &basisVals ,
341 const Array<RCP<ArrayTypeBasis> > &basisDVals ,
342 const Array<RCP<ArrayTypeWeights> > &wts );
343
344 template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
345 class ArrayTypeBasis, class ArrayTypeWeights>
346 static void momentsGrad2D( ArrayTypeOut &vals ,
347 const ArrayTypeData &data ,
348 const Array<RCP<ArrayTypeBasis> > &basisVals ,
349 const Array<RCP<ArrayTypeBasis> > &basisDVals ,
350 const Array<RCP<ArrayTypeWeights> > &wts );
351
352 template<class Scalar, class ArrayTypeOut, class ArrayTypeData,
353 class ArrayTypeBasis, class ArrayTypeWeights>
354 static void momentsGrad3D( ArrayTypeOut &vals ,
355 const ArrayTypeData &data ,
356 const Array<RCP<ArrayTypeBasis> > &basisVals ,
357 const Array<RCP<ArrayTypeBasis> > &basisDVals ,
358 const Array<RCP<ArrayTypeWeights> > &wts );
359};
360
361} //end namespace Intrepid
362
364#endif
Header file for the abstract base class Intrepid::Basis.
Header file for utility class to provide multidimensional containers.
Definition file for the Intrepid::TensorProductSpaceTools class.
Implementation of a templated lexicographical container for a multi-indexed scalar quantity....
Defines expert-level interfaces for the evaluation, differentiation and integration of finite element...
static void evaluateCollocated(ArrayTypeOut &vals, const ArrayTypeCoeffs &coeffs, const Array< RCP< ArrayTypeBasis > > &bases)
Computes point values of a set of polynomials expressed in a tensor product basis at output points....
static void momentsGrad(ArrayTypeOut &vals, const ArrayTypeData &data, const Array< RCP< ArrayTypeBasis > > &basisVals, const Array< RCP< ArrayTypeBasis > > &basisDVals, const Array< RCP< ArrayTypeWeights > > &wts)
Computes the moments of a collection of F1 data integrated against a list of functions tabulated at p...
static void evaluateGradient(ArrayTypeOut &vals, const ArrayTypeCoeffs &coeffs, const Array< RCP< ArrayTypeBasis > > &bases, const Array< RCP< ArrayTypeBasis > > &Dbases)
Given a polynomial expressed in a tensor product basis, evaluates the gradient at a tensor product of...
static void momentsGradCollocated(ArrayTypeOut &vals, const ArrayTypeData &data, const Array< RCP< ArrayTypeBasis > > &basisVals, const Array< RCP< ArrayTypeBasis > > &basisDVals, const Array< RCP< ArrayTypeWeights > > &wts)
Computes the moments of a collection of F1 data integrated against a list of functions tabulated at p...
static void moments(ArrayTypeOut &vals, const ArrayTypeData &data, const Array< RCP< ArrayTypeBasis > > &basisVals, const Array< RCP< ArrayTypeWeights > > &wts)
Computes the moments of a set of data integrated against a basis tabulated at points.
static void momentsCollocated(ArrayTypeOut &vals, const ArrayTypeData &data, const Array< RCP< ArrayTypeBasis > > &basisVals, const Array< RCP< ArrayTypeWeights > > &wts)
Computes the moments of a set of data integrated against a basis tabulated at points,...
static void evaluate(ArrayTypeOut &vals, const ArrayTypeCoeffs &coeffs, const Array< RCP< ArrayTypeBasis > > &bases)
Computes point values of a set of polynomials expressed in a tensor product basis at output points....
static void evaluateGradientCollocated(ArrayTypeOut &vals, const ArrayTypeCoeffs &coeffs, const Array< RCP< ArrayTypeBasis > > &bases, const Array< RCP< ArrayTypeBasis > > &Dbases)
Given a polynomial expressed in a tensor product basis, evaluates the gradient at a tensor product of...