67
template<class T, class M>
67
68
class form_element_rep {
70
typedef geo_element::size_type size_type;
71
typedef basic_point<T> vertex_type;
71
typedef geo_element::size_type size_type;
72
typedef typename scalar_traits<T>::type float_type;
73
typedef basic_point<float_type> vertex_type;
74
typedef element<float_type> element_type;
75
typedef geo_basic<float_type,M> geo_type;
75
79
form_element_rep();
80
const geo_basic<T>& omega);
82
const element_type& X,
83
const element_type& Y,
84
const geo_type& omega);
82
86
virtual ~form_element_rep();
83
87
void initialize_all();
87
91
virtual void operator() (const geo_element& K, ublas::matrix<T>& m) const = 0;
88
92
virtual void initialize () = 0;
93
virtual bool is_symmetric () const = 0;
92
const element<T>& get_first_element() const;
93
const element<T>& get_second_element() const;
97
const element_type& get_first_element() const;
98
const element_type& get_second_element() const;
95
100
const basis& get_first_basis() const;
96
101
const basis& get_second_basis() const;
218
223
// automatically generated implementation in form_element_make.cc :
219
static form_element_rep<T>* make_ptr (
224
static form_element_rep<T,M>* make_ptr (
220
225
std::string name,
223
const geo_basic<T>& omega);
226
const element_type& X,
227
const element_type& Y,
228
const geo_type& omega);
225
230
// -----------------------------------------------------------------------
227
232
// -----------------------------------------------------------------------
234
template<class T, class M>
231
form_element_rep<T>::form_element_rep()
236
form_element_rep<T,M>::form_element_rep()
262
form_element_rep<T>::~form_element_rep()
267
const typename form_element_rep<T>::vertex_type&
268
form_element_rep<T>::par_vertex(size_type par_iv) const
270
return _omega.par_vertex (par_iv);
275
form_element_rep<T>::get_first_element() const
265
template<class T, class M>
267
form_element_rep<T,M>::~form_element_rep()
270
template<class T, class M>
272
const typename form_element_rep<T,M>::vertex_type&
273
form_element_rep<T,M>::dis_vertex(size_type dis_iv) const
275
return _omega.dis_vertex (dis_iv);
277
template<class T, class M>
279
const typename form_element_rep<T,M>::element_type&
280
form_element_rep<T,M>::get_first_element() const
284
template<class T, class M>
282
form_element_rep<T>::get_second_element() const
286
const typename form_element_rep<T,M>::element_type&
287
form_element_rep<T,M>::get_second_element() const
289
form_element_rep<T>::get_first_basis() const
291
return get_first_element().get_basis();
296
form_element_rep<T>::get_second_basis() const
298
return get_first_element().get_basis();
291
template<class T, class M>
294
form_element_rep<T,M>::get_first_basis() const
296
return get_first_element().get_basis();
298
template<class T, class M>
301
form_element_rep<T,M>::get_second_basis() const
303
return get_first_element().get_basis();
305
template<class T, class M>
303
form_element_rep<T>::get_p1_transformation () const
308
form_element_rep<T,M>::get_p1_transformation () const
305
310
return get_first_element().get_p1_transformation();
312
template<class T, class M>
309
typename form_element_rep<T>::size_type
310
form_element_rep<T>::coordinate_dimension() const
314
typename form_element_rep<T,M>::size_type
315
form_element_rep<T,M>::coordinate_dimension() const
312
317
return _omega.dimension();
319
template<class T, class M>
316
typename form_element_rep<T>::size_type
317
form_element_rep<T>::n_derivative() const
321
typename form_element_rep<T,M>::size_type
322
form_element_rep<T,M>::n_derivative() const
319
324
return _n_derivative;
326
template<class T, class M>
324
form_element_rep<T>::set_n_derivative (size_type n)
329
form_element_rep<T,M>::set_n_derivative (size_type n)
326
331
_n_derivative = n;
387
392
// ----------------------------------------------------------
391
class form_element : public smart_pointer<form_element_rep<T> > {
395
template <class T, class M>
396
class form_element : public smart_pointer<form_element_rep<T,M> > {
396
typedef form_element_rep<T> data_type;
397
typedef typename data_type::size_type size_type;
398
typedef typename data_type::vertex_type vertex_type;
401
typedef form_element_rep<T,M> rep;
402
typedef smart_pointer<rep> base;
403
typedef typename rep::size_type size_type;
404
typedef typename rep::vertex_type vertex_type;
405
typedef typename rep::element_type element_type;
406
typedef typename rep::geo_type geo_type;
404
412
std::string name,
407
const geo_basic<T>& omega);
413
const element_type& X,
414
const element_type& Y,
415
const geo_type& omega);
409
417
// accessors & modifier:
411
419
void operator() (const geo_element& K, ublas::matrix<T>& m) const;
420
virtual bool is_symmetric () const;
414
423
void set_weight (const field& wh) const;
420
429
// -----------------------------------------------------------
422
431
// -----------------------------------------------------------
432
template <class T, class M>
425
form_element<T>::form_element ()
426
: smart_pointer<data_type> (data_type::make_ptr())
434
form_element<T,M>::form_element ()
435
: base (rep::make_ptr())
438
template <class T, class M>
431
form_element<T>::form_element (
440
form_element<T,M>::form_element (
432
441
std::string name,
435
const geo_basic<T>& omega)
436
: smart_pointer<data_type> (data_type::make_ptr(name,X,Y,omega))
442
const element_type& X,
443
const element_type& Y,
444
const geo_type& omega)
445
: base (rep::make_ptr(name,X,Y,omega))
448
template <class T, class M>
442
form_element<T>::operator() (const geo_element& K, ublas::matrix<T>& m) const
444
smart_pointer<data_type>::data().operator() (K, m);
451
form_element<T,M>::operator() (const geo_element& K, ublas::matrix<T>& m) const
453
base::data().operator() (K, m);
455
template <class T, class M>
458
form_element<T,M>::is_symmetric () const
460
return base::data().is_symmetric();
447
463
}// namespace rheolef