Rheolef  7.1
an efficient C++ finite element environment
piola_fem_lagrange.h
Go to the documentation of this file.
1 #ifndef _RHEOLEF_PIOLA_FEM_LAGRANGE_H
2 #define _RHEOLEF_PIOLA_FEM_LAGRANGE_H
3 #include "rheolef/piola_fem.h"
24 namespace rheolef {
25 
26 /*Class:piola_fem
27 NAME: @code{piola_fem_lagrange} - maps a Lagrange finite element method
28 @cindex piola transformation
29 @cindex finite element method
30 SYNOPSIS:
31  @noindent
32  The @code{piola_fem_lagrange} defines how a finite element
33  method of Lagrange type maps from a corresponding method defined on a reference element:
34 @iftex
35 @tex
36  $$
37  u(F(\widehat{\boldsymbol{x}})) = \widehat{u}(\widehat{\boldsymbol{x}})
38  $$
39  for all $\widehat{\boldsymbol{x}}$ in the reference element $\widehat{K}$
40  and where $F$ denotes the Piola transformation that maps the
41  the reference element $\widehat{K}$
42  into the element $\widehat{K}$.
43 @end tex
44 @end iftex
45 @ifnottex
46  @example
47  u(F(hat_x)) = hat_u(hat_x)
48  @end example
49  for all hat_x in the reference element hat_K
50  and where F denotes the Piola transformation that maps the
51  the reference element hat_K
52  into the element K.
53 @end ifnottex
54  See also the
55  @code{piola_fem} abstract class
56  and the @code{basis} class for finite element methods definied on a
57  reference element.
58 AUTHORS:
59  LMC-IMAG, 38041 Grenoble cedex 9, France
60  | Pierre.Saramito@imag.fr
61 DATE: 26 january 2019
62 End:
63 */
64 template<class T>
66 public:
68  typedef typename base::value_type value_type;
70  std::string name() const { return "Lagrange"; }
71 
72  bool transform_need_piola() const { return false; }
73 
74 #define _RHEOLEF_transform(Value,GradValue) \
75  void transform (const piola<T>& p, const Value& hat_u, Value& u) const; \
76  void inv_transform (const piola<T>& p, const Value& u, Value& hat_u) const; \
77  void grad_transform ( \
78  const piola<T>& p, \
79  const Value& hat_u, \
80  const GradValue& hat_grad_u, \
81  const details::differentiate_option& gopt, \
82  GradValue& grad_u) const; \
83 
87 #undef _RHEOLEF_transform
88 };
89 
90 }// namespace rheolef
91 #endif // _RHEOLEF_PIOLA_FEM_LAGRANGE_H
rheolef::piola_fem_lagrange::piola_fem_lagrange
piola_fem_lagrange()
Definition: piola_fem_lagrange.h:69
rheolef::piola_fem_lagrange::name
std::string name() const
Definition: piola_fem_lagrange.h:70
rheolef::point_basic
Definition: point.h:87
rheolef::piola_fem_lagrange
Definition: piola_fem_lagrange.h:65
rheolef::piola_fem_lagrange::value_type
base::value_type value_type
Definition: piola_fem_lagrange.h:68
rheolef::piola_fem_lagrange::transform_need_piola
bool transform_need_piola() const
Definition: piola_fem_lagrange.h:72
rheolef::tensor_basic
Definition: tensor.h:90
rheolef::tensor3_basic
Definition: tensor3.h:73
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
rheolef::piola_fem_rep
Definition: piola_fem.h:51
rheolef::piola_fem_lagrange::_RHEOLEF_transform
_RHEOLEF_transform(T, point_basic< T >) _RHEOLEF_transform(point_basic< T >
rheolef::piola_fem_lagrange::base
piola_fem_rep< T > base
Definition: piola_fem_lagrange.h:67
rheolef::piola_fem_rep::value_type
T value_type
Definition: piola_fem.h:53
T
Expr1::float_type T
Definition: field_expr.h:261