LifeV
EvaluationInterpolateGradient.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 EvaluationInterpolateGradient class.
31 
32  @date 06/2011
33  @author Samuel Quinodoz <samuel.quinodoz@epfl.ch>
34  */
35 
36 #ifndef EVALUATION_INTERPOLATE_GRADIENT_HPP
37 #define EVALUATION_INTERPOLATE_GRADIENT_HPP
38 
39 #include <lifev/core/LifeV.hpp>
40 
41 #include <lifev/core/array/VectorEpetra.hpp>
42 #include <lifev/core/array/VectorSmall.hpp>
43 #include <lifev/core/array/MatrixSmall.hpp>
44 
45 #include <lifev/eta/fem/ETCurrentFE.hpp>
46 #include <lifev/eta/fem/ETCurrentFlag.hpp>
47 #include <lifev/eta/fem/ETFESpace.hpp>
48 #include <lifev/core/fem/QuadratureRule.hpp>
49 
50 #include <lifev/eta/expression/ExpressionInterpolateGradient.hpp>
51 
52 #include <boost/shared_ptr.hpp>
53 
54 
55 namespace LifeV
56 {
57 
58 namespace ExpressionAssembly
59 {
60 
61 //! Evaluation for the interpolation of a FE function
62 /*!
63  @author Samuel Quinodoz <samuel.quinodoz@epfl.ch>
64 
65  This class aims at representing an interpolated FE value.
66 
67  This is the generic implementation, so representing a vectorial FE
68 
69  This class is an Evaluation class, and therefore, has all the methods
70  required to work within the Evaluation trees.
71 
72  !! NOT DEFINED YET !! (Reason: miss SimpleTensor)
73  */
74 template<typename MeshType, typename MapType, UInt SpaceDim, UInt FieldDim>
75 class EvaluationInterpolateGradient
76 {
77 public:
78 
79  //! @name Public Types
80  //@{
81 
82  //! Type of the value returned by this class
83  typedef MatrixSmall<FieldDim, SpaceDim> return_Type;
84 
85  //! Type of the FESpace to be used in this class
86  typedef ETFESpace<MeshType, MapType, SpaceDim, FieldDim> fespace_Type;
87 
88  //! Type of the pointer on the FESpace
89  typedef std::shared_ptr<fespace_Type> fespacePtr_Type;
90 
91  //! Type of the vector to be used
92  typedef VectorEpetra vector_Type;
93 
94  //@}
95 
96 
97  //! @name Static constants
98  //@{
99 
100  //! Flag for the global current FE
101  const static flag_Type S_globalUpdateFlag;
102 
103  //! Flag for the test current FE
104  const static flag_Type S_testUpdateFlag;
105 
106  //! Flag for the solution current FE
107  const static flag_Type S_solutionUpdateFlag;
108 
109  //@}
110 
111 
112  //! @name Constructors, destructor
113  //@{
114 
115  //! Copy constructor
116  EvaluationInterpolateGradient (const EvaluationInterpolateGradient<MeshType, MapType, SpaceDim, FieldDim>& evaluation)
117  :
118  M_fespace ( evaluation.M_fespace),
119  M_vector ( evaluation.M_vector, Repeated),
120  M_quadrature (0),
121  M_currentFE (evaluation.M_currentFE),
122  M_interpolatedGradients (evaluation.M_interpolatedGradients)
123  {
124  if (evaluation.M_quadrature != 0)
125  {
126  M_quadrature = new QuadratureRule (* (evaluation.M_quadrature) );
127  }
128  }
129 
130  //! Expression-based constructor
131  explicit EvaluationInterpolateGradient (const ExpressionInterpolateGradient<MeshType, MapType, SpaceDim, FieldDim>& expression)
132  :
133  M_fespace ( expression.fespace() ),
134  M_vector ( expression.vector(), Repeated ),
135  M_quadrature (0),
136  M_currentFE (M_fespace->refFE(), M_fespace->geoMap() ),
137  M_interpolatedGradients (0)
138  {}
139 
140  //! Destructor
141  ~EvaluationInterpolateGradient()
142  {
143  if (M_quadrature != 0)
144  {
145  delete M_quadrature;
146  }
147  }
148 
149  //@}
150 
151 
152  //! @name Methods
153  //@{
154  //! Internal update: computes the interpolated gradients
155  void update (const UInt& iElement)
156  {
157  zero();
158 
159  M_currentFE.update (M_fespace->mesh()->element (iElement), ET_UPDATE_DPHI);
160 
161  for (UInt i (0); i < M_fespace->refFE().nbDof(); ++i)
162  {
163  for (UInt q (0); q < M_quadrature->nbQuadPt(); ++q)
164  {
165  for (UInt iDim (0); iDim < SpaceDim; ++iDim)
166  {
167  for (UInt jDim (0); jDim < FieldDim; ++jDim)
168  {
169  UInt globalID (M_fespace->dof().localToGlobalMap (iElement, i)
170  + jDim * M_fespace->dof().numTotalDof() );
171 
172  M_interpolatedGradients[q][jDim][iDim] +=
173  M_currentFE.dphi (jDim * M_currentFE.nbFEDof() + i, jDim, iDim, q)
174  * M_vector[globalID];
175  }
176  }
177  }
178  }
179  }
180 
181  //! Erase the interpolated gradients stored internally
182  void zero()
183  {
184  for (UInt q (0); q < M_quadrature->nbQuadPt(); ++q)
185  {
186  for (UInt i (0); i < SpaceDim; ++i)
187  {
188  for (UInt j (0); j < FieldDim; ++j)
189  {
190  M_interpolatedGradients[q][j][i] = 0.0;
191  }
192  }
193  }
194  }
195 
196  //! Show the values
197  void showValues() const
198  {
199  std::cout << " Gradients : " << std::endl;
200 
201  for (UInt i (0); i < M_quadrature->nbQuadPt(); ++i)
202  {
203  std::cout << M_interpolatedGradients[i] << std::endl;
204  }
205  }
206 
207  //! Display method
208  static void display (std::ostream& out = std::cout)
209  {
210  out << "interpolated[ " << FieldDim << " ][ " << SpaceDim << " ]";
211  }
212 
213  //@}
214 
215 
216  //! @name Set Methods
217  //@{
218 
219  //! Do nothing setter for the global current FE
220  template< typename CFEType >
221  void setGlobalCFE (const CFEType* /*globalCFE*/)
222  {}
223 
224  //! Do nothing setter for the test current FE
225  template< typename CFEType >
226  void setTestCFE (const CFEType* /*testCFE*/)
227  {}
228 
229  //! Do nothing setter for the solution current FE
230  template< typename CFEType >
231  void setSolutionCFE (const CFEType* /*solutionCFE*/)
232  {}
233 
234  //! Setter for the quadrature rule
235  void setQuadrature (const QuadratureRule& qr)
236  {
237  if (M_quadrature != 0)
238  {
239  delete M_quadrature;
240  }
241  M_quadrature = new QuadratureRule (qr);
242  M_currentFE.setQuadratureRule (qr);
243  M_interpolatedGradients.resize (qr.nbQuadPt() );
244  }
245 
246  //@}
247 
248 
249  //! @name Get Methods
250  //@{
251 
252  //! Getter for a value
253  return_Type value_q (const UInt& q) const
254  {
255  return M_interpolatedGradients[q];
256  }
257 
258  //! Getter for the value for a vector
259  return_Type value_qi (const UInt& q, const UInt& /*i*/) const
260  {
261  return M_interpolatedGradients[q];
262  }
263 
264  //! Getter for the value for a matrix
265  return_Type value_qij (const UInt& q, const UInt& /*i*/, const UInt& /*j*/) const
266  {
267  return M_interpolatedGradients[q];
268  }
269 
270  //@}
271 
272 
273 private:
274 
275  //! @name Private Methods
276  //@{
277 
278  //! No empty constructor
279  EvaluationInterpolateGradient();
280 
281  //@}
282 
283  //! Data storage
284  fespacePtr_Type M_fespace;
285  vector_Type M_vector;
286  QuadratureRule* M_quadrature;
287 
288  //! Structure for the computations
289  ETCurrentFE<SpaceDim, FieldDim> M_currentFE;
290 
291  //! Storage for the temporary values
292  std::vector<return_Type> M_interpolatedGradients;
293 };
294 
295 template<typename MeshType, typename MapType, UInt SpaceDim, UInt FieldDim>
296 const flag_Type
297 EvaluationInterpolateGradient<MeshType, MapType, SpaceDim, FieldDim>::
298 S_globalUpdateFlag = ET_UPDATE_NONE;
299 
300 template<typename MeshType, typename MapType, UInt SpaceDim, UInt FieldDim>
301 const flag_Type
302 EvaluationInterpolateGradient<MeshType, MapType, SpaceDim, FieldDim>::
303 S_testUpdateFlag = ET_UPDATE_NONE;
304 
305 template<typename MeshType, typename MapType, UInt SpaceDim, UInt FieldDim>
306 const flag_Type
307 EvaluationInterpolateGradient<MeshType, MapType, SpaceDim, FieldDim>::
308 S_solutionUpdateFlag = ET_UPDATE_NONE;
309 
310 
311 //! Evaluation for the interpolation of the gradient of a FE function
312 /*!
313  @author Samuel Quinodoz <samuel.quinodoz@epfl.ch>
314 
315  This class aims at representing an interpolated FE gradient.
316 
317  This is the specialized (partially) implementation representing a scalar FE
318 
319  This class is an Evaluation class, and therefore, has all the methods
320  required to work within the Evaluation trees.
321  */
322 template<typename MeshType, typename MapType, UInt SpaceDim>
323 class EvaluationInterpolateGradient<MeshType, MapType, SpaceDim, 1>
324 {
325 
326 public:
327 
328  //! @name Public Types
329  //@{
330 
331  //! Type of the value returned by this class
332  typedef VectorSmall<SpaceDim> return_Type;
333 
334  //! Type of the FESpace to be used in this class
335  typedef ETFESpace<MeshType, MapType, SpaceDim, 1> fespace_Type;
336 
337  //! Type of the pointer on the FESpace
338  typedef std::shared_ptr<fespace_Type> fespacePtr_Type;
339 
340  //! Type of the vector to be used
341  typedef VectorEpetra vector_Type;
342 
343  //@}
344 
345 
346  //! @name Static constants
347  //@{
348 
349  //! Flag for the global current FE
350  const static flag_Type S_globalUpdateFlag;
351 
352  //! Flag for the test current FE
353  const static flag_Type S_testUpdateFlag;
354 
355  //! Flag for the solution current FE
356  const static flag_Type S_solutionUpdateFlag;
357 
358  //@}
359 
360 
361  //! @name Constructors, destructor
362  //@{
363 
364  //! Copy constructor
365  EvaluationInterpolateGradient (const EvaluationInterpolateGradient<MeshType, MapType, SpaceDim, 1>& evaluation)
366  :
367  M_fespace ( evaluation.M_fespace),
368  M_vector ( evaluation.M_vector, Repeated),
369  M_offset ( evaluation.M_offset ),
370  M_quadrature (0),
371  M_currentFE (evaluation.M_currentFE),
372  M_interpolatedGradients (evaluation.M_interpolatedGradients)
373  {
374  if (evaluation.M_quadrature != 0)
375  {
376  M_quadrature = new QuadratureRule (* (evaluation.M_quadrature) );
377  }
378  }
379 
380  //! Expression-based constructor
381  explicit EvaluationInterpolateGradient (const ExpressionInterpolateGradient<MeshType, MapType, SpaceDim, 1>& expression)
382  :
383  M_fespace ( expression.fespace() ),
384  M_vector ( expression.vector(), Repeated ),
385  M_offset ( expression.offset() ),
386  M_quadrature (0),
387  M_currentFE (M_fespace->refFE(), M_fespace->geoMap() ),
388  M_interpolatedGradients (0)
389  {}
390 
391  //! Destructor
392  ~EvaluationInterpolateGradient()
393  {
394  if (M_quadrature != 0)
395  {
396  delete M_quadrature;
397  }
398  }
399 
400  //@}
401 
402 
403  //! @name Methods
404  //@{
405 
406  //! Internal update: computes the interpolated gradients
407  void update (const UInt& iElement)
408  {
409  zero();
410 
411  M_currentFE.update (M_fespace->mesh()->element (iElement), ET_UPDATE_DPHI);
412 
413  for (UInt i (0); i < M_fespace->refFE().nbDof(); ++i)
414  {
415  for (UInt q (0); q < M_quadrature->nbQuadPt(); ++q)
416  {
417  UInt globalID (M_fespace->dof().localToGlobalMap (iElement, i) + M_offset);
418 
419  for (UInt iDim (0); iDim < SpaceDim; ++iDim)
420  {
421  M_interpolatedGradients[q][iDim] +=
422  M_currentFE.dphi (i, iDim, q)
423  * M_vector[globalID];
424  }
425  }
426  }
427  }
428 
429  //! Erase the interpolated gradients stored internally
430  void zero()
431  {
432  for (UInt q (0); q < M_quadrature->nbQuadPt(); ++q)
433  {
434  for (UInt i (0); i < SpaceDim; ++i)
435  {
436  M_interpolatedGradients[q][i] = 0.0;
437  }
438  }
439  }
440 
441  //! Show the values
442  void showValues() const
443  {
444  std::cout << " Gradients : " << std::endl;
445 
446  for (UInt i (0); i < M_quadrature->nbQuadPt(); ++i)
447  {
448  std::cout << M_interpolatedGradients[i] << std::endl;
449  }
450  }
451 
452  //! Display method
453  static void display (std::ostream& out = std::cout)
454  {
455  out << "interpolated[ " << SpaceDim << " ]";
456  }
457 
458  //@}
459 
460 
461  //! @name Set Methods
462  //@{
463 
464  //! Do nothing setter for the global current FE
465  template< typename CFEType >
466  void setGlobalCFE (const CFEType* /*globalCFE*/)
467  {}
468 
469  //! Do nothing setter for the test current FE
470  template< typename CFEType >
471  void setTestCFE (const CFEType* /*testCFE*/)
472  {}
473 
474  //! Do nothing setter for the solution current FE
475  template< typename CFEType >
476  void setSolutionCFE (const CFEType* /*solutionCFE*/)
477  {}
478 
479  //! Setter for the quadrature rule
480  void setQuadrature (const QuadratureRule& qr)
481  {
482  if (M_quadrature != 0)
483  {
484  delete M_quadrature;
485  }
486  M_quadrature = new QuadratureRule (qr);
487  M_currentFE.setQuadratureRule (qr);
488  M_interpolatedGradients.resize (qr.nbQuadPt() );
489  }
490 
491  //@}
492 
493 
494  //! @name Get Methods
495  //@{
496 
497  //! Getter for a value
498  return_Type value_q (const UInt& q) const
499  {
500  return M_interpolatedGradients[q];
501  }
502 
503  //! Getter for the value for a vector
504  return_Type value_qi (const UInt& q, const UInt& /*i*/) const
505  {
506  return M_interpolatedGradients[q];
507  }
508 
509  //! Getter for the value for a matrix
510  return_Type value_qij (const UInt& q, const UInt& /*i*/, const UInt& /*j*/) const
511  {
512  return M_interpolatedGradients[q];
513  }
514 
515  //@}
516 
517 private:
518 
519  //! @name Private Methods
520  //@{
521 
522  //! No empty constructor
523  EvaluationInterpolateGradient();
524 
525  //@}
526 
527  //! Data storage
528  fespacePtr_Type M_fespace;
529  vector_Type M_vector;
530  UInt M_offset;
531  QuadratureRule* M_quadrature;
532 
533  //! Structure for the computations
534  ETCurrentFE<SpaceDim, 1> M_currentFE;
535 
536  //! Storage for the temporary values
537  std::vector<return_Type> M_interpolatedGradients;
538 };
539 
540 
541 template<typename MeshType, typename MapType, UInt SpaceDim>
542 const flag_Type
543 EvaluationInterpolateGradient<MeshType, MapType, SpaceDim, 1>::
544 S_globalUpdateFlag = ET_UPDATE_NONE;
545 
546 template<typename MeshType, typename MapType, UInt SpaceDim>
547 const flag_Type
548 EvaluationInterpolateGradient<MeshType, MapType, SpaceDim, 1>::
549 S_testUpdateFlag = ET_UPDATE_NONE;
550 
551 template<typename MeshType, typename MapType, UInt SpaceDim>
552 const flag_Type
553 EvaluationInterpolateGradient<MeshType, MapType, SpaceDim, 1>::
554 S_solutionUpdateFlag = ET_UPDATE_NONE;
555 
556 
557 
558 
559 //! Evaluation for the interpolation of the gradient of a FE function
560 /*!
561  @author Samuel Quinodoz <samuel.quinodoz@epfl.ch>
562 
563  This class aims at representing an interpolated FE gradient.
564 
565  This is the specialized (partially) implementation representing a vector FE
566 
567  This class is an Evaluation class, and therefore, has all the methods
568  required to work within the Evaluation trees.
569  */
570 template<typename MeshType, typename MapType>
571 class EvaluationInterpolateGradient<MeshType, MapType, 3, 3>
572 {
573 
574 public:
575 
576  //! @name Public Types
577  //@{
578 
579  //! Type of the value returned by this class
580  typedef MatrixSmall<3, 3> return_Type;
581 
582  //! Type of the FESpace to be used in this class
583  typedef ETFESpace<MeshType, MapType, 3, 3> fespace_Type;
584 
585  //! Type of the pointer on the FESpace
586  typedef std::shared_ptr<fespace_Type> fespacePtr_Type;
587 
588  //! Type of the vector to be used
589  typedef VectorEpetra vector_Type;
590 
591  //@}
592 
593 
594  //! @name Static constants
595  //@{
596 
597  //! Flag for the global current FE
598  const static flag_Type S_globalUpdateFlag;
599 
600  //! Flag for the test current FE
601  const static flag_Type S_testUpdateFlag;
602 
603  //! Flag for the solution current FE
604  const static flag_Type S_solutionUpdateFlag;
605 
606  //@}
607 
608 
609  //! @name Constructors, destructor
610  //@{
611 
612  //! Copy constructor
613  EvaluationInterpolateGradient (const EvaluationInterpolateGradient<MeshType, MapType, 3, 3>& evaluation)
614  :
615  M_fespace ( evaluation.M_fespace),
616  M_vector ( evaluation.M_vector, Repeated),
617  M_offset ( evaluation.M_offset ),
618  M_quadrature (0),
619  M_currentFE (evaluation.M_currentFE),
620  M_interpolatedGradients (evaluation.M_interpolatedGradients)
621  {
622  if (evaluation.M_quadrature != 0)
623  {
624  M_quadrature = new QuadratureRule (* (evaluation.M_quadrature) );
625  }
626  }
627 
628  //! Expression-based constructor
629  explicit EvaluationInterpolateGradient (const ExpressionInterpolateGradient<MeshType, MapType, 3, 3>& expression)
630  :
631  M_fespace ( expression.fespace() ),
632  M_vector ( expression.vector(), Repeated ),
633  M_offset ( expression.offset() ),
634  M_quadrature (0),
635  M_currentFE (M_fespace->refFE(), M_fespace->geoMap() ),
636  M_interpolatedGradients (0)
637  {}
638 
639  //! Destructor
640  ~EvaluationInterpolateGradient()
641  {
642  if (M_quadrature != 0)
643  {
644  delete M_quadrature;
645  }
646  }
647 
648  //@}
649 
650 
651  //! @name Methods
652  //@{
653 
654  //! Internal update: computes the interpolated gradients
655  void update (const UInt& iElement)
656  {
657  zero();
658 
659  M_currentFE.update (M_fespace->mesh()->element (iElement), ET_UPDATE_DPHI);
660  Real nbFEDof (M_fespace->refFE().nbDof() );
661 
662  VectorSmall<3> nodalValues;
663  MatrixSmall<3, 3> nodalGradMatrix;
664 
665  for (UInt i (0); i < nbFEDof; ++i)
666  {
667  for (UInt iField (0); iField < 3; ++iField)
668  {
669  UInt globalID (M_fespace->dof().localToGlobalMap (iElement, i) + iField * M_fespace->dof().numTotalDof() + M_offset);
670  nodalValues[iField] = M_vector[globalID];
671  }
672 
673 
674 
675  for (UInt q (0); q < M_quadrature->nbQuadPt(); ++q)
676  {
677  nodalGradMatrix = M_currentFE.dphi (i, q)
678  + M_currentFE.dphi (i + nbFEDof, q)
679  + M_currentFE.dphi (i + 2 * nbFEDof, q);
680 
681  M_interpolatedGradients[q] += nodalGradMatrix.emult (nodalValues);
682 
683  }
684 
685  }
686  }
687 
688  //! Erase the interpolated gradients stored internally
689  void zero()
690  {
691  for (UInt q (0); q < M_quadrature->nbQuadPt(); ++q)
692  {
693  for (UInt j (0); j < 3; ++j)
694  {
695  for (UInt i (0); i < 3; ++i)
696  {
697  M_interpolatedGradients[q][j][i] = 0.0;
698  }
699  }
700  }
701  }
702 
703  //! Show the values
704  void showValues() const
705  {
706  std::cout << " Gradients : " << std::endl;
707 
708  for (UInt i (0); i < M_quadrature->nbQuadPt(); ++i)
709  {
710  std::cout << M_interpolatedGradients[i] << std::endl;
711  }
712  }
713 
714  //! Display method
715  static void display (std::ostream& out = std::cout)
716  {
717  out << "interpolated[ " << 3 << " ]";
718  }
719 
720  //@}
721 
722 
723  //! @name Set Methods
724  //@{
725 
726  //! Do nothing setter for the global current FE
727  template< typename CFEType >
728  void setGlobalCFE (const CFEType* /*globalCFE*/)
729  {}
730 
731  //! Do nothing setter for the test current FE
732  template< typename CFEType >
733  void setTestCFE (const CFEType* /*testCFE*/)
734  {}
735 
736  //! Do nothing setter for the solution current FE
737  template< typename CFEType >
738  void setSolutionCFE (const CFEType* /*solutionCFE*/)
739  {}
740 
741  //! Setter for the quadrature rule
742  void setQuadrature (const QuadratureRule& qr)
743  {
744  if (M_quadrature != 0)
745  {
746  delete M_quadrature;
747  }
748  M_quadrature = new QuadratureRule (qr);
749  M_currentFE.setQuadratureRule (qr);
750  M_interpolatedGradients.resize (qr.nbQuadPt() );
751  }
752 
753  //@}
754 
755 
756  //! @name Get Methods
757  //@{
758 
759  //! Getter for a value
760  return_Type value_q (const UInt& q) const
761  {
762  return M_interpolatedGradients[q];
763  }
764 
765  //! Getter for the value for a vector
766  return_Type value_qi (const UInt& q, const UInt& /*i*/) const
767  {
768  return M_interpolatedGradients[q];
769  }
770 
771  //! Getter for the value for a matrix
772  return_Type value_qij (const UInt& q, const UInt& /*i*/, const UInt& /*j*/) const
773  {
774  return M_interpolatedGradients[q];
775  }
776 
777  //@}
778 
779 private:
780 
781  //! @name Private Methods
782  //@{
783 
784  //! No empty constructor
785  EvaluationInterpolateGradient();
786 
787  //@}
788 
789  //! Data storage
790  fespacePtr_Type M_fespace;
791  vector_Type M_vector;
792  UInt M_offset;
793  QuadratureRule* M_quadrature;
794 
795  //! Structure for the computations
796  ETCurrentFE<3, 3> M_currentFE;
797 
798  //! Storage for the temporary values
799  std::vector<return_Type> M_interpolatedGradients;
800 };
801 
802 
803 template<typename MeshType, typename MapType >
804 const flag_Type
805 EvaluationInterpolateGradient<MeshType, MapType, 3, 3>::
806 S_globalUpdateFlag = ET_UPDATE_NONE;
807 
808 template<typename MeshType, typename MapType>
809 const flag_Type
810 EvaluationInterpolateGradient<MeshType, MapType, 3, 3>::
811 S_testUpdateFlag = ET_UPDATE_NONE;
812 
813 template<typename MeshType, typename MapType>
814 const flag_Type
815 EvaluationInterpolateGradient<MeshType, MapType, 3, 3>::
816 S_solutionUpdateFlag = ET_UPDATE_NONE;
817 
818 
819 } // Namespace ExpressionAssembly
820 
821 } // Namespace LifeV
822 #endif
VectorEpetra - The Epetra Vector format Wrapper.
uint32_type flag_Type
bit-flag with up to 32 different flags
Definition: LifeV.hpp:197
QuadratureRule(const QuadratureRule &qr)
Copy constructor.
void updateInverseJacobian(const UInt &iQuadPt)
double Real
Generic real data.
Definition: LifeV.hpp:175
QuadratureRule - The basis class for storing and accessing quadrature rules.
const UInt & nbQuadPt() const
Getter for the number of quadrature points.
uint32_type UInt
generic unsigned integer (used mainly for addressing)
Definition: LifeV.hpp:191