source: XIOS/dev/dev_olga/src/node/file.hpp @ 1009

Last change on this file since 1009 was 1009, checked in by oabramkina, 7 years ago

First working version with compression by secondary servers.

  • 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: 6.4 KB
Line 
1#ifndef __XIOS_CFile__
2#define __XIOS_CFile__
3
4/// XIOS headers ///
5#include "xios_spl.hpp"
6#include "field.hpp"
7#include "data_output.hpp"
8#include "data_input.hpp"
9#include "declare_group.hpp"
10#include "date.hpp"
11#include "attribute_enum.hpp"
12#include "attribute_enum_impl.hpp"
13#include "mpi.hpp"
14
15namespace xios {
16
17   /// ////////////////////// Déclarations ////////////////////// ///
18
19   class CFileGroup;
20   class CFileAttributes;
21   class CFile;
22
23   class CGarbageCollector;
24
25   ///--------------------------------------------------------------
26
27   // Declare/Define CFileAttribute
28   BEGIN_DECLARE_ATTRIBUTE_MAP(CFile)
29#  include "file_attribute.conf"
30   END_DECLARE_ATTRIBUTE_MAP(CFile)
31
32   ///--------------------------------------------------------------
33
34   /*!
35   \class CFile
36   This class corresponds to file component of the xml.
37   The class contains all the nessceary information to write data into a netcdf file: The most important thing
38   is the field(s) which will be written into file. Besides, there are some options to write
39   data into file, e.g: writting into only one file or multiple file; splitting a running into several files.
40   Moreover, there are some other attributes of netcdf file which are also stored in this class
41   */
42   class CFile
43      : public CObjectTemplate<CFile>
44      , public CFileAttributes
45   {
46         /// typedef ///
47         typedef CObjectTemplate<CFile>   SuperClass;
48         typedef CFileAttributes SuperClassAttribute;
49
50      public :
51         enum EEventId
52         {
53           EVENT_ID_ADD_FIELD, EVENT_ID_ADD_FIELD_GROUP, EVENT_ID_ADD_VARIABLE,
54           EVENT_ID_ADD_VARIABLE_GROUP, EVENT_ID_CREATE_ENABLED_FIELDS
55         };
56
57         typedef CFileAttributes RelAttributes;
58         typedef CFileGroup      RelGroup;
59
60         /// Constructeurs ///
61         CFile(void);
62         explicit CFile(const StdString& id);
63         CFile(const CFile& file);       // Not implemented yet.
64         CFile(const CFile* const file); // Not implemented yet.
65
66         /// Destructeur ///
67         virtual ~CFile(void);
68
69      public:
70         /// Accesseurs ///
71         const StdString& getFileOutputName(void) const;
72         boost::shared_ptr<CDataOutput> getDataOutput(void) const;
73         boost::shared_ptr<CDataInput> getDataInput(void) const;
74         CFieldGroup* getVirtualFieldGroup(void) const;
75         CVariableGroup* getVirtualVariableGroup(void) const;
76         std::vector<CField*> getAllFields(void) const;
77         std::vector<CVariable*> getAllVariables(void) const;
78
79         std::vector<CField* > getEnabledFields(int default_outputlevel = 5,
80                                                int default_level = 1,
81                                                bool default_enabled = true);
82
83      public :
84         // Some functions to verify state of file
85         bool isSyncTime(void);
86         bool checkSplit(void);
87         bool checkSync(void);
88         void checkFile(void);
89         void initFile(void);
90
91         /// Mutateurs ///
92         // Set some root definitions in a file
93         void setVirtualFieldGroup(CFieldGroup* newVFieldGroup);
94         void setVirtualVariableGroup(CVariableGroup* newVVariableGroup);
95
96         void createHeader(void);
97         void openInReadMode(void);
98         void close(void);
99         void readAttributesOfEnabledFieldsInReadMode();
100
101         // Some processing on file
102         void solveFieldRefInheritance(bool apply);
103         void processEnabledFile(void);
104         void solveOnlyRefOfEnabledFields(bool sendToServer);
105         void generateNewTransformationGridDest();
106         void solveAllRefOfEnabledFields(bool sendToServer);
107         void buildFilterGraphOfEnabledFields(CGarbageCollector& gc);
108         void prefetchEnabledReadModeFields();
109         void prefetchEnabledReadModeFieldsIfNeeded();
110
111         // Add component into file
112         CField* addField(const string& id = "");
113         CFieldGroup* addFieldGroup(const string& id = "");
114         CVariable* addVariable(const string& id = "");
115         CVariableGroup* addVariableGroup(const string& id = "");
116
117         // Send info to server
118         void sendEnabledFields();
119         void sendEnabledFields(const int srvPool);
120         void sendAddField(const string& id = "");
121         void sendAddField(const string& id, const int srvPool);
122         void sendAddFieldGroup(const string& id = "");
123         void sendAddAllVariables();
124         void sendAddAllVariables(const int srvPool);
125         void sendAddVariable(const string& id = "");
126         void sendAddVariable(const string& id, const int srvPool);
127         void sendAddVariableGroup(const string& id = "");
128
129         // Receive info from client
130         static void recvAddField(CEventServer& event);
131         void recvAddField(CBufferIn& buffer);
132         static void recvAddFieldGroup(CEventServer& event);
133         void recvAddFieldGroup(CBufferIn& buffer);
134         static void recvAddVariable(CEventServer& event);
135         void recvAddVariable(CBufferIn& buffer);
136         static void recvAddVariableGroup(CEventServer& event);
137         void recvAddVariableGroup(CBufferIn& buffer);
138
139         // Dispatch event
140         static bool dispatchEvent(CEventServer& event);
141
142      public:
143         /// Accesseurs statiques ///
144         static StdString GetName(void);
145         static StdString GetDefName(void);
146
147         static ENodeType GetType(void);
148      public:
149         /// Traitements ///
150         virtual void solveDescInheritance(bool apply, const CAttributeMap* const parent = 0);
151
152          /// Autres ///
153         virtual void parse(xml::CXMLNode& node);
154         virtual StdString toString(void) const;
155      public:
156
157         CDate lastSync;
158         CDate lastSplit;
159         int nbAxis, nbDomains;
160         bool isOpen;
161         bool allDomainEmpty;
162         MPI_Comm fileComm;
163
164      private :
165         /// Propriétés privées ///
166         CFieldGroup* vFieldGroup;
167         CVariableGroup* vVariableGroup;
168         boost::shared_ptr<CDataOutput> data_out;
169         boost::shared_ptr<CDataInput> data_in;
170         std::vector<CField*> enabledFields;
171
172      public:
173        //         virtual void toBinary  (StdOStream& os) const;
174        //         virtual void fromBinary(StdIStream& is);
175
176   }; // class CFile
177
178   ///--------------------------------------------------------------
179
180   // Declare/Define CFileGroup and CFileDefinition
181   DECLARE_GROUP(CFile);
182
183   ///--------------------------------------------------------------
184
185} // namespace xios
186
187#endif // __XIOS_CFile__
Note: See TracBrowser for help on using the repository browser.