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
domain.hpp
Aller à la documentation de ce fichier.
1 #ifndef __XIOS_CDomain__
2 #define __XIOS_CDomain__
3 
5 #include "xios_spl.hpp"
6 #include "group_factory.hpp"
7 
8 #include "declare_group.hpp"
9 #include "declare_ref_func.hpp"
10 #include "event_client.hpp"
11 #include "event_server.hpp"
12 #include "buffer_in.hpp"
13 #include "array_new.hpp"
14 #include "attribute_array.hpp"
15 #include "attribute_enum.hpp"
16 #include "transformation.hpp"
17 #include "transformation_enum.hpp"
19 #include "mesh.hpp"
20 
21 namespace xios {
22 
24 
25  class CDomainGroup;
26  class CDomainAttributes;
27  class CDomain;
28  class CFile;
29 
31 
32  // Declare/Define CDomainAttribute
34 # include "domain_attribute.conf"
37 
38 
39 
40  class CDomain
41  : public CObjectTemplate<CDomain>
42  , public CDomainAttributes
43  {
46  typedef CDomainAttributes SuperClassAttribute;
47  public:
48  enum EEventId
49  {
50  EVENT_ID_INDEX, EVENT_ID_LON, EVENT_ID_LAT,
52  EVENT_ID_DATA_INDEX, EVENT_ID_SERVER_ATTRIBUT
53  } ;
54 
55  public:
56 
57  typedef CDomainAttributes RelAttributes;
58  typedef CDomainGroup RelGroup;
60 
62  CDomain(void);
63  explicit CDomain(const StdString & id);
64  CDomain(const CDomain & domain); // Not implemented yet.
65  CDomain(const CDomain * const domain); // Not implemented yet.
66 
67  static CDomain* createDomain();
68 
70  void assignMesh(const StdString, const int);
71 
72  virtual void parse(xml::CXMLNode & node);
73 
74  void setContextClient(CContextClient* contextClient);
75 
77  void checkAttributes(void);
78  void checkAttributesOnClient();
79  void checkAttributesOnClientAfterTransformation();
80  void checkEligibilityForCompressedOutput(void);
81 
82  void sendCheckedAttributes();
83 
84  bool hasTransformation();
85  void solveInheritanceTransformation();
86  TransMapTypes getAllTransformations();
87  void redistribute(int nbLocalDomain);
88  void duplicateTransformation(CDomain*);
89  CTransformation<CDomain>* addTransformation(ETranformationType transType, const StdString& id="");
90 
91  public:
92  const std::set<StdString> & getRelFiles(void) const;
93  bool IsWritten(const StdString & filename) const;
94  bool isWrittenCompressed(const StdString& filename) const;
95 
96  int getNumberWrittenIndexes(MPI_Comm writtenCom);
97  int getTotalNumberWrittenIndexes(MPI_Comm writtenCom);
98  int getOffsetWrittenIndexes(MPI_Comm writtenCom);
99  CArray<int,1>& getCompressedIndexToWriteOnServer(MPI_Comm writtenCom);
100 
101  std::map<int, StdSize> getAttributesBufferSize(CContextClient* client, bool bufferForWriting = false);
102 
103  bool isEmpty(void) const;
104  bool isDistributed(void) const;
105  bool isCompressible(void) const;
106 
107  std::vector<int> getNbGlob();
108  bool isEqual(CDomain* domain);
109 
110  static bool dispatchEvent(CEventServer& event);
111 
112  public:
114  void addRelFile(const StdString & filename);
115  void addRelFileCompressed(const StdString& filename);
116 
117  void computeWrittenIndex();
118  void computeWrittenCompressedIndex(MPI_Comm);
119 
120  void AllgatherRectilinearLonLat(CArray<double,1>& lon, CArray<double,1>& lat,
121  CArray<double,1>& lon_g, CArray<double,1>& lat_g);
122 
123  void fillInRectilinearBoundLonLat(CArray<double,1>& lon, CArray<double,1>& lat,
124  CArray<double,2>& boundsLon, CArray<double,2>& boundsLat);
125 
126  void fillInLonLat();
127  bool distributionAttributesHaveValue() const;
128 
129  size_t getGlobalWrittenSize() ;
131  virtual ~CDomain(void);
132 
134  static StdString GetName(void);
135  static StdString GetDefName(void);
136 
137  static ENodeType GetType(void);
138 
139  public:
143 
145 
146  CArray<bool, 1> domainMask; // mask_1d, mask_2d -> domainMask
147  CArray<bool, 1> localMask; // domainMask + indexing
149  bool hasBounds ;
150  bool hasArea;
151  bool hasLonLat;
152  bool hasPole ;
153  bool hasLatInReadFile_ ; // specify if latitude is defined on read file, so it can be read later when grid distribution will be defined
154  bool hasBoundsLatInReadFile_ ; // specify if latitude boundarues are defined on read file, so it can be read later when grid distribution will be defined
155  bool hasLonInReadFile_ ; // specify if longitude is defined on read file, so it can be read later when grid distribution will be defined
156  bool hasBoundsLonInReadFile_ ; // specify if longitude boundaries are defined on read file, so it can be read later when grid distribution will be defined
157 
158  void computeLocalMask(void) ;
159  private:
160  void checkDomain(void);
161  void checkLocalIDomain(void);
162  void checkLocalJDomain(void);
163 
164  void checkMask(void);
165  void checkDomainData(void);
166  void checkCompression(void);
167 
168  void checkBounds(void);
169  void checkArea(void);
170  void checkLonLat();
171 
172  void setTransformations(const TransMapTypes&);
173  void computeNGlobDomain();
174  void sendAttributes();
175  void sendIndex();
176  void sendDistributionAttributes();
177  void sendArea();
178  void sendLonLat();
179  void sendDataIndex();
180  void convertLonLatValue();
181  void fillInRectilinearLonLat();
182  void fillInCurvilinearLonLat();
183  void fillInUnstructuredLonLat();
184 
185  static void recvDistributionAttributes(CEventServer& event);
186  static void recvIndex(CEventServer& event);
187  static void recvLon(CEventServer& event);
188  static void recvLat(CEventServer& event);
189  static void recvArea(CEventServer& event);
190  static void recvDataIndex(CEventServer& event);
191  void recvDistributionAttributes(CBufferIn& buffer);
192  void recvIndex(std::map<int, CBufferIn*>& rankBuffers);
193  void recvLon(std::map<int, CBufferIn*>& rankBuffers);
194  void recvLat(std::map<int, CBufferIn*>& rankBuffers);
195  void recvArea(std::map<int, CBufferIn*>& rankBuffers);
196  void recvDataIndex(std::map<int, CBufferIn*>& rankBuffers);
197 
198  void completeLonLatClient(void);
199  void computeConnectedClients();
200 
201  private:
202 
204  std::list<CContextClient*> clients;
205  std::set<CContextClient*> clientsSet;
206 
207  bool isChecked, computedWrittenIndex_;
208  std::set<StdString> relFiles, relFilesCompressed;
209  bool isClientChecked; // Verify whether all attributes of domain on the client side are good
211  std::map<int, CArray<int,1> > indGlob_;
212  std::map<int, map<int,int> > nbSenders; // Mapping of number of communicating client to a server
213 
215  std::map<int, std::unordered_map<int, vector<size_t> > > indSrv_;
216  // std::map<CContextClient*, std::map<int, vector<int> > > indWrittenSrv_; // Global written index of each client sent to server
217  std::vector<int> indexesToWrite;
218  std::vector<int> recvClientRanks_;
219  std::map<int,int> numberWrittenIndexes_, totalNumberWrittenIndexes_, offsetWrittenIndexes_;
220  std::map<int, CArray<int, 1> > compressedIndexToWriteOnServer;
221  std::map<int, std::map<int,size_t> > connectedDataSize_;
222  std::map<int, std::vector<int> > connectedServerRank_;
223 
227  TransMapTypes transformationMap_;
229  std::unordered_map<size_t,size_t> globalLocalIndexMap_;
230 
231  private:
232  static bool initializeTransformationMap(std::map<StdString, ETranformationType>& m);
233  static std::map<StdString, ETranformationType> transformationMapList_;
235 
236  DECLARE_REF_FUNC(Domain,domain)
237 
238  }; // class CDomain
239 
241 
242  // Declare/Define CDomainGroup and CDomainDefinition
244 
246 
247 } // namespace xios
248 
249 #endif //__XIOS_CDomain__
bool isRedistributed_
Definition: domain.hpp:226
static bool _dummyTransformationMapList
Definition: domain.hpp:234
bool hasPole
Definition: domain.hpp:152
std::map< int, std::map< int, size_t > > connectedDataSize_
Definition: domain.hpp:221
bool isCompressible_
True if and only if the data defined on the domain can be outputted in a compressed way...
Definition: domain.hpp:225
enum xios::transformation_type ETranformationType
////////////////////// Définitions ////////////////////// ///
#define END_DECLARE_ATTRIBUTE_MAP(type)
bool hasBoundsLonInReadFile_
Definition: domain.hpp:156
CArray< bool, 1 > localMask
Definition: domain.hpp:147
CArray< bool, 1 > domainMask
Definition: domain.hpp:146
bool isUnstructed_
Definition: domain.hpp:228
bool hasLatInReadFile_
Definition: domain.hpp:153
bool hasBoundsLatInReadFile_
Definition: domain.hpp:154
std::vector< int > indexesToWrite
Definition: domain.hpp:217
CMesh * mesh
Definition: domain.hpp:69
std::string StdString
Definition: xios_spl.hpp:48
#define xios(arg)
Description of index distribution on server(s).
CDomainGroup RelGroup
Definition: domain.hpp:58
#define DECLARE_REF_FUNC(type, name_)
TransMapTypes transformationMap_
Definition: domain.hpp:227
std::vector< int > recvClientRanks_
Definition: domain.hpp:218
CTransformation< CDomain >::TransformationMapTypes TransMapTypes
Definition: domain.hpp:59
CArray< double, 2 > bounds_lonvalue
Definition: domain.hpp:141
CArray< double, 1 > lonvalue
Definition: domain.hpp:140
std::map< int, map< int, int > > nbSenders
Definition: domain.hpp:212
#define BEGIN_DECLARE_ATTRIBUTE_MAP(type)
CArray< double, 1 > areavalue
Definition: domain.hpp:142
A context can be both on client and on server side.
////////////////////// Déclarations ////////////////////// ///
bool isChecked
Definition: domain.hpp:207
bool isClientAfterTransformationChecked
Definition: domain.hpp:210
bool hasArea
Definition: domain.hpp:150
std::map< int, std::unordered_map< int, vector< size_t > > > indSrv_
Definition: domain.hpp:215
bool isCurvilinear
Definition: domain.hpp:148
CDomainAttributes RelAttributes
Definition: domain.hpp:57
domainDest_ computeLocalMask()
DECLARE_GROUP(CAxis)
Declaration of class CMesh.
std::set< StdString > relFilesCompressed
Definition: domain.hpp:208
static std::map< StdString, ETranformationType > transformationMapList_
Definition: domain.hpp:233
Macros to add functions used to solve references in class CDomain, CAxis and CField.
bool hasLonLat
Definition: domain.hpp:151
bool hasLonInReadFile_
Definition: domain.hpp:155
enum xios::_node_type ENodeType
////////////////////// Définitions ////////////////////// ///
std::unordered_map< size_t, size_t > globalLocalIndexMap_
Definition: domain.hpp:229
std::map< int, CArray< int, 1 > > indGlob_
Definition: domain.hpp:211
bool hasBounds
Definition: domain.hpp:149
std::map< int, std::vector< int > > connectedServerRank_
Definition: domain.hpp:222
CObjectTemplate< CDomain > SuperClass
typedef ///
Definition: domain.hpp:45
bool isClientChecked
Definition: domain.hpp:209
std::map< int, CArray< int, 1 > > compressedIndexToWriteOnServer
Definition: domain.hpp:220
std::set< CContextClient * > clientsSet
Definition: domain.hpp:205
std::map< int, int > totalNumberWrittenIndexes_
Definition: domain.hpp:219
CArray< int, 1 > localIndexToWriteOnServer
Definition: domain.hpp:144
CDomainAttributes SuperClassAttribute
Definition: domain.hpp:46
std::list< CContextClient * > clients
Definition: domain.hpp:204