1 #ifndef _RHEOLEF_DOMAIN_H
2 #define _RHEOLEF_DOMAIN_H
53 #include "rheolef/geo.h"
54 #include "rheolef/domain_indirect.h"
63 template <
class T,
class M>
137 size_type dis_ie_guest = std::numeric_limits<size_type>::max())
const;
140 size_type dis_ie_guest = std::numeric_limits<size_type>::max())
const;
144 bool do_check =
false)
const;
163 bool do_check =
false)
const;
179 template <
class T,
class M>
187 template <
class T,
class M>
192 _indirect(dom._indirect),
196 template <
class T,
class M>
200 _indirect (indirect),
207 template <
class T,
class M>
225 #ifdef _RHEOLEF_HAVE_MPI
255 #define _RHEOLEF_geo_domain(M) \
258 geo_basic<T,M>::geo_basic ( \
259 const domain_indirect_basic<M>& dom, \
260 const geo_basic<T,M>& omega) \
261 : base (new_macro((geo_domain_indirect_rep<T,M>)(dom,omega))) \
267 geo_basic<T,M>::get_domain (size_type i) const \
269 const domain_indirect_basic<M>& dm = base::data().get_domain_indirect (i); \
270 return geo_basic<T,M> (dm, *this); \
275 geo_basic<T,M>::operator[] (const std::string& name) const \
277 if (name == "boundary") boundary_guard (*this); \
278 if (name == "sides") sides_guard (*this); \
279 if (name == "internal_sides") internal_sides_guard (*this); \
280 const domain_indirect_basic<M>& dm \
281 = base::data().get_domain_indirect (name); \
282 return geo_basic<T,M> (dm, *this); \
287 operator+ (const geo_basic<T,M>& a, const geo_basic<T,M>& b) \
289 check_macro (a.variant() == geo_abstract_base_rep<T>::geo_domain_indirect && \
290 b.variant() == geo_abstract_base_rep<T>::geo_domain_indirect, \
291 "union of geo may be domains of a mesh (was " \
292 <<a.name()<<" and "<<b.name()<<")"); \
293 check_macro (a.get_background_geo().name() == b.get_background_geo().name(), \
294 "union of domains between incompatible meshes (was " \
295 <<a.get_background_geo().name()<<" and "<<b.get_background_geo().name()<<")"); \
296 const geo_domain_indirect_rep<T,M>& a_dom \
297 = dynamic_cast<const geo_domain_indirect_rep<T,M>&>(a.data()); \
298 const geo_domain_indirect_rep<T,M>& b_dom \
299 = dynamic_cast<const geo_domain_indirect_rep<T,M>&>(b.data()); \
300 domain_indirect_basic<M> c_dom \
301 = build_union (a.get_background_geo(), a_dom.get_indirect(), b_dom.get_indirect()); \
302 return geo_basic<T,M> (c_dom, a.get_background_geo()); \
306 #ifdef _RHEOLEF_HAVE_MPI
307 _RHEOLEF_geo_domain(distributed)
309 #undef _RHEOLEF_domain
field::size_type size_type
see the distributor page for the full documentation
abstract base interface class
geo_element_hack::size_type size_type
generic mesh with rerefence counting
base::variant_type variant_type
base::const_iterator_by_variant const_iterator_by_variant
const basis_basic< T > & get_piola_basis() const
coordinate_type coordinate_system() const
const node_type & xmin() const
const disarray< node_type, M > & get_nodes() const
const distributor & geo_element_ownership(size_type dim) const
geo_domain_indirect_base_rep(const geo_domain_indirect_base_rep< T, M > &)
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
size_type serial_number() const
base::iterator_by_variant iterator_by_variant
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 map_dimension() 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
const geo_basic< T, M > & get_background_geo() const
size_type dis_locate(const point_basic< T > &x, size_type dis_ie_guest=std::numeric_limits< size_type >::max()) const
std::string familyname() 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 dimension() const
size_type n_domain_indirect() const
geo_domain_indirect_base_rep(const domain_indirect_basic< M > &indirect, const geo_basic< T, M > &omega)
const node_type & xmax() const
base::const_iterator const_iterator
size_type variant() 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::coordinate_type coordinate_type
base::geo_element_map_type geo_element_map_type
const_reference get_geo_element(size_type dim, size_type ige) const
const node_type & node(size_type inod) const
const geo_size & sizes() const
domain_indirect_basic< M > _indirect
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
const domain_indirect_basic< M > & get_indirect() const
bool have_domain_indirect(const std::string &name) const
geo_domain_indirect_base_rep()
void nearest(const disarray< point_basic< T >, M > &x, disarray< point_basic< T >, M > &x_nearest, disarray< size_type, M > &dis_ie) const
geo_abstract_rep< T, M > base
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
distributor geo_element_ios_ownership(size_type dim) const
const_reference dis_get_geo_element(size_type map_dim, size_type dis_ige) const
geo_domain_indirect_base_rep< T, distributed > base
geo_abstract_rep< T, distributed > * clone() const
size_type ige2ios_dis_ige(size_type dim, size_type ige) const
void set_ios_permutation(disarray< size_type, distributed > &idof2ios_dis_idof) const
geo_domain_indirect_rep(const geo_domain_indirect_rep< T, distributed > &x)
base::size_type size_type
const std::array< disarray< size_type, distributed >, reference_element::max_variant > & get_igev2ios_dis_igev() const
base::const_reference const_reference
size_type ios_ige2dis_ige(size_type dim, size_type ios_ige) const
geo_domain_indirect_rep(const domain_indirect_basic< distributed > &indirect, const geo_basic< T, distributed > &omega)
size_type dis_ige2ios_dis_ige(size_type dim, size_type dis_ige) const
geo_domain_indirect_rep()
base::node_type node_type
base::size_type size_type
geo_domain_indirect_rep(const geo_domain_indirect_rep< T, sequential > &x)
geo_domain_indirect_base_rep< T, sequential > base
geo_domain_indirect_rep()
geo_domain_indirect_rep(const domain_indirect_basic< sequential > &indirect, const geo_basic< T, sequential > &omega)
geo_abstract_rep< T, sequential > * clone() const
base::node_type node_type
see the geo_element page for the full documentation
odiststream: see the diststream page for the full documentation
static const variant_type max_variant
This file is part of Rheolef.