source: XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/element.hpp @ 1960

Last change on this file since 1960 was 1930, checked in by ymipsl, 4 years ago

Big update on on going work related to data distribution and transfer between clients and servers.
Revisite of the source and store filter using "connectors".

YM

  • Property svn:executable set to *
File size: 2.7 KB
Line 
1#ifndef __ELEMENT_HPP__
2#define __ELEMENT_HPP__
3
4#include "xios_spl.hpp"
5#include "array_new.hpp"
6#include "element_view.hpp"
7#include "exception.hpp"
8#include "context_client.hpp"
9#include "context_server.hpp"
10
11namespace xios
12{
13  class CDistributedView ;
14  class CLocalView;
15  class CLocalConnector ;
16
17  class CDistributedElement
18  {
19
20  protected:
21    std::map<int, CArray<size_t,1>> globalIndex_ ;
22    std::map<int, int> localSize_ ;
23    size_t globalSize_ ;
24    std::vector<CDistributedView*> views_= std::vector<CDistributedView*>(CElementView::numViewType_) ;
25    CDistributedElement(void) {} ;
26   
27  public:
28    CDistributedElement(int globalSize, const map<int, CArray<size_t,1>>& globalIndex) ;
29    CDistributedElement(CEventServer& event) ;
30    void addFullView(void) ;
31    void sendToServer(CContextClient* client, CEventClient& event, const CMessage& messageHeader) ;
32    void recvFromClient(CEventServer& event) ;
33    size_t getGlobalSize(void) { return globalSize_;}
34
35    CDistributedView* getView(CElementView::type type) 
36    { 
37      if (views_[(size_t)type]==nullptr) { ERROR("CDistributedElement::getView(CElementView::type type)",<<"View is not initialized");} 
38      else return views_[(size_t)type] ; 
39    }
40
41    void addView(CElementView::type type, std::map<int, CArray<int,1>>& indexView) ;
42    void addView(CElementView::type type, std::map<int, CArray<bool,1>>& maskView) ;
43    void sendToServer(CEventClient& event, const CMessage& messageHeader) ;
44
45    friend class CDistributedView ;
46  } ;
47
48
49  class CLocalElement : public CDistributedElement
50  {
51    // keep local connector inside   
52      std::map<pair<CElementView::type,CElementView::type>, CLocalConnector*> connectors_  ;
53 
54    public: 
55      CLocalElement(int localRank, size_t globalSize, CArray<size_t,1>& globalIndex) ;
56      CLocalElement(int localRank, CEventServer& event) ;
57      void recvFromClient(int localRank, CEventServer& event) ;
58      const CArray<size_t,1>& getGlobalIndex(void) { return globalIndex_ ;}
59      void addView(CElementView::type type, CArray<int,1>& indexView) ;
60      void addView(CElementView::type type, CArray<bool,1>& maskView) ;
61      void addFullView(void) ;
62      CLocalView* getView(CElementView::type type) 
63      { 
64        if (views_[(size_t)type]==nullptr) { ERROR("CLocalElement::getView(CElementView::type type)",<<"View is not initialized");} 
65        else return (CLocalView*) views_[(size_t)type] ; 
66      }
67     
68      CLocalConnector* getConnector(CElementView::type srcType, CElementView::type dstType) ;
69
70    private :
71      int localRank_;
72      CArray<size_t,1>& globalIndex_ ;
73      int& localSize_ ;
74   
75    friend class CLocalView ;
76  } ;
77
78}
79
80#endif
81
Note: See TracBrowser for help on using the repository browser.