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) \
109piola_fem_rep<T>::transform (const piola<T>& p, const Value& hat_u, Value& u) const \
111 error_macro (ValueName<<"-valued "<<name()<<" transfom not implemented"); \
115piola_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) \
124piola_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
147class piola_fem:
public smart_pointer_nocopy<piola_fem_rep<T> > {
152 typedef piola_fem_rep<T> rep;
153 typedef smart_pointer_nocopy<rep> base;
154 typedef typename rep::value_type value_type;
155 typedef typename rep::size_type
size_type;
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,
184piola_fem<T>::piola_fem(rep*
p)
191piola_fem<T>::name()
const
193 return base::data().name();
198piola_fem<T>::transform_need_piola()
const
200 return base::data().transform_need_piola();
206piola_fem<T>::transform (
const piola<T>&
p,
const Value& hat_u, Value&
u)
const
208 base::data().transform (
p, hat_u,
u);
214piola_fem<T>::inv_transform (
const piola<T>&
p,
const Value&
u, Value& hat_u)
const
216 base::data().inv_transform (
p,
u, hat_u);
219template<
class Value,
class GradValue>
222piola_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"