1 # ifndef _RHEOLEF_FORM_WEIGHTED_H
2 # define _RHEOLEF_FORM_WEIGHTED_H
3 #include "rheolef/form.h"
6 template<
class T,
class M>
7 template<
class WeightFunction>
10 const std::string& name,
12 WeightFunction weight,
15 if (name ==
"" || name ==
"nul" || name ==
"null") {
17 _uu.resize (_Y.iu_ownership(), _X.iu_ownership());
18 _ub.resize (_Y.iu_ownership(), _X.ib_ownership());
19 _bu.resize (_Y.ib_ownership(), _X.iu_ownership());
20 _bb.resize (_Y.ib_ownership(), _X.ib_ownership());
27 if (X_is_on_domain == Y_is_on_domain) {
30 omega = _X.get_geo().get_background_geo();
36 if (X_is_on_domain == Y_is_on_domain) {
37 assembly (form_e, _X.get_geo(), _Y.get_geo());
38 }
else if (X_is_on_domain) {
39 check_macro (_X.get_geo().get_background_geo() == _Y.get_geo(),
40 "form between incompatible geo " << _X.get_geo().name() <<
" and " << _Y.get_geo().name());
41 const geo_basic<T,M>& Y_gamma = _X.get_geo().get_background_domain();
42 bool X_geo_is_background =
false;
43 assembly (form_e, _X.get_geo(), Y_gamma, X_geo_is_background);
45 check_macro (_Y.get_geo().get_background_geo() == _X.get_geo(),
46 "form between incompatible geo " << _X.get_geo().name() <<
" and " << _Y.get_geo().name());
47 const geo_basic<T,M>& X_gamma = _Y.get_geo().get_background_domain();
48 bool X_geo_is_background =
true;
49 assembly (form_e, X_gamma, _Y.get_geo(), X_geo_is_background);
52 template<
class T,
class M>
53 template<
class Function>
58 const std::string& name,
70 template<
class T,
class M>
71 template<
class WeightFunction>
74 const std::string& name,
77 WeightFunction weight,
83 if (has_weight) form_e.
set_weight (weight, w_omega);
84 assembly (form_e, gamma, gamma);
86 template<
class T,
class M>
87 template<
class Function>
91 const std::string& name,