Provided by: librheolef-dev_6.5-1build1_amd64 bug

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  usefull  for  boundary
       condition setting.

IMPLEMENTATION NOTE

       The  domain class is splitted 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 (
               array<geo_element_auto<heap_allocator<size_type> >,sequential, heap_allocator<size_type> >&
                                               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;

       // 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 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)