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

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

Two server levels: merging with trunk r1137.
There are bugs.

  • 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.7 KB
RevLine 
[591]1#ifndef __XIOS_CFile__
2#define __XIOS_CFile__
[219]3
[591]4/// XIOS headers ///
5#include "xios_spl.hpp"
[219]6#include "field.hpp"
[300]7#include "data_output.hpp"
[599]8#include "data_input.hpp"
[219]9#include "declare_group.hpp"
[318]10#include "date.hpp"
[369]11#include "attribute_enum.hpp"
12#include "attribute_enum_impl.hpp"
[1021]13#include "context_client.hpp"
[382]14#include "mpi.hpp"
[219]15
[335]16namespace xios {
[509]17
[219]18   /// ////////////////////// Déclarations ////////////////////// ///
19
20   class CFileGroup;
21   class CFileAttributes;
22   class CFile;
23
[640]24   class CGarbageCollector;
25
[219]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
[509]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   */
[219]43   class CFile
44      : public CObjectTemplate<CFile>
45      , public CFileAttributes
46   {
47         /// typedef ///
48         typedef CObjectTemplate<CFile>   SuperClass;
49         typedef CFileAttributes SuperClassAttribute;
[509]50
[219]51      public :
[300]52         enum EEventId
53         {
[651]54           EVENT_ID_ADD_FIELD, EVENT_ID_ADD_FIELD_GROUP, EVENT_ID_ADD_VARIABLE,
[509]55           EVENT_ID_ADD_VARIABLE_GROUP, EVENT_ID_CREATE_ENABLED_FIELDS
[651]56         };
[509]57
[219]58         typedef CFileAttributes RelAttributes;
59         typedef CFileGroup      RelGroup;
60
61         /// Constructeurs ///
62         CFile(void);
[651]63         explicit CFile(const StdString& id);
64         CFile(const CFile& file);       // Not implemented yet.
65         CFile(const CFile* const file); // Not implemented yet.
[219]66
[509]67         /// Destructeur ///
68         virtual ~CFile(void);
69
70      public:
[219]71         /// Accesseurs ///
[1158]72         const StdString getFileOutputName(void) const;
[337]73         boost::shared_ptr<CDataOutput> getDataOutput(void) const;
[599]74         boost::shared_ptr<CDataInput> getDataInput(void) const;
[347]75         CFieldGroup* getVirtualFieldGroup(void) const;
[472]76         CVariableGroup* getVirtualVariableGroup(void) const;
[347]77         std::vector<CField*> getAllFields(void) const;
[472]78         std::vector<CVariable*> getAllVariables(void) const;
[219]79
[347]80         std::vector<CField* > getEnabledFields(int default_outputlevel = 5,
81                                                int default_level = 1,
82                                                bool default_enabled = true);
[219]83
84      public :
[509]85         // Some functions to verify state of file
[651]86         bool isSyncTime(void);
87         bool checkSplit(void);
88         bool checkSync(void);
[1136]89         void checkWriteFile(void);
90         void checkReadFile(void);
[651]91         void initFile(void);
[219]92
93         /// Mutateurs ///
[509]94         // Set some root definitions in a file
[347]95         void setVirtualFieldGroup(CFieldGroup* newVFieldGroup);
[472]96         void setVirtualVariableGroup(CVariableGroup* newVVariableGroup);
[509]97
[300]98         void createHeader(void);
[1136]99         void openInReadMode(MPI_Comm* readComm = NULL);
[651]100         void close(void);
[775]101         void readAttributesOfEnabledFieldsInReadMode();
[509]102
103         // Some processing on file
[445]104         void solveFieldRefInheritance(bool apply);
[651]105         void processEnabledFile(void);
[823]106         void solveOnlyRefOfEnabledFields(bool sendToServer);
107         void generateNewTransformationGridDest();
[1129]108         
[640]109         void buildFilterGraphOfEnabledFields(CGarbageCollector& gc);
[598]110         void prefetchEnabledReadModeFields();
111         void prefetchEnabledReadModeFieldsIfNeeded();
[219]112
[1129]113         void solveAllRefOfEnabledFieldsAndTransform(bool sendToServer);
[1025]114         void checkGridOfEnabledFields();
115         void sendGridOfEnabledFields();
116
[509]117         // Add component into file
[651]118         CField* addField(const string& id = "");
119         CFieldGroup* addFieldGroup(const string& id = "");
120         CVariable* addVariable(const string& id = "");
121         CVariableGroup* addVariableGroup(const string& id = "");
[1021]122         void setContextClient(CContextClient* newContextClient);
123         CContextClient* getContextClient();
[509]124
[1144]125         // Send info to server         
126         void sendEnabledFields(CContextClient* client);         
127         void sendAddField(const string& id, CContextClient* client);         
128         void sendAddFieldGroup(const string& id, CContextClient* client);                           
[1021]129         void sendAddVariable(const string& id, CContextClient* client);
[1132]130         void sendAddVariableGroup(const string& id, CContextClient* client);
[1144]131         void sendAddAllVariables(CContextClient* client);
132         
[509]133         // Receive info from client
[651]134         static void recvAddField(CEventServer& event);
135         void recvAddField(CBufferIn& buffer);
136         static void recvAddFieldGroup(CEventServer& event);
137         void recvAddFieldGroup(CBufferIn& buffer);
138         static void recvAddVariable(CEventServer& event);
139         void recvAddVariable(CBufferIn& buffer);
140         static void recvAddVariableGroup(CEventServer& event);
141         void recvAddVariableGroup(CBufferIn& buffer);
[509]142
143         // Dispatch event
[651]144         static bool dispatchEvent(CEventServer& event);
[509]145
146      public:
147         /// Accesseurs statiques ///
148         static StdString GetName(void);
149         static StdString GetDefName(void);
150
151         static ENodeType GetType(void);
152      public:
153         /// Traitements ///
[651]154         virtual void solveDescInheritance(bool apply, const CAttributeMap* const parent = 0);
[509]155
156          /// Autres ///
[651]157         virtual void parse(xml::CXMLNode& node);
[509]158         virtual StdString toString(void) const;
159      public:
160
[651]161         CDate lastSync;
162         CDate lastSplit;
[609]163         int nbAxis, nbDomains;
[651]164         bool isOpen;
165         bool allDomainEmpty;
166         MPI_Comm fileComm;
[509]167
[219]168      private :
169         /// Propriétés privées ///
[1054]170         CContextClient* client;
[347]171         CFieldGroup* vFieldGroup;
[651]172         CVariableGroup* vVariableGroup;
[337]173         boost::shared_ptr<CDataOutput> data_out;
[599]174         boost::shared_ptr<CDataInput> data_in;
[347]175         std::vector<CField*> enabledFields;
[219]176
[509]177      public:
[651]178        //         virtual void toBinary  (StdOStream& os) const;
179        //         virtual void fromBinary(StdIStream& is);
[509]180
[219]181   }; // class CFile
182
183   ///--------------------------------------------------------------
184
185   // Declare/Define CFileGroup and CFileDefinition
186   DECLARE_GROUP(CFile);
187
188   ///--------------------------------------------------------------
189
[335]190} // namespace xios
[219]191
[591]192#endif // __XIOS_CFile__
Note: See TracBrowser for help on using the repository browser.