1 #ifndef _RHEOLEF_PIOLA_FEM_H
2 #define _RHEOLEF_PIOLA_FEM_H
23 #include "rheolef/piola.h"
24 #include "rheolef/space_constant.h"
25 #include "rheolef/smart_pointer.h"
57 virtual std::string
name()
const = 0;
106 #define _RHEOLEF_inline_value_s(ValueName,Value) \
109 piola_fem_rep<T>::transform (const piola<T>& p, const Value& hat_u, Value& u) const \
111 error_macro (ValueName<<"-valued "<<name()<<" transfom not implemented"); \
115 piola_fem_rep<T>::inv_transform (const piola<T>& p, const Value& u, Value& hat_u) const \
117 error_macro (ValueName<<"-valued "<<name()<<" inverse-transfom not implemented"); \
120 #define _RHEOLEF_inline_value_g(ValueName,Value,GradValue) \
121 _RHEOLEF_inline_value_s(ValueName,Value) \
124 piola_fem_rep<T>::grad_transform ( \
126 const Value& hat_u, \
127 const GradValue& hat_grad_u, \
128 const details::differentiate_option& gopt, \
129 GradValue& grad_u) const \
131 error_macro (ValueName<<"-valued "<<name()<<" grad-transfom not implemented"); \
139 #undef _RHEOLEF_inline_value_s
140 #undef _RHEOLEF_inline_value_g
147 class piola_fem:
public smart_pointer_nocopy<piola_fem_rep<T> > {
152 typedef piola_fem_rep<T> rep;
153 typedef smart_pointer_nocopy<rep> base;
159 piola_fem(rep *
p = 0);
163 bool transform_need_piola()
const;
165 template<
class Value>
166 void transform (
const piola<T>&
p,
const Value& hat_u, Value&
u)
const;
167 template<
class Value>
168 void inv_transform (
const piola<T>&
p,
const Value&
u, Value& hat_u)
const;
169 template<
class Value,
class GradValue>
170 void grad_transform (
173 const GradValue& hat_grad_u,
174 const details::differentiate_option& gopt,
183 piola_fem<T>::piola_fem(rep*
p)
190 piola_fem<T>::transform_need_piola()
const
192 return base::data().transform_need_piola();
195 template<
class Value>
198 piola_fem<T>::transform (
const piola<T>&
p,
const Value& hat_u, Value&
u)
const
200 base::data().transform (
p, hat_u,
u);
203 template<
class Value>
206 piola_fem<T>::inv_transform (
const piola<T>&
p,
const Value&
u, Value& hat_u)
const
208 base::data().inv_transform (
p,
u, hat_u);
211 template<
class Value,
class GradValue>
214 piola_fem<T>::grad_transform (
217 const GradValue& hat_grad_u,
218 const details::differentiate_option& gopt,
221 base::data().grad_transform (
p, hat_u, hat_grad_u, gopt,
grad_u);
field::size_type size_type
virtual void transform(const piola< T > &p, const point_basic< T > &hat_u, point_basic< T > &u) const
virtual void transform(const piola< T > &p, const tensor_basic< T > &hat_u, tensor_basic< T > &u) const
virtual void inv_transform(const piola< T > &p, const tensor3_basic< T > &u, tensor3_basic< T > &hat_u) const
virtual void transform(const piola< T > &p, const tensor3_basic< T > &hat_u, tensor3_basic< T > &u) const
virtual void inv_transform(const piola< T > &p, const tensor4_basic< T > &u, tensor4_basic< T > &hat_u) const
virtual void inv_transform(const piola< T > &p, const tensor_basic< T > &u, tensor_basic< T > &hat_u) const
virtual void transform(const piola< T > &p, const T &hat_u, T &u) const
virtual void grad_transform(const piola< T > &p, const tensor3_basic< T > &hat_u, const tensor4_basic< T > &hat_grad_u, const details::differentiate_option &gopt, tensor4_basic< T > &grad_u) const
virtual void transform(const piola< T > &p, const tensor4_basic< T > &hat_u, tensor4_basic< T > &u) const
virtual void grad_transform(const piola< T > &p, const tensor_basic< T > &hat_u, const tensor3_basic< T > &hat_grad_u, const details::differentiate_option &gopt, tensor3_basic< T > &grad_u) const
virtual std::string name() const =0
virtual bool transform_need_piola() const
virtual void grad_transform(const piola< T > &p, const point_basic< T > &hat_u, const tensor_basic< T > &hat_grad_u, const details::differentiate_option &gopt, tensor_basic< T > &grad_u) const
virtual void inv_transform(const piola< T > &p, const T &u, T &hat_u) const
point_basic< T >::size_type size_type
virtual void grad_transform(const piola< T > &p, const T &hat_u, const point_basic< T > &hat_grad_u, const details::differentiate_option &gopt, point_basic< T > &grad_u) const
virtual void inv_transform(const piola< T > &p, const point_basic< T > &u, point_basic< T > &hat_u) const
see the tensor3 page for the full documentation
see the tensor4 page for the full documentation
see the tensor page for the full documentation
This file is part of Rheolef.
_RHEOLEF_inline_value_g("scalar", T, point_basic< T >) _RHEOLEF_inline_value_g("vector"