source: XIOS/dev/XIOS_DEV_CMIP6/src/node/file.hpp @ 1494

Last change on this file since 1494 was 1494, checked in by oabramkina, 6 years ago

Bigfix for UGRID: fields describing the same mesh (= fields defined on domains with the same name) are sorted in the decreasing order of nvertex. The first, and the only, domain to be written is that with the highest value of nvertex. The entire mesh connectivity will be generated according to this domain.

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