source: XIOS/trunk/src/server_distribution_description.hpp @ 828

Last change on this file since 828 was 815, checked in by mhnguyen, 8 years ago

Fixing the bug in ticket 72

+) The distributed axis on client side send info to correct corresponding server
+) Improve serverdistributiondescription class to make it more flexible
+) Create new test_basic_2D only for test cases of 2-d grid

Test
+) On Curie
+) All tests pass

File size: 2.4 KB
Line 
1/*!
2   \file server_distribution_description.hpp
3   \author Ha NGUYEN
4   \since 04 Jan 2015
5   \date 11 Jan 2016
6
7   \brief Description of index distribution on server(s).
8 */
9
10#ifndef __XIOS_SERVER_DISTRIBUTION_DESCRIPTION_HPP
11#define __XIOS_SERVER_DISTRIBUTION_DESCRIPTION_HPP
12
13#include "xios_spl.hpp"
14#include "array_new.hpp"
15#include <boost/unordered_map.hpp>
16
17namespace xios
18{
19/*!
20   \class CServerDistributionDescription
21   This class contains information that describe distribution of servers.
22*/
23class CServerDistributionDescription
24{
25  public:
26    enum ServerDistributionType
27    {
28      BAND_DISTRIBUTION, PLAN_DISTRIBUTION
29    };
30
31    /** Default constructor */
32    CServerDistributionDescription(const std::vector<int>& globalDimensionSize,
33                                   int nServer,
34                                   ServerDistributionType serType=BAND_DISTRIBUTION);
35
36    /** Default destructor */
37    virtual ~CServerDistributionDescription();
38
39    void computeServerDistribution(bool doComputeGlobalIndex = false, int positionDimensionDistributed = 1);
40    void computeServerGlobalIndexInRange(const std::pair<size_t, size_t>& indexBeginEnd, int positionDimensionDistributed = 1);
41
42    std::vector<std::vector<int> > getServerIndexBegin() const;
43    std::vector<std::vector<int> > getServerDimensionSizes() const;
44    const std::vector<CArray<size_t,1> >& getGlobalIndex() const;
45    const boost::unordered_map<size_t,int>& getGlobalIndexRange() const;
46    int getDimensionDistributed();
47
48  protected:
49    void computeBandDistribution(int nServer, int positionDimensionDistributed = 1);
50    void computePlanDistribution(int nServer);
51
52  private:
53    std::vector<std::vector<int> > indexBegin_;     //!< Begin index of each dimension
54    std::vector<std::vector<int> > dimensionSizes_; //!< Size of each dimension
55    std::vector<int> nGlobal_; //!< Global size of each dimension
56
57    //!< General case, index describes distribution of each server (rarely use)
58    std::vector<CArray<size_t,1> > vecGlobalIndex_;
59
60    //!< In case we need only global index of one server with specific rank
61    boost::unordered_map<size_t,int> globalIndex_;
62
63    //!< Type of distribution on server side
64    ServerDistributionType serverType_;
65
66    //!< Number of server
67    int nServer_;
68
69    //!< Position of dimension distributed on server side (by default, the second dimension)
70    int positionDimensionDistributed_;
71};
72
73} // namespace xios
74#endif // __XIOS_SERVER_DISTRIBUTION_DESCRIPTION_HPP
Note: See TracBrowser for help on using the repository browser.