1#ifndef _RHEOLEF_FIELD_WDOF_INDIRECT_H
2#define _RHEOLEF_FIELD_WDOF_INDIRECT_H
32#include "rheolef/field_wdof.h"
33#include "rheolef/space.h"
35namespace rheolef {
namespace details {
39template <
class SizeRandomInputIterator
40 ,
class ScalarForwardInputIterator>
47 using value_type =
typename std::iterator_traits<ScalarForwardInputIterator>::value_type;
56 SizeRandomInputIterator dis_idof_iter,
58 ScalarForwardInputIterator val)
79 ScalarForwardInputIterator
_val;
84template <
class SizeRandomInputIterator
85 ,
class ScalarForwardOutputIterator>
101 SizeRandomInputIterator dis_idof_iter,
103 ScalarForwardOutputIterator val)
104 :
base (dis_idof_iter, first_dis_idof, val)
117template <
class T,
class M>
124 using geo_type = geo_basic <float_type,memory_type>;
145 std::string _name()
const;
157template <
class T,
class M>
164 _dom_dis_idof2dis_idof(),
165 _first_dis_idof(V.ownership().first_index())
167 if ( !
_V.get_basis().option().is_trace_n()
168 || (
_V.get_geo().map_dimension() !=
_dom.map_dimension() + 1)) {
180 bopt.set_trace (
false);
188template <
class T,
class M>
195 _V.
get_geo().name() +
"[" + _dom.name() +
"]" :
197 return _V.get_basis().name() +
"{" + dom_name +
"}";
205template <
class FieldRdof>
209 typename FieldRdof::scalar_type
210 ,typename FieldRdof::memory_type
224 ,
typename FieldRdof::const_iterator>;
230 template<
class Sfinae
231 =
typename std::enable_if<
253template <
class FieldRdof>
256template<
class FieldRdof>
265template<
class FieldRdof>
266template<
class Sfinae>
270:
base(uh.get_space(), dom),
274template<
class FieldRdof>
281template<
class FieldRdof>
286 return const_iterator (base::_dom_dis_idof2dis_idof.begin(), base::_first_dis_idof, _uh_const.begin_dof());
288template<
class FieldRdof>
293 return const_iterator (base::_dom_dis_idof2dis_idof.end(), base::_first_dis_idof, _uh_const.begin_dof());
295template<
class FieldRdof>
300 size_type dis_idof = base::_dom_dis_idof2dis_idof.dis_at (dom_dis_idof);
301 return _uh_const.dis_dof (dis_idof);
310template <
class FieldWdof>
314 typename FieldWdof::scalar_type
315 ,typename FieldWdof::memory_type
330 ,
typename FieldWdof::const_iterator>;
333 ,
typename FieldWdof::iterator>;
342 template<
class Sfinae
343 =
typename std::enable_if<
350 template <
class Value>
351 typename std::enable_if<
357 template <
class FieldRdof>
358 typename std::enable_if<
364 template<
class FieldLazy>
365 typename std::enable_if<
378 template <
class SetOp = details::
generic_set_op>
393template<
class FieldWdof>
394struct is_field_wdof <field_wdof_indirect<FieldWdof>>: std::true_type {};
397template<
class FieldWdof>
400template<
class FieldWdof>
407template<
class FieldWdof>
414template<
class FieldWdof>
415template<
class Sfinae>
419:
base (uh.get_space(), dom),
424template<
class FieldWdof>
434template<
class FieldWdof>
439 return const_iterator (base::_dom_dis_idof2dis_idof.begin(), base::_first_dis_idof, _uh.begin_dof());
441template<
class FieldWdof>
446 return const_iterator (base::_dom_dis_idof2dis_idof.end(), base::_first_dis_idof, _uh.begin_dof());
448template<
class FieldWdof>
453 return iterator (base::_dom_dis_idof2dis_idof.begin(), base::_first_dis_idof, _uh.begin_dof());
455template<
class FieldWdof>
460 return iterator (base::_dom_dis_idof2dis_idof.end(), base::_first_dis_idof, _uh.begin_dof());
462template<
class FieldWdof>
467 size_type dis_idof = base::_dom_dis_idof2dis_idof.dis_at (dom_dis_idof);
468 return _uh.dis_dof (dis_idof);
470template<
class FieldWdof>
475 size_type dis_idof = base::_dom_dis_idof2dis_idof.dis_at (dom_dis_idof);
476 return _uh.dis_dof_entry (dis_idof);
field::size_type size_type
see the basis page for the full documentation
see the basis_option page for the full documentation
disarray< size_type, memory_type > _dom_dis_idof2dis_idof
size_type dis_ndof() const
size_type _first_dis_idof
typename geo_type::size_type size_type
geo_basic< float_type, memory_type > geo_type
const geo_type & get_geo() const
const space_type & get_space() const
typename float_traits< T >::type float_type
field_indirect_base(const space_type &V, const geo_type &dom)
space_basic< float_type, memory_type > space_type
const distributor & ownership() const
const communicator & comm() const
ScalarForwardInputIterator _val
const value_type * pointer
typename std::iterator_traits< ScalarForwardInputIterator >::value_type value_type
bool operator==(const self_type &j) const
field_indirect_const_iterator< SizeRandomInputIterator, ScalarForwardInputIterator > self_type
size_type _first_dis_idof
std::forward_iterator_tag iterator_category
self_type & operator+=(difference_type n)
SizeRandomInputIterator _dis_idof_iter
const value_type & operator*() const
bool operator!=(const self_type &j) const
const value_type & reference
std::ptrdiff_t difference_type
field_indirect_const_iterator(SizeRandomInputIterator dis_idof_iter, size_type first_dis_idof, ScalarForwardInputIterator val)
self_type operator+(difference_type n) const
typename base::value_type value_type
field_indirect_iterator(SizeRandomInputIterator dis_idof_iter, size_type first_dis_idof, ScalarForwardOutputIterator val)
self_type & operator+=(difference_type n)
field_indirect_iterator< SizeRandomInputIterator, ScalarForwardOutputIterator > self_type
typename base::size_type size_type
std::ptrdiff_t difference_type
self_type operator+(difference_type n) const
typename FieldRdof::scalar_type scalar_type
typename base::space_type space_type
typename base::geo_type geo_type
const scalar_type & dof(size_type idof) const
const FieldRdof _uh_const
const_iterator begin_dof() const
typename base::size_type size_type
field_indirect_const_iterator< typename disarray< size_type, memory_type >::const_iterator,typename FieldRdof::const_iterator > const_iterator
typename FieldRdof::memory_type memory_type
field_rdof_indirect_const()=delete
const_iterator end_dof() const
const scalar_type & dis_dof(size_type dis_idof) const
std::enable_if< details::is_rheolef_arithmetic< Value >::value, field_wdof_base< field_wdof_indirect< FieldWdof > > & >::type operator=(const Value &)
void dis_dof_update(const SetOp &set_op=SetOp()) const
typename base::space_type space_type
const scalar_type & dis_dof(size_type dis_idof) const
field_indirect_const_iterator< typename disarray< size_type, memory_type >::const_iterator,typename FieldWdof::const_iterator > const_iterator
typename base::geo_type geo_type
const scalar_type & dof(size_type idof) const
typename FieldWdof::scalar_type scalar_type
const_iterator begin_dof() const
field_indirect_iterator< typename disarray< size_type, memory_type >::const_iterator,typename FieldWdof::iterator > iterator
typename FieldWdof::dis_reference dis_reference
typename base::size_type size_type
dis_reference dis_dof_entry(size_type dis_idof)
field_wdof_indirect(const field_wdof_indirect< FieldWdof > &)=delete
field_wdof_indirect()=delete
field_wdof_indirect< FieldWdof > & operator=(const field_wdof_indirect< FieldWdof > &)
typename FieldWdof::memory_type memory_type
const_iterator end_dof() const
scalar_type & dof(size_type idof)
see the disarray page for the full documentation
rep::base::const_iterator const_iterator
see the distributor page for the full documentation
size_type dis_size() const
global and local sizes
size_type size(size_type iproc) const
const communicator_type & comm() const
abstract base interface class
#define trace_macro(message)
This file is part of Rheolef.
bool have_homogeneous_space(space_basic< scalar_type, memory_type > &Vh) const
typename FieldRdof::scalar_type scalar_type
typename FieldRdof::size_type size_type
typename FieldRdof::memory_type memory_type
typename FieldWdof::size_type size_type
typename FieldWdof::scalar_type scalar_type
typename FieldWdof::memory_type memory_type