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;
164 std::string
name()
const;
166 template<
class Value>
167 void transform (
const piola<T>&
p,
const Value& hat_u, Value&
u)
const;
168 template<
class Value>
169 void inv_transform (
const piola<T>&
p,
const Value&
u, Value& hat_u)
const;
170 template<
class Value,
class GradValue>
171 void grad_transform (
174 const GradValue& hat_grad_u,
175 const details::differentiate_option& gopt,
184 piola_fem<T>::piola_fem(rep*
p)
193 return base::data().name();
198 piola_fem<T>::transform_need_piola()
const
200 return base::data().transform_need_piola();
203 template<
class Value>
206 piola_fem<T>::transform (
const piola<T>&
p,
const Value& hat_u, Value&
u)
const
208 base::data().transform (
p, hat_u,
u);
211 template<
class Value>
214 piola_fem<T>::inv_transform (
const piola<T>&
p,
const Value&
u, Value& hat_u)
const
216 base::data().inv_transform (
p,
u, hat_u);
219 template<
class Value,
class GradValue>
222 piola_fem<T>::grad_transform (
225 const GradValue& hat_grad_u,
226 const details::differentiate_option& gopt,
229 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"