1 # ifndef _RHEOLEF_FIELD_INDIRECT_H
2 # define _RHEOLEF_FIELD_INDIRECT_H
4 #include "rheolef/field.h"
8 template <
class T,
class M>
9 class field_indirect_const;
11 template <
class T,
class M = rheo_default_memory_model>
25 _W(dom,
_V.get_numbering().name(),
_V.valued()),
45 std::string
stamp()
const;
64 template<
class T,
class M>
69 std::fill (begin_dof(), end_dof(), alpha);
72 template<
class T,
class M>
78 check_macro (stamp() == expr.
stamp(),
"field[domain] = field : incompatible spaces "
79 << stamp() <<
" and " << expr.
stamp());
83 template<
class T,
class M>
89 check_macro (stamp() == expr.
stamp(),
"field[domain] = field[domain]: incompatible spaces "
90 << stamp() <<
" and " << expr.
stamp());
94 template<
class T,
class M>
100 return _V.get_numbering().name() +
"(" + _V.get_geo().name() +
"[" + _dom.name() +
"])";
102 template<
class T,
class M>
107 dis_dof_update_needed();
110 template<
class T,
class M>
115 dis_dof_update_needed();
116 return operator[] (get_space().get_geo().
operator[] (dom_name));
118 template<
class T,
class M>
127 << stamp() <<
" and " << expr.
stamp()
128 <<
" in field = field[domain]");
130 dis_dof_update_needed();
134 template<
class T,
class M>
140 _dis_dof_update_needed(true)
144 template <
class T,
class M>
154 : _idof_iter(idof_iter),
_val(val) {}
167 template<
class T,
class M>
172 return iterator (_indirect.begin(), _val);
174 template<
class T,
class M>
179 return iterator (_indirect.end(), _val);
181 template <
class T,
class M>
191 : _idof_iter(idof_iter),
_val(val) {}
203 template<
class T,
class M>
210 template<
class T,
class M>
217 template <
class T,
class M = rheo_default_memory_model>
230 _W(dom,
_V.get_numbering().name(),
_V.valued()),
250 std::string
stamp()
const;
256 const_iterator
end_dof()
const;
265 template<
class T,
class M>
271 return _V.get_numbering().name() +
"(" + _V.get_geo().name() +
"[" + _dom.name() +
"])";
273 template<
class T,
class M>
280 template<
class T,
class M>
285 return operator[] (get_space().get_geo().
operator[] (dom_name));
287 template<
class T,
class M>
293 _dis_dof_update_needed(true)
297 template<
class T,
class M>
306 << stamp() <<
" and " << expr.
stamp()
307 <<
" in field = field[domain]");
309 dis_dof_update_needed();
313 template<
class T,
class M>
319 check_macro (stamp() == expr.
stamp(),
"field[domain] = field[domain]: incompatible spaces "
320 << stamp() <<
" and " << expr.
stamp());
324 template <
class T,
class M>
336 : _idof_iter(idof_iter),
_val(val) {}
348 template<
class T,
class M>
355 template<
class T,
class M>
362 template <
class T,
class M>
365 operator << (odiststream& ops, const field_indirect<T,M>& uh)
368 return tmp.
put (ops);
370 template <
class T,
class M>
373 operator << (odiststream& ops, const field_indirect_const<T,M>& uh)
376 return tmp.
put (ops);