LifeV
EvaluationPower.hpp
Go to the documentation of this file.
1 //@HEADER
2 /*
3 *******************************************************************************
4 
5  Copyright (C) 2004, 2005, 2007 EPFL, Politecnico di Milano, INRIA
6  Copyright (C) 2010 EPFL, Politecnico di Milano, Emory UNiversity
7 
8  This file is part of the LifeV library
9 
10  LifeV is free software; you can redistribute it and/or modify
11  it under the terms of the GNU Lesser General Public License as published by
12  the Free Software Foundation; either version 3 of the License, or
13  (at your option) any later version.
14 
15  LifeV is distributed in the hope that it will be useful,
16  but 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, see <http://www.gnu.org/licenses/>
22 
23 
24 *******************************************************************************
25 */
26 //@HEADER
27 
28 /*!
29  * @file
30  @brief This file contains the definition of the EvaluationAddition class.
31 
32  @date 06/2011
33  @author Samuel Quinodoz <samuel.quinodoz@epfl.ch>
34  */
35 
36 #ifndef EVALUTATION_POWER_HPP
37 #define EVALUTATION_POWER_HPP
38 
39 #include <lifev/core/LifeV.hpp>
40 
41 #include <lifev/eta/array/OperationSmallPower.hpp>
42 
43 #include <lifev/eta/expression/ExpressionPower.hpp>
44 
45 #include <lifev/core/fem/QuadratureRule.hpp>
46 
47 namespace LifeV
48 {
49 
50 namespace ExpressionAssembly
51 {
52 
53 //! Evaluation for the product of two other Evaluations
54 /*!
55  @author Samuel Quinodoz <samuel.quinodoz@epfl.ch>
56 
57  This class aims at representing a product operation during the assembly
58 
59  This class is an Evaluation class, and therefore, has all the methods
60  required to work within the Evaluation trees.
61  */
62 template <typename EvaluationBaseType>
63 class EvaluationPower
64 {
65 public:
66 
67  //! @name Public Types
68  //@{
69 
70  //! Type of the value returned by the left operand
71  typedef typename EvaluationBaseType::return_Type BaseReturn_Type;
72  typedef Real exponentType;
73 
74 
75  //! Type of the value returned by this class
76  typedef typename OperationSmallPower<BaseReturn_Type, exponentType>::result_Type return_Type;
77  //@}
78 
79 
80  //! @name Static constants
81  //@{
82 
83  //! Flag for the global current FE
84  const static flag_Type S_globalUpdateFlag;
85 
86  //! Flag for the test current FE
87  const static flag_Type S_testUpdateFlag;
88 
89  //! Flag for the solution current FE
90  const static flag_Type S_solutionUpdateFlag;
91 
92  //@}
93 
94 
95  //! @name Constructors, destructor
96  //@{
97 
98  //! Copy constructor
99  EvaluationPower (const EvaluationPower& eval)
100  : M_evaluationBase (eval.M_evaluationBase),
101  M_exponent (eval.M_exponent)
102  {}
103 
104  //! Constructor from the corresponding expression
105  template <typename BaseExpressionType>
106  explicit EvaluationPower (const ExpressionPower<BaseExpressionType>& expression)
107  : M_evaluationBase (expression.base() ),
108  M_exponent (expression.exponent() )
109  {}
110 
111  //! Destructor
112  ~EvaluationPower() {}
113 
114  //@}
115 
116 
117  //! @name Methods
118  //@{
119 
120  //! Internal update method
121  void update (const UInt& iElement)
122  {
123  M_evaluationBase.update (iElement);
124  }
125 
126  //! Display method
127  static void display (std::ostream& out = std::cout )
128  {
129  out << " pow( " ;
130  EvaluationBaseType::display (out);
131  out << ")";
132  }
133 
134  //@}
135 
136 
137  //! @name Set Methods
138  //@{
139 
140  //! Setter for the global current FE
141  template< typename CFEType >
142  void setGlobalCFE (const CFEType* globalCFE)
143  {
144  M_evaluationBase.setGlobalCFE (globalCFE);
145  }
146 
147  //! Setter for the test current FE
148  template< typename CFEType >
149  void setTestCFE (const CFEType* testCFE)
150  {
151  M_evaluationBase.setTestCFE (testCFE);
152  }
153 
154  //! Setter for the solution current FE
155  template< typename CFEType >
156  void setSolutionCFE (const CFEType* solutionCFE)
157  {
158  M_evaluationBase.setSolutionCFE (solutionCFE);
159  }
160 
161  //! Setter for the quadrature rule
162  void setQuadrature (const QuadratureRule& qr)
163  {
164  M_evaluationBase.setQuadrature (qr);
165  }
166 
167  //@}
168 
169 
170  //! @name Get Methods
171  //@{
172 
173  //! Getter a value
174  return_Type value_q (const UInt& q) const
175  {
176  return std::pow (M_evaluationBase.value_q (q), M_exponent);
177  }
178 
179  //! Getter for the value for a vector
180  return_Type value_qi (const UInt& q, const UInt& i) const
181  {
182  return std::pow (M_evaluationBase.value_qi (q, i), M_exponent);
183  }
184 
185  //! Getter for the value for a matrix
186  return_Type value_qij (const UInt& q, const UInt& i, const UInt& j) const
187  {
188  return std::pow (M_evaluationBase.value_qij (q, i, j), M_exponent);
189  }
190 
191  //@}
192 
193 private:
194 
195  //! @name Private Methods
196  //@{
197 
198  //! No empty constructor
199  EvaluationPower();
200 
201  //@}
202 
203  //! Internal storage
204  EvaluationBaseType M_evaluationBase;
205  Real M_exponent;
206 };
207 
208 template< typename EvaluationBaseType>
209 const flag_Type EvaluationPower<EvaluationBaseType>::S_globalUpdateFlag
210  = EvaluationBaseType::S_globalUpdateFlag;
211 
212 template< typename EvaluationBaseType>
213 const flag_Type EvaluationPower<EvaluationBaseType>::S_testUpdateFlag
214  = EvaluationBaseType::S_testUpdateFlag;
215 
216 template< typename EvaluationBaseType>
217 const flag_Type EvaluationPower<EvaluationBaseType>::S_solutionUpdateFlag
218  = EvaluationBaseType::S_solutionUpdateFlag;
219 
220 } // Namespace ExpressionAssembly
221 
222 } // Namespace LifeV
223 #endif
uint32_type flag_Type
bit-flag with up to 32 different flags
Definition: LifeV.hpp:197
void updateInverseJacobian(const UInt &iQuadPt)
double Real
Generic real data.
Definition: LifeV.hpp:175
QuadratureRule - The basis class for storing and accessing quadrature rules.
class OperationSmallAddition Class containing information about the power operation between the *Smal...
uint32_type UInt
generic unsigned integer (used mainly for addressing)
Definition: LifeV.hpp:191