1#ifndef _RHEOLEF_DOMAIN_H
2#define _RHEOLEF_DOMAIN_H
53#include "rheolef/geo.h"
54#include "rheolef/domain_indirect.h"
63template <
class T,
class M>
134 bool check(
bool verbose)
const;
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;
179template <
class T,
class M>
187template <
class T,
class M>
192 _indirect(dom._indirect),
196template <
class T,
class M>
200 _indirect (indirect),
207template <
class T,
class M>
225#ifdef _RHEOLEF_HAVE_MPI
249 get_igev2ios_dis_igev()
const;
255#define _RHEOLEF_geo_domain(M) \
258geo_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))) \
267geo_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); \
275geo_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); \
287operator+ (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
309#undef _RHEOLEF_domain
field::size_type size_type
see the disarray page for the full documentation
see the distributor page for the full documentation
the finite element boundary domain
abstract base interface class
generic mesh with rerefence counting
const disarray< node_type, M > & get_nodes() const
base::variant_type variant_type
base::const_iterator_by_variant const_iterator_by_variant
const node_type & node(size_type inod) const
coordinate_type coordinate_system() const
const distributor & geo_element_ownership(size_type dim) const
const geo_basic< T, M > & get_background_geo() 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
const node_type & xmin() 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 basis_basic< T > & get_piola_basis() 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
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)
base::const_iterator const_iterator
size_type variant() const
const node_type & xmax() 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 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
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
const domain_indirect_basic< M > & get_indirect() const
void neighbour_guard() const
base::node_type node_type
geo_domain_indirect_base_rep< T, distributed > base
geo_domain_indirect_rep(const geo_domain_indirect_rep< T, distributed > &x)
base::size_type size_type
base::const_reference const_reference
geo_domain_indirect_rep(const domain_indirect_basic< distributed > &indirect, const geo_basic< T, distributed > &omega)
geo_domain_indirect_rep()
geo_abstract_rep< T, distributed > * clone() const
base::node_type node_type
geo_abstract_rep< T, sequential > * clone() const
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)
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.