---
name: "domain_indirect"
section: "7rheolef"
platform: "linux"
package: "librheolef-dev"
version: "7.0-2+b1"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/domain_indirect"
---

# domain\_indirect(7rheolef)

a named part of a finite element mesh

## NAME

**domain\_indirect** - a named part of a finite element mesh

## DESCRIPTION

The **domain\_indirect** class defines a container for a part of a finite element mesh. This describes the connectivity of edges or faces. This class is useful for boundary condition setting.

## IMPLEMENTATION NOTE

The **domain** class is split into two parts. The first one is the **domain\_indirect** class, that contains the main renumbering features: it acts as a indirect on a **geo** class(see geo(2)). The second one is the **domain** class, that simply contains two smart\_pointers: one on a **domain\_indirect** and the second on the **geo** where renumbering is acting. Thus, the domain class develops a complete **geo**-like interface, via the **geo\_abstract\_rep** pure virtual class derivation, and can be used by the **space** class (see space(2)). The split between domain\_indirect and domain is necessary, because the **geo** class contains a list of domain\_indirect. It cannot contains a list of **domain** classes, that refers to the geo class itself: a loop in reference counting leads to a blocking situation in the automatic deallocation.

## IMPLEMENTATION

```
template <>
class domain_indirect_basic<sequential> : public smart_pointer<domain_indirect_rep<sequential> > {
public:
// typedefs:
    typedef domain_indirect_rep<sequential> rep;
    typedef smart_pointer<rep>        base;
    typedef rep::size_type            size_type;
    typedef rep::iterator_ioige       iterator_ioige;
    typedef rep::const_iterator_ioige const_iterator_ioige;
// allocators:
    domain_indirect_basic ();
    template <class T>
    domain_indirect_basic (
        const geo_basic<T,sequential>&  omega,
        const std::string&              name,
        size_type                       map_dim,
        const communicator&             comm,
        const std::vector<size_type>&   ie_list);
    template <class U>
    domain_indirect_basic (
        disarray<geo_element_auto<>,sequential>&
                                        d_tmp,
        const geo_basic<U, sequential>& omega,
        std::vector<index_set>*         ball);
    void resize (size_type n);
// accessors:
    size_type size()     const;
    size_type dis_size() const;
    const distributor& ownership() const;
    const_iterator_ioige ioige_begin() const;
    const_iterator_ioige ioige_end()   const;
          iterator_ioige ioige_begin();
          iterator_ioige ioige_end();
    const geo_element_indirect& oige (size_type ioige) const;
    void set_name (std::string name);
    void set_map_dimension (size_type map_dim);
    std::string name ()    const;
    size_type map_dimension () const;
// i/o:
    odiststream& put (odiststream&) const;
    template <class T>
    idiststream& get (idiststream& ips, const geo_rep<T,sequential>& omega, std::vector<index_set> *ball);
};

```

## IMPLEMENTATION

```
template <>
class domain_indirect_basic<distributed> : public smart_pointer<domain_indirect_rep<distributed> > {
public:
// typedefs:
    typedef domain_indirect_rep<distributed>  rep;
    typedef smart_pointer<rep>            base;
    typedef rep::size_type                size_type;
    typedef rep::iterator_ioige           iterator_ioige;
    typedef rep::const_iterator_ioige     const_iterator_ioige;
// allocators:
    domain_indirect_basic ();
    template<class T>
    domain_indirect_basic (
        const geo_basic<T,distributed>& omega,
        const std::string&            name,
        size_type                     map_dim,
        const communicator&           comm,
        const std::vector<size_type>& ie_list);
// accessors/modifiers:
    size_type size()     const;
    size_type dis_size() const;
    const distributor& ownership() const;
    const geo_element_indirect& oige (size_type ioige) const;
    void set_name (std::string name);
    void set_map_dimension (size_type map_dim);
    std::string name () const;
    size_type map_dimension () const;
// distributed specific acessors:
    const_iterator_ioige ioige_begin() const;
    const_iterator_ioige ioige_end()   const;
          iterator_ioige ioige_begin();
          iterator_ioige ioige_end();
    const distributor& ini_ownership() const;
    size_type ioige2ini_dis_ioige (size_type ioige) const;
    size_type ini_ioige2dis_ioige (size_type ini_ioige) const;
// i/o:
    template <class T>
    idiststream& get (idiststream& ips, const geo_rep<T,distributed>& omega);
    template <class T>
    odiststream& put (odiststream& ops, const geo_rep<T,distributed>& omega) const;
};

```

## SEE ALSO

geo(2), space(2)

## COPYRIGHT

Copyright (C) 2000-2018 Pierre Saramito \<Pierre.Saramito@imag.fr\> GPLv3+: GNU GPL version 3 or later \<http://gnu.org/licenses/gpl.html\>. This is free software: you are free to change and redistribute it.  There is NO WARRANTY, to the extent permitted by law.
