source: XIOS/trunk/src/node/context.hpp @ 511

Last change on this file since 511 was 511, checked in by mhnguyen, 9 years ago

Seperating database of context on "client" side and "server" side

+) Add one more context in contex client in case of attached mode
+) Do some minor changements to make sure everything fine in case of attached mode
+) Replace buffer group with the new options

Test
+) On Curie
+) Connection mode: Attached and seperated
+) File mode: one and multiple
+) All tests passed

  • 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
File size: 7.3 KB
Line 
1#ifndef __XMLIO_CContext__
2#define __XMLIO_CContext__
3
4/// xios headers ///
5#include "xmlioserver_spl.hpp"
6//#include "node_type.hpp"
7#include "calendar.hpp"
8
9#include "declare_group.hpp"
10//#include "context_client.hpp"
11//#include "context_server.hpp"
12#include "data_output.hpp"
13
14#include "mpi.hpp"
15
16
17namespace xios {
18   class CContextClient ;
19   class CContextServer ;
20
21
22   /// ////////////////////// Déclarations ////////////////////// ///
23   class CContextGroup;
24   class CContextAttributes;
25   class CContext;
26   class CFile;
27   ///--------------------------------------------------------------
28
29   // Declare/Define CFileAttribute
30   BEGIN_DECLARE_ATTRIBUTE_MAP(CContext)
31#  include "context_attribute.conf"
32   END_DECLARE_ATTRIBUTE_MAP(CContext)
33
34   ///--------------------------------------------------------------
35  /*!
36  \class CContext
37   This class corresponds to the concrete presentation of context in xml file and in play an essential role in XIOS
38   Each object of this class contains all root definition of elements: files, fiels, domains, axis, etc, ... from which
39   we can have access to each element.
40   In fact, every thing must a be inside a particuliar context. After the xml file (iodef.xml) is parsed,
41   object of the class is created and its contains all information of other elements in the xml file.
42  */
43   class CContext
44      : public CObjectTemplate<CContext>
45      , public CContextAttributes
46   {
47         public :
48         enum EEventId
49         {
50           EVENT_ID_CLOSE_DEFINITION,EVENT_ID_UPDATE_CALENDAR,
51           EVENT_ID_CREATE_FILE_HEADER,EVENT_ID_CONTEXT_FINALIZE,
52           EVENT_ID_POST_PROCESS
53         } ;
54
55         /// typedef ///
56         typedef CObjectTemplate<CContext>   SuperClass;
57         typedef CContextAttributes SuperClassAttribute;
58
59      public :
60
61         typedef CContextAttributes RelAttributes;
62         typedef CContext           RelGroup;
63
64         //---------------------------------------------------------
65
66      public :
67
68         /// Constructeurs ///
69         CContext(void);
70         explicit CContext(const StdString & id);
71         CContext(const CContext & context);       // Not implemented yet.
72         CContext(const CContext * const context); // Not implemented yet.
73
74         /// Destructeur ///
75         virtual ~CContext(void);
76
77         //---------------------------------------------------------
78
79      public :
80
81         /// Mutateurs ///
82         void setCalendar(boost::shared_ptr<CCalendar> newCalendar);
83
84         /// Accesseurs ///
85         boost::shared_ptr<CCalendar>      getCalendar(void) const;
86
87      public :
88         // Initialize server or client
89         void initServer(MPI_Comm intraComm, MPI_Comm interComm) ;
90         void initClient(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtServer=0) ;
91         bool isInitialized(void) ;
92
93         // Put sever or client into loop state
94         bool eventLoop(void) ;
95         bool serverLoop(void) ;
96         void clientLoop(void) ;
97
98         // Process all information of calendar
99         void solveCalendar(void);
100
101         // Finalize a context
102         void finalize(void) ;
103         void closeDefinition(void) ;
104
105         // Some functions to process context
106         void findAllEnabledFields(void);
107         void processEnabledFiles(void) ;
108         void solveAllInheritance(bool apply=true) ;
109         void findEnabledFiles(void);
110         void closeAllFile(void) ;
111         void updateCalendar(int step) ;
112         void createFileHeader(void ) ;
113         void solveAllRefOfEnabledFields(bool sendToServer);
114         void buildAllExpressionOfEnabledFields();
115         void postProcessing();
116
117         std::map<int, StdSize>& getDataSize();
118         void setClientServerBuffer();
119
120         // Send context close definition
121         void sendCloseDefinition(void) ;
122         // There are something to send on closing context defintion
123         void sendUpdateCalendar(int step) ;
124         void sendCreateFileHeader(void) ;
125         void sendEnabledFiles();
126         void sendEnabledFields();
127         void sendRefDomainsAxis();
128         void sendRefGrid();
129         void sendPostProcessing();
130
131         const StdString& getIdServer();
132
133         // Client side: Receive and process messages
134         static void recvUpdateCalendar(CEventServer& event) ;
135         void recvUpdateCalendar(CBufferIn& buffer) ;
136         static void recvCloseDefinition(CEventServer& event) ;
137         static void recvCreateFileHeader(CEventServer& event) ;
138         void recvCreateFileHeader(CBufferIn& buffer) ;
139         static void recvSolveInheritanceContext(CEventServer& event);
140         void recvSolveInheritanceContext(CBufferIn& buffer);
141         static void recvPostProcessing(CEventServer& event);
142         void recvPostProcessing(CBufferIn& buffer);
143
144         // dispatch event
145         static bool dispatchEvent(CEventServer& event) ;
146
147      public:
148        // Get current context
149        static CContext* getCurrent(void);
150
151        // Get context root
152        static CContextGroup* getRoot(void);
153
154        // Set current context
155        static void setCurrent(const string& id);
156
157        // Create new context
158        static CContext* create(const string& id = "");
159
160        /// Accesseurs statiques ///
161        static StdString GetName(void);
162        static StdString GetDefName(void);
163        static ENodeType GetType(void);
164
165        static CContextGroup* GetContextGroup(void);
166
167        // Some functions to visualize structure of current context
168        static void ShowTree(StdOStream & out = std::clog);
169        static void CleanTree(void);
170
171      public :
172         // Parse xml node and write all info into context
173         virtual void parse(xml::CXMLNode & node);
174
175         // Visualize a context
176         virtual StdString toString(void) const;
177
178
179         // Solve all inheritance relation in current context
180         virtual void solveDescInheritance(bool apply, const CAttributeMap * const parent = 0);
181
182         // Verify if all root definition in a context have children
183         virtual bool hasChild(void) const;
184
185      public :
186         // Calendar of context
187         boost::shared_ptr<CCalendar>   calendar;
188
189         // List of all enabled files (files on which fields are written)
190         std::vector<CFile*> enabledFiles;
191
192         // Context root
193         static shared_ptr<CContextGroup> root ;
194
195         // Determine context on client or not
196         bool hasClient ;
197
198         // Determine context on server or not
199         bool hasServer ;
200
201         // Concrete context server
202         CContextServer* server ;
203
204         // Concrete contex client
205         CContextClient* client ;
206
207      private:
208         bool isPostProcessed;
209         std::map<int, StdSize> dataSize_;
210         StdString idServer_;
211
212
213      public: // Some function maybe removed in the near future
214        // virtual void toBinary  (StdOStream & os) const;
215        // virtual void fromBinary(StdIStream & is);
216        // void solveAllGridRef(void);
217        // void solveAllOperation(void);
218        // void solveAllExpression(void);
219        // void solveFieldRefInheritance(bool apply);
220
221   }; // class CContext
222
223   ///--------------------------------------------------------------
224
225   // Declare/Define CContextGroup and CContextDefinition
226   DECLARE_GROUP(CContext);
227
228   ///--------------------------------------------------------------
229
230} // namespace xios
231
232#endif // __XMLIO_CContext__
Note: See TracBrowser for help on using the repository browser.