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

Last change on this file since 2230 was 1999, checked in by ymipsl, 3 years ago

Adapt transformation algorithm to new infrastructure (on going...)

YM

  • Property svn:executable set to *
File size: 2.8 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    std::map<int, CArray<size_t,1>>& getGlobalIndex(void) { return globalIndex_;}
35   
36    CDistributedView* getView(CElementView::type type) 
37    { 
38      if (views_[(size_t)type]==nullptr) { ERROR("CDistributedElement::getView(CElementView::type type)",<<"View is not initialized");} 
39      else return views_[(size_t)type] ; 
40    }
41
42    void addView(CElementView::type type, std::map<int, CArray<int,1>>& indexView) ;
43    void addView(CElementView::type type, std::map<int, CArray<bool,1>>& maskView) ;
44    void sendToServer(CEventClient& event, const CMessage& messageHeader) ;
45
46    friend class CDistributedView ;
47  } ;
48
49
50  class CLocalElement : public CDistributedElement
51  {
52    // keep local connector inside   
53      std::map<pair<CElementView::type,CElementView::type>, CLocalConnector*> connectors_  ;
54 
55    public: 
56      CLocalElement(int localRank, size_t globalSize, CArray<size_t,1>& globalIndex) ;
57      CLocalElement(int localRank, CEventServer& event) ;
58      void recvFromClient(int localRank, CEventServer& event) ;
59      const CArray<size_t,1>& getGlobalIndex(void) { return globalIndex_ ;}
60      void addView(CElementView::type type, CArray<int,1>& indexView) ;
61      void addView(CElementView::type type, CArray<bool,1>& maskView) ;
62      void addFullView(void) ;
63      CLocalView* getView(CElementView::type type) 
64      { 
65        if (views_[(size_t)type]==nullptr) { ERROR("CLocalElement::getView(CElementView::type type)",<<"View is not initialized");} 
66        else return (CLocalView*) views_[(size_t)type] ; 
67      }
68     
69      CLocalConnector* getConnector(CElementView::type srcType, CElementView::type dstType) ;
70
71    private :
72      int localRank_;
73      CArray<size_t,1>& globalIndex_ ;
74      int& localSize_ ;
75   
76    friend class CLocalView ;
77  } ;
78
79}
80
81#endif
82
Note: See TracBrowser for help on using the repository browser.