1#include "Space/SpaceBox.hpp"
2
3#ifndef DECOMPOSITION_HPP_
4#define DECOMPOSITION_HPP_
5
6/**
7 *
8 * \brief class that store Internal part external and border part of a dataset
9 *
10 */
11
12template <typename T> class dataDiv
13{
14 //! Border part of the data
15 boost::shared_ptr<T> bord;
16 //! internal part of your data
17 boost::shared_ptr<T> inte;
18 //! external part of your data
19 boost::shared_ptr<T> ext;
20};
21
22/*! \brief This class define the domain decomposition interface
23 *
24 * This class define the domain decomposition interface, its main functionality
25 * is to divide a domain in several subspaces
26 *
27 * \tparam T structure that store the dataset
28 * \tparam S type of space is decomposing Real integer complex ...
29 *
30 */
31
32template<typename T, typename S>
33class Decomposition
34{
35 /*! \brief The the internal part of the data set, or the data that
36 * does not depend from the ghosts layers
37 *
38 * \return The internal part of the dataset
39 *
40 */
41 virtual T getInternal();
42
43
44 /*! Get the ghost part of the dataset
45 *
46 * \return The internal part of the dataset
47 *
48 */
49 virtual T getBorder();
50
51 /*! Get the external part of the dataset (outside the ghost)
52 *
53 * \return The external part of the dataset
54 *
55 */
56 virtual T getExternal();
57
58 //! divide the dataset from internal part and border
59 virtual dataDiv<T> divide();
60
61 //! Get the number of hyper-cube the space id is divided into
62 virtual size_t getNHyperCube(size_t id);
63
64 //! Get the hyper-cube margins
65 virtual std::vector<T> & getHyperCube(size_t id, size_t id_c);
66
67 //! destructor
68 virtual ~Decomposition(){}
69};
70
71#endif
72