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
grid.hpp
Aller à la documentation de ce fichier.
1 #ifndef __XIOS_CGrid__
2 #define __XIOS_CGrid__
3 
5 #include "xios_spl.hpp"
6 #include "group_factory.hpp"
7 
8 #include "declare_group.hpp"
9 #include "domain.hpp"
10 #include "axis.hpp"
11 #include "scalar.hpp"
12 #include "array_new.hpp"
13 #include "attribute_array.hpp"
14 #include "distribution_server.hpp"
16 #include "utils.hpp"
17 #include "transformation_enum.hpp"
18 
19 namespace xios {
20 
22 
23  class CGridGroup;
24  class CGridAttributes;
25  class CDomainGroup;
26  class CAxisGroup;
27  class CScalarGroup;
28  class CGrid;
29  class CDistributionClient;
30  class CDistributionServer;
31  class CServerDistributionDescription;
32  class CClientServerMapping;
33  class CGridTransformation;
34 
36 
37  // Declare/Define CGridAttribute
39 # include "grid_attribute.conf"
41 
42 
43 
44  class CGrid
45  : public CObjectTemplate<CGrid>
46  , public CGridAttributes
47  {
50  typedef CGridAttributes SuperClassAttribute;
51 
52  public:
53 
54  typedef CGridAttributes RelAttributes;
55  typedef CGridGroup RelGroup;
56 
57  enum EEventId
58  {
59  EVENT_ID_INDEX, EVENT_ID_ADD_DOMAIN, EVENT_ID_ADD_AXIS, EVENT_ID_ADD_SCALAR
60  };
61 
63  CGrid(void);
64  explicit CGrid(const StdString& id);
65  CGrid(const CGrid& grid); // Not implemented yet.
66  CGrid(const CGrid* const grid); // Not implemented yet.
67 
69 // void solveReference(void);
70 
71  void checkEligibilityForCompressedOutput();
72 
73  void solveDomainAxisRef(bool areAttributesChecked);
74 
75  void checkMaskIndex(bool doCalculateIndex);
76 
77  // virtual void toBinary (StdOStream& os) const;
78 // virtual void fromBinary(StdIStream& is);
79 
80  void addRelFileCompressed(const StdString& filename);
81 
83  bool isCompressible(void) const;
84  bool isWrittenCompressed(const StdString& filename) const;
85 
86  public:
87 
89  StdSize getDimension(void);
90 
91  StdSize getDataSize(void) const;
92 
94  template <int n>
95  void inputField(const CArray<double,n>& field, CArray<double,1>& stored) const;
96  template <int n>
97  void maskField(const CArray<double,n>& field, CArray<double,1>& stored) const;
98  template <int n>
99  void outputField(const CArray<double,1>& stored, CArray<double,n>& field) const;
100  template <int n>
101  void uncompressField(const CArray<double,n>& data, CArray<double,1>& outData) const;
102 
103  virtual void parse(xml::CXMLNode& node);
104 
106  virtual ~CGrid(void);
107 
108  public:
109 
111  static StdString GetName(void);
112  static StdString GetDefName(void);
113 
114  static ENodeType GetType(void);
115 
117  static CGrid* createGrid(CDomain* domain);
118  static CGrid* createGrid(CDomain* domain, CAxis* axis);
119  static CGrid* createGrid(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis,
120  const CArray<int,1>& axisDomainOrder = CArray<int,1>());
121  static CGrid* createGrid(StdString id, const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis,
122  const std::vector<CScalar*>& scalars, const CArray<int,1>& axisDomainOrder = CArray<int,1>());
123  static CGrid* createGrid(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis,
124  const std::vector<CScalar*>& scalars, const CArray<int,1>& axisDomainOrder);
125  static StdString generateId(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis,
126  const std::vector<CScalar*>& scalars, const CArray<int,1>& axisDomainOrder = CArray<int,1>());
127  static StdString generateId(const CGrid* gridSrc, const CGrid* gridDest);
128  static CGrid* cloneGrid(const StdString& idNewGrid, CGrid* gridSrc);
129 
130  public:
131  void computeIndexServer(void);
132  void computeIndex(void);
133  void computeIndexScalarGrid();
134  void computeWrittenIndex();
135 
136  void solveDomainRef(bool checkAtt);
137  void solveAxisRef(bool checkAtt);
138  void solveScalarRef(bool checkAtt);
139  void solveDomainAxisRefInheritance(bool apply = true);
140  void solveTransformations();
141  void solveDomainAxisBaseRef();
142 
143  CDomain* addDomain(const std::string& id=StdString());
144  CAxis* addAxis(const std::string& id=StdString());
145  CScalar* addScalar(const std::string& id=StdString());
146  void sendAddDomain(const std::string& id="");
147  void sendAddAxis(const std::string& id="");
148  void sendAddScalar(const std::string& id="");
149  void sendAllDomains();
150  void sendAllAxis();
151  void sendAllScalars();
152 
153  static void recvAddDomain(CEventServer& event);
154  void recvAddDomain(CBufferIn& buffer);
155  static void recvAddAxis(CEventServer& event);
156  void recvAddAxis(CBufferIn& buffer);
157  static void recvAddScalar(CEventServer& event);
158  void recvAddScalar(CBufferIn& buffer);
159 
160  static bool dispatchEvent(CEventServer& event);
161  static void recvIndex(CEventServer& event);
162  void recvIndex(vector<int> ranks, vector<CBufferIn*> buffers);
163  void sendIndex(void);
164  void sendIndexScalarGrid();
165 
166  void setContextClient(CContextClient* contextClient);
167 
168  void computeDomConServer();
169  std::map<int, int> getDomConServerSide();
170  std::map<int, StdSize> getAttributesBufferSize(CContextClient* client, bool bufferForWriting = false);
171  std::map<int, StdSize> getDataBufferSize(CContextClient* client, const std::string& id = "", bool bufferForWriting = false);
172  std::vector<StdString> getDomainList();
173  std::vector<StdString> getAxisList();
174  std::vector<StdString> getScalarList();
175  std::vector<CDomain*> getDomains();
176  std::vector<CAxis*> getAxis();
177  std::vector<CScalar*> getScalars();
178  CDomain* getDomain(int domainIndex);
179  CAxis* getAxis(int axisIndex);
180  CScalar* getScalar(int scalarIndex);
181  std::vector<int> getAxisOrder();
182  std::vector<int> getGlobalDimension();
183  bool isScalarGrid() const;
184 
185  bool doGridHaveDataToWrite();
186  bool doGridHaveDataDistributed(CContextClient* client = 0);
187  size_t getWrittenDataSize() const;
188  int getNumberWrittenIndexes() const;
189  int getTotalNumberWrittenIndexes() const;
190  int getOffsetWrittenIndexes() const;
191 
192  CDistributionServer* getDistributionServer();
193  CDistributionClient* getDistributionClient();
194  CGridTransformation* getTransformations();
195 
196  void transformGrid(CGrid* transformGridSrc);
197  void completeGrid(CGrid* transformGridSrc = 0);
198  void doAutoDistribution(CGrid* transformGridSrc);
199  bool isTransformed();
200  void setTransformed();
201  bool isGenerated();
202  void setGenerated();
203  void addTransGridSource(CGrid* gridSrc);
204  std::map<CGrid*, std::pair<bool,StdString> >& getTransGridSource();
205  bool hasTransform();
206  size_t getGlobalWrittenSize(void) ;
207  public:
210 
212  std::map<CContextClient*, map<int, CArray<int, 1> > > storeIndex_toSrv;
213 
215  std::map<int, std::map<int,int> > nbSenders;
216 
217  std::map<CContextClient*, std::map<int,int> > nbReadSenders;
218 
219  map<int, CArray<int, 1> > storeIndex_fromSrv; // Support, for now, reading with level-1 server
220 
221  map<int, CArray<size_t, 1> > outIndexFromClient; // Deprecated
222 
223  map<int, CArray<size_t, 1> > compressedOutIndexFromClient;
224 
226  map<int, CArray<size_t, 1> > outGlobalIndexFromClient;
227 
228 // Manh Ha's comment: " A client receives global index from other clients (via recvIndex)
229 // then does mapping these index into local index of STORE_CLIENTINDEX
230 // In this way, store_clientIndex can be used as an input of a source filter
231 // Maybe we need a flag to determine whether a client wants to write. TODO "
232 
235  map<int, CArray<size_t, 1> > outLocalIndexStoreOnClient;
236 
241 
246 
248 
249  bool hasMask(void) const;
250  void checkMask(void);
251  void createMask(void);
252  void modifyMask(const CArray<int,1>& indexToModify, bool valueToModify = false);
253  void modifyMaskSize(const std::vector<int>& newDimensionSize, bool newValue = false);
254 
255  void computeGridGlobalDimension(const std::vector<CDomain*>& domains,
256  const std::vector<CAxis*>& axis,
257  const std::vector<CScalar*>& scalars,
258  const CArray<int,1>& axisDomainOrder);
259 
260  private:
261  template<int N>
262  void checkGridMask(CArray<bool,N>& gridMask,
263  const std::vector<CArray<bool,1>* >& domainMasks,
264  const std::vector<CArray<bool,1>* >& axisMasks,
265  const CArray<int,1>& axisDomainOrder,
266  bool createMask = false);
267  template<int N>
268  void modifyGridMask(CArray<bool,N>& gridMask, const CArray<int,1>& indexToModify, bool valueToModify);
269 
270  template<int N>
271  void modifyGridMaskSize(CArray<bool,N>& gridMask, const std::vector<int>& eachDimSize, bool newValue);
272 
273  void storeField_arr(const double* const data, CArray<double, 1>& stored) const;
274  void restoreField_arr(const CArray<double, 1>& stored, double* const data) const;
275  void uncompressField_arr(const double* const data, CArray<double, 1>& outData) const;
276  void maskField_arr(const double* const data, CArray<double, 1>& stored) const;
277 
278  void setVirtualDomainGroup(CDomainGroup* newVDomainGroup);
279  void setVirtualAxisGroup(CAxisGroup* newVAxisGroup);
280  void setVirtualScalarGroup(CScalarGroup* newVScalarGroup);
281 
282  void setDomainList(const std::vector<CDomain*> domains = std::vector<CDomain*>());
283  void setAxisList(const std::vector<CAxis*> axis = std::vector<CAxis*>());
284  void setScalarList(const std::vector<CScalar*> scalars = std::vector<CScalar*>());
285 
286  CDomainGroup* getVirtualDomainGroup() const;
287  CAxisGroup* getVirtualAxisGroup() const;
288  CScalarGroup* getVirtualScalarGroup() const;
289 
290  void checkAttributesAfterTransformation();
291  void setTransformationAlgorithms();
292  void computeIndexByElement(const std::vector<std::unordered_map<size_t,std::vector<int> > >& indexServerOnElement,
293  const CContextClient* client,
294  CClientServerMapping::GlobalIndexMap& globalIndexOnServer);
295  int computeGridGlobalDimension(std::vector<int>& globalDim,
296  const std::vector<CDomain*> domains,
297  const std::vector<CAxis*> axis,
298  const std::vector<CScalar*> scalars,
299  const CArray<int,1>& axisDomainOrder);
300  int getDistributedDimension();
301 
302  void computeClientIndex();
303  void computeConnectedClients();
304  void computeClientIndexScalarGrid();
305  void computeConnectedClientsScalarGrid();
306 
307  private:
308 
310  std::list<CContextClient*> clients;
311  std::set<CContextClient*> clientsSet;
312 
313  bool isChecked;
316 
317  CDomainGroup* vDomainGroup_;
318  CAxisGroup* vAxisGroup_;
319  CScalarGroup* vScalarGroup_;
320  std::vector<std::string> axisList_, domList_, scalarList_;
321  bool isAxisListSet, isDomListSet, isScalarListSet;
322 
325 
328 
331  int numberWrittenIndexes_, totalNumberWrittenIndexes_, offsetWrittenIndexes_;
332 
335  std::map<int, std::vector<int> > connectedServerRank_;
336 
339  std::map<int, std::map<int,size_t> > connectedDataSize_;
340 
342  std::vector<int> connectedServerRankRead_;
343 
345  std::map<int,size_t> connectedDataSizeRead_;
346 
350  std::set<std::string> relFilesCompressed;
351 
352  bool isTransformed_, isGenerated_;
354  std::vector<int> axisPositionInGrid_;
357  std::map<CGrid*, std::pair<bool,StdString> > gridSrc_;
359 
363 // std::map<CContextClient*, CClientServerMapping::GlobalIndexMap> globalIndexOnServer_;
364  std::map<int, CClientServerMapping::GlobalIndexMap> globalIndexOnServer_;
365 
366 
368  std::vector<int> order_;
369 
370  }; // class CGrid
371 
373 
374  template <int n>
375  void CGrid::inputField(const CArray<double,n>& field, CArray<double,1>& stored) const
376  TRY
377  {
378 //#ifdef __XIOS_DEBUG
379  if (this->getDataSize() != field.numElements())
380  ERROR("void CGrid::inputField(const CArray<double,n>& field, CArray<double,1>& stored) const",
381  << "[ Awaiting data of size = " << this->getDataSize() << ", "
382  << "Received data size = " << field.numElements() << " ] "
383  << "The data array does not have the right size! "
384  << "Grid = " << this->getId())
385 //#endif
386  this->storeField_arr(field.dataFirst(), stored);
387  }
388  CATCH
389 
390  template <int n>
391  void CGrid::maskField(const CArray<double,n>& field, CArray<double,1>& stored) const
392  {
393 //#ifdef __XIOS_DEBUG
394  if (this->getDataSize() != field.numElements())
395  ERROR("void CGrid::inputField(const CArray<double,n>& field, CArray<double,1>& stored) const",
396  << "[ Awaiting data of size = " << this->getDataSize() << ", "
397  << "Received data size = " << field.numElements() << " ] "
398  << "The data array does not have the right size! "
399  << "Grid = " << this->getId())
400 //#endif
401  this->maskField_arr(field.dataFirst(), stored);
402  }
403 
404  template <int n>
405  void CGrid::outputField(const CArray<double,1>& stored, CArray<double,n>& field) const
406  TRY
407  {
408 //#ifdef __XIOS_DEBUG
409  if (this->getDataSize() != field.numElements())
410  ERROR("void CGrid::outputField(const CArray<double,1>& stored, CArray<double,n>& field) const",
411  << "[ Size of the data = " << this->getDataSize() << ", "
412  << "Output data size = " << field.numElements() << " ] "
413  << "The ouput array does not have the right size! "
414  << "Grid = " << this->getId())
415 //#endif
416  this->restoreField_arr(stored, field.dataFirst());
417  }
418  CATCH
419 
426  template <int N>
427  void CGrid::uncompressField(const CArray<double,N>& data, CArray<double,1>& outData) const
428  TRY
429  {
430  uncompressField_arr(data.dataFirst(), outData);
431  }
432  CATCH
433 
434  template<int N>
436  const std::vector<CArray<bool,1>* >& domainMasks,
437  const std::vector<CArray<bool,1>* >& axisMasks,
438  const CArray<int,1>& axisDomainOrder,
439  bool createMask)
440  TRY
441  {
442  int idx = 0;
443  int numElement = axisDomainOrder.numElements();
444  int dim = domainMasks.size() * 2 + axisMasks.size();
445  std::vector<CDomain*> domainP = this->getDomains();
446  std::vector<CAxis*> axisP = this->getAxis();
447 
448  std::vector<int> idxLoop(dim,0), indexMap(numElement), eachDimSize(dim);
449  std::vector<int> currentIndex(dim);
450  int idxDomain = 0, idxAxis = 0;
451  for (int i = 0; i < numElement; ++i)
452  {
453  indexMap[i] = idx;
454  if (2 == axisDomainOrder(i)) {
455  eachDimSize[indexMap[i]] = domainP[idxDomain]->ni;
456  eachDimSize[indexMap[i]+1] = domainP[idxDomain]->nj;
457  idx += 2; ++idxDomain;
458  }
459  else if (1 == axisDomainOrder(i)) {
460 // eachDimSize[indexMap[i]] = axisMasks[idxAxis]->numElements();
461  eachDimSize[indexMap[i]] = axisP[idxAxis]->n;
462  ++idx; ++idxAxis;
463  }
464  else {};
465  }
466 
467  if (!gridMask.isEmpty() && !createMask)
468  {
469  for (int i = 0; i < dim; ++i)
470  {
471  if (gridMask.extent(i) != eachDimSize[i])
472  ERROR("CGrid::checkMask(void)",
473  << "The mask has one dimension whose size is different from the one of the local grid." << std::endl
474  << "Local size of dimension " << i << " is " << eachDimSize[i] << "." << std::endl
475  << "Mask size for dimension " << i << " is " << gridMask.extent(i) << "." << std::endl
476  << "Grid = " << this->getId())
477  }
478  }
479  else {
480  CArrayBoolTraits<CArray<bool,N> >::resizeArray(gridMask,eachDimSize);
481  gridMask = true;
482  }
483 
484  int ssize = gridMask.numElements();
485  idx = 0;
486  while (idx < ssize)
487  {
488  for (int i = 0; i < dim-1; ++i)
489  {
490  if (idxLoop[i] == eachDimSize[i])
491  {
492  idxLoop[i] = 0;
493  ++idxLoop[i+1];
494  }
495  }
496 
497  // Find out outer index
498  idxDomain = idxAxis = 0;
499  bool maskValue = true;
500  for (int i = 0; i < numElement; ++i)
501  {
502  if (2 == axisDomainOrder(i))
503  {
504  int idxTmp = idxLoop[indexMap[i]] + idxLoop[indexMap[i]+1] * eachDimSize[indexMap[i]];
505  if (idxTmp < (*domainMasks[idxDomain]).numElements())
506  maskValue = maskValue && (*domainMasks[idxDomain])(idxTmp);
507  else
508  maskValue = false;
509  ++idxDomain;
510  }
511  else if (1 == axisDomainOrder(i))
512  {
513  int idxTmp = idxLoop[indexMap[i]];
514  if (idxTmp < (*axisMasks[idxAxis]).numElements())
515  maskValue = maskValue && (*axisMasks[idxAxis])(idxTmp);
516  else
517  maskValue = false;
518 
519  ++idxAxis;
520  }
521  }
522 
523  int maskIndex = idxLoop[0];
524  int mulDim = 1;
525  for (int k = 1; k < dim; ++k)
526  {
527  mulDim *= eachDimSize[k-1];
528  maskIndex += idxLoop[k]*mulDim;
529  }
530  *(gridMask.dataFirst()+maskIndex) &= maskValue;
531 
532  ++idxLoop[0];
533  ++idx;
534  }
535  }
537 
538  template<int N>
540  const std::vector<int>& eachDimSize,
541  bool newValue)
542  TRY
543  {
544  if (N != eachDimSize.size())
545  {
546  // ERROR("CGrid::modifyGridMaskSize(CArray<bool,N>& gridMask,
547  // const std::vector<int>& eachDimSize,
548  // bool newValue)",
549  // << "Dimension size of the mask is different from input dimension size." << std::endl
550  // << "Mask dimension is " << N << "." << std::endl
551  // << "Input dimension is " << eachDimSize.size() << "." << std::endl
552  // << "Grid = " << this->getId())
553  }
554  CArrayBoolTraits<CArray<bool,N> >::resizeArray(gridMask,eachDimSize);
555  gridMask = newValue;
556  }
558 
559 
565  template<int N>
566  void CGrid::modifyGridMask(CArray<bool,N>& gridMask, const CArray<int,1>& indexToModify, bool valueToModify)
567  TRY
568  {
569  int num = indexToModify.numElements();
570  for (int idx = 0; idx < num; ++idx)
571  {
572  *(gridMask.dataFirst()+indexToModify(idx)) = valueToModify;
573  }
574  }
576 
578 
579 
580 
581  // Declare/Define CGridGroup and CGridDefinition
582  DECLARE_GROUP(CGrid);
583 
585 
586 } // namespace xios
587 
588 #endif // __XIOS_CGrid__
#define CATCH_DUMP_ATTR
Definition: exception.hpp:156
std::set< std::string > relFilesCompressed
Definition: grid.hpp:350
void modifyGridMask(CArray< bool, N > &gridMask, const CArray< int, 1 > &indexToModify, bool valueToModify)
size_t writtenDataSize_
Definition: grid.hpp:330
int totalNumberWrittenIndexes_
Definition: grid.hpp:331
CGridGroup RelGroup
Definition: grid.hpp:55
bool isIndexSent
Definition: grid.hpp:315
map< int, CArray< int, 1 > > storeIndex_fromSrv
Definition: grid.hpp:219
#define END_DECLARE_ATTRIBUTE_MAP(type)
CGridAttributes RelAttributes
Definition: grid.hpp:54
CArray< size_t, 1 > localIndexToWriteOnServer
Definition: grid.hpp:240
CScalarGroup * vScalarGroup_
Definition: grid.hpp:319
std::map< int, std::map< int, int > > nbSenders
Definition: grid.hpp:215
std::map< int, std::vector< int > > connectedServerRank_
Definition: grid.hpp:335
void outputField(const CArray< double, 1 > &stored, CArray< double, n > &field) const
Definition: grid.hpp:405
map< int, CArray< size_t, 1 > > compressedOutIndexFromClient
Definition: grid.hpp:223
std::map< CContextClient *, map< int, CArray< int, 1 > > > storeIndex_toSrv
Definition: grid.hpp:212
void uncompressField(const CArray< double, n > &data, CArray< double, 1 > &outData) const
#define TRY
Definition: exception.hpp:154
std::set< CContextClient * > clientsSet
Definition: grid.hpp:311
Some utils for Xios.
std::list< CContextClient * > clients
Definition: grid.hpp:310
std::map< int, size_t > connectedDataSizeRead_
Definition: grid.hpp:345
bool isTransformed_
Definition: grid.hpp:352
std::map< CContextClient *, std::map< int, int > > nbReadSenders
Definition: grid.hpp:217
std::vector< int > connectedServerRankRead_
Definition: grid.hpp:342
void maskField_arr(const double *const data, CArray< double, 1 > &stored) const
Definition: grid.cpp:1360
std::string StdString
Definition: xios_spl.hpp:48
bool isScalarListSet
Definition: grid.hpp:321
#define xios(arg)
const StdString & getId(void) const
Accesseurs ///.
Definition: object.cpp:26
std::map< int, std::map< int, size_t > > connectedDataSize_
Definition: grid.hpp:339
CDistributionServer * serverDistribution_
Definition: grid.hpp:327
This class computes index of data which are sent to server as well as index of data on server side...
bool isCompressible_
True if and only if the data defined on the grid can be outputted in a compressed way...
Definition: grid.hpp:349
map< int, CArray< size_t, 1 > > outGlobalIndexFromClient
Definition: grid.hpp:226
bool isChecked
Definition: grid.hpp:313
#define BEGIN_DECLARE_ATTRIBUTE_MAP(type)
This class is an interface for all transformations to interact with the rest of XIOS.
StdSize getDataSize(void) const
Definition: grid.cpp:92
bool hasDomainAxisBaseRef_
Definition: grid.hpp:356
std::unordered_map< int, std::vector< size_t > > GlobalIndexMap
CATCH CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar *scalarDestination, CScalar *scalarSource, CReduceScalarToScalar *algo ERROR)("CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo)",<< "Operation must be defined."<< "Scalar source "<< scalarSource->getId()<< std::endl<< "Scalar destination "<< scalarDestination->getId())
std::vector< int > order_
Definition: grid.hpp:368
A context can be both on client and on server side.
bool isDataDistributed_
Definition: grid.hpp:347
////////////////////// Déclarations ////////////////////// ///
std::vector< int > axisPositionInGrid_
Definition: grid.hpp:354
void checkGridMask(CArray< bool, N > &gridMask, const std::vector< CArray< bool, 1 > * > &domainMasks, const std::vector< CArray< bool, 1 > * > &axisMasks, const CArray< int, 1 > &axisDomainOrder, bool createMask=false)
////////////////////// Déclarations ////////////////////// ///
Definition: array.hpp:25
bool hasTransform_
Definition: grid.hpp:358
std::size_t StdSize
Definition: xios_spl.hpp:49
map< int, CArray< size_t, 1 > > outLocalIndexStoreOnClient
Definition: grid.hpp:235
CArray< size_t, 1 > localIndexToWriteOnClient
Definition: grid.hpp:245
void modifyGridMaskSize(CArray< bool, N > &gridMask, const std::vector< int > &eachDimSize, bool newValue)
CObjectTemplate< CGrid > SuperClass
typedef ///
Definition: grid.hpp:49
map< int, CArray< size_t, 1 > > outIndexFromClient
Definition: grid.hpp:221
std::vector< std::string > scalarList_
Definition: grid.hpp:320
CGridTransformation * transformations_
Definition: grid.hpp:355
DECLARE_GROUP(CAxis)
CClientServerMapping * clientServerMap_
Definition: grid.hpp:329
Mapping between index client and server.
CDistributionClient * clientDistribution_
Definition: grid.hpp:324
bool computedWrittenIndex_
Definition: grid.hpp:353
void maskField(const CArray< double, n > &field, CArray< double, 1 > &stored) const
CArray< bool, 1 > storeMask_client
Definition: grid.hpp:209
CArray< int, 1 > storeIndex_client
Definition: grid.hpp:208
CAxisGroup * vAxisGroup_
Definition: grid.hpp:318
std::map< CGrid *, std::pair< bool, StdString > > gridSrc_
Definition: grid.hpp:357
enum xios::_node_type ENodeType
////////////////////// Définitions ////////////////////// ///
CArray< size_t, 1 > indexFromClients
Definition: grid.hpp:247
CDomainGroup * vDomainGroup_
Definition: grid.hpp:317
This class bases on the knowledge of distribution on client side (decided by users) to calculate the ...
Index distribution on server side.
bool isDomainAxisChecked
Definition: grid.hpp:314
#define CATCH
Definition: exception.hpp:155
void inputField(const CArray< double, n > &field, CArray< double, 1 > &stored) const
Entrees-sorties de champs.
Definition: grid.hpp:375
CGridAttributes SuperClassAttribute
Definition: grid.hpp:50
The class, for now, plays a role of computing local index for writing data on server.
std::map< int, CClientServerMapping::GlobalIndexMap > globalIndexOnServer_
Definition: grid.hpp:364