LifeV
EvaluationDot.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 EvaluationDot class.
31 
32  @date 06/2011
33  @author Samuel Quinodoz <samuel.quinodoz@epfl.ch>
34  */
35 
36 #ifndef EVALUTATION_DOT_HPP
37 #define EVALUTATION_DOT_HPP
38 
39 
40 #include <lifev/core/LifeV.hpp>
41 
42 #include <lifev/eta/array/OperationSmallDot.hpp>
43 
44 #include <lifev/eta/expression/ExpressionDot.hpp>
45 
46 #include <lifev/core/fem/QuadratureRule.hpp>
47 
48 namespace LifeV
49 {
50 
51 namespace ExpressionAssembly
52 {
53 
54 //! Evaluation for the dot product between two other Evaluations
55 /*!
56  @author Samuel Quinodoz <samuel.quinodoz@epfl.ch>
57 
58  This class aims at representing an dot product during the assembly
59 
60  This class is an Evaluation class, and therefore, has all the methods
61  required to work within the Evaluation trees.
62  */
63 template <typename EvaluationLType, typename EvaluationRType>
64 class EvaluationDot
65 {
66 public:
67 
68 
69  //! @name Public Types
70  //@{
71 
72  //! Type of the value returned by the left operand
73  typedef typename EvaluationLType::return_Type Lreturn_Type;
74 
75  //! Type of the value returned by the right operand
76  typedef typename EvaluationRType::return_Type Rreturn_Type;
77 
78  //! Type of the value returned by this class
79  typedef typename OperationSmallDot< Lreturn_Type, Rreturn_Type >::result_Type return_Type;
80 
81  //@}
82 
83 
84  //! @name Static constants
85  //@{
86 
87  //! Flag for the global current FE
88  const static flag_Type S_globalUpdateFlag;
89 
90  //! Flag for the test current FE
91  const static flag_Type S_testUpdateFlag;
92 
93  //! Flag for the solution current FE
94  const static flag_Type S_solutionUpdateFlag;
95 
96  //@}
97 
98 
99  //! @name Constructors, destructor
100  //@{
101 
102  //! Copy constructor
103  EvaluationDot (const EvaluationDot& eval)
104  : M_evaluationL (eval.M_evaluationL),
105  M_evaluationR (eval.M_evaluationR)
106  {}
107 
108  //! Constructor from the corresponding expression
109  template< typename ExpressionL, typename ExpressionR>
110  explicit EvaluationDot (const ExpressionDot<ExpressionL, ExpressionR>& expression)
111  : M_evaluationL (expression.left() ),
112  M_evaluationR (expression.right() )
113  {}
114 
115  //! Destructor
116  ~EvaluationDot()
117  {}
118 
119  //@}
120 
121 
122  //! @name Methods
123  //@{
124 
125  //! Internal update method
126  void update (const UInt& iElement)
127  {
128  M_evaluationL.update (iElement);
129  M_evaluationR.update (iElement);
130  }
131 
132  //! Display method
133  static void display (std::ostream& out = std::cout)
134  {
135  EvaluationLType::display (out);
136  out << " dot ";
137  EvaluationRType::display (out);
138  }
139 
140  //@}
141 
142 
143  //! @name Set Methods
144  //@{
145 
146  //! Setter for the global current FE
147  template< typename CFEType >
148  void setGlobalCFE (const CFEType* globalCFE)
149  {
150  M_evaluationL.setGlobalCFE (globalCFE);
151  M_evaluationR.setGlobalCFE (globalCFE);
152  }
153 
154  //! Setter for the test current FE
155  template< typename CFEType >
156  void setTestCFE (const CFEType* testCFE)
157  {
158  M_evaluationL.setTestCFE (testCFE);
159  M_evaluationR.setTestCFE (testCFE);
160  }
161 
162  //! Setter for the solution FE
163  template< typename CFEType >
164  void setSolutionCFE (const CFEType* solutionCFE)
165  {
166  M_evaluationL.setSolutionCFE (solutionCFE);
167  M_evaluationR.setSolutionCFE (solutionCFE);
168  }
169 
170  //! Setter for the quadrature rule
171  void setQuadrature (const QuadratureRule& qr)
172  {
173  M_evaluationL.setQuadrature (qr);
174  M_evaluationR.setQuadrature (qr);
175  }
176 
177  //@}
178 
179 
180  //! @name Get Methods
181  //@{
182 
183  //! Getter for a value
184  return_Type value_q (const UInt& q) const
185  {
186  return M_evaluationL.value_q (q).dot (M_evaluationR.value_q (q) );
187  }
188 
189  //! Getter for the value for a vector
190  return_Type value_qi (const UInt& q, const UInt& i) const
191  {
192  return M_evaluationL.value_qi (q, i).dot (M_evaluationR.value_qi (q, i) );
193  }
194 
195  //! Getter for the value for a matrix
196  return_Type value_qij (const UInt& q, const UInt& i, const UInt& j) const
197  {
198  return M_evaluationL.value_qij (q, i, j).dot (M_evaluationR.value_qij (q, i, j) );
199  }
200 
201  //@}
202 
203 private:
204 
205  //! @name Private Methods
206  //@{
207 
208  //! No default
209  EvaluationDot();
210 
211  //@}
212 
213  // Internal storage
214  EvaluationLType M_evaluationL;
215  EvaluationRType M_evaluationR;
216 };
217 
218 
219 template< typename EvaluationLType, typename EvaluationRType>
220 const flag_Type EvaluationDot<EvaluationLType, EvaluationRType>::S_globalUpdateFlag
221  = EvaluationLType::S_globalUpdateFlag | EvaluationRType::S_globalUpdateFlag;
222 
223 template< typename EvaluationLType, typename EvaluationRType>
224 const flag_Type EvaluationDot<EvaluationLType, EvaluationRType>::S_testUpdateFlag
225  = EvaluationLType::S_testUpdateFlag | EvaluationRType::S_testUpdateFlag;
226 
227 template< typename EvaluationLType, typename EvaluationRType>
228 const flag_Type EvaluationDot<EvaluationLType, EvaluationRType>::S_solutionUpdateFlag
229  = EvaluationLType::S_solutionUpdateFlag | EvaluationRType::S_solutionUpdateFlag;
230 
231 } // Namespace ExpressionAssembly
232 
233 } // Namespace LifeV
234 #endif
uint32_type flag_Type
bit-flag with up to 32 different flags
Definition: LifeV.hpp:197
void updateInverseJacobian(const UInt &iQuadPt)
class OperationSmallDot Class containing information about the dot product operation between Small* c...
QuadratureRule - The basis class for storing and accessing quadrature rules.
uint32_type UInt
generic unsigned integer (used mainly for addressing)
Definition: LifeV.hpp:191