Loading...
Searching...
No Matches
field_wdof_indirect.h
Go to the documentation of this file.
#ifndef _RHEOLEF_FIELD_WDOF_INDIRECT_H
#define _RHEOLEF_FIELD_WDOF_INDIRECT_H
// proxy class for the trace on subdomains: uh["boundary"], vh["east"]
// SUMMARY:
// 1. field_indirect_const_iterator
// 2. field_indirect_iterator
// 3. field_indirect_base
// 4. field_rdof_indirect_const
// 5. field_wdof_indirect
#include "rheolef/field_wdof.h"
#include "rheolef/space.h"
namespace rheolef { namespace details {
// =================================================================================
// 1. field_indirect_const_iterator
// =================================================================================
template <class SizeRandomInputIterator
,class ScalarForwardInputIterator>
class field_indirect_const_iterator {
public:
// definitions:
using iterator_category = std::forward_iterator_tag;
using size_type = std::size_t;
using value_type = typename std::iterator_traits<ScalarForwardInputIterator>::value_type;
using reference = const value_type&;
using pointer = const value_type*;
using difference_type = std::ptrdiff_t;
using self_type = field_indirect_const_iterator<SizeRandomInputIterator,ScalarForwardInputIterator>;
// allocator:
field_indirect_const_iterator (
SizeRandomInputIterator dis_idof_iter,
size_type first_dis_idof,
ScalarForwardInputIterator val)
: _dis_idof_iter(dis_idof_iter),
_first_dis_idof(first_dis_idof),
_val(val)
{}
// accessors & modifiers:
const value_type& operator* () const { return _val [*_dis_idof_iter - _first_dis_idof]; }
self_type& operator++() { ++_dis_idof_iter; return *this; }
self_type& operator+= (difference_type n) { _dis_idof_iter += n; return *this; }
self_type operator+ (difference_type n) const { self_type tmp = *this; return tmp += n; }
// comparators:
bool operator== (const self_type& j) const { return _dis_idof_iter == j._dis_idof_iter; }
bool operator!= (const self_type& j) const { return ! operator== (j); }
protected:
// data:
SizeRandomInputIterator _dis_idof_iter;
size_type _first_dis_idof;
ScalarForwardInputIterator _val;
};
// =================================================================================
// 2. field_indirect_iterator
// =================================================================================
template <class SizeRandomInputIterator
,class ScalarForwardOutputIterator>
class field_indirect_iterator:
public field_indirect_const_iterator<SizeRandomInputIterator,ScalarForwardOutputIterator>
{
public:
// definitions:
using base = field_indirect_const_iterator<SizeRandomInputIterator,ScalarForwardOutputIterator>;
using size_type = typename base::size_type;
using value_type = typename base::value_type;
using difference_type = std::ptrdiff_t;
using self_type = field_indirect_iterator<SizeRandomInputIterator,ScalarForwardOutputIterator>;
// allocator:
field_indirect_iterator (
SizeRandomInputIterator dis_idof_iter,
size_type first_dis_idof,
ScalarForwardOutputIterator val)
: base (dis_idof_iter, first_dis_idof, val)
{}
// accessors & modifiers:
value_type& operator* () { return base::_val [*base::_dis_idof_iter - base::_first_dis_idof]; }
self_type& operator++() { ++base::_dis_idof_iter; return *this; }
self_type& operator+= (difference_type n) { base::_dis_idof_iter += n; return *this; }
self_type operator+ (difference_type n) const { self_type tmp = *this; return tmp += n; }
};
// =================================================================================
// 3. field_indirect_base
// =================================================================================
template <class T, class M>
class field_indirect_base {
public:
// definitions:
using float_type = typename float_traits<T>::type;
using memory_type = M;
using geo_type = geo_basic <float_type,memory_type>;
using space_type = space_basic<float_type,memory_type>;
using size_type = typename geo_type::size_type;
// allocators:
field_indirect_base (const space_type& V, const geo_type& dom);
// accessors:
const distributor& ownership() const { return _W.ownership(); }
const communicator& comm() const { return ownership().comm(); }
size_type ndof() const { return ownership().size(); }
size_type dis_ndof() const { return ownership().dis_size(); }
const geo_type& get_geo() const { return _W.get_geo(); }
const space_type& get_space() const { return _W; }
#ifdef TO_CLEAN
bool have_homogeneous_space (space_type& Xh) const { Xh = get_space(); return true; }
#endif // TO_CLEAN
protected:
#ifdef TO_CLEAN
std::string _name() const;
#endif // TO_CLEAN
// data:
space_type _V;
space_type _W;
geo_type _dom;
disarray<size_type,memory_type> _dom_dis_idof2dis_idof;
size_type _first_dis_idof;
};
// ----------------
// inlined
// ----------------
template <class T, class M>
field_indirect_base<T,M>::field_indirect_base (
const space_type& V,
const geo_type& dom)
: _V(V),
_W(),
_dom(dom),
_dom_dis_idof2dis_idof(),
_first_dis_idof(V.ownership().first_index())
{
if ( ! _V.get_basis().option().is_trace_n()
|| ( _V.get_geo().map_dimension() != _dom.map_dimension() + 1)) {
_W = space_type (dom, _V.get_basis().name());
} else {
// restricted on a subdomain: e.g. Pkd[sides](square) => Pkd(square[interface])
// i.e. the basis should remove the "sides" option
size_type k = _V.get_basis().degree();
_W = space_type (dom, "P"+std::to_string(k)+"d", _V.valued());
#ifdef TODO
// TODO: more general, by skipping "sides" in option basis: how to do that?
// => fatal(../../include/rheolef/smart_pointer.h,330): no_copy functor called (illegal copy)
basis b = _V.get_basis();
basis_option bopt = b.option();
bopt.set_trace (false);
b.reset (bopt);
_W = space_type (dom, b.name()); // TODO: a cstor space(dom,basis) ?
#endif // TODO
}
_dom_dis_idof2dis_idof = _V.build_dom_dis_idof2bgd_dis_idof (_W, dom);
}
#ifdef TO_CLEAN
template <class T, class M>
inline
std::string
field_indirect_base<T,M>::_name() const
{
// e.g. "P1(square[left]", an unique signature for field_expr<Expr> size-like checks
std::string dom_name = (_dom.variant() != geo_abstract_base_rep<double>::geo_domain) ?
_V.get_geo().name() + "[" + _dom.name() + "]" :
_dom.name();
return _V.get_basis().name() + "{" + dom_name + "}";
}
#endif // TO_CLEAN
// =================================================================================
// 4. field_rdof_indirect_const
// =================================================================================
// as for:
// gh = uh["left"]
template <class FieldRdof>
class field_rdof_indirect_const:
public field_rdof_base<field_rdof_indirect_const <FieldRdof>>
,public field_indirect_base<
typename FieldRdof::scalar_type
,typename FieldRdof::memory_type
>
{
public:
// definitions:
using scalar_type = typename FieldRdof::scalar_type;
using memory_type = typename FieldRdof::memory_type;
using base = field_indirect_base<scalar_type,memory_type>;
using size_type = typename base::size_type;
using geo_type = typename base::geo_type;
using space_type = typename base::space_type;
using const_iterator = field_indirect_const_iterator<
typename disarray<size_type,memory_type>::const_iterator
,typename FieldRdof::const_iterator>;
// allocators:
field_rdof_indirect_const() = delete;
template<class Sfinae
= typename std::enable_if<
has_field_rdof_interface<FieldRdof>::value
,void
>::type
>
field_rdof_indirect_const (const FieldRdof& uh, const geo_type& dom);
field_rdof_indirect_const (const field_wdof_indirect<FieldRdof>& uh);
// new accessors:
const scalar_type& dis_dof (size_type dis_idof) const;
const scalar_type& dof (size_type idof) const
{ return _uh_const.begin_dof() [base::_dom_dis_idof2dis_idof [idof] - base::_first_dis_idof]; }
const_iterator begin_dof() const;
const_iterator end_dof() const;
protected:
// data:
const FieldRdof _uh_const;
};
// concepts:
template <class FieldRdof>
struct is_field_rdof <field_rdof_indirect_const<FieldRdof>>: std::true_type {};
template<class FieldRdof>
struct field_traits<field_rdof_indirect_const<FieldRdof>> {
using size_type = typename FieldRdof::size_type;
using scalar_type = typename FieldRdof::scalar_type;
using memory_type = typename FieldRdof::memory_type;
};
// ----------------
// inlined
// ----------------
template<class FieldRdof>
template<class Sfinae>
field_rdof_indirect_const<FieldRdof>::field_rdof_indirect_const (
const FieldRdof& uh,
const geo_type& dom)
: base(uh.get_space(), dom),
_uh_const(uh)
{
}
template<class FieldRdof>
field_rdof_indirect_const<FieldRdof>::field_rdof_indirect_const (
const field_wdof_indirect<FieldRdof>& wdof)
: base(wdof),
_uh_const(wdof._uh)
{
}
template<class FieldRdof>
inline
typename field_rdof_indirect_const<FieldRdof>::const_iterator
field_rdof_indirect_const<FieldRdof>::begin_dof() const
{
return const_iterator (base::_dom_dis_idof2dis_idof.begin(), base::_first_dis_idof, _uh_const.begin_dof());
}
template<class FieldRdof>
inline
typename field_rdof_indirect_const<FieldRdof>::const_iterator
field_rdof_indirect_const<FieldRdof>::end_dof() const
{
return const_iterator (base::_dom_dis_idof2dis_idof.end(), base::_first_dis_idof, _uh_const.begin_dof());
}
template<class FieldRdof>
inline
const typename field_rdof_indirect_const<FieldRdof>::scalar_type&
field_rdof_indirect_const<FieldRdof>::dis_dof (size_type dom_dis_idof) const
{
size_type dis_idof = base::_dom_dis_idof2dis_idof.dis_at (dom_dis_idof);
return _uh_const.dis_dof (dis_idof);
}
// =================================================================================
// 5. field_wdof_indirect
// =================================================================================
// as for:
// uh["left"] = value
// uh["left"] = gh
template <class FieldWdof>
class field_wdof_indirect:
public field_wdof_base<field_wdof_indirect<FieldWdof>>
,public field_indirect_base<
typename FieldWdof::scalar_type
,typename FieldWdof::memory_type
>
{
public:
// definitions:
using base0 = field_wdof_base<field_wdof_indirect<FieldWdof>>;
using scalar_type = typename FieldWdof::scalar_type;
using memory_type = typename FieldWdof::memory_type;
using base = field_indirect_base<scalar_type,memory_type>;
using size_type = typename base::size_type;
using geo_type = typename base::geo_type;
using space_type = typename base::space_type;
using const_iterator = field_indirect_const_iterator<
typename disarray<size_type,memory_type>::const_iterator
,typename FieldWdof::const_iterator>;
using iterator = field_indirect_iterator<
typename disarray<size_type,memory_type>::const_iterator
,typename FieldWdof::iterator>;
using dis_reference = typename FieldWdof::dis_reference;
// allocators:
field_wdof_indirect() = delete;
field_wdof_indirect(const field_wdof_indirect<FieldWdof>&) = delete;
field_wdof_indirect<FieldWdof>& operator= (const field_wdof_indirect<FieldWdof>&);
template<class Sfinae
= typename std::enable_if<
has_field_wdof_interface<FieldWdof>::value
,void
>::type
>
field_wdof_indirect (FieldWdof& uh, const geo_type& dom);
template <class Value>
typename std::enable_if<
details::is_rheolef_arithmetic<Value>::value
,field_wdof_indirect<FieldWdof>&
>::type
operator= (const Value& value) { base0::operator= (value); return *this; }
template <class FieldRdof>
typename std::enable_if<
has_field_rdof_interface<FieldRdof>::value
,field_wdof_indirect<FieldWdof>&
>::type
operator= (const FieldRdof& rdof) { base0::operator= (rdof); return *this; }
template<class FieldLazy>
typename std::enable_if<
has_field_lazy_interface<FieldLazy>::value
&& ! has_field_rdof_interface<FieldLazy>::value
,field_wdof_indirect<FieldWdof>&
>::type
operator= (const FieldLazy& lazy) { base0::operator= (lazy); return *this; }
// accessors:
const scalar_type& dof (size_type idof) const { return _uh.begin_dof() [base::_dom_dis_idof2dis_idof [idof] - base::_first_dis_idof]; }
scalar_type& dof (size_type idof) { return _uh.begin_dof() [base::_dom_dis_idof2dis_idof [idof] - base::_first_dis_idof]; }
const scalar_type& dis_dof (size_type dis_idof) const;
dis_reference dis_dof_entry (size_type dis_idof);
template <class SetOp = details::generic_set_op>
void dis_dof_update (const SetOp& set_op = SetOp()) const { _uh.dis_dof_update (set_op); }
const_iterator begin_dof() const;
const_iterator end_dof() const;
iterator begin_dof();
iterator end_dof();
protected:
// data:
friend field_rdof_indirect_const<FieldWdof>;
FieldWdof& _uh; // WARNING for cstor copy & assignt: contains a reference
};
// concepts:
template<class FieldWdof>
struct is_field_wdof <field_wdof_indirect<FieldWdof>>: std::true_type {};
// avoid some mistakes:
template<class FieldWdof>
struct is_field_function <field_wdof_indirect<FieldWdof>>: std::false_type {};
template<class FieldWdof>
struct field_traits<field_wdof_indirect<FieldWdof>> {
using size_type = typename FieldWdof::size_type;
using scalar_type = typename FieldWdof::scalar_type;
using memory_type = typename FieldWdof::memory_type;
};
template<class FieldWdof>
struct field_wdof2rdof_traits<field_wdof_indirect<FieldWdof>> {
using type = field_rdof_indirect_const<FieldWdof>;
};
// ------------------
// inlined
// ------------------
template<class FieldWdof>
template<class Sfinae>
field_wdof_indirect<FieldWdof>::field_wdof_indirect (
FieldWdof& uh,
const geo_type& dom)
: base (uh.get_space(), dom),
_uh(uh)
{
trace_macro("fi(fw,geo)");
}
template<class FieldWdof>
field_wdof_indirect<FieldWdof>&
field_wdof_indirect<FieldWdof>::operator= (const field_wdof_indirect<FieldWdof>& expr)
{
trace_macro("fi::op=(const fi&)");
// WARNING: the class contains a reference
// => explicit copy (avoid simple copy of the proxy; see nfem/ptst/field_comp_assign_tst.cc )
// call the previous template FieldRdof version of op=
return this -> template operator=<field_wdof_indirect<FieldWdof>> (expr);
}
template<class FieldWdof>
inline
typename field_wdof_indirect<FieldWdof>::const_iterator
field_wdof_indirect<FieldWdof>::begin_dof() const
{
return const_iterator (base::_dom_dis_idof2dis_idof.begin(), base::_first_dis_idof, _uh.begin_dof());
}
template<class FieldWdof>
inline
typename field_wdof_indirect<FieldWdof>::const_iterator
field_wdof_indirect<FieldWdof>::end_dof() const
{
return const_iterator (base::_dom_dis_idof2dis_idof.end(), base::_first_dis_idof, _uh.begin_dof());
}
template<class FieldWdof>
inline
typename field_wdof_indirect<FieldWdof>::iterator
field_wdof_indirect<FieldWdof>::begin_dof()
{
return iterator (base::_dom_dis_idof2dis_idof.begin(), base::_first_dis_idof, _uh.begin_dof());
}
template<class FieldWdof>
inline
typename field_wdof_indirect<FieldWdof>::iterator
field_wdof_indirect<FieldWdof>::end_dof()
{
return iterator (base::_dom_dis_idof2dis_idof.end(), base::_first_dis_idof, _uh.begin_dof());
}
template<class FieldWdof>
inline
const typename field_wdof_indirect<FieldWdof>::scalar_type&
field_wdof_indirect<FieldWdof>::dis_dof (size_type dom_dis_idof) const
{
size_type dis_idof = base::_dom_dis_idof2dis_idof.dis_at (dom_dis_idof);
return _uh.dis_dof (dis_idof);
}
template<class FieldWdof>
inline
typename field_wdof_indirect<FieldWdof>::dis_reference
field_wdof_indirect<FieldWdof>::dis_dof_entry (size_type dom_dis_idof)
{
size_type dis_idof = base::_dom_dis_idof2dis_idof.dis_at (dom_dis_idof);
return _uh.dis_dof_entry (dis_idof);
}
}}// namespace rheolef::details
# endif /* _RHEOLEF_FIELD_WDOF_INDIRECT_H */
communicator
see the communicator page for the full documentation
rheolef::details::field_indirect_base
Definition field_wdof_indirect.h:118
rheolef::details::field_indirect_base< scalar_type, memory_type >::_dom_dis_idof2dis_idof
disarray< size_type, memory_type > _dom_dis_idof2dis_idof
Definition field_wdof_indirect.h:151
rheolef::details::field_indirect_base::dis_ndof
size_type dis_ndof() const
Definition field_wdof_indirect.h:137
rheolef::details::field_indirect_base< scalar_type, memory_type >::_V
space_type _V
Definition field_wdof_indirect.h:148
rheolef::details::field_indirect_base< scalar_type, memory_type >::_W
space_type _W
Definition field_wdof_indirect.h:149
rheolef::details::field_indirect_base< scalar_type, memory_type >::_first_dis_idof
size_type _first_dis_idof
Definition field_wdof_indirect.h:152
rheolef::details::field_indirect_base< scalar_type, memory_type >::_dom
geo_type _dom
Definition field_wdof_indirect.h:150
rheolef::details::field_indirect_base::size_type
typename geo_type::size_type size_type
Definition field_wdof_indirect.h:126
rheolef::details::field_indirect_base::memory_type
M memory_type
Definition field_wdof_indirect.h:123
rheolef::details::field_indirect_base::get_geo
const geo_type & get_geo() const
Definition field_wdof_indirect.h:138
rheolef::details::field_indirect_base::get_space
const space_type & get_space() const
Definition field_wdof_indirect.h:139
rheolef::details::field_indirect_base::geo_type
geo_basic< float_type, memory_type > geo_type
Definition field_wdof_indirect.h:124
rheolef::details::field_indirect_base::ndof
size_type ndof() const
Definition field_wdof_indirect.h:136
rheolef::details::field_indirect_base::float_type
typename float_traits< T >::type float_type
Definition field_wdof_indirect.h:122
rheolef::details::field_indirect_base::field_indirect_base
field_indirect_base(const space_type &V, const geo_type &dom)
Definition field_wdof_indirect.h:158
rheolef::details::field_indirect_base::space_type
space_basic< float_type, memory_type > space_type
Definition field_wdof_indirect.h:125
rheolef::details::field_indirect_base::ownership
const distributor & ownership() const
Definition field_wdof_indirect.h:134
rheolef::details::field_indirect_base::comm
const communicator & comm() const
Definition field_wdof_indirect.h:135
rheolef::details::field_indirect_const_iterator
Definition field_wdof_indirect.h:41
rheolef::details::field_indirect_const_iterator< SizeRandomInputIterator, ScalarForwardOutputIterator >::_val
ScalarForwardOutputIterator _val
Definition field_wdof_indirect.h:79
rheolef::details::field_indirect_const_iterator::pointer
const value_type * pointer
Definition field_wdof_indirect.h:49
rheolef::details::field_indirect_const_iterator::value_type
typename std::iterator_traits< ScalarForwardInputIterator >::value_type value_type
Definition field_wdof_indirect.h:47
rheolef::details::field_indirect_const_iterator::operator==
bool operator==(const self_type &j) const
Definition field_wdof_indirect.h:73
rheolef::details::field_indirect_const_iterator::self_type
field_indirect_const_iterator< SizeRandomInputIterator, ScalarForwardInputIterator > self_type
Definition field_wdof_indirect.h:51
rheolef::details::field_indirect_const_iterator< SizeRandomInputIterator, ScalarForwardOutputIterator >::_first_dis_idof
size_type _first_dis_idof
Definition field_wdof_indirect.h:78
rheolef::details::field_indirect_const_iterator::iterator_category
std::forward_iterator_tag iterator_category
Definition field_wdof_indirect.h:45
rheolef::details::field_indirect_const_iterator::operator+=
self_type & operator+=(difference_type n)
Definition field_wdof_indirect.h:68
rheolef::details::field_indirect_const_iterator< SizeRandomInputIterator, ScalarForwardOutputIterator >::_dis_idof_iter
SizeRandomInputIterator _dis_idof_iter
Definition field_wdof_indirect.h:77
rheolef::details::field_indirect_const_iterator::operator*
const value_type & operator*() const
Definition field_wdof_indirect.h:66
rheolef::details::field_indirect_const_iterator::operator!=
bool operator!=(const self_type &j) const
Definition field_wdof_indirect.h:74
rheolef::details::field_indirect_const_iterator::reference
const value_type & reference
Definition field_wdof_indirect.h:48
rheolef::details::field_indirect_const_iterator::difference_type
std::ptrdiff_t difference_type
Definition field_wdof_indirect.h:50
rheolef::details::field_indirect_const_iterator::field_indirect_const_iterator
field_indirect_const_iterator(SizeRandomInputIterator dis_idof_iter, size_type first_dis_idof, ScalarForwardInputIterator val)
Definition field_wdof_indirect.h:55
rheolef::details::field_indirect_const_iterator::operator+
self_type operator+(difference_type n) const
Definition field_wdof_indirect.h:69
rheolef::details::field_indirect_const_iterator::size_type
std::size_t size_type
Definition field_wdof_indirect.h:46
rheolef::details::field_indirect_const_iterator::operator++
self_type & operator++()
Definition field_wdof_indirect.h:67
rheolef::details::field_indirect_iterator
Definition field_wdof_indirect.h:88
rheolef::details::field_indirect_iterator::value_type
typename base::value_type value_type
Definition field_wdof_indirect.h:94
rheolef::details::field_indirect_iterator::field_indirect_iterator
field_indirect_iterator(SizeRandomInputIterator dis_idof_iter, size_type first_dis_idof, ScalarForwardOutputIterator val)
Definition field_wdof_indirect.h:100
rheolef::details::field_indirect_iterator::operator*
value_type & operator*()
Definition field_wdof_indirect.h:109
rheolef::details::field_indirect_iterator::base
field_indirect_const_iterator< SizeRandomInputIterator, ScalarForwardOutputIterator > base
Definition field_wdof_indirect.h:92
rheolef::details::field_indirect_iterator::operator+=
self_type & operator+=(difference_type n)
Definition field_wdof_indirect.h:111
rheolef::details::field_indirect_iterator::self_type
field_indirect_iterator< SizeRandomInputIterator, ScalarForwardOutputIterator > self_type
Definition field_wdof_indirect.h:96
rheolef::details::field_indirect_iterator::size_type
typename base::size_type size_type
Definition field_wdof_indirect.h:93
rheolef::details::field_indirect_iterator::difference_type
std::ptrdiff_t difference_type
Definition field_wdof_indirect.h:95
rheolef::details::field_indirect_iterator::operator+
self_type operator+(difference_type n) const
Definition field_wdof_indirect.h:112
rheolef::details::field_indirect_iterator::operator++
self_type & operator++()
Definition field_wdof_indirect.h:110
rheolef::details::field_rdof_base
Definition field_rdof.h:41
rheolef::details::field_rdof_indirect_const
Definition field_wdof_indirect.h:212
rheolef::details::field_rdof_indirect_const::const_iterator
field_indirect_const_iterator< typename disarray< size_type, memory_type >::const_iterator,typename FieldRdof::const_iterator > const_iterator
Definition field_wdof_indirect.h:222
rheolef::details::field_rdof_indirect_const::scalar_type
typename FieldRdof::scalar_type scalar_type
Definition field_wdof_indirect.h:216
rheolef::details::field_rdof_indirect_const::base
field_indirect_base< scalar_type, memory_type > base
Definition field_wdof_indirect.h:218
rheolef::details::field_rdof_indirect_const::space_type
typename base::space_type space_type
Definition field_wdof_indirect.h:221
rheolef::details::field_rdof_indirect_const::geo_type
typename base::geo_type geo_type
Definition field_wdof_indirect.h:220
rheolef::details::field_rdof_indirect_const::field_rdof_indirect_const
field_rdof_indirect_const(const FieldRdof &uh, const geo_type &dom)
Definition field_wdof_indirect.h:267
rheolef::details::field_rdof_indirect_const::dof
const scalar_type & dof(size_type idof) const
Definition field_wdof_indirect.h:242
rheolef::details::field_rdof_indirect_const::field_rdof_indirect_const
field_rdof_indirect_const(const field_wdof_indirect< FieldRdof > &uh)
Definition field_wdof_indirect.h:275
rheolef::details::field_rdof_indirect_const< FieldWdof >::_uh_const
const FieldWdof _uh_const
Definition field_wdof_indirect.h:249
rheolef::details::field_rdof_indirect_const::begin_dof
const_iterator begin_dof() const
Definition field_wdof_indirect.h:284
rheolef::details::field_rdof_indirect_const::size_type
typename base::size_type size_type
Definition field_wdof_indirect.h:219
rheolef::details::field_rdof_indirect_const::memory_type
typename FieldRdof::memory_type memory_type
Definition field_wdof_indirect.h:217
rheolef::details::field_rdof_indirect_const::field_rdof_indirect_const
field_rdof_indirect_const()=delete
rheolef::details::field_rdof_indirect_const::end_dof
const_iterator end_dof() const
Definition field_wdof_indirect.h:291
rheolef::details::field_rdof_indirect_const::dis_dof
const scalar_type & dis_dof(size_type dis_idof) const
Definition field_wdof_indirect.h:298
rheolef::details::field_wdof_base
Definition field_wdof.h:36
rheolef::details::field_wdof_base< field_wdof_indirect< FieldWdof > >::operator=
std::enable_if< details::is_rheolef_arithmetic< Value >::value, field_wdof_base< field_wdof_indirect< FieldWdof > > & >::type operator=(const Value &)
rheolef::details::field_wdof_indirect
Definition field_wdof_indirect.h:317
rheolef::details::field_wdof_indirect::_uh
FieldWdof & _uh
Definition field_wdof_indirect.h:389
rheolef::details::field_wdof_indirect::dis_dof_update
void dis_dof_update(const SetOp &set_op=SetOp()) const
Definition field_wdof_indirect.h:379
rheolef::details::field_wdof_indirect::base
field_indirect_base< scalar_type, memory_type > base
Definition field_wdof_indirect.h:324
rheolef::details::field_wdof_indirect::space_type
typename base::space_type space_type
Definition field_wdof_indirect.h:327
rheolef::details::field_wdof_indirect::dis_dof
const scalar_type & dis_dof(size_type dis_idof) const
Definition field_wdof_indirect.h:465
rheolef::details::field_wdof_indirect::iterator
field_indirect_iterator< typename disarray< size_type, memory_type >::const_iterator,typename FieldWdof::iterator > iterator
Definition field_wdof_indirect.h:331
rheolef::details::field_wdof_indirect::geo_type
typename base::geo_type geo_type
Definition field_wdof_indirect.h:326
rheolef::details::field_wdof_indirect::dof
const scalar_type & dof(size_type idof) const
Definition field_wdof_indirect.h:374
rheolef::details::field_wdof_indirect::scalar_type
typename FieldWdof::scalar_type scalar_type
Definition field_wdof_indirect.h:322
rheolef::details::field_wdof_indirect::begin_dof
const_iterator begin_dof() const
Definition field_wdof_indirect.h:437
rheolef::details::field_wdof_indirect::base0
field_wdof_base< field_wdof_indirect< FieldWdof > > base0
Definition field_wdof_indirect.h:321
rheolef::details::field_wdof_indirect::dis_reference
typename FieldWdof::dis_reference dis_reference
Definition field_wdof_indirect.h:334
rheolef::details::field_wdof_indirect::size_type
typename base::size_type size_type
Definition field_wdof_indirect.h:325
rheolef::details::field_wdof_indirect::dis_dof_entry
dis_reference dis_dof_entry(size_type dis_idof)
Definition field_wdof_indirect.h:473
rheolef::details::field_wdof_indirect::field_wdof_indirect
field_wdof_indirect(const field_wdof_indirect< FieldWdof > &)=delete
rheolef::details::field_wdof_indirect::const_iterator
field_indirect_const_iterator< typename disarray< size_type, memory_type >::const_iterator,typename FieldWdof::const_iterator > const_iterator
Definition field_wdof_indirect.h:328
rheolef::details::field_wdof_indirect::field_wdof_indirect
field_wdof_indirect()=delete
rheolef::details::field_wdof_indirect::operator=
field_wdof_indirect< FieldWdof > & operator=(const field_wdof_indirect< FieldWdof > &)
Definition field_wdof_indirect.h:426
rheolef::details::field_wdof_indirect::memory_type
typename FieldWdof::memory_type memory_type
Definition field_wdof_indirect.h:323
rheolef::details::field_wdof_indirect::end_dof
const_iterator end_dof() const
Definition field_wdof_indirect.h:444
rheolef::details::field_wdof_indirect::dof
scalar_type & dof(size_type idof)
Definition field_wdof_indirect.h:375
rheolef::disarray
see the disarray page for the full documentation
Definition disarray.h:497
rheolef::disarray::const_iterator
rep::base::const_iterator const_iterator
Definition disarray.h:503
rheolef::distributor
see the distributor page for the full documentation
Definition distributor.h:69
rheolef::distributor::dis_size
size_type dis_size() const
global and local sizes
Definition distributor.h:214
rheolef::distributor::size
size_type size(size_type iproc) const
Definition distributor.h:170
rheolef::distributor::comm
const communicator_type & comm() const
Definition distributor.h:152
rheolef::geo_abstract_base_rep::geo_domain
@ geo_domain
Definition geo.h:255
rheolef::space_basic
the finite element space
Definition space.h:382
trace_macro
#define trace_macro(message)
Definition dis_macros.h:111
rheolef::details
Definition compiler_eigen.h:39
rheolef
This file is part of Rheolef.
Definition compiler_eigen.h:39
rheolef::have_homogeneous_space
bool have_homogeneous_space(space_basic< scalar_type, memory_type > &Vh) const
Definition field_expr_recursive.h:585
rheolef::details::field_traits< field_rdof_indirect_const< FieldRdof > >::scalar_type
typename FieldRdof::scalar_type scalar_type
Definition field_wdof_indirect.h:259
rheolef::details::field_traits< field_rdof_indirect_const< FieldRdof > >::size_type
typename FieldRdof::size_type size_type
Definition field_wdof_indirect.h:258
rheolef::details::field_traits< field_rdof_indirect_const< FieldRdof > >::memory_type
typename FieldRdof::memory_type memory_type
Definition field_wdof_indirect.h:260
rheolef::details::field_traits< field_wdof_indirect< FieldWdof > >::size_type
typename FieldWdof::size_type size_type
Definition field_wdof_indirect.h:402
rheolef::details::field_traits< field_wdof_indirect< FieldWdof > >::scalar_type
typename FieldWdof::scalar_type scalar_type
Definition field_wdof_indirect.h:403
rheolef::details::field_traits< field_wdof_indirect< FieldWdof > >::memory_type
typename FieldWdof::memory_type memory_type
Definition field_wdof_indirect.h:404
rheolef::details::field_traits
Definition field_lazy.h:265
rheolef::details::field_wdof2rdof_traits< field_wdof_indirect< FieldWdof > >::type
field_rdof_indirect_const< FieldWdof > type
Definition field_wdof_indirect.h:409
rheolef::details::field_wdof2rdof_traits
Definition field_rdof.h:70
rheolef::details::has_field_lazy_interface
Definition field_concept.h:74
rheolef::details::has_field_rdof_interface
Definition field_concept.h:58
rheolef::details::has_field_wdof_interface
Definition field_concept.h:42
rheolef::details::type
rheolef::details::is_field_function
Definition field_concept.h:144
rheolef::details::is_field_rdof
Definition field_concept.h:54
rheolef::details::is_rheolef_arithmetic
Definition Float.h:150
rheolef::float_traits::type
T type
Definition Float.h:94
M
Expr1::memory_type M
Definition vec_expr_v2.h:416