source: XIOS/dev/dev_olga/src/node/axis.hpp @ 1686

Last change on this file since 1686 was 1653, checked in by oabramkina, 5 years ago

Developments for visualization of XIOS workflow.

Branch is spawned from trunk r1649.

Boost library is used for producing Graphviz DOT files. Current results: a DOT file representing a static workflow. For a complete proof of concept, DOT files for each timestamp should be generated. The necessary information has been collected by XIOS, it only requires rearranging the information for graphing (changes in classes CWorkflowGraph and CGraphviz).

  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
  • Property svn:executable set to *
File size: 7.6 KB
Line 
1#ifndef __XIOS_CAxis__
2#define __XIOS_CAxis__
3
4/// XIOS headers ///
5#include "xios_spl.hpp"
6#include "group_factory.hpp"
7#include "virtual_node.hpp"
8
9#include "declare_group.hpp"
10#include "declare_ref_func.hpp"
11#include "declare_virtual_node.hpp"
12#include "attribute_array.hpp"
13#include "attribute_enum.hpp"
14#include "attribute_enum_impl.hpp"
15#include "server_distribution_description.hpp"
16#include "transformation.hpp"
17#include "transformation_enum.hpp"
18
19namespace xios {
20   /// ////////////////////// Déclarations ////////////////////// ///
21
22   class CAxisGroup;
23   class CAxisAttributes;
24   class CAxis;
25
26   ///--------------------------------------------------------------
27
28   // Declare/Define CAxisAttribute
29   BEGIN_DECLARE_ATTRIBUTE_MAP(CAxis)
30#  include "axis_attribute.conf"
31   END_DECLARE_ATTRIBUTE_MAP(CAxis)
32
33   ///--------------------------------------------------------------
34
35   class CAxis
36      : public CObjectTemplate<CAxis>
37      , public CAxisAttributes
38   {
39               /// typedef ///
40         typedef CObjectTemplate<CAxis>   SuperClass;
41         typedef CAxisAttributes SuperClassAttribute;
42         
43      public:
44         enum EEventId
45         {
46           EVENT_ID_DISTRIBUTION_ATTRIBUTE,           
47           EVENT_ID_DISTRIBUTED_VALUE,
48           EVENT_ID_NON_DISTRIBUTED_VALUE,
49           EVENT_ID_NON_DISTRIBUTED_ATTRIBUTES,
50           EVENT_ID_DISTRIBUTED_ATTRIBUTES
51         } ;
52
53      public:
54         typedef CAxisAttributes RelAttributes;
55         typedef CAxisGroup      RelGroup;
56         typedef CTransformation<CAxis>::TransformationMapTypes TransMapTypes;
57
58      public:
59         /// Constructeurs ///
60         CAxis(void);
61         explicit CAxis(const StdString & id);
62         CAxis(const CAxis & axis);       // Not implemented yet.
63         CAxis(const CAxis * const axis); // Not implemented yet.
64
65         static CAxis* createAxis();
66
67         /// Accesseurs ///
68         const std::set<StdString> & getRelFiles(void) const;
69
70         int getNumberWrittenIndexes(MPI_Comm writtenCom);
71         int getTotalNumberWrittenIndexes(MPI_Comm writtenCom);
72         int getOffsetWrittenIndexes(MPI_Comm writtenCom);
73         CArray<int, 1>& getCompressedIndexToWriteOnServer(MPI_Comm writtenCom);
74
75         std::map<int, StdSize> getAttributesBufferSize(CContextClient* client, const std::vector<int>& globalDim, int orderPositionInGrid,
76                                                        CServerDistributionDescription::ServerDistributionType disType = CServerDistributionDescription::BAND_DISTRIBUTION);
77
78         /// Test ///
79         bool IsWritten(const StdString & filename) const;
80         bool isWrittenCompressed(const StdString& filename) const;
81         bool isDistributed(void) const;
82         bool isCompressible(void) const;
83
84         /// Mutateur ///
85         void addRelFile(const StdString & filename);
86         void addRelFileCompressed(const StdString& filename);
87
88         /// Vérifications ///
89         void checkAttributes(void);
90
91         /// Destructeur ///
92         virtual ~CAxis(void);
93
94         virtual void parse(xml::CXMLNode & node);
95
96         void setContextClient(CContextClient* contextClient);
97
98         /// Accesseurs statiques ///
99         static StdString GetName(void);
100         static StdString GetDefName(void);
101         static ENodeType GetType(void);
102
103         static bool dispatchEvent(CEventServer& event);         
104         
105         void checkAttributesOnClient();
106         void checkAttributesOnClientAfterTransformation(const std::vector<int>& globalDim, int orderPositionInGrid,
107                                                         CServerDistributionDescription::ServerDistributionType distType = CServerDistributionDescription::BAND_DISTRIBUTION);
108         void sendCheckedAttributes(const std::vector<int>& globalDim, int orderPositionInGrid,
109                                    CServerDistributionDescription::ServerDistributionType disType = CServerDistributionDescription::BAND_DISTRIBUTION);
110
111         void checkEligibilityForCompressedOutput();
112         size_t getGlobalWrittenSize(void) ;
113
114         void computeWrittenIndex();
115         void computeWrittenCompressedIndex(MPI_Comm);
116         bool hasTransformation();
117         void solveInheritanceTransformation();
118         TransMapTypes getAllTransformations();         
119         void duplicateTransformation(CAxis*);
120         CTransformation<CAxis>* addTransformation(ETranformationType transType, const StdString& id="");
121         bool isEqual(CAxis* axis);
122
123      public: 
124        bool hasValue;       
125        bool hasBounds;
126        bool hasLabel;
127
128        CArray<int,1> localIndexToWriteOnServer;
129
130      private:
131         void checkData();
132         void checkMask();
133         void checkBounds();
134         void checkLabel();
135         void sendAttributes(const std::vector<int>& globalDim, int orderPositionInGrid,
136                             CServerDistributionDescription::ServerDistributionType distType);
137         void sendDistributionAttribute(const std::vector<int>& globalDim, int orderPositionInGrid,
138                                        CServerDistributionDescription::ServerDistributionType distType);
139         void computeConnectedClients(const std::vector<int>& globalDim, int orderPositionInGrid,
140                                     CServerDistributionDescription::ServerDistributionType distType);
141
142         void sendNonDistributedAttributes(void);
143         void sendDistributedAttributes(void);
144
145         static void recvNonDistributedAttributes(CEventServer& event);
146         static void recvDistributedAttributes(CEventServer& event);
147         static void recvDistributionAttribute(CEventServer& event);
148         void recvNonDistributedAttributes(int rank, CBufferIn& buffer);
149         void recvDistributedAttributes(vector<int>& rank, vector<CBufferIn*> buffers);
150         void recvDistributionAttribute(CBufferIn& buffer);
151
152         void setTransformations(const TransMapTypes&);
153
154      private:
155
156/** Clients that have to send a domain. There can be multiple clients in case of secondary server, otherwise only one client. */
157         std::list<CContextClient*> clients;
158         std::set<CContextClient*> clientsSet;
159
160         bool isChecked;
161         bool areClientAttributesChecked_;
162         bool isClientAfterTransformationChecked;
163         std::set<StdString> relFiles, relFilesCompressed;
164         TransMapTypes transformationMap_;         
165         //! True if and only if the data defined on the axis can be outputted in a compressed way
166         bool isCompressible_;
167         std::map<int, map<int,int> > nbSenders; // Mapping of number of communicating client to a server
168         std::map<int, std::unordered_map<int, vector<size_t> > > indSrv_; // Global index of each client sent to server
169         // std::map<int, vector<int> > indWrittenSrv_; // Global written index of each client sent to server
170         std::unordered_map<size_t,size_t> globalLocalIndexMap_;
171         std::vector<int> indexesToWrite;
172         std::map<int,int> numberWrittenIndexes_, totalNumberWrittenIndexes_, offsetWrittenIndexes_;
173         std::map<int, CArray<int, 1> > compressedIndexToWriteOnServer;
174         std::map<int, std::vector<int> > connectedServerRank_;
175         bool computedWrittenIndex_;                 
176
177       private:
178         static bool initializeTransformationMap(std::map<StdString, ETranformationType>& m);
179         static std::map<StdString, ETranformationType> transformationMapList_;
180         static bool dummyTransformationMapList_;
181
182         DECLARE_REF_FUNC(Axis,axis)
183   }; // class CAxis
184
185   ///--------------------------------------------------------------
186
187   // Declare/Define CAxisGroup and CAxisDefinition
188   DECLARE_GROUP(CAxis);
189} // namespace xios
190
191#endif // __XIOS_CAxis__
Note: See TracBrowser for help on using the repository browser.