1#ifndef _RHEOLEF_SPACE_CONSTITUTION_H
2#define _RHEOLEF_SPACE_CONSTITUTION_H
24#include "rheolef/geo.h"
25#include "rheolef/geo_domain.h"
26#include "rheolef/space_constant.h"
31template <
class T,
class M>
class space_mult_list;
32template <
class T,
class M>
class space_constitution;
80template <
class T,
class M>
84 typedef typename container_type::size_type
size_type;
99 trace_macro (
"physical copy of space_constitution_terminal_rep: size="<<
size());
147template <
class T,
class M>
180 { base::data().set_ios_permutations (idof2ios_dis_idof, ios_idof2dis_idof); }
207template <
class T,
class M>
215 typedef typename hierarchy_type::iterator
iterator;
229 std::string
name()
const;
241 const geo_element& bgd_K, std::vector<geo_element::size_type>& dis_idof)
const;
287 std::set<size_type>& ext_dof_set,
291 std::set<size_type>& ext_dof_set,
293 const std::vector<distributor>& start_by_component,
297 const std::vector<distributor>& start_by_component,
318 std::vector<distributor>& start_by_flattened_component)
const;
323 typename std::vector<geo_element::size_type>::iterator& dis_idof_t,
325 const std::vector<distributor>& start_by_flattened_component,
339 mutable std::array<size_type, reference_element::max_variant>
_loc_ndof;
345template <
class T,
class M>
348 : _is_initialized(false),
350 _start_by_flattened_component(),
351 _start_by_component(),
353 _valued_tag(space_constant::mixed),
359 _loc_ndof.fill (std::numeric_limits<size_type>::max());
361template <
class T,
class M>
364 : _is_initialized(x._is_initialized),
365 _flattened_size(x._flattened_size),
366 _start_by_flattened_component(x._start_by_flattened_component),
367 _start_by_component(x._start_by_component),
368 _ownership(x._ownership),
369 _valued_tag(x._valued_tag),
370 _is_hier(x._is_hier),
371 _terminal_constit(x._terminal_constit),
372 _hier_constit(x._hier_constit),
375 _loc_ndof.fill (std::numeric_limits<size_type>::max());
377template <
class T,
class M>
382 : _is_initialized(false),
384 _start_by_flattened_component(),
385 _start_by_component(),
387 _valued_tag(space_constant::scalar),
393 _loc_ndof.fill (std::numeric_limits<size_type>::max());
404template <
class T,
class M = rheo_default_memory_model>
427 :
base(new_macro(
rep (omega,approx))) {}
430 :
base(new_macro(
rep (expr))) {}
435 std::string
name()
const {
return base::data().name(); }
439 communicator
comm()
const {
return base::data().comm(); }
445 return base::data().assembly_loc_ndof (dom, bgd_K); }
447 base::data().assembly_dis_idof (dom, bgd_K, dis_idof); }
455 { base::data().compute_external_dofs(ext_dof_set); }
472 void set_hierarchy(
bool hier =
true) {
return base::data().set_hierarchy(hier); }
476 const std::string&
valued()
const {
return base::data().valued(); }
484 {
return base::data().comp_dis_idof2dis_idof (i_comp, comp_dis_idof); }
491 { base::data().set_ios_permutations (idof2ios_dis_idof, ios_idof2dis_idof); }
504 { base::data().set_ios_permutation_recursion (idof2ios_dis_idof, comp_start_idof, comp_start_dis_idof); }
506template<
class T,
class M>
508operator>> (idiststream& ids, space_constitution<T,M>& constit);
field::size_type size_type
see the disarray page for the full documentation
see the distributor page for the full documentation
size_type dis_size() const
global and local sizes
size_type size(size_type iproc) const
const communicator_type & comm() const
the finite element boundary domain
generic mesh with rerefence counting
see the geo_element page for the full documentation
see the reference_element page for the full documentation
see the smart_pointer page for the full documentation
const std::string & get_domain_name() const
size_type get_component_index() const
space_act(const std::string &dom_name, act_type act)
space_act(const space_act &x)
static const size_type unset_index
space_act(const std::string &dom_name, size_type i_comp, act_type act)
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
const scalar_type & get_terminal() const
disarray< size_type, M > build_blocked_flag() const
hierarchy_type _hier_constit
space_constitution_terminal< T, M > scalar_type
bool have_compact_support_inside_element() const
void set_ios_permutations(disarray< size_type, M > &idof2ios_dis_idof, disarray< size_type, M > &ios_idof2dis_idof) const
const basis_basic< T > & get_basis() const
size_type ios_ndof() const
void _init_start_by_component() const
const geo_basic< T, M > & get_background_geo() const
size_type dis_ndof() const
size_type flattened_size() const
std::array< size_type, reference_element::max_variant > _loc_ndof
void put(std::ostream &out, size_type level=0) const
size_type _init_flattened_size() const
std::vector< value_type > hierarchy_type
bool is_discontinuous() const
const valued_type & valued_tag() const
std::vector< distributor > _start_by_flattened_component
space_constitution_rep< T, M > this_type
void set_valued(const std::string &valued)
void build_blocked_flag_recursive(disarray< size_type, M > &blocked_flag, const std::vector< distributor > &start_by_component, size_type &i_comp) const
space_constant::valued_type valued_type
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
void set_ios_permutation_recursion(disarray< size_type, M > &idof2ios_dis_idof, size_type &comp_start_idof, size_type &comp_start_dis_idof) const
hierarchy_type::iterator iterator
void hierarchy_guard() const
bool operator==(const space_constitution_rep< T, M > &V2) const
scalar_type _terminal_constit
void assembly_dis_idof(const geo_basic< T, M > &dom, const geo_element &bgd_K, std::vector< geo_element::size_type > &dis_idof) const
size_type degree_max() const
space_constitution< T, M > value_type
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
hierarchy_type & get_hierarchy()
void set_hierarchy(bool hier)
size_type loc_ndof(const reference_element &hat_K) const
const hierarchy_type & get_hierarchy() const
hierarchy_type::const_iterator const_iterator
communicator comm() const
std::vector< distributor > _start_by_component
space_constitution< T, M > & operator[](size_type i_comp)
bool is_hierarchical() const
hierarchy_type::size_type size_type
const std::string & valued() const
const geo_basic< T, M > & get_geo() const
scalar_type & get_terminal()
void set_valued_tag(valued_type valued_tag)
size_type assembly_loc_ndof(const geo_basic< T, M > &dom, const geo_element &bgd_K) const
void scalar_guard() const
size_type _flattened_size
const distributor & ownership() const
void compute_external_dofs(std::set< size_type > &ext_dof_set) const
void neighbour_guard() const
void do_act(const space_act &act)
size_type comp_dis_idof2dis_idof(size_type i_comp, size_type comp_dis_idof) const
space_constitution_terminal_rep()
container_type::size_type size_type
bool operator==(const space_constitution_terminal_rep< T, M > &V2) const
bool have_compact_support_inside_element() const
void set_ios_permutations(disarray< size_type, M > &idof2ios_dis_idof, disarray< size_type, M > &ios_idof2dis_idof) const
const basis_basic< T > & get_basis() const
container_type::const_iterator const_iterator
size_type degree_max() const
const_iterator begin() const
const geo_basic< T, M > & get_background_geo() const
std::vector< space_act > _acts
space_constitution_terminal_rep(const space_constitution_terminal_rep< T, M > &scr)
bool is_discontinuous() const
void build_blocked_flag(disarray< size_type, M > &blocked_flag, const distributor &comp_ownership, const distributor &start_by_component) const
std::vector< space_act > container_type
bool is_initialized() const
basis_basic< T > _fem_basis
void set_basis(const basis_basic< T > &b)
void set_geo(const geo_basic< T, M > &omega)
const_iterator end() const
const geo_basic< T, M > & get_geo() const
void neighbour_guard() const
void do_act(const space_act &act)
rep::const_iterator const_iterator
bool have_compact_support_inside_element() const
void set_ios_permutations(disarray< size_type, M > &idof2ios_dis_idof, disarray< size_type, M > &ios_idof2dis_idof) const
const basis_basic< T > & get_basis() const
size_type degree_max() const
const_iterator begin() const
const geo_basic< T, M > & get_background_geo() const
void block(const domain_indirect_basic< M > &dom)
bool is_discontinuous() const
void unblock_n(const domain_indirect_basic< M > &dom)
void set_basis(const basis_basic< T > &b)
smart_pointer< rep > base
void set_geo(const geo_basic< T, M > &omega)
bool operator==(const space_constitution_terminal< T, M > &V2) const
void block_n(const domain_indirect_basic< M > &dom)
space_constitution_terminal()
void unblock(const domain_indirect_basic< M > &dom)
const_iterator end() const
space_constitution_terminal(const geo_basic< T, M > &omega, std::string approx)
const geo_basic< T, M > & get_geo() const
space_constitution_terminal_rep< T, M > rep
void neighbour_guard() const
void do_act(const space_act &act)
disarray< size_type, M > build_blocked_flag() const
rep::const_iterator const_iterator
bool operator==(const space_constitution< T, M > &V2) const
space_constitution_rep< T, M > rep
bool have_compact_support_inside_element() const
void set_ios_permutations(disarray< size_type, M > &idof2ios_dis_idof, disarray< size_type, M > &ios_idof2dis_idof) const
const basis_basic< T > & get_basis() const
size_type degree_max() const
const geo_basic< T, M > & get_background_geo() const
size_type dis_ndof() const
size_type flattened_size() const
void block(const domain_indirect_basic< M > &dom)
space_constitution(const base &b)
bool is_discontinuous() const
const valued_type & valued_tag() const
space_constitution_terminal< T, M > & get_terminal()
rep::hierarchy_type hierarchy_type
void set_valued(const std::string &valued)
size_type loc_ndof(const reference_element &hat_K) const
space_constitution(const space_mult_list< T, M > &expr)
void unblock_n(const domain_indirect_basic< M > &dom)
void set_ios_permutation_recursion(disarray< size_type, M > &idof2ios_dis_idof, size_type &comp_start_idof, size_type &comp_start_dis_idof) const
size_type assembly_loc_ndof(const geo_basic< T, M > &dom, const geo_element &bgd_K) const
void set_hierarchy(bool hier=true)
void assembly_dis_idof(const geo_basic< T, M > &dom, const geo_element &bgd_K, std::vector< geo_element::size_type > &dis_idof) const
rep::valued_type valued_type
smart_pointer< rep > base
hierarchy_type & get_hierarchy()
const space_constitution_terminal< T, M > & get_terminal() const
space_constitution(const geo_basic< T, M > &omega, std::string approx)
const hierarchy_type & get_hierarchy() const
void block_n(const domain_indirect_basic< M > &dom)
size_type ios_ndof() const
communicator comm() const
space_constitution< T, M > & operator[](size_type i_comp)
void unblock(const domain_indirect_basic< M > &dom)
bool is_hierarchical() const
size_type comp_dis_idof2dis_idof(size_type i_comp, size_type comp_dis_idof) const
const std::string & valued() const
const geo_basic< T, M > & get_geo() const
void set_valued_tag(valued_type valued_tag)
const distributor & ownership() const
void compute_external_dofs(std::set< size_type > &ext_dof_set) const
void neighbour_guard() const
void do_act(const space_act &act)
rep::scalar_type scalar_type
#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)")
const std::string & valued_name(valued_type valued_tag)
valued_type valued_tag(const std::string &name)
This file is part of Rheolef.
std::istream & operator>>(std::istream &is, const catchmark &m)