Rheolef  7.1
an efficient C++ finite element environment
space_constitution.h
Go to the documentation of this file.
1 #ifndef _RHEOLEF_SPACE_CONSTITUTION_H
2 #define _RHEOLEF_SPACE_CONSTITUTION_H
3 
24 #include "rheolef/geo.h"
25 #include "rheolef/geo_domain.h"
26 #include "rheolef/space_constant.h"
27 
28 namespace rheolef {
29 
30 // forward declarations:
31 template <class T, class M> class space_mult_list;
32 template <class T, class M> class space_constitution;
33 
34 // =====================================================================
35 // space_act = a domain + an act (block, unblock)
36 // =====================================================================
37 
38 class space_act {
39 public:
40 
41 // typedefs:
42 
43  typedef size_t size_type;
44  static const size_type unset_index = std::numeric_limits<size_type>::max();
45 
46  enum act_type {
47  block = 0,
48  unblock = 1,
49  block_n = 2,
51  };
52 
53 // allocators:
54 
55  space_act(const std::string& dom_name, act_type act)
56  : _dom_name(dom_name), _i_comp(unset_index), _act(act) {}
57  space_act(const std::string& dom_name, size_type i_comp, act_type act)
58  : _dom_name(dom_name), _i_comp(i_comp), _act(act) {}
60  : _dom_name(), _i_comp(unset_index), _act() {}
61  space_act(const space_act& x)
62  : _dom_name(x._dom_name), _i_comp(x._i_comp), _act(x._act) {}
63 
64 // accessors:
65 
66  const std::string& get_domain_name() const { return _dom_name; }
67  act_type get_act() const { return _act; }
69 
70 // data:
71 protected:
72  std::string _dom_name;
75 };
76 // =====================================================================
77 // space_scalar_constitution = a table of acts
78 // =====================================================================
79 
80 template <class T, class M>
82 public:
83  typedef typename std::vector<space_act> container_type;
85  typedef typename container_type::const_iterator const_iterator;
86 
87 // allocators:
88 
90  : _acts(), _omega(), _fem_basis() {}
91 
93  const geo_basic<T,M>& omega,
94  std::string approx);
95 
97  : _acts(scr._acts), _omega(scr._omega), _fem_basis(scr._fem_basis)
98  {
99  trace_macro ("physical copy of space_scalar_constitution_rep: size="<< size());
100  }
101 
102 // accessors:
103 
104  const geo_basic<T,M>& get_geo() const { return _omega; }
105  const geo_basic<T,M>& get_background_geo() const { return _omega.get_background_geo(); }
106  const basis_basic<T>& get_basis() const { return _fem_basis; }
107 
108  bool is_initialized() const { return _fem_basis.is_initialized(); }
109  size_type size() const { return _acts.size(); }
110  const_iterator begin() const { return _acts.begin(); }
111  const_iterator end() const { return _acts.end(); }
112 
113 // utility:
114 
115  void set_ios_permutations (
116  disarray<size_type,M>& idof2ios_dis_idof,
117  disarray<size_type,M>& ios_idof2dis_idof) const;
118 
119 // inquiries:
120 
121  size_type degree_max() const { return _fem_basis.degree(); }
122  bool have_compact_support_inside_element() const { return _fem_basis.have_compact_support_inside_element(); }
123  bool is_discontinuous() const { return ! _fem_basis.is_continuous(); }
124  void neighbour_guard() const { return get_geo().neighbour_guard(); }
125 
126 // modifiers
127 
128  void set_geo (const geo_basic<T,M>& omega) { _omega = omega; }
129  void set_basis (const basis_basic<T>& b) { _fem_basis = b; }
130  void do_act (const space_act& act);
131 
132 // comparator:
133 
134  bool operator== (const space_scalar_constitution_rep<T,M>& V2) const { return _omega == V2._omega && _fem_basis.name() == V2._fem_basis.name(); }
135 
136 // internal:
137  void build_blocked_flag (
138  disarray<size_type,M>& blocked_flag,
139  const distributor& comp_ownership,
140  const distributor& start_by_component) const;
141 protected:
142 // data:
143  std::vector<space_act> _acts;
146 };
147 template <class T, class M>
148 class space_scalar_constitution : public smart_pointer<space_scalar_constitution_rep<T,M> > {
149 public:
150 
153  typedef typename rep::size_type size_type;
155 
156 // allocators:
157 
159  : smart_pointer<rep>(new_macro(rep)) {}
160 
162  const geo_basic<T,M>& omega,
163  std::string approx)
164  : smart_pointer<rep>(new_macro(rep (omega,approx))) {}
165 
166 // accessors:
167 
168  const geo_basic<T,M>& get_geo() const { return base::data().get_geo(); }
169  const geo_basic<T,M>& get_background_geo() const { return base::data().get_background_geo(); }
170  const basis_basic<T>& get_basis() const { return base::data().get_basis(); }
171  size_type size() const { return base::data().size(); }
172  const_iterator begin() const { return base::data().begin(); }
173  const_iterator end() const { return base::data().end(); }
174 
175 // utility:
176 
178  disarray<size_type,M>& idof2ios_dis_idof,
179  disarray<size_type,M>& ios_idof2dis_idof) const
180  { base::data().set_ios_permutations (idof2ios_dis_idof, ios_idof2dis_idof); }
181 
182 // inquiries:
183 
184  bool have_compact_support_inside_element() const { return base::data().have_compact_support_inside_element(); }
185  bool is_discontinuous() const { return base::data().is_discontinuous(); }
186  size_type degree_max() const { return base::data().degree_max(); }
187  void neighbour_guard() const { return base::data().neighbour_guard(); }
188 
189 // comparator:
190 
191  bool operator== (const space_scalar_constitution<T,M>& V2) const { return base::data().operator==(V2.data()); }
192 
193 // modifiers
194 
195  void set_geo (const geo_basic<T,M>& omega) { base::data().set_geo (omega); }
196  void set_basis (const basis_basic<T>& b) { base::data().set_basis (b); }
197  void do_act (const space_act& act) { base::data().do_act(act); }
198 
199  void block (const domain_indirect_basic<M>& dom) { do_act (space_act(dom.name(), space_act::block)); }
203 };
204 // =======================================================================
205 // space_constitution = a recursive hierarchy of constitution
206 // =======================================================================
207 template <class T, class M>
209 public:
212  typedef std::vector<value_type> hierarchy_type;
215  typedef typename hierarchy_type::iterator iterator;
216  typedef typename hierarchy_type::const_iterator const_iterator;
218 
219 // allocator:
220 
223  space_constitution_rep (const geo_basic<T,M>& omega, std::string approx);
225 
226 // accessors & modifiers:
227 
228  const distributor& ownership() const { return _ownership; }
229  std::string name() const;
230  size_type ndof() const { return _ownership.size(); }
231  size_type dis_ndof() const { return _ownership.dis_size(); }
232  communicator comm() const { return _ownership.comm(); }
233  size_type ios_ndof() const;
234  void do_act (const space_act& act);
235  const geo_basic<T,M>& get_geo() const;
236  const geo_basic<T,M>& get_background_geo() const;
237  const basis_basic<T>& get_basis() const;
238  size_type loc_ndof (const reference_element& hat_K) const;
239  size_type assembly_loc_ndof (const geo_basic<T,M>& dom, const geo_element& bgd_K) const;
240  void assembly_dis_idof (const geo_basic<T,M>& dom,
241  const geo_element& bgd_K, std::vector<geo_element::size_type>& dis_idof) const;
242  void compute_external_dofs (std::set<size_type>& ext_dof_set) const;
245  const valued_type& valued_tag() const { return _valued_tag; }
246  const std::string& valued() const { return space_constant::valued_name (_valued_tag); }
247  bool is_hierarchical() const { return _is_hier; }
248  void set_hierarchy (bool hier) { _is_hier = hier; }
249 
250 // inquiries:
251 
253  bool is_discontinuous() const;
254  size_type degree_max() const;
255  void neighbour_guard() const;
256 
257 // scalar accessors & modifiers:
258 
259  const scalar_type& get_scalar() const { scalar_guard(); return _scalar_constit; }
261 
262 // hierarchy accessors & modifiers:
263 
266  size_type size() const { return _is_hier ? _hier_constit.size() : 0; }
268  const space_constitution<T,M>& operator[] (size_type i_comp) const { return get_hierarchy() [i_comp]; }
269 
271 
272 // utility:
273 
274  void set_ios_permutations (
275  disarray<size_type,M>& idof2ios_dis_idof,
276  disarray<size_type,M>& ios_idof2dis_idof) const;
277 
278 // comparator:
279 
280  bool operator== (const space_constitution_rep<T,M>& V2) const;
281 
282 // internal:
283  void initialize() const;
284  void append_external_dof (
285  const geo_basic<T,M>& dom,
286  std::set<size_type>& ext_dof_set,
287  const distributor& dof_ownership,
288  const distributor& start_by_component) const;
289  void compute_external_dofs (
290  std::set<size_type>& ext_dof_set,
291  const distributor& dof_ownership,
292  const std::vector<distributor>& start_by_component,
293  size_type& i_comp) const;
295  disarray<size_type,M>& blocked_flag, // disarray<bool,M> not supported
296  const std::vector<distributor>& start_by_component,
297  size_type& i_comp) const;
299 
300 // io:
301  void put (std::ostream& out, size_type level = 0) const;
302 
303 protected:
304 // internals:
305  friend class space_constitution<T,M>;
306  void hierarchy_guard() const { check_macro ( _is_hier, "invalid access to a non-hierarchical constitution"); }
307  void scalar_guard() const { check_macro (!_is_hier, "invalid access to a hierarchical constitution"); }
309  disarray<size_type,M>& idof2ios_dis_idof,
310  size_type& comp_start_idof,
311  size_type& comp_start_dis_idof) const;
314  size_type& i_flat_comp,
315  size_type& start_flat_comp_idof,
316  size_type& dis_start_flat_comp_idof,
317  std::vector<distributor>& start_by_flattened_component) const;
318  void _init_start_by_component() const;
320  const geo_basic<T,M>& dom,
321  const geo_element& bgd_K,
322  typename std::vector<geo_element::size_type>::iterator& dis_idof_t,
323  const distributor& hier_ownership,
324  const std::vector<distributor>& start_by_flattened_component,
325  size_type& i_flat_comp) const;
326 
327 // data:
328  // union (hier,not hier):
329  mutable bool _is_initialized;
331  mutable std::vector<distributor> _start_by_flattened_component;
332  mutable std::vector<distributor> _start_by_component;
335  bool _is_hier;
338  mutable std::array<size_type, reference_element::max_variant> _loc_ndof;
339 };
340 // ----------------------------------------------------------------------------
341 // inlined
342 // ----------------------------------------------------------------------------
343 // allocators: there are 4 allocators, here are 2, the 2 others are in .cc
344 template <class T, class M>
345 inline
347  : _is_initialized(false),
348  _flattened_size(0),
349  _start_by_flattened_component(),
350  _start_by_component(),
351  _ownership(),
352  _valued_tag(space_constant::mixed),
353  _is_hier(false),
354  _scalar_constit(),
355  _hier_constit(),
356  _loc_ndof()
357 {
358  _loc_ndof.fill (std::numeric_limits<size_type>::max());
359 }
360 template <class T, class M>
361 inline
363  : _is_initialized(x._is_initialized),
364  _flattened_size(x._flattened_size),
365  _start_by_flattened_component(x._start_by_flattened_component),
366  _start_by_component(x._start_by_component),
367  _ownership(x._ownership),
368  _valued_tag(x._valued_tag),
369  _is_hier(x._is_hier),
370  _scalar_constit(x._scalar_constit),
371  _hier_constit(x._hier_constit),
372  _loc_ndof()
373 {
374  _loc_ndof.fill (std::numeric_limits<size_type>::max());
375 }
376 // ----------------------------------------------------------------------------
377 // space_constitution
378 // ----------------------------------------------------------------------------
379 
380 template <class T, class M = rheo_default_memory_model>
381 class space_constitution : public smart_pointer<space_constitution_rep<T,M> > {
382 public:
383 
386  typedef typename rep::size_type size_type;
388  typedef typename rep::scalar_type scalar_type;
390  typedef typename rep::valued_type valued_type;
391 
392 // allocators:
393 
395  : base(new_macro(rep)) {}
396 
398  : base(b) {}
399 
401  const geo_basic<T,M>& omega,
402  std::string approx)
403  : base(new_macro(rep (omega,approx))) {}
404 
406  : base(new_macro(rep (expr))) {}
407 
408 // accessors & modifiers:
409 
410  const distributor& ownership() const { return base::data().ownership(); }
411  std::string name() const { return base::data().name(); }
412  size_type ndof() const { return base::data().ndof(); }
413  size_type dis_ndof() const { return base::data().dis_ndof(); }
414  size_type ios_ndof() const { return base::data().ios_ndof(); }
415  communicator comm() const { return base::data().comm(); }
416  const geo_basic<T,M>& get_geo() const { return base::data().get_geo(); }
417  const geo_basic<T,M>& get_background_geo() const { return base::data().get_background_geo(); }
418  const basis_basic<T>& get_basis() const { return base::data().get_basis(); }
419  size_type loc_ndof (const reference_element& hat_K) const { return base::data().loc_ndof (hat_K); }
420  size_type assembly_loc_ndof (const geo_basic<T,M>& dom, const geo_element& bgd_K) const {
421  return base::data().assembly_loc_ndof (dom, bgd_K); }
422  void assembly_dis_idof ( const geo_basic<T,M>& dom, const geo_element& bgd_K, std::vector<geo_element::size_type>& dis_idof) const {
423  base::data().assembly_dis_idof (dom, bgd_K, dis_idof); }
424  void do_act (const space_act& act) { base::data().do_act(act); }
425  void block (const domain_indirect_basic<M>& dom) { do_act (space_act(dom.name(), space_act::block)); }
429  disarray<size_type,M> build_blocked_flag() const { return base::data().build_blocked_flag(); }
430  void compute_external_dofs (std::set<size_type>& ext_dof_set) const
431  { base::data().compute_external_dofs(ext_dof_set); }
432  bool is_hierarchical() const { return base::data().is_hierarchical(); }
433 
434 // inquiries:
435 
436  bool have_compact_support_inside_element() const { return base::data().have_compact_support_inside_element(); }
437  bool is_discontinuous() const { return base::data().is_discontinuous(); }
438  size_type degree_max() const { return base::data().degree_max(); }
439  void neighbour_guard() const { return base::data().neighbour_guard(); }
440 
441 // scalar accessors & modifiers:
442 
443  const space_scalar_constitution<T,M>& get_scalar() const { return base::data().get_scalar(); }
445 
446 // hierarchy accessors & modifiers:
447 
448  void set_hierarchy(bool hier = true) { return base::data().set_hierarchy(hier); }
450  void set_valued (const std::string& valued){ base::data().set_valued (valued); }
451  const valued_type& valued_tag() const { return base::data().valued_tag(); }
452  const std::string& valued() const { return base::data().valued(); }
453  const hierarchy_type& get_hierarchy() const { return base::data().get_hierarchy(); }
454  hierarchy_type& get_hierarchy() { return base::data().get_hierarchy(); }
455  size_type size() const { return base::data().size(); }
456  space_constitution<T,M>& operator[] (size_type i_comp) { return base::data().operator[] (i_comp); }
457  const space_constitution<T,M>& operator[] (size_type i_comp) const { return base::data().operator[] (i_comp); }
458  size_type flattened_size() const { return base::data().flattened_size(); }
459 
460 // utility:
461 
463  disarray<size_type,M>& idof2ios_dis_idof,
464  disarray<size_type,M>& ios_idof2dis_idof) const
465  { base::data().set_ios_permutations (idof2ios_dis_idof, ios_idof2dis_idof); }
466 
467 // comparator:
468 
469  bool operator== (const space_constitution<T,M>& V2) const { return base::data().operator==(V2.data()); }
470 
471 protected:
472 // internal:
473  friend class space_constitution_rep<T,M>;
475  disarray<size_type,M>& idof2ios_dis_idof,
476  size_type& comp_start_idof,
477  size_type& comp_start_dis_idof) const
478  { base::data().set_ios_permutation_recursion (idof2ios_dis_idof, comp_start_idof, comp_start_dis_idof); }
479 };
480 template<class T, class M>
481 idiststream&
482 operator>> (idiststream& ids, space_constitution<T,M>& constit);
483 
484 } // namespace rheolef
485 #endif // _RHEOLEF_SPACE_CONSTITUTION_H
rheolef::space_constitution_rep::_init_flattened_size
size_type _init_flattened_size() const
Definition: space_constitution.cc:346
rheolef::space_scalar_constitution::unblock
void unblock(const domain_indirect_basic< M > &dom)
Definition: space_constitution.h:200
rheolef::space_constitution_rep::_start_by_flattened_component
std::vector< distributor > _start_by_flattened_component
Definition: space_constitution.h:331
rheolef::space_scalar_constitution
Definition: space_constitution.h:148
rheolef::space_constitution::size_type
rep::size_type size_type
Definition: space_constitution.h:386
rheolef::space_constitution::base
smart_pointer< rep > base
Definition: space_constitution.h:385
rheolef::geo_basic< T, M >
rheolef::space_constitution_rep::build_blocked_flag_recursive
void build_blocked_flag_recursive(disarray< size_type, M > &blocked_flag, const std::vector< distributor > &start_by_component, size_type &i_comp) const
Definition: space_constitution.cc:176
rheolef::space_constitution_rep::_assembly_dis_idof_recursive
void _assembly_dis_idof_recursive(const geo_basic< T, M > &dom, const geo_element &bgd_K, typename std::vector< geo_element::size_type >::iterator &dis_idof_t, const distributor &hier_ownership, const std::vector< distributor > &start_by_flattened_component, size_type &i_flat_comp) const
Definition: space_constitution_assembly.cc:223
rheolef::space_constitution::ndof
size_type ndof() const
Definition: space_constitution.h:412
rheolef::space_constitution_rep::set_ios_permutations
void set_ios_permutations(disarray< size_type, M > &idof2ios_dis_idof, disarray< size_type, M > &ios_idof2dis_idof) const
Definition: space_constitution.cc:638
rheolef::space_constitution_rep::is_discontinuous
bool is_discontinuous() const
Definition: space_constitution.cc:270
rheolef::space_constitution_rep::set_ios_permutation_recursion
void set_ios_permutation_recursion(disarray< size_type, M > &idof2ios_dis_idof, size_type &comp_start_idof, size_type &comp_start_dis_idof) const
Definition: space_constitution.cc:601
rheolef::io::out
@ out
Definition: rheostream.h:167
rheolef::space_constitution::space_constitution
space_constitution()
Definition: space_constitution.h:394
rheolef::space_constitution_rep::have_compact_support_inside_element
bool have_compact_support_inside_element() const
Definition: space_constitution.cc:256
rheolef::space_constitution_rep::neighbour_guard
void neighbour_guard() const
Definition: space_constitution.cc:556
rheolef::space_constitution_rep::hierarchy_type
std::vector< value_type > hierarchy_type
Definition: space_constitution.h:212
rheolef::space_scalar_constitution::base
smart_pointer< rep > base
Definition: space_constitution.h:152
mkgeo_ball.expr
expr
Definition: mkgeo_ball.sh:361
rheolef::space_act::space_act
space_act()
Definition: space_constitution.h:59
rheolef::space_constitution::set_valued
void set_valued(const std::string &valued)
Definition: space_constitution.h:450
check_macro
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")
rheolef::space_constitution::is_hierarchical
bool is_hierarchical() const
Definition: space_constitution.h:432
rheolef::space_constitution_rep::degree_max
size_type degree_max() const
Definition: space_constitution.cc:542
rheolef::distributor::comm
const communicator_type & comm() const
Definition: distributor.h:145
rheolef::smart_pointer_base< T, details::constructor_copy< T > >::data
const T & data() const
Definition: smart_pointer.h:266
rheolef::space_constitution::is_discontinuous
bool is_discontinuous() const
Definition: space_constitution.h:437
rheolef::space_scalar_constitution_rep::end
const_iterator end() const
Definition: space_constitution.h:111
rheolef::space_scalar_constitution::space_scalar_constitution
space_scalar_constitution(const geo_basic< T, M > &omega, std::string approx)
Definition: space_constitution.h:161
rheolef::space_constitution_rep::get_scalar
const scalar_type & get_scalar() const
Definition: space_constitution.h:259
rheolef::space_scalar_constitution_rep::set_ios_permutations
void set_ios_permutations(disarray< size_type, M > &idof2ios_dis_idof, disarray< size_type, M > &ios_idof2dis_idof) const
Definition: space_constitution.cc:593
rheolef::space_constitution::block_n
void block_n(const domain_indirect_basic< M > &dom)
Definition: space_constitution.h:427
rheolef::space_scalar_constitution_rep::is_initialized
bool is_initialized() const
Definition: space_constitution.h:108
rheolef::space_constitution::compute_external_dofs
void compute_external_dofs(std::set< size_type > &ext_dof_set) const
Definition: space_constitution.h:430
rheolef::space_constitution_rep::operator[]
space_constitution< T, M > & operator[](size_type i_comp)
Definition: space_constitution.h:267
rheolef::space_constitution::operator[]
space_constitution< T, M > & operator[](size_type i_comp)
Definition: space_constitution.h:456
rheolef::space_constitution::rep
space_constitution_rep< T, M > rep
Definition: space_constitution.h:384
rheolef::space_constitution_rep::get_background_geo
const geo_basic< T, M > & get_background_geo() const
Definition: space_constitution.cc:233
rheolef::space_scalar_constitution_rep::const_iterator
container_type::const_iterator const_iterator
Definition: space_constitution.h:85
rheolef::space_scalar_constitution_rep
Definition: space_constitution.h:81
rheolef::space_constitution_rep::this_type
space_constitution_rep< T, M > this_type
Definition: space_constitution.h:210
rheolef::space_scalar_constitution::set_ios_permutations
void set_ios_permutations(disarray< size_type, M > &idof2ios_dis_idof, disarray< size_type, M > &ios_idof2dis_idof) const
Definition: space_constitution.h:177
rheolef::space_constitution_rep::ios_ndof
size_type ios_ndof() const
Definition: space_constitution.cc:575
rheolef::space_constitution_rep::_is_initialized
bool _is_initialized
Definition: space_constitution.h:329
rheolef::space_constitution::unblock
void unblock(const domain_indirect_basic< M > &dom)
Definition: space_constitution.h:426
rheolef::space_scalar_constitution::const_iterator
rep::const_iterator const_iterator
Definition: space_constitution.h:154
rheolef::space_scalar_constitution::neighbour_guard
void neighbour_guard() const
Definition: space_constitution.h:187
rheolef::space_scalar_constitution::do_act
void do_act(const space_act &act)
Definition: space_constitution.h:197
rheolef::space_act::get_domain_name
const std::string & get_domain_name() const
Definition: space_constitution.h:66
rheolef::space_scalar_constitution::get_background_geo
const geo_basic< T, M > & get_background_geo() const
Definition: space_constitution.h:169
rheolef::space_constitution_rep::scalar_guard
void scalar_guard() const
Definition: space_constitution.h:307
rheolef::space_constitution_rep::_init_start_by_component
void _init_start_by_component() const
Definition: space_constitution.cc:382
rheolef::space_constitution_rep::set_valued_tag
void set_valued_tag(valued_type valued_tag)
Definition: space_constitution.h:243
rheolef::space_constitution::space_constitution
space_constitution(const space_mult_list< T, M > &expr)
Definition: space_constitution.h:405
rheolef::space_constant::valued_tag
valued_type valued_tag(const std::string &name)
Definition: space_constant.cc:50
rheolef::space_scalar_constitution_rep::space_scalar_constitution_rep
space_scalar_constitution_rep()
Definition: space_constitution.h:89
rheolef::space_constitution::loc_ndof
size_type loc_ndof(const reference_element &hat_K) const
Definition: space_constitution.h:419
rheolef::space_constitution_rep::_init_start_by_flattened_component
void _init_start_by_flattened_component(size_type &i_flat_comp, size_type &start_flat_comp_idof, size_type &dis_start_flat_comp_idof, std::vector< distributor > &start_by_flattened_component) const
Definition: space_constitution.cc:358
rheolef::space_constitution_rep::valued_tag
const valued_type & valued_tag() const
Definition: space_constitution.h:245
rheolef::space_constitution_rep::assembly_dis_idof
void assembly_dis_idof(const geo_basic< T, M > &dom, const geo_element &bgd_K, std::vector< geo_element::size_type > &dis_idof) const
Definition: space_constitution_assembly.cc:344
rheolef::space_scalar_constitution::is_discontinuous
bool is_discontinuous() const
Definition: space_constitution.h:185
rheolef::distributor
see the distributor page for the full documentation
Definition: distributor.h:62
rheolef::space_scalar_constitution_rep::space_scalar_constitution_rep
space_scalar_constitution_rep(const space_scalar_constitution_rep< T, M > &scr)
Definition: space_constitution.h:96
rheolef::space_act::act_type
act_type
Definition: space_constitution.h:46
rheolef::geo_element
see the geo_element page for the full documentation
Definition: geo_element.h:102
rheolef::space_act
Definition: space_constitution.h:38
rheolef::space_constant::mixed
@ mixed
Definition: space_constant.h:142
rheolef::space_constitution::get_hierarchy
hierarchy_type & get_hierarchy()
Definition: space_constitution.h:454
rheolef::space_constitution_rep::dis_ndof
size_type dis_ndof() const
Definition: space_constitution.h:231
rheolef::space_act::block
@ block
Definition: space_constitution.h:47
rheolef::space_constant::valued_type
valued_type
Definition: space_constant.h:135
rheolef::space_scalar_constitution::degree_max
size_type degree_max() const
Definition: space_constitution.h:186
rheolef::space_constitution_rep::put
void put(std::ostream &out, size_type level=0) const
Definition: space_constitution.cc:512
rheolef::space_numbering::dis_idof
void dis_idof(const basis_basic< T > &b, const geo_size &gs, const geo_element &K, typename std::vector< size_type >::iterator dis_idof_tab)
Definition: space_numbering.cc:187
rheolef::space_constitution::do_act
void do_act(const space_act &act)
Definition: space_constitution.h:424
rheolef::space_act::get_component_index
size_type get_component_index() const
Definition: space_constitution.h:68
rheolef::space_scalar_constitution::size
size_type size() const
Definition: space_constitution.h:171
rheolef::space_constitution::get_basis
const basis_basic< T > & get_basis() const
Definition: space_constitution.h:418
rheolef::space_constitution_rep::set_valued
void set_valued(const std::string &valued)
Definition: space_constitution.h:244
rheolef::space_scalar_constitution::block
void block(const domain_indirect_basic< M > &dom)
Definition: space_constitution.h:199
rheolef::space_constitution_rep::size
size_type size() const
Definition: space_constitution.h:266
rheolef::space_scalar_constitution_rep::get_background_geo
const geo_basic< T, M > & get_background_geo() const
Definition: space_constitution.h:105
rheolef::space_scalar_constitution_rep::size
size_type size() const
Definition: space_constitution.h:109
rheolef::space_constitution_rep::hierarchy_guard
void hierarchy_guard() const
Definition: space_constitution.h:306
rheolef::space_scalar_constitution::have_compact_support_inside_element
bool have_compact_support_inside_element() const
Definition: space_constitution.h:184
rheolef::space_scalar_constitution::rep
space_scalar_constitution_rep< T, M > rep
Definition: space_constitution.h:151
rheolef::space_constitution::operator==
bool operator==(const space_constitution< T, M > &V2) const
Definition: space_constitution.h:469
rheolef::basis_basic
Definition: basis.h:206
rheolef::reference_element
see the reference_element page for the full documentation
Definition: reference_element.h:66
rheolef::smart_pointer
see the smart_pointer page for the full documentation
Definition: smart_pointer.h:351
rheolef::space_constitution_rep::const_iterator
hierarchy_type::const_iterator const_iterator
Definition: space_constitution.h:216
rheolef::space_constitution_rep::iterator
hierarchy_type::iterator iterator
Definition: space_constitution.h:215
rheolef::space_scalar_constitution_rep::degree_max
size_type degree_max() const
Definition: space_constitution.h:121
rheolef::space_constitution::assembly_dis_idof
void assembly_dis_idof(const geo_basic< T, M > &dom, const geo_element &bgd_K, std::vector< geo_element::size_type > &dis_idof) const
Definition: space_constitution.h:422
rheolef::space_act::_i_comp
size_type _i_comp
Definition: space_constitution.h:73
rheolef::space_constitution_rep::valued_type
space_constant::valued_type valued_type
Definition: space_constitution.h:217
rheolef::space_constitution_rep::ndof
size_type ndof() const
Definition: space_constitution.h:230
rheolef::space_scalar_constitution_rep::container_type
std::vector< space_act > container_type
Definition: space_constitution.h:83
rheolef::space_constitution_rep::get_geo
const geo_basic< T, M > & get_geo() const
Definition: space_constitution.cc:208
rheolef::space_constitution::set_valued_tag
void set_valued_tag(valued_type valued_tag)
Definition: space_constitution.h:449
rheolef::space_constitution_rep::_valued_tag
valued_type _valued_tag
Definition: space_constitution.h:334
rheolef::space_constitution_rep::valued
const std::string & valued() const
Definition: space_constitution.h:246
rheolef::space_constitution_rep::flattened_size
size_type flattened_size() const
Definition: space_constitution.h:270
rheolef::space_scalar_constitution::get_basis
const basis_basic< T > & get_basis() const
Definition: space_constitution.h:170
rheolef::space_constitution_rep::get_basis
const basis_basic< T > & get_basis() const
Definition: space_constitution.cc:246
rheolef::space_constitution::set_hierarchy
void set_hierarchy(bool hier=true)
Definition: space_constitution.h:448
rheolef::space_constitution::get_background_geo
const geo_basic< T, M > & get_background_geo() const
Definition: space_constitution.h:417
rheolef::space_constitution_rep::_ownership
distributor _ownership
Definition: space_constitution.h:333
rheolef::space_constitution::neighbour_guard
void neighbour_guard() const
Definition: space_constitution.h:439
rheolef::space_scalar_constitution::operator==
bool operator==(const space_scalar_constitution< T, M > &V2) const
Definition: space_constitution.h:191
rheolef::space_constitution::flattened_size
size_type flattened_size() const
Definition: space_constitution.h:458
rheolef::space_act::get_act
act_type get_act() const
Definition: space_constitution.h:67
rheolef::space_act::size_type
size_t size_type
Definition: space_constitution.h:43
rheolef::space_scalar_constitution_rep::build_blocked_flag
void build_blocked_flag(disarray< size_type, M > &blocked_flag, const distributor &comp_ownership, const distributor &start_by_component) const
Definition: space_constitution.cc:103
rheolef::space_constitution::valued_type
rep::valued_type valued_type
Definition: space_constitution.h:390
rheolef::space_constitution_rep::is_hierarchical
bool is_hierarchical() const
Definition: space_constitution.h:247
rheolef::space_constitution_rep::do_act
void do_act(const space_act &act)
Definition: space_constitution.cc:84
rheolef::space_scalar_constitution::get_geo
const geo_basic< T, M > & get_geo() const
Definition: space_constitution.h:168
rheolef::space_scalar_constitution_rep::get_basis
const basis_basic< T > & get_basis() const
Definition: space_constitution.h:106
rheolef::space_constitution::size
size_type size() const
Definition: space_constitution.h:455
rheolef::space_constitution::const_iterator
rep::const_iterator const_iterator
Definition: space_constitution.h:387
rheolef::space_constitution::have_compact_support_inside_element
bool have_compact_support_inside_element() const
Definition: space_constitution.h:436
rheolef::space_scalar_constitution_rep::size_type
container_type::size_type size_type
Definition: space_constitution.h:84
rheolef::space_constitution_rep::size_type
hierarchy_type::size_type size_type
Definition: space_constitution.h:214
rheolef::space_constitution::ownership
const distributor & ownership() const
Definition: space_constitution.h:410
rheolef::space_constitution::block
void block(const domain_indirect_basic< M > &dom)
Definition: space_constitution.h:425
rheolef::space_constitution::get_hierarchy
const hierarchy_type & get_hierarchy() const
Definition: space_constitution.h:453
rheolef::space_act::_dom_name
std::string _dom_name
Definition: space_constitution.h:72
rheolef::space_constitution::degree_max
size_type degree_max() const
Definition: space_constitution.h:438
rheolef::space_constitution::scalar_type
rep::scalar_type scalar_type
Definition: space_constitution.h:388
rheolef::space_scalar_constitution_rep::set_basis
void set_basis(const basis_basic< T > &b)
Definition: space_constitution.h:129
rheolef::space_constant::valued_name
const std::string & valued_name(valued_type valued_tag)
Definition: space_constant.cc:43
rheolef::space_mult_list
Definition: space.h:111
rheolef::operator>>
std::istream & operator>>(std::istream &is, const catchmark &m)
Definition: catchmark.h:88
rheolef::space_act::space_act
space_act(const std::string &dom_name, size_type i_comp, act_type act)
Definition: space_constitution.h:57
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
rheolef::distributor::dis_size
size_type dis_size() const
global and local sizes
Definition: distributor.h:207
rheolef::space_scalar_constitution_rep::have_compact_support_inside_element
bool have_compact_support_inside_element() const
Definition: space_constitution.h:122
rheolef::space_scalar_constitution::block_n
void block_n(const domain_indirect_basic< M > &dom)
Definition: space_constitution.h:201
rheolef::space_scalar_constitution_rep::do_act
void do_act(const space_act &act)
Definition: space_constitution.cc:74
rheolef::space_constitution::name
std::string name() const
Definition: space_constitution.h:411
rheolef::space_act::_act
act_type _act
Definition: space_constitution.h:74
rheolef::space_constitution::get_geo
const geo_basic< T, M > & get_geo() const
Definition: space_constitution.h:416
rheolef::space_constitution::space_constitution
space_constitution(const base &b)
Definition: space_constitution.h:397
rheolef::space_constitution::valued_tag
const valued_type & valued_tag() const
Definition: space_constitution.h:451
rheolef::space_constitution::set_ios_permutation_recursion
void set_ios_permutation_recursion(disarray< size_type, M > &idof2ios_dis_idof, size_type &comp_start_idof, size_type &comp_start_dis_idof) const
Definition: space_constitution.h:474
rheolef::space_constitution_rep::get_hierarchy
hierarchy_type & get_hierarchy()
Definition: space_constitution.h:265
rheolef::disarray< size_type, M >
rheolef::space_act::unset_index
static const size_type unset_index
Definition: space_constitution.h:44
rheolef::space_constitution_rep::set_hierarchy
void set_hierarchy(bool hier)
Definition: space_constitution.h:248
rheolef::space_constitution_rep::_is_hier
bool _is_hier
Definition: space_constitution.h:335
rheolef::space_constitution_rep::space_constitution_rep
space_constitution_rep()
Definition: space_constitution.h:346
rheolef::space_constitution::unblock_n
void unblock_n(const domain_indirect_basic< M > &dom)
Definition: space_constitution.h:428
rheolef::space_constitution_rep::operator==
bool operator==(const space_constitution_rep< T, M > &V2) const
Definition: space_constitution.cc:328
rheolef::space_constitution_rep::comm
communicator comm() const
Definition: space_constitution.h:232
rheolef::space_constitution::comm
communicator comm() const
Definition: space_constitution.h:415
mkgeo_ball.b
b
Definition: mkgeo_ball.sh:152
rheolef::space_scalar_constitution::set_geo
void set_geo(const geo_basic< T, M > &omega)
Definition: space_constitution.h:195
rheolef::space_scalar_constitution_rep::_acts
std::vector< space_act > _acts
Definition: space_constitution.h:143
rheolef::space_constitution::get_scalar
space_scalar_constitution< T, M > & get_scalar()
Definition: space_constitution.h:444
rheolef::space_act::block_n
@ block_n
Definition: space_constitution.h:49
rheolef::space_constitution_rep::scalar_type
space_scalar_constitution< T, M > scalar_type
Definition: space_constitution.h:213
rheolef::space_constitution_rep::_loc_ndof
std::array< size_type, reference_element::max_variant > _loc_ndof
Definition: space_constitution.h:338
rheolef::space_scalar_constitution_rep::is_discontinuous
bool is_discontinuous() const
Definition: space_constitution.h:123
rheolef::space_scalar_constitution_rep::_fem_basis
basis_basic< T > _fem_basis
Definition: space_constitution.h:145
rheolef::space_constitution::assembly_loc_ndof
size_type assembly_loc_ndof(const geo_basic< T, M > &dom, const geo_element &bgd_K) const
Definition: space_constitution.h:420
rheolef::space_constitution_rep::build_blocked_flag
disarray< size_type, M > build_blocked_flag() const
Definition: space_constitution.cc:195
rheolef::space_constitution::space_constitution
space_constitution(const geo_basic< T, M > &omega, std::string approx)
Definition: space_constitution.h:400
rheolef::space_constitution_rep::compute_external_dofs
void compute_external_dofs(std::set< size_type > &ext_dof_set) const
Definition: space_constitution.cc:500
rheolef::space_constitution::hierarchy_type
rep::hierarchy_type hierarchy_type
Definition: space_constitution.h:389
rheolef::space_constitution_rep::ownership
const distributor & ownership() const
Definition: space_constitution.h:228
rheolef::space_scalar_constitution_rep::get_geo
const geo_basic< T, M > & get_geo() const
Definition: space_constitution.h:104
size_type
field::size_type size_type
Definition: branch.cc:425
rheolef::space_constitution_rep::_hier_constit
hierarchy_type _hier_constit
Definition: space_constitution.h:337
rheolef::space_constitution_rep::_scalar_constit
scalar_type _scalar_constit
Definition: space_constitution.h:336
rheolef::space_scalar_constitution::space_scalar_constitution
space_scalar_constitution()
Definition: space_constitution.h:158
rheolef::space_scalar_constitution_rep::_omega
geo_basic< T, M > _omega
Definition: space_constitution.h:144
rheolef::space_act::space_act
space_act(const std::string &dom_name, act_type act)
Definition: space_constitution.h:55
rheolef::space_constitution_rep::_start_by_component
std::vector< distributor > _start_by_component
Definition: space_constitution.h:332
rheolef::space_constitution_rep::get_scalar
scalar_type & get_scalar()
Definition: space_constitution.h:260
rheolef::space_constitution_rep::append_external_dof
void append_external_dof(const geo_basic< T, M > &dom, std::set< size_type > &ext_dof_set, const distributor &dof_ownership, const distributor &start_by_component) const
Definition: space_constitution.cc:451
rheolef::space_constitution_rep::loc_ndof
size_type loc_ndof(const reference_element &hat_K) const
Definition: space_constitution_assembly.cc:43
rheolef::space_constitution::valued
const std::string & valued() const
Definition: space_constitution.h:452
rheolef::space_act::space_act
space_act(const space_act &x)
Definition: space_constitution.h:61
rheolef::space_constitution::ios_ndof
size_type ios_ndof() const
Definition: space_constitution.h:414
rheolef::space_scalar_constitution::size_type
rep::size_type size_type
Definition: space_constitution.h:153
rheolef::space_constitution::set_ios_permutations
void set_ios_permutations(disarray< size_type, M > &idof2ios_dis_idof, disarray< size_type, M > &ios_idof2dis_idof) const
Definition: space_constitution.h:462
rheolef::space_constitution_rep::name
std::string name() const
Definition: space_constitution.cc:531
rheolef::space_act::unblock
@ unblock
Definition: space_constitution.h:48
rheolef::space_constitution::build_blocked_flag
disarray< size_type, M > build_blocked_flag() const
Definition: space_constitution.h:429
rheolef::space_constitution_rep::initialize
void initialize() const
Definition: space_constitution.cc:403
rheolef::space_constitution::dis_ndof
size_type dis_ndof() const
Definition: space_constitution.h:413
rheolef::space_scalar_constitution_rep::set_geo
void set_geo(const geo_basic< T, M > &omega)
Definition: space_constitution.h:128
rheolef::domain_indirect_basic
the finite element boundary domain
Definition: domain_indirect.h:335
rheolef::space_constitution_rep::_flattened_size
size_type _flattened_size
Definition: space_constitution.h:330
rheolef::space_scalar_constitution_rep::neighbour_guard
void neighbour_guard() const
Definition: space_constitution.h:124
rheolef::space_scalar_constitution::set_basis
void set_basis(const basis_basic< T > &b)
Definition: space_constitution.h:196
rheolef::space_constitution_rep::assembly_loc_ndof
size_type assembly_loc_ndof(const geo_basic< T, M > &dom, const geo_element &bgd_K) const
Definition: space_constitution_assembly.cc:137
M
Expr1::memory_type M
Definition: vec_expr_v2.h:385
rheolef::distributor::size
size_type size(size_type iproc) const
Definition: distributor.h:163
rheolef::space_constitution
Definition: space_constitution.h:32
rheolef::space_scalar_constitution_rep::operator==
bool operator==(const space_scalar_constitution_rep< T, M > &V2) const
Definition: space_constitution.h:134
rheolef::space_scalar_constitution::end
const_iterator end() const
Definition: space_constitution.h:173
rheolef::space_act::unblock_n
@ unblock_n
Definition: space_constitution.h:50
rheolef::space_constitution_rep::value_type
space_constitution< T, M > value_type
Definition: space_constitution.h:211
rheolef::space_scalar_constitution::unblock_n
void unblock_n(const domain_indirect_basic< M > &dom)
Definition: space_constitution.h:202
rheolef::space_scalar_constitution_rep::begin
const_iterator begin() const
Definition: space_constitution.h:110
T
Expr1::float_type T
Definition: field_expr.h:218
rheolef::space_constitution::get_scalar
const space_scalar_constitution< T, M > & get_scalar() const
Definition: space_constitution.h:443
rheolef::space_scalar_constitution::begin
const_iterator begin() const
Definition: space_constitution.h:172
trace_macro
#define trace_macro(message)
Definition: dis_macros.h:111
rheolef::space_constitution_rep::get_hierarchy
const hierarchy_type & get_hierarchy() const
Definition: space_constitution.h:264
rheolef::space_constitution_rep
Definition: space_constitution.h:208