37
38
class form_element_rep {
40
typedef geo_element::size_type size_type;
41
typedef typename scalar_traits<T>::type float_type;
42
typedef point_basic<float_type> vertex_type;
43
typedef space_basic<float_type,M> space_type;
44
typedef geo_basic<float_type,M> geo_type;
45
typedef space_constant::coordinate_type coordinate_type;
41
typedef geo_element::size_type size_type;
42
typedef typename scalar_traits<T>::type float_type;
43
typedef point_basic<float_type> vertex_type;
44
typedef space_basic<float_type,M> space_type;
45
typedef geo_basic<float_type,M> geo_type;
46
typedef space_constant::coordinate_type coordinate_type;
47
typedef typename basis_on_pointset<T>::const_iterator quad_const_iterator;
48
typedef typename basis_on_pointset<T>::const_iterator_grad quad_const_iterator_grad;
92
95
static void cumul_otimes (
93
96
ublas::matrix<T>& m,
95
basis_on_quadrature::const_iterator phi,
96
basis_on_quadrature::const_iterator last_phi,
97
basis_on_quadrature::const_iterator first_psi,
98
basis_on_quadrature::const_iterator last_psi);
98
quad_const_iterator phi,
99
quad_const_iterator last_phi,
100
quad_const_iterator first_psi,
101
quad_const_iterator last_psi);
100
103
static void cumul_otimes (
101
104
ublas::matrix<T>& m,
103
basis_on_quadrature::const_iterator_grad grad_phi,
104
basis_on_quadrature::const_iterator_grad last_grad_phi,
105
basis_on_quadrature::const_iterator_grad first_grad_psi,
106
basis_on_quadrature::const_iterator_grad last_grad_psi,
105
const tensor_basic<T>& Dw,
106
quad_const_iterator_grad grad_phi,
107
quad_const_iterator_grad last_grad_phi,
108
quad_const_iterator_grad first_grad_psi,
109
quad_const_iterator_grad last_grad_psi,
107
110
size_type map_d);
109
112
// for scalar-weighted forms:
129
132
bool use_coordinate_system_dual_weight () const
130
133
{ return _use_coordinate_system_dual_weight; }
133
const basis& get_weight_basis () const;
134
void weight (const geo_element& K, size_type q, tensor& W) const;
136
const numbering& get_first_numbering() const;
137
const numbering& get_second_numbering() const;
139
const geo& get_global_geo() const;
141
// toolbox for building elementary forms:
143
static void cumul_otimes (
146
basis_on_quadrature::const_iterator phi,
147
basis_on_quadrature::const_iterator last_phi,
148
basis_on_quadrature::const_iterator_grad first_grad_psi,
149
basis_on_quadrature::const_iterator_grad last_grad_psi);
150
static void cumul_otimes (
153
basis_on_quadrature::const_iterator phi,
154
basis_on_quadrature::const_iterator last_phi,
155
basis_on_quadrature::const_iterator_hessian first_hessian_psi,
156
basis_on_quadrature::const_iterator_hessian last_hessian_psi);
157
static void cumul_otimes (
160
basis_on_quadrature::const_iterator_grad grad_phi,
161
basis_on_quadrature::const_iterator_grad last_grad_phi,
162
basis_on_quadrature::const_iterator_grad first_grad_psi,
163
basis_on_quadrature::const_iterator_grad last_grad_psi);
165
void build_general_mass(const geo_element& K, ublas::matrix<T>& m) const;
166
void build_d_ds (const geo_element& K, ublas::matrix<T>& m) const;
167
void build_d2_ds2 (const geo_element& K, ublas::matrix<T>& m) const;
168
void build_d_ds_d_ds (const geo_element& K, ublas::matrix<T>& m) const;
169
void build_grad_grad (const geo_element& K, ublas::matrix<T>& m) const;
170
void build_gradt_grad (const geo_element& K, ublas::matrix<T>& m) const;
171
void build_div_div (const geo_element& K, ublas::matrix<T>& m) const;
172
void d_dx (const geo_element& K, ublas::matrix<T>& m, size_type idx) const;
135
// for banded level set method:
137
bool is_on_band() const { return _is_on_band; }
138
void set_band (const band_basic<T,M>& bh) const { _band = bh; _is_on_band = true; }
139
const band_basic<T,M>& get_band() const { return _band; }
178
space_type _X; // also origin dof numbering
179
space_type _Y; // also destination dof numbering
180
geo_type _omega; // for the access to distributed vertices
143
space_type _X; // also origin dof numbering
144
space_type _Y; // also destination dof numbering
145
geo_type _omega; // for the access to distributed vertices
182
147
mutable bool _initialized;
183
148
mutable size_type _n_derivative; // e.g. =2 for grad_grad and =0 for mass
184
mutable quadrature _quad;
149
mutable quadrature<T> _quad;
185
150
mutable quadrature_option_type _qopt;
186
mutable basis_on_quadrature _bx_table;
187
mutable basis_on_quadrature _by_table;
188
mutable basis_on_quadrature _piola_table;
151
mutable basis_on_pointset<T> _bx_table;
152
mutable basis_on_pointset<T> _by_table;
153
mutable basis_on_pointset<T> _piola_table;
190
155
mutable bool _is_weighted;
191
156
mutable field_basic<T,M> _wh;
192
mutable basis_on_quadrature _bw_table;
157
mutable basis_on_pointset<T> _bw_table;
193
158
mutable bool _use_coordinate_system_weight;
194
159
mutable bool _use_coordinate_system_dual_weight;
161
mutable bool _is_on_band;
162
mutable band_basic<T,M> _band;
198
166
// automatically generated implementation in form_element_make.cc :
346
form_element_rep::get_weight_basis () const
348
return get_weight().get_space().get_basis();
352
form_element_rep::get_first_numbering() const
354
return get_first_space().get_numbering();
358
form_element_rep::get_second_numbering() const
360
return get_second_space().get_numbering();
364
form_element_rep::set_use_coordinate_system_weight (bool use) const
366
_use_coordinate_system_weight = use;
370
form_element_rep::use_coordinate_system_weight () const
372
return _use_coordinate_system_weight;
376
form_element_rep::set_use_coordinate_system_dual_weight (bool use) const
378
_use_coordinate_system_dual_weight = use;
382
form_element_rep::use_coordinate_system_dual_weight () const
384
return _use_coordinate_system_dual_weight;
388
315
// ----------------------------------------------------------
390
317
// ----------------------------------------------------------
516
446
return base::data().get_weight();
448
template <class T, class M>
451
form_element<T,M>::is_on_band() const
453
return base::data().is_on_band();
455
template <class T, class M>
458
form_element<T,M>::set_band(const band_basic<T,M>& bh) const
460
return base::data().set_band(bh);
462
template <class T, class M>
464
const band_basic<T,M>&
465
form_element<T,M>::get_band() const
467
return base::data().get_band();
519
470
}// namespace rheolef
520
471
#endif // _RHEOLEF_FORM_ELEMENT_H