22#include "rheolef/geo_domain.h"
29template <
class T,
class M>
33 _bgd_ie2dom_ie(x._bgd_ie2dom_ie),
34 _dis_bgd_ie2dis_dom_ie(x._dis_bgd_ie2dis_dom_ie)
36 trace_macro (
"*** PHYSICAL COPY OF GEO_DOMAIN ***");
38template <
class T,
class M>
44 return new_macro(rep(*
this));
46template <
class T,
class M>
51 _dis_bgd_ie2dis_dom_ie()
54 _dom.get_indirect().data(),
55 _dom.get_background_geo().data(),
62template <
class T,
class M>
66 typename std::map<size_type,size_type>::const_iterator iter = _bgd_ie2dom_ie.find (bgd_ie);
67 if (iter != _bgd_ie2dom_ie.end()) {
68 return (*iter).second;
70 return std::numeric_limits<size_type>::max();
73template <
class T,
class M>
78 size_type first_dis_bgd_ie = get_background_geo().sizes().ownership_by_dimension[map_d].first_index();
79 size_type last_dis_bgd_ie = get_background_geo().sizes().ownership_by_dimension[map_d]. last_index();
80 if (dis_bgd_ie >= first_dis_bgd_ie && dis_bgd_ie < last_dis_bgd_ie) {
81 size_type bgd_ie = dis_bgd_ie - first_dis_bgd_ie;
82 return bgd_ie2dom_ie (bgd_ie);
84 typename std::map<size_type,size_type>::const_iterator iter = _dis_bgd_ie2dis_dom_ie.find (dis_bgd_ie);
85 if (iter != _dis_bgd_ie2dis_dom_ie.end()) {
86 return (*iter).second;
88 return std::numeric_limits<size_type>::max();
91template <
class T,
class M>
97 size_type first_dis_bgd_ie = get_background_geo().sizes().ownership_by_dimension[map_d].first_index();
98 size_type last_dis_bgd_ie = get_background_geo().sizes().ownership_by_dimension[map_d]. last_index();
99 if (dis_bgd_ie >= first_dis_bgd_ie && dis_bgd_ie < last_dis_bgd_ie) {
100 size_type bgd_ie = dis_bgd_ie - first_dis_bgd_ie;
101 size_type dom_ie = bgd_ie2dom_ie (bgd_ie);
102 const geo_element& dom_K = base::get_geo_element (map_d, dom_ie);
105 size_type dis_dom_ie = dis_bgd_ie2dis_dom_ie (dis_bgd_ie);
106 const geo_element& dom_K = base::dis_get_geo_element (map_d, dis_dom_ie);
110template <
class T,
class M>
116 size_type first_dom_dis_ie = base::sizes().ownership_by_dimension[map_d].first_index();
117 check_macro (dom_dis_ie >= first_dom_dis_ie,
"unexpected dis_index "<<dom_dis_ie<<
": out of local range");
118 size_type dom_ie = dom_dis_ie - first_dom_dis_ie;
126#define _RHEOLEF_instanciation(T,M) \
127template class geo_domain_rep<T,M>;
130#ifdef _RHEOLEF_HAVE_MPI
#define _RHEOLEF_instanciation(T, M, A)
see the Float page for the full documentation
generic mesh with rerefence counting
const geo_element & dom2bgd_geo_element(const geo_element &dom_K) const
size_type bgd_ie2dom_ie(size_type bgd_ie) const
geo_domain_indirect_rep< T, M > _dom
std::map< size_type, size_type > _bgd_ie2dom_ie
base::size_type size_type
geo_domain_rep(const geo_domain_rep< T, M > &)
geo_abstract_rep< T, M > * clone() const
size_type dis_bgd_ie2dis_dom_ie(size_type dis_bgd_ie) const
std::map< size_type, size_type > _dis_bgd_ie2dis_dom_ie
const geo_element & bgd2dom_geo_element(const geo_element &bgd_K) const
see the geo_element page for the full documentation
size_type dimension() const
sequential mesh representation
#define trace_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.