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"
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>
167 if ( !
_V.get_basis().option().is_trace_n()
168 || (
_V.get_geo().map_dimension() !=
_dom.map_dimension() + 1)) {
169 _W = space_type (dom, _V.get_basis().name());
173 size_type k = _V.get_basis().degree();
174 _W = space_type (dom,
"P"+std::to_string(k)+
"d", _V.valued());
178 basis b = _V.get_basis();
179 basis_option bopt = b.option();
180 bopt.set_trace (false);
182 _W = space_type (dom, b.name());
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>
274template<
class FieldRdof>
281template<
class FieldRdof>
288template<
class FieldRdof>
295template<
class FieldRdof>
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>
382 const_iterator
end_dof()
const;
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>
424template<
class FieldWdof>
434template<
class FieldWdof>
441template<
class FieldWdof>
448template<
class FieldWdof>
455template<
class FieldWdof>
462template<
class FieldWdof>
468 return _uh.dis_dof (dis_idof);
470template<
class FieldWdof>
476 return _uh.dis_dof_entry (dis_idof);
see the communicator 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
const geo_type & get_geo() const
const space_type & get_space() const
geo_basic< float_type, memory_type > geo_type
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
ScalarForwardOutputIterator _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)
field_indirect_const_iterator< SizeRandomInputIterator, ScalarForwardOutputIterator > base
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
field_indirect_const_iterator< typename disarray< size_type, memory_type >::const_iterator,typename FieldRdof::const_iterator > const_iterator
typename FieldRdof::scalar_type scalar_type
field_indirect_base< scalar_type, memory_type > base
typename base::space_type space_type
typename base::geo_type geo_type
field_rdof_indirect_const(const FieldRdof &uh, const geo_type &dom)
const scalar_type & dof(size_type idof) const
field_rdof_indirect_const(const field_wdof_indirect< FieldRdof > &uh)
const FieldWdof _uh_const
const_iterator begin_dof() const
typename base::size_type size_type
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
field_indirect_base< scalar_type, memory_type > base
typename base::space_type space_type
const scalar_type & dis_dof(size_type dis_idof) const
field_indirect_iterator< typename disarray< size_type, memory_type >::const_iterator,typename FieldWdof::iterator > 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_wdof_base< field_wdof_indirect< FieldWdof > > base0
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_indirect_const_iterator< typename disarray< size_type, memory_type >::const_iterator,typename FieldWdof::const_iterator > const_iterator
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
#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
field_rdof_indirect_const< FieldWdof > type