21#include "rheolef/geo_domain_indirect.h"
25template <
class T,
class M>
29 if (dim == map_dimension())
return _indirect.ownership();
30 check_macro (dim < map_dimension(),
"unexpected dimension = " << dim <<
" > domain dimension = " << map_dimension());
31 return _omega.geo_element_ownership(dim);
33template <
class T,
class M>
37 if (dim == map_dimension())
return _omega.get_geo_element (dim, _indirect.oige(ige).index());
38 return _omega.get_geo_element (dim, ige);
40template <
class T,
class M>
45 return _omega.begin_by_variant (variant);
48template <
class T,
class M>
53 return _omega.end_by_variant (variant);
56template <
class T,
class M>
60 error_macro (
"domain.get_external_geo_element_map: not yet");
64template <
class T,
class M>
70template <
class T,
class M>
76template <
class T,
class M>
77const domain_indirect_basic<M>&
80 error_macro (
"domain[domain] aka sub-sub-domain: not yet");
83template <
class T,
class M>
84const domain_indirect_basic<M>&
87 error_macro (
"domain[domain] aka sub-sub-domain: not yet");
90template <
class T,
class M>
94 error_macro (
"insert_domain_indirect: cannot insert inside another domain");
96template <
class T,
class M>
103template <
class T,
class M>
107 return _omega.sizes();
109template <
class T,
class M>
114 return _omega.ios_sizes();
116template <
class T,
class M>
120 return _omega.dis_node (dis_inod);
122template <
class T,
class M>
126 _omega.dis_inod (K, dis_inod);
128template <
class T,
class M>
132 return _omega.dis_inod2dis_iv (dis_inod);
134template <
class T,
class M>
140template <
class T,
class M>
146template <
class T,
class M>
150 error_macro (
"domain.reset_order: cannot do that");
152template <
class T,
class M>
157 return std::numeric_limits<size_type>::max();
159template <
class T,
class M>
164 return std::numeric_limits<size_type>::max();
166template <
class T,
class M>
173 error_macro (
"domain.seq_trace_move: no implemented");
174 return std::numeric_limits<size_type>::max();
176template <
class T,
class M>
183 error_macro (
"domain.dis_trace_move: no implemented");
184 return std::numeric_limits<size_type>::max();
186template <
class T,
class M>
195template <
class T,
class M>
204 error_macro (
"domain.trace_ray_boundary: no implemented");
206template <
class T,
class M>
216template <
class T,
class M>
222 error_macro (
"domain.seq_nearest: no implemented");
223 return std::numeric_limits<size_type>::max();
225template <
class T,
class M>
231 error_macro (
"domain.dis_nearest: no implemented");
232 return std::numeric_limits<size_type>::max();
234template <
class T,
class M>
243template <
class T,
class M>
248 return std::numeric_limits<size_type>::max();
250template <
class T,
class M>
254 error_macro (
"domain.neighbour_guard: no implemented");
260#ifdef _RHEOLEF_HAVE_MPI
see the disarray page for the full documentation
the finite element boundary domain
base::variant_type variant_type
base::const_iterator_by_variant const_iterator_by_variant
const distributor & geo_element_ownership(size_type dim) const
void dis_inod(const geo_element &K, std::vector< size_type > &dis_inod) const
const_iterator_by_variant end_by_variant(variant_type variant) const
const_iterator_by_variant begin_by_variant(variant_type variant) const
const node_type & dis_node(size_type dis_inod) const
void insert_domain_indirect(const domain_indirect_basic< M > &dom) const
const domain_indirect_basic< M > & get_domain_indirect(size_type i) const
size_type dis_nearest(const point_basic< T > &x, point_basic< T > &x_nearest) const
size_type dis_trace_move(const point_basic< T > &x, const point_basic< T > &v, point_basic< T > &y) const
const geo_size & ios_sizes() const
size_type dis_locate(const point_basic< T > &x, size_type dis_ie_guest=std::numeric_limits< size_type >::max()) const
odiststream & put(odiststream &ops) const
base::size_type size_type
void set_nodes(const disarray< node_type, M > &)
size_type seq_locate(const point_basic< T > &x, size_type dis_ie_guest=std::numeric_limits< size_type >::max()) const
base::const_reference const_reference
bool check(bool verbose) const
size_type n_domain_indirect() const
size_type seq_nearest(const point_basic< T > &x, point_basic< T > &x_nearest) const
void trace_move(const disarray< point_basic< T >, M > &x, const disarray< point_basic< T >, M > &v, disarray< size_type, M > &dis_ie, disarray< point_basic< T >, M > &y) const
size_type neighbour(size_type ie, size_type loc_iside) const
size_type dis_inod2dis_iv(size_type dis_inod) const
base::geo_element_map_type geo_element_map_type
const_reference get_geo_element(size_type dim, size_type ige) const
const geo_size & sizes() const
void reset_order(size_type order)
void trace_ray_boundary(const disarray< point_basic< T >, M > &x, const disarray< point_basic< T >, M > &v, disarray< size_type, M > &dis_ie, disarray< point_basic< T >, M > &y, bool do_check=false) const
size_type seq_trace_move(const point_basic< T > &x, const point_basic< T > &v, point_basic< T > &y) const
bool have_domain_indirect(const std::string &name) const
void nearest(const disarray< point_basic< T >, M > &x, disarray< point_basic< T >, M > &x_nearest, disarray< size_type, M > &dis_ie) const
void locate(const disarray< point_basic< T >, M > &x, disarray< size_type, M > &dis_ie, bool do_check=false) const
const geo_element_map_type & get_external_geo_element_map(size_type variant) const
void neighbour_guard() const
base::node_type node_type
see the geo_element page for the full documentation
odiststream: see the diststream page for the full documentation
#define error_macro(message)
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")
This file is part of Rheolef.