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"
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,
294 size_type& i_comp)
const;
297 const std::vector<distributor>& start_by_component,
298 size_type& i_comp)
const;
311 size_type& comp_start_idof,
312 size_type& comp_start_dis_idof)
const;
315 size_type& i_flat_comp,
316 size_type& start_flat_comp_idof,
317 size_type& dis_start_flat_comp_idof,
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,
326 size_type& i_flat_comp)
const;
339 mutable std::array<size_type, reference_element::max_variant>
_loc_ndof;
345template <
class T,
class M>
359 _loc_ndof.fill (std::numeric_limits<size_type>::max());
361template <
class T,
class M>
375 _loc_ndof.fill (std::numeric_limits<size_type>::max());
377template <
class T,
class M>
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))) {}
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); }
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);
see the communicator page for the full documentation
see the disarray page for the full documentation
see the distributor page for the full documentation
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
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< float_type, memory_type > 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)