XIOS  1.0
Xml I/O Server
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Amis Macros
file.hpp
Aller à la documentation de ce fichier.
1 #ifndef __XIOS_CFile__
2 #define __XIOS_CFile__
3 
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 
16 namespace xios {
17 
19 
20  class CFileGroup;
21  class CFileAttributes;
22  class CFile;
23 
24  class CGarbageCollector;
25 
27 
28  // Declare/Define CFileAttribute
30 # include "file_attribute.conf"
32 
33 
34 
43  class CFile
44  : public CObjectTemplate<CFile>
45  , public CFileAttributes
46  {
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 
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 
68  virtual ~CFile(void);
69 
70  public:
72  const StdString getFileOutputName(void) const;
73  std::shared_ptr<CDataOutput> getDataOutput(void) const;
74  std::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  StdString dumpClassAttributes(void);
85 
86  public :
87  // Some functions to verify state of file
88  bool isSyncTime(void);
89  bool checkSplit(void);
90  bool checkSync(void);
91  void checkWriteFile(void);
92  void checkReadFile(void);
93  void initWrite(void);
94  void initRead(void);
95  bool isEmptyZone();
96 
98  // Set some root definitions in a file
99  void setVirtualFieldGroup(CFieldGroup* newVFieldGroup);
100  void setVirtualVariableGroup(CVariableGroup* newVVariableGroup);
101 
102  void createHeader(void);
103  void openInReadMode(void);
104  void close(void);
105  void readAttributesOfEnabledFieldsInReadMode();
106 
107  // Some processing on file
108  void solveFieldRefInheritance(bool apply);
109  void processEnabledFile(void);
110  void solveOnlyRefOfEnabledFields(bool sendToServer);
111  void generateNewTransformationGridDest();
112 
113  void buildFilterGraphOfEnabledFields(CGarbageCollector& gc);
114  void postProcessFilterGraph();
115  void prefetchEnabledReadModeFields();
116  void doPreTimestepOperationsForEnabledReadModeFields();
117  void doPostTimestepOperationsForEnabledReadModeFields();
118 
119  void solveAllRefOfEnabledFieldsAndTransform(bool sendToServer);
120  void checkGridOfEnabledFields();
121  void sendGridOfEnabledFields();
122  void sendGridComponentOfEnabledFields();
123 
124  void sortEnabledFieldsForUgrid();
125 
126  // Add component into file
127  CField* addField(const string& id = "");
128  CFieldGroup* addFieldGroup(const string& id = "");
129  CVariable* addVariable(const string& id = "");
130  CVariableGroup* addVariableGroup(const string& id = "");
131  void setContextClient(CContextClient* newContextClient);
132  CContextClient* getContextClient();
133 
134  void setReadContextClient(CContextClient* newContextClient);
135  CContextClient* getReadContextClient();
136 
137  // Send info to server
138  void sendEnabledFields(CContextClient* client);
139  void sendAddField(const string& id, CContextClient* client);
140  void sendAddFieldGroup(const string& id, CContextClient* client);
141  void sendAddVariable(const string& id, CContextClient* client);
142  void sendAddVariableGroup(const string& id, CContextClient* client);
143  void sendAddAllVariables(CContextClient* client);
144 
145  // Receive info from client
146  static void recvAddField(CEventServer& event);
147  void recvAddField(CBufferIn& buffer);
148  static void recvAddFieldGroup(CEventServer& event);
149  void recvAddFieldGroup(CBufferIn& buffer);
150  static void recvAddVariable(CEventServer& event);
151  void recvAddVariable(CBufferIn& buffer);
152  static void recvAddVariableGroup(CEventServer& event);
153  void recvAddVariableGroup(CBufferIn& buffer);
154 
155  // Dispatch event
156  static bool dispatchEvent(CEventServer& event);
157 
158  public:
160  static StdString GetName(void);
161  static StdString GetDefName(void);
162 
163  static ENodeType GetType(void);
164  public:
166  virtual void solveDescInheritance(bool apply, const CAttributeMap* const parent = 0);
167 
169  virtual void parse(xml::CXMLNode& node);
170  virtual StdString toString(void) const;
171  public:
172 
175  int nbAxis, nbDomains;
176  bool isOpen;
177  MPI_Comm fileComm;
178 
179  private:
180  void createSubComFile();
181  bool checkRead;
183 
184  private :
187  CContextClient* read_client; // Context client for reading (channel between server 1 and client)
188  CFieldGroup* vFieldGroup;
189  CVariableGroup* vVariableGroup;
190  std::shared_ptr<CDataOutput> data_out;
191  std::shared_ptr<CDataInput> data_in;
192  std::vector<CField*> enabledFields;
193 
194 
195  public:
196  // virtual void toBinary (StdOStream& os) const;
197  // virtual void fromBinary(StdIStream& is);
198 
199  }; // class CFile
200 
202 
203  // Declare/Define CFileGroup and CFileDefinition
205 
207 
208 } // namespace xios
209 
210 #endif // __XIOS_CFile__
CVariableGroup * vVariableGroup
Definition: file.hpp:189
#define END_DECLARE_ATTRIBUTE_MAP(type)
CDate lastSync
Definition: file.hpp:173
CFileGroup RelGroup
Definition: file.hpp:59
std::shared_ptr< CDataOutput > data_out
Definition: file.hpp:190
std::vector< CField * > enabledFields
Definition: file.hpp:192
std::string StdString
Definition: xios_spl.hpp:48
#define xios(arg)
CDate lastSplit
Definition: file.hpp:174
////////////////////// Déclarations ////////////////////// ///
CContextClient * read_client
Definition: file.hpp:187
bool isOpen
Definition: file.hpp:176
#define BEGIN_DECLARE_ATTRIBUTE_MAP(type)
A context can be both on client and on server side.
////////////////////// Déclarations ////////////////////// ///
CFieldGroup * vFieldGroup
Definition: file.hpp:188
int nbDomains
Definition: file.hpp:175
MPI_Comm fileComm
Definition: file.hpp:177
bool allZoneEmpty
Definition: file.hpp:182
DECLARE_GROUP(CAxis)
CObjectTemplate< CFile > SuperClass
typedef ///
Definition: file.hpp:48
enum xios::_node_type ENodeType
////////////////////// Définitions ////////////////////// ///
CContextClient * client
Propriétés privées ///.
Definition: file.hpp:186
bool checkRead
Definition: file.hpp:181
std::shared_ptr< CDataInput > data_in
Definition: file.hpp:191
A basic garbage collector which ensures no old packets linger in the filter graph.
CFileAttributes RelAttributes
Definition: file.hpp:58
CFileAttributes SuperClassAttribute
Definition: file.hpp:49