Intrepid
Intrepid_RealSpaceTools.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ************************************************************************
3 //
4 // Intrepid Package
5 // Copyright (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 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Pavel Bochev (pbboche@sandia.gov)
38 // Denis Ridzal (dridzal@sandia.gov), or
39 // Kara Peterson (kjpeter@sandia.gov)
40 //
41 // ************************************************************************
42 // @HEADER
43 
49 #ifndef INTREPID_REALSPACETOOLS_HPP
50 #define INTREPID_REALSPACETOOLS_HPP
51 
52 #include "Intrepid_ConfigDefs.hpp"
53 #include "Intrepid_Types.hpp"
54 #include "Teuchos_oblackholestream.hpp"
55 #include "Teuchos_Assert.hpp"
56 
57 
58 #include <Intrepid_Rank.hpp>
59 namespace Intrepid {
60 
64 template<class Scalar>
66 
67  public:
68 
76  static void absval(Scalar* absArray, const Scalar* inArray, const int size);
77 
78 
85  static void absval(Scalar* inoutArray, const int size);
86 
87 
97  template<class ArrayAbs, class ArrayIn>
98  static void absval(ArrayAbs & absArray, const ArrayIn & inArray);
99 
100 
105  template<class ArrayInOut>
106  static void absval(ArrayInOut & inoutAbsArray);
107 
108 
116  static Scalar vectorNorm(const Scalar* inVec, const size_t dim, const ENorm normType);
117 
118 
128  template<class ArrayIn>
129  static Scalar vectorNorm(const ArrayIn & inVec, const ENorm normType);
130 
131 
145  template<class ArrayNorm, class ArrayIn>
146  static void vectorNorm(ArrayNorm & normArray, const ArrayIn & inVecs, const ENorm normType);
147 
148  /* template<class ArrayNorm, class ArrayIn>
149  static void vectorNormTemp(ArrayNorm & normArray, const ArrayIn & inVecs, const ENorm normType);
150 */
158  static void transpose(Scalar* transposeMat, const Scalar* inMat, const size_t dim);
159 
160  /* template<class ArrayTranspose, class ArrayIn>
161  static void transpose(ArrayTranspose transposeMat, const ArrayIn inMat, const size_t dim);*/
176  template<class ArrayTranspose, class ArrayIn>
177  static void transpose(ArrayTranspose & transposeMats, const ArrayIn & inMats);
178 
179  /* template<class ArrayTranspose, class ArrayIn>
180  static void transposeTemp(ArrayTranspose & transposeMats, const ArrayIn & inMats);*/
188  static void inverse(Scalar* inverseMat, const Scalar* inMat, const size_t dim);
189 
190 
206  template<class ArrayInverse, class ArrayIn>
207  static void inverse(ArrayInverse & inverseMats, const ArrayIn & inMats);
208 
209 
210  static Scalar det(const Scalar* inMat, const size_t dim);
211 
212 
222  template<class ArrayIn>
223  static Scalar det(const ArrayIn & inMat);
224 
225 
240  template<class ArrayDet, class ArrayIn>
241  static void det(ArrayDet & detArray, const ArrayIn & inMats);
242 
243  template<class ArrayDet, class ArrayIn, int matRank>
244  struct detTempSpec;
254  static void add(Scalar* sumArray, const Scalar* inArray1, const Scalar* inArray2, const int size);
255 
256 
265  static void add(Scalar* inoutSumArray, const Scalar* inArray, const int size);
266 
267 
279  template<class ArraySum, class ArrayIn1, class ArrayIn2>
280  static void add(ArraySum & sumArray, const ArrayIn1 & inArray1, const ArrayIn2 & inArray2);
281 
282 
293  template<class ArraySum, class ArrayIn>
294  static void add(ArraySum & inoutSumArray, const ArrayIn & inArray);
295 
296 
306  static void subtract(Scalar* diffArray, const Scalar* inArray1, const Scalar* inArray2, const int size);
307 
308 
317  static void subtract(Scalar* inoutDiffArray, const Scalar* inArray, const int size);
318 
319 
331  template<class ArrayDiff, class ArrayIn1, class ArrayIn2>
332  static void subtract(ArrayDiff & diffArray, const ArrayIn1 & inArray1, const ArrayIn2 & inArray2);
333 
334 
345  template<class ArrayDiff, class ArrayIn>
346  static void subtract(ArrayDiff & inoutDiffArray, const ArrayIn & inArray);
347 
348  template<class ArrayDiff, class ArrayIn>
349  static void subtractTemp(ArrayDiff & inoutDiffArray, const ArrayIn & inArray);
359  static void scale(Scalar* scaledArray, const Scalar* inArray, const int size, const Scalar scalar);
360 
361 
370  static void scale(Scalar* inoutScaledArray, const int size, const Scalar scalar);
371 
372 
384  template<class ArrayScaled, class ArrayIn>
385  static void scale(ArrayScaled & scaledArray, const ArrayIn & inArray, const Scalar scalar);
386 
387 
394  template<class ArrayScaled>
395  static void scale(ArrayScaled & inoutScaledArray, const Scalar scalar);
396 
397 
405  static Scalar dot(const Scalar* inArray1, const Scalar* inArray2, const int size);
406 
407 
418  template<class ArrayVec1, class ArrayVec2>
419  static Scalar dot(const ArrayVec1 & inVec1, const ArrayVec2 & inVec2);
420 
421 
435  template<class ArrayDot, class ArrayVec1, class ArrayVec2>
436  static void dot(ArrayDot & dotArray, const ArrayVec1 & inVecs1, const ArrayVec2 & inVecs2);
437 
438 
451  static void matvec(Scalar* matVec, const Scalar* inMat, const Scalar* inVec, const size_t dim);
452 
453 
472  template<class ArrayMatVec, class ArrayMat, class ArrayVec>
473  static void matvec(ArrayMatVec & matVecs, const ArrayMat & inMats, const ArrayVec & inVecs);
474 
475 
489  template<class ArrayVecProd, class ArrayIn1, class ArrayIn2>
490  static void vecprod(ArrayVecProd & vecProd, const ArrayIn1 & inLeft, const ArrayIn2 & inRight);
491 
492  /* template<class ArrayVecProd, class ArrayIn1, class ArrayIn2>
493  static void vecprodTemp(ArrayVecProd & vecProd, const ArrayIn1 & inLeft, const ArrayIn2 & inRight); */
494 
495 }; // class RealSpaceTools
496 
497 } // end namespace Intrepid
498 
499 // include templated definitions
501 
502 #endif
Implementation of basic linear algebra functionality in Euclidean space.
static void transpose(Scalar *transposeMat, const Scalar *inMat, const size_t dim)
Computes transpose of the square matrix inMat of size dim by dim.
static void add(Scalar *sumArray, const Scalar *inArray1, const Scalar *inArray2, const int size)
Adds contiguous data inArray1 and inArray2 of size size: sumArray = inArray1 + inArray2.
static Scalar dot(const Scalar *inArray1, const Scalar *inArray2, const int size)
Computes dot product of contiguous data inArray1 and inArray2 of size size.
Contains definitions of custom data types in Intrepid.
static Scalar vectorNorm(const Scalar *inVec, const size_t dim, const ENorm normType)
Computes norm (1, 2, infinity) of the vector inVec of size dim.
static void scale(Scalar *scaledArray, const Scalar *inArray, const int size, const Scalar scalar)
Multiplies contiguous data inArray of size size by a scalar (componentwise): scaledArray = scalar * ...
static void inverse(Scalar *inverseMat, const Scalar *inMat, const size_t dim)
Computes inverse of the square matrix inMat of size dim by dim.
static void absval(Scalar *absArray, const Scalar *inArray, const int size)
Computes absolute value of contiguous input data inArray of size size.
static void matvec(Scalar *matVec, const Scalar *inMat, const Scalar *inVec, const size_t dim)
Matrix-vector left multiply using contiguous data: matVec = inMat * inVec.
static void vecprod(ArrayVecProd &vecProd, const ArrayIn1 &inLeft, const ArrayIn2 &inRight)
Vector product using multidimensional arrays: vecProd = inVecLeft x inVecRight
Definition file for utility classes providing basic linear algebra functionality. ...
static void subtract(Scalar *diffArray, const Scalar *inArray1, const Scalar *inArray2, const int size)
Subtracts contiguous data inArray2 from inArray1 of size size: diffArray = inArray1 - inArray2...