piecewise polynomial finite element space
Description
The space
class contains the numbering of the degrees of freedoms. The degrees of freedoms are the coefficients in the basis of the vectorial space of piecewise polynomial finite element functions. The set of degrees of freedom coefficients is splited in two subsets: the unknowns and the blocked degrees of freedoms. The blocked degrees of freedom are associated to Dirichlet boundary conditions, where the values of the function, and thus, of the coefficients, are prescribed. The unknown degrees of freedom are all the others. Finally, the space
class is mainly a table of renumbering for these coefficients.
The space is characterized by two entities: its finite element, described by the basis
class and its mesh, described by the geo
class. By default, the space is scalar valued. It extends to vector and tensor valued functions.
Example
space Q (omega, "P1");
space V (omega, "P2", "vector");
space T (omega, "P1d", "tensor");
Product of spaces
space X = T*V*Q;
space Q2 = pow(Q,2);
Space of reals
The 'space::real()' function returns the space of reals and could be used in a product of spaces as:
space IR = space::real();
space Yh = Xh*IR;
This convention is useful e.g. when a Lagrange multiplier is a real, not a field. It extends to IR^n
for any size_t n
as:
space IRn = pow(IR,n);
Implementation
This documentation has been generated from file main/lib/space.h
The space
class is simply an alias to the space_basic
class
typedef space_basic<Float>
space;
The space_basic
class provides an interface to a data container:
template <class T>
class space_basic<
T,sequential> :
public smart_pointer<space_rep<T,sequential> > {
public:
typedef space_rep<T,sequential> rep;
typedef smart_pointer<rep> base;
space_basic (const geo_basic<T,sequential>& omega = (geo_basic<T,sequential>()),
std::string approx = "",
std::string prod_valued = "scalar");
space_basic (const geo_basic<T,sequential>& omega,
const basis_basic<T>&
b);
space_basic (
const space_mult_list<T,sequential>&
expr);
space_basic (const space_constitution<T,sequential>& constit);
static space_basic<T,sequential> real();
void block (std::string dom_name);
void unblock(std::string dom_name);
void block (const domain_indirect_basic<sequential>& dom);
void unblock(const domain_indirect_basic<sequential>& dom);
void block_n (std::string dom_name);
void unblock_n(std::string dom_name);
void block_n (const domain_indirect_basic<sequential>& dom);
void unblock_n(const domain_indirect_basic<sequential>& dom);
const distributor& ownership() const;
const communicator& comm() const;
const geo_basic<T,sequential>&
get_geo()
const;
const basis_basic<T>& get_basis() const;
const std::string& valued() const;
space_component<T,sequential> operator[] (
size_type i_comp);
space_component_const<T,sequential> operator[] (
size_type i_comp)
const;
const space_constitution<T,sequential>& get_constitution() const;
std::string get_approx() const;
std::string
name()
const;
const distributor& iu_ownership() const;
const distributor& ib_ownership() const;
const distributor& ios_ownership() const;
const disarray<point_basic<T>,sequential>& get_xdofs() const;
template <class Function>
template <class Function>
template <class Function>
disarray<size_type, sequential> build_indirect_array (
const space_basic<T,sequential>& Wh, const std::string& dom_name) const;
disarray<size_type, sequential> build_indirect_array (
const space_basic<T,sequential>& Wh, const geo_basic<T,sequential>& bgd_gamma) const;
const std::set<size_type>& ext_iu_set() const { return base::data().ext_iu_set(); }
const std::set<size_type>& ext_ib_set() const { return base::data().ext_ib_set(); }
bool operator== (
const space_basic<T,sequential>& V2)
const {
return base::data().operator==(V2.data()); }
friend bool are_compatible (const space_basic<T,sequential>& V1, const space_basic<T,sequential>& V2) {
return are_compatible (V1.data(), V2.data()); }
};