source: XIOS/dev/branch_yushan/src/interface/c/icdata.cpp @ 1109

Last change on this file since 1109 was 1109, checked in by yushan, 7 years ago

test_omp OK

  • 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
  • Property svn:eol-style set to native
File size: 37.8 KB
Line 
1/* ************************************************************************** *
2 *      Copyright  IPSL/LSCE, xios, Avril 2010 - Octobre 2011         *
3 * ************************************************************************** */
4
5#include <boost/multi_array.hpp>
6#include <boost/shared_ptr.hpp>
7#include <string>
8#include <cstring>
9#include <iostream>
10
11
12#include "xios.hpp"
13//#include "oasis_cinterface.hpp"
14
15#include "attribute_template.hpp"
16#include "object_template.hpp"
17#include "group_template.hpp"
18
19#include "icutil.hpp"
20#include "cxios.hpp"
21#include "client.hpp"
22#include "field.hpp"
23#include "context.hpp"
24#include "context_client.hpp"
25#include "mpi_std.hpp"
26#include "timer.hpp"
27#include "array_new.hpp"
28
29extern "C"
30{
31// /////////////////////////////// Dfinitions ////////////////////////////// //
32
33   // ----------------------- Redfinition de types ----------------------------
34
35   typedef enum { NETCDF4 = 0 } XFileType;
36
37   typedef xios::CContext* XContextPtr;
38
39   // -------------------- Traitement des donnes ------------------------------
40
41   // This function is not exported to the public Fortran interface,
42   // it is only used from the parse_xml.exe standalone test tool.
43   void cxios_init(void)
44   {
45     CXios::initialize();
46   }
47
48   void cxios_init_server(void)
49   {
50     CXios::initServerSide();
51   }
52
53   void cxios_init_client(const char* client_id , int len_client_id, MPI_Fint* f_local_comm, MPI_Fint* f_return_comm )
54   {
55      std::string str;
56      ep_lib::MPI_Comm local_comm;
57      ep_lib::MPI_Comm return_comm;
58     
59      ep_lib::fc_comm_map.clear();
60
61      if (!cstr2string(client_id, len_client_id, str)) return;
62
63      int initialized;
64      MPI_Initialized(&initialized);
65
66      #ifdef _usingEP
67      if (initialized) local_comm = ep_lib::EP_Comm_f2c(static_cast< int >(*f_local_comm));
68      else local_comm = MPI_COMM_NULL;
69      #else
70      if (initialized) local_comm=MPI_Comm_f2c(*f_local_comm);
71      else local_comm = MPI_COMM_NULL;
72      #endif
73     
74
75      CXios::initClientSide(str, local_comm, return_comm);
76
77      #ifdef _usingEP
78      *f_return_comm = ep_lib::EP_Comm_c2f(return_comm);
79      #else
80      *f_return_comm = MPI_Comm_c2f(return_comm);
81      #endif
82
83      CTimer::get("XIOS init").suspend();
84      CTimer::get("XIOS").suspend();
85   }
86
87   void cxios_context_initialize(const char* context_id , int len_context_id, MPI_Fint* f_comm)
88   {
89     std::string str;
90     ep_lib::MPI_Comm comm;
91
92     if (!cstr2string(context_id, len_context_id, str)) return;
93     CTimer::get("XIOS").resume();
94     CTimer::get("XIOS init context").resume();
95     comm = ep_lib::EP_Comm_f2c(static_cast< int >(*f_comm));
96
97     CClient::registerContext(str,comm);
98         
99     CTimer::get("XIOS init context").suspend();
100     CTimer::get("XIOS").suspend();
101   }
102
103   void cxios_context_is_initialized(const char* context_id , int len_context_id, bool* initialized)
104   {
105     std::string str;
106
107     if (!cstr2string(context_id, len_context_id, str)) return;
108     CTimer::get("XIOS").resume();
109     CContext* context = CContext::get(str, str);
110     *initialized=context->isInitialized();
111     CTimer::get("XIOS").suspend();
112   }
113
114    void cxios_context_close_definition()
115   {
116     CTimer::get("XIOS").resume();
117     CTimer::get("XIOS close definition").resume();
118     CContext* context = CContext::getCurrent();
119     
120     context->closeDefinition();
121     
122     CTimer::get("XIOS close definition").suspend();
123     CTimer::get("XIOS").suspend();
124   }
125
126   void cxios_context_finalize()
127   {
128     CTimer::get("XIOS").resume();
129     CTimer::get("XIOS context finalize").resume();
130     
131     
132     CContext* context = CContext::getCurrent();
133     //printf("Check : CContext::getCurrent() = %p\n", CContext::getCurrent());
134     context->finalize();
135         
136     CTimer::get("XIOS context finalize").suspend();
137     CTimer::get("XIOS").suspend();
138   }
139
140   void cxios_finalize()
141   {
142     CTimer::get("XIOS").resume();
143     CTimer::get("XIOS finalize").resume();
144     CXios::clientFinalize();
145   }
146
147   void cxios_solve_inheritance()
148   {
149     CTimer::get("XIOS").resume();
150     CContext* context = CContext::getCurrent();
151     context->solveAllInheritance(false);
152     CTimer::get("XIOS").suspend();
153   }
154
155   /*! \brief This group of functions retrieve variable information from the configuration file (.xml)
156    *
157    * These functions provide intermediate C interfaces to get variable information of the configuration file (e.x iodef.xml),
158    * from a Fortran one, for example the value of a variable with id = "using_server".
159    * Each function corresponds to each basic type.
160    * \param varId        [in] id of the variable that we'd like to get
161    * \param varIdSize    [in] size of the variable type (integer, float, double, string)
162    * \param dataInt      [in/out] the retrieved data
163    * \param isVarExisted [in/out] Verify whether variable with varId exists
164   */
165   void cxios_get_variable_data_k8(const char* varId, int varIdSize, double* data, bool* isVarExisted)
166   {
167      std::string varIdStr;
168      if (!cstr2string(varId, varIdSize, varIdStr)) return;
169
170      CTimer::get("XIOS").resume();
171      CTimer::get("XIOS get variable data").resume();
172
173      CContext* context = CContext::getCurrent();
174      *isVarExisted = CVariable::has(context->getId(), varIdStr);
175
176      if (*isVarExisted)
177      {
178        *data = CVariable::get(context->getId(), varIdStr)->getData<double>();
179      }
180
181      CTimer::get("XIOS get variable data").suspend();
182      CTimer::get("XIOS").suspend();
183   }
184
185   void cxios_get_variable_data_k4(const char* varId, int varIdSize, float* data, bool* isVarExisted)
186   {
187      std::string varIdStr;
188      if (!cstr2string(varId, varIdSize, varIdStr)) return;
189
190      CTimer::get("XIOS").resume();
191      CTimer::get("XIOS get variable data").resume();
192
193      CContext* context = CContext::getCurrent();
194      *isVarExisted = CVariable::has(context->getId(), varIdStr);
195
196      if (*isVarExisted)
197      {
198        *data = CVariable::get(context->getId(), varIdStr)->getData<float>();
199      }
200
201      CTimer::get("XIOS get variable data").suspend();
202      CTimer::get("XIOS").suspend();
203   }
204
205   void cxios_get_variable_data_int(const char* varId, int varIdSize, int* data, bool* isVarExisted)
206   {
207      std::string varIdStr;
208      if (!cstr2string(varId, varIdSize, varIdStr)) return;
209
210      CTimer::get("XIOS").resume();
211      CTimer::get("XIOS get variable data").resume();
212
213      CContext* context = CContext::getCurrent();
214      *isVarExisted = CVariable::has(context->getId(), varIdStr);
215
216      if (*isVarExisted)
217      {
218        *data = CVariable::get(context->getId(), varIdStr)->getData<int>();
219      }
220
221      CTimer::get("XIOS get variable data").suspend();
222      CTimer::get("XIOS").suspend();
223   }
224
225   void cxios_get_variable_data_logic(const char* varId, int varIdSize, bool* data, bool* isVarExisted)
226   {
227      std::string varIdStr;
228      if (!cstr2string(varId, varIdSize, varIdStr)) return;
229
230      CTimer::get("XIOS").resume();
231      CTimer::get("XIOS get variable data").resume();
232
233      CContext* context = CContext::getCurrent();
234      *isVarExisted = CVariable::has(context->getId(), varIdStr);
235
236      if (*isVarExisted)
237      {
238        *data = CVariable::get(context->getId(), varIdStr)->getData<bool>();
239      }
240
241      CTimer::get("XIOS get variable data").suspend();
242      CTimer::get("XIOS").suspend();
243   }
244
245   void cxios_get_variable_data_char(const char* varId, int varIdSize, char* data, int dataSizeIn, bool* isVarExisted)
246   {
247      std::string varIdStr;
248      if (!cstr2string(varId, varIdSize, varIdStr)) return;
249
250      CTimer::get("XIOS").resume();
251      CTimer::get("XIOS get variable data").resume();
252
253      CContext* context = CContext::getCurrent();
254      *isVarExisted = CVariable::has(context->getId(), varIdStr);
255
256      if (*isVarExisted)
257      {
258        int dataSizeOut = CVariable::get(context->getId(), varIdStr)->getData<string>().length();
259        strncpy(data, CVariable::get(context->getId(), varIdStr)->getData<string>().c_str(), std::min(dataSizeIn, dataSizeOut));
260      }
261
262      CTimer::get("XIOS get variable data").suspend();
263      CTimer::get("XIOS").suspend();
264   }
265
266   /*! \brief This group of functions write information into existing variable in the configuration file (.xml)
267    *
268    *  These functions provide intermediate C interfaces to get variable information of the configuration file (e.x iodef.xml),
269    * from a Fortran one, for example the value of a variable with id = "using_server".
270    * Each function corresponds to each basic type.
271    * \param varId        [in] id of the variable that we'd like to get
272    * \param varIdSize    [in] size of the variable type (integer, float, double, string)
273    * \param data         [in] the input data
274    * \param isVarExisted [in/out] Verify whether variable with varId exists
275   */
276   void cxios_set_variable_data_k8(const char* varId, int varIdSize, double data, bool* isVarExisted)
277   {
278      std::string varIdStr;
279      if (!cstr2string(varId, varIdSize, varIdStr)) return;
280
281      CTimer::get("XIOS").resume();
282      CTimer::get("XIOS set variable data").resume();
283
284      CContext* context = CContext::getCurrent();
285      *isVarExisted = CVariable::has(context->getId(), varIdStr);
286
287      if (*isVarExisted)
288      {
289        CVariable::get(context->getId(), varIdStr)->setData<double>(data);
290      }
291
292      CTimer::get("XIOS set variable data").suspend();
293      CTimer::get("XIOS").suspend();
294   }
295
296   void cxios_set_variable_data_k4(const char* varId, int varIdSize, float data, bool* isVarExisted)
297   {
298      std::string varIdStr;
299      if (!cstr2string(varId, varIdSize, varIdStr)) return;
300
301      CTimer::get("XIOS").resume();
302      CTimer::get("XIOS set variable data").resume();
303
304      CContext* context = CContext::getCurrent();
305      *isVarExisted = CVariable::has(context->getId(), varIdStr);
306
307      if (*isVarExisted)
308      {
309        CVariable::get(context->getId(), varIdStr)->setData<float>(data);
310      }
311
312      CTimer::get("XIOS set variable data").suspend();
313      CTimer::get("XIOS").suspend();
314   }
315
316   void cxios_set_variable_data_int(const char* varId, int varIdSize, int data, bool* isVarExisted)
317   {
318      std::string varIdStr;
319      if (!cstr2string(varId, varIdSize, varIdStr)) return;
320
321      CTimer::get("XIOS").resume();
322      CTimer::get("XIOS set variable data").resume();
323
324      CContext* context = CContext::getCurrent();
325      *isVarExisted = CVariable::has(context->getId(), varIdStr);
326
327      if (*isVarExisted)
328      {
329        CVariable::get(context->getId(), varIdStr)->setData<int>(data);
330      }
331
332
333      CTimer::get("XIOS set variable data").suspend();
334      CTimer::get("XIOS").suspend();
335   }
336
337   void cxios_set_variable_data_logic(const char* varId, int varIdSize, bool data, bool* isVarExisted)
338   {
339      std::string varIdStr;
340      if (!cstr2string(varId, varIdSize, varIdStr)) return;
341
342      CTimer::get("XIOS").resume();
343      CTimer::get("XIOS set variable data").resume();
344
345      CContext* context = CContext::getCurrent();
346      *isVarExisted = CVariable::has(context->getId(), varIdStr);
347
348      if (*isVarExisted)
349      {
350        CVariable::get(context->getId(), varIdStr)->setData<bool>(data);
351      }
352
353      CTimer::get("XIOS set variable data").suspend();
354      CTimer::get("XIOS").suspend();
355   }
356
357   void cxios_set_variable_data_char(const char* varId, int varIdSize, const char* data, int dataSizeIn, bool* isVarExisted)
358   {
359      std::string varIdStr, dataStr;
360      if (!cstr2string(varId, varIdSize, varIdStr)) return;
361      if (!cstr2string(data, dataSizeIn, dataStr))
362      {
363        *isVarExisted = false;
364        return;
365      }
366
367      CTimer::get("XIOS").resume();
368      CTimer::get("XIOS set variable data").resume();
369
370      CContext* context = CContext::getCurrent();
371      *isVarExisted = CVariable::has(context->getId(), varIdStr);
372
373      if (*isVarExisted)
374      {
375        CVariable::get(context->getId(), varIdStr)->setData<string>(dataStr);
376      }
377
378      CTimer::get("XIOS set variable data").suspend();
379      CTimer::get("XIOS").suspend();
380   }
381
382
383   // ---------------------- Ecriture des donnes ------------------------------
384
385   void cxios_write_data_k80(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
386   {
387      std::string fieldid_str;
388      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
389
390      CTimer::get("XIOS").resume();
391      CTimer::get("XIOS send field").resume();
392      CContext* context = CContext::getCurrent();
393      if (!context->hasServer && !context->client->isAttachedModeEnabled())
394        context->checkBuffersAndListen();
395      CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData);
396      CField::get(fieldid_str)->setData(data);
397      CTimer::get("XIOS send field").suspend();
398      CTimer::get("XIOS").suspend();
399   }
400
401   void cxios_write_data_k81(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
402   {
403      std::string fieldid_str;
404      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
405
406      CTimer::get("XIOS").resume();
407      CTimer::get("XIOS send field").resume();
408
409      CContext* context = CContext::getCurrent();
410      if (!context->hasServer && !context->client->isAttachedModeEnabled())
411        context->checkBuffersAndListen();
412
413      CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData);
414      CField::get(fieldid_str)->setData(data);
415
416      CTimer::get("XIOS send field").suspend();
417      CTimer::get("XIOS").suspend();
418   }
419
420   void cxios_write_data_k82(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize)
421   {
422      std::string fieldid_str;
423      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
424
425      CTimer::get("XIOS").resume();
426      CTimer::get("XIOS send field").resume();
427
428      CContext* context = CContext::getCurrent();
429      if (!context->hasServer && !context->client->isAttachedModeEnabled())
430        context->checkBuffersAndListen();
431
432      CArray<double, 2>data(data_k8, shape(data_Xsize, data_Ysize), neverDeleteData);
433      CField::get(fieldid_str)->setData(data);
434
435      CTimer::get("XIOS send field").suspend();
436      CTimer::get("XIOS").suspend();
437   }
438
439   void cxios_write_data_k83(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize)
440   {
441      std::string fieldid_str;
442      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
443
444      CTimer::get("XIOS").resume();
445      CTimer::get("XIOS send field").resume();
446
447      CContext* context = CContext::getCurrent();
448      if (!context->hasServer && !context->client->isAttachedModeEnabled())
449      {
450        context->checkBuffersAndListen();
451      } 
452
453      CArray<double, 3>data(data_k8, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData);
454      CField::get(fieldid_str)->setData(data);
455
456      CTimer::get("XIOS send field").suspend();
457      CTimer::get("XIOS").suspend();
458   }
459
460   void cxios_write_data_k84(const char* fieldid, int fieldid_size, double* data_k8, int data_0size, int data_1size, int data_2size, int data_3size)
461   {
462      std::string fieldid_str;
463      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
464
465      CTimer::get("XIOS").resume();
466      CTimer::get("XIOS send field").resume();
467
468      CContext* context = CContext::getCurrent();
469      if (!context->hasServer && !context->client->isAttachedModeEnabled())
470        context->checkBuffersAndListen();
471
472      CArray<double, 4>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData);
473      CField::get(fieldid_str)->setData(data);
474
475      CTimer::get("XIOS send field").suspend();
476      CTimer::get("XIOS").suspend();
477   }
478
479   void cxios_write_data_k85(const char* fieldid, int fieldid_size, double* data_k8,
480                             int data_0size, int data_1size, int data_2size,
481                             int data_3size, int data_4size)
482   {
483      std::string fieldid_str;
484      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
485
486      CTimer::get("XIOS").resume();
487      CTimer::get("XIOS send field").resume();
488
489      CContext* context = CContext::getCurrent();
490      if (!context->hasServer && !context->client->isAttachedModeEnabled())
491        context->checkBuffersAndListen();
492
493      CArray<double, 5>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData);
494      CField::get(fieldid_str)->setData(data);
495
496      CTimer::get("XIOS send field").suspend();
497      CTimer::get("XIOS").suspend();
498   }
499
500   void cxios_write_data_k86(const char* fieldid, int fieldid_size, double* data_k8,
501                             int data_0size, int data_1size, int data_2size,
502                             int data_3size, int data_4size, int data_5size)
503   {
504      std::string fieldid_str;
505      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
506
507      CTimer::get("XIOS").resume();
508      CTimer::get("XIOS send field").resume();
509
510      CContext* context = CContext::getCurrent();
511      if (!context->hasServer && !context->client->isAttachedModeEnabled())
512        context->checkBuffersAndListen();
513
514      CArray<double, 6>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData);
515      CField::get(fieldid_str)->setData(data);
516
517      CTimer::get("XIOS send field").suspend();
518      CTimer::get("XIOS").suspend();
519   }
520
521   void cxios_write_data_k87(const char* fieldid, int fieldid_size, double* data_k8,
522                             int data_0size, int data_1size, int data_2size,
523                             int data_3size, int data_4size, int data_5size,
524                             int data_6size)
525   {
526      std::string fieldid_str;
527      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
528
529      CTimer::get("XIOS").resume();
530      CTimer::get("XIOS send field").resume();
531
532      CContext* context = CContext::getCurrent();
533      if (!context->hasServer && !context->client->isAttachedModeEnabled())
534        context->checkBuffersAndListen();
535
536      CArray<double, 7>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData);
537      CField::get(fieldid_str)->setData(data);
538
539      CTimer::get("XIOS send field").suspend();
540      CTimer::get("XIOS").suspend();
541   }
542
543   void cxios_write_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
544   {
545      std::string fieldid_str;
546      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
547
548      CTimer::get("XIOS").resume();
549      CTimer::get("XIOS send field").resume();
550      CContext* context = CContext::getCurrent();
551      if (!context->hasServer && !context->client->isAttachedModeEnabled())
552        context->checkBuffersAndListen();
553
554      CArray<float, 1> data_tmp(data_k4, shape(data_Xsize), neverDeleteData);
555      CArray<double, 1> data(data_Xsize) ;
556      data = data_tmp;
557      CField::get(fieldid_str)->setData(data);
558      CTimer::get("XIOS send field").suspend();
559      CTimer::get("XIOS").suspend();
560   }
561
562   void cxios_write_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
563   {
564      std::string fieldid_str;
565      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
566
567      CTimer::get("XIOS").resume();
568      CTimer::get("XIOS send field").resume();
569
570      CContext* context = CContext::getCurrent();
571      if (!context->hasServer && !context->client->isAttachedModeEnabled())
572        context->checkBuffersAndListen();
573
574      CArray<float, 1> data_tmp(data_k4, shape(data_Xsize), neverDeleteData);
575      CArray<double, 1> data(data_Xsize);
576      data = data_tmp;
577      CField::get(fieldid_str)->setData(data);
578
579      CTimer::get("XIOS send field").suspend();
580      CTimer::get("XIOS").suspend();
581   }
582
583   void cxios_write_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize)
584   {
585      std::string fieldid_str;
586      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
587
588      CTimer::get("XIOS").resume();
589      CTimer::get("XIOS send field").resume();
590
591      CContext* context = CContext::getCurrent();
592      if (!context->hasServer && !context->client->isAttachedModeEnabled())
593        context->checkBuffersAndListen();
594
595      CArray<float, 2> data_tmp(data_k4, shape(data_Xsize, data_Ysize), neverDeleteData);
596      CArray<double, 2> data(data_Xsize, data_Ysize);
597      data = data_tmp;
598      CField::get(fieldid_str)->setData(data);
599
600      CTimer::get("XIOS send field").suspend();
601      CTimer::get("XIOS").suspend();
602   }
603
604   void cxios_write_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
605   {
606      std::string fieldid_str;
607      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
608
609      CTimer::get("XIOS").resume();
610      CTimer::get("XIOS send field").resume();
611
612      CContext* context = CContext::getCurrent();
613      if (!context->hasServer && !context->client->isAttachedModeEnabled())
614        context->checkBuffersAndListen();
615
616      CArray<float, 3> data_tmp(data_k4, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData);
617      CArray<double, 3> data(data_Xsize, data_Ysize, data_Zsize);
618      data = data_tmp;
619      CField::get(fieldid_str)->setData(data);
620
621      CTimer::get("XIOS send field").suspend();
622      CTimer::get("XIOS").suspend();
623    }
624
625   void cxios_write_data_k44(const char* fieldid, int fieldid_size, float* data_k4,
626                             int data_0size, int data_1size, int data_2size,
627                             int data_3size)
628   {
629      std::string fieldid_str;
630      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
631
632      CTimer::get("XIOS").resume();
633      CTimer::get("XIOS send field").resume();
634
635      CContext* context = CContext::getCurrent();
636      if (!context->hasServer && !context->client->isAttachedModeEnabled())
637        context->checkBuffersAndListen();
638
639      CArray<float, 4> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData);
640      CArray<double, 4> data(data_0size, data_1size, data_2size, data_3size);
641      data = data_tmp;
642      CField::get(fieldid_str)->setData(data);
643
644      CTimer::get("XIOS send field").suspend();
645      CTimer::get("XIOS").suspend();
646    }
647
648   void cxios_write_data_k45(const char* fieldid, int fieldid_size, float* data_k4,
649                             int data_0size, int data_1size, int data_2size,
650                             int data_3size, int data_4size)
651   {
652      std::string fieldid_str;
653      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
654
655      CTimer::get("XIOS").resume();
656      CTimer::get("XIOS send field").resume();
657
658      CContext* context = CContext::getCurrent();
659      if (!context->hasServer && !context->client->isAttachedModeEnabled())
660        context->checkBuffersAndListen();
661
662      CArray<float, 5> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData);
663      CArray<double, 5> data(data_0size, data_1size, data_2size, data_3size, data_4size);
664      data = data_tmp;
665      CField::get(fieldid_str)->setData(data);
666
667      CTimer::get("XIOS send field").suspend();
668      CTimer::get("XIOS").suspend();
669    }
670
671   void cxios_write_data_k46(const char* fieldid, int fieldid_size, float* data_k4,
672                             int data_0size, int data_1size, int data_2size,
673                             int data_3size, int data_4size, int data_5size)
674   {
675      std::string fieldid_str;
676      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
677
678      CTimer::get("XIOS").resume();
679      CTimer::get("XIOS send field").resume();
680
681      CContext* context = CContext::getCurrent();
682      if (!context->hasServer && !context->client->isAttachedModeEnabled())
683        context->checkBuffersAndListen();
684
685      CArray<float, 6> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData);
686      CArray<double, 6> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size);
687      data = data_tmp;
688      CField::get(fieldid_str)->setData(data);
689
690      CTimer::get("XIOS send field").suspend();
691      CTimer::get("XIOS").suspend();
692    }
693
694   void cxios_write_data_k47(const char* fieldid, int fieldid_size, float* data_k4,
695                             int data_0size, int data_1size, int data_2size,
696                             int data_3size, int data_4size, int data_5size,
697                             int data_6size)
698   {
699      std::string fieldid_str;
700      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
701
702      CTimer::get("XIOS").resume();
703      CTimer::get("XIOS send field").resume();
704
705      CContext* context = CContext::getCurrent();
706      if (!context->hasServer && !context->client->isAttachedModeEnabled())
707        context->checkBuffersAndListen();
708
709      CArray<float, 7> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData);
710      CArray<double, 7> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size);
711      data = data_tmp;
712      CField::get(fieldid_str)->setData(data);
713
714      CTimer::get("XIOS send field").suspend();
715      CTimer::get("XIOS").suspend();
716    }
717
718   // ---------------------- Lecture des donnes ------------------------------
719
720   void cxios_read_data_k80(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
721   {
722      std::string fieldid_str;
723      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
724
725      CTimer::get("XIOS").resume();
726      CTimer::get("XIOS recv field").resume();
727
728      CContext* context = CContext::getCurrent();
729      if (!context->hasServer && !context->client->isAttachedModeEnabled())
730        context->checkBuffersAndListen();
731
732      CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData);
733      CField::get(fieldid_str)->getData(data);
734
735      CTimer::get("XIOS recv field").suspend();
736      CTimer::get("XIOS").suspend();
737   }
738
739   void cxios_read_data_k81(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
740   {
741      std::string fieldid_str;
742      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
743
744      CTimer::get("XIOS").resume();
745      CTimer::get("XIOS recv field").resume();
746
747      CContext* context = CContext::getCurrent();
748      if (!context->hasServer && !context->client->isAttachedModeEnabled())
749        context->checkBuffersAndListen();
750
751      CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData);
752      CField::get(fieldid_str)->getData(data);
753
754      CTimer::get("XIOS recv field").suspend();
755      CTimer::get("XIOS").suspend();
756   }
757
758   void cxios_read_data_k82(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize)
759   {
760      std::string fieldid_str;
761      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
762
763      CTimer::get("XIOS").resume();
764      CTimer::get("XIOS recv field").resume();
765
766      CContext* context = CContext::getCurrent();
767      if (!context->hasServer && !context->client->isAttachedModeEnabled())
768        context->checkBuffersAndListen();
769
770      CArray<double, 2>data(data_k8, shape(data_Xsize, data_Ysize), neverDeleteData);
771      CField::get(fieldid_str)->getData(data);
772
773      CTimer::get("XIOS recv field").suspend();
774      CTimer::get("XIOS").suspend();
775   }
776
777   void cxios_read_data_k83(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize)
778   {
779      std::string fieldid_str;
780      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
781
782      CTimer::get("XIOS").resume();
783      CTimer::get("XIOS recv field").resume();
784
785      CContext* context = CContext::getCurrent();
786      if (!context->hasServer && !context->client->isAttachedModeEnabled())
787        context->checkBuffersAndListen();
788
789      CArray<double, 3>data(data_k8, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData);
790      CField::get(fieldid_str)->getData(data);
791
792      CTimer::get("XIOS recv field").suspend();
793      CTimer::get("XIOS").suspend();
794   }
795
796   void cxios_read_data_k84(const char* fieldid, int fieldid_size, double* data_k8,
797                            int data_0size, int data_1size, int data_2size,
798                            int data_3size)
799   {
800      std::string fieldid_str;
801      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
802
803      CTimer::get("XIOS").resume();
804      CTimer::get("XIOS recv field").resume();
805
806      CContext* context = CContext::getCurrent();
807      if (!context->hasServer && !context->client->isAttachedModeEnabled())
808        context->checkBuffersAndListen();
809
810      CArray<double, 4>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData);
811      CField::get(fieldid_str)->getData(data);
812
813      CTimer::get("XIOS recv field").suspend();
814      CTimer::get("XIOS").suspend();
815   }
816
817   void cxios_read_data_k85(const char* fieldid, int fieldid_size, double* data_k8,
818                            int data_0size, int data_1size, int data_2size,
819                            int data_3size, int data_4size)
820   {
821      std::string fieldid_str;
822      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
823
824      CTimer::get("XIOS").resume();
825      CTimer::get("XIOS recv field").resume();
826
827      CContext* context = CContext::getCurrent();
828      if (!context->hasServer && !context->client->isAttachedModeEnabled())
829        context->checkBuffersAndListen();
830
831      CArray<double, 5>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData);
832      CField::get(fieldid_str)->getData(data);
833
834      CTimer::get("XIOS recv field").suspend();
835      CTimer::get("XIOS").suspend();
836   }
837
838   void cxios_read_data_k86(const char* fieldid, int fieldid_size, double* data_k8,
839                            int data_0size, int data_1size, int data_2size,
840                            int data_3size, int data_4size, int data_5size)
841   {
842      std::string fieldid_str;
843      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
844
845      CTimer::get("XIOS").resume();
846      CTimer::get("XIOS recv field").resume();
847
848      CContext* context = CContext::getCurrent();
849      if (!context->hasServer && !context->client->isAttachedModeEnabled())
850        context->checkBuffersAndListen();
851
852      CArray<double, 6>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData);
853      CField::get(fieldid_str)->getData(data);
854
855      CTimer::get("XIOS recv field").suspend();
856      CTimer::get("XIOS").suspend();
857   }
858
859   void cxios_read_data_k87(const char* fieldid, int fieldid_size, double* data_k8,
860                            int data_0size, int data_1size, int data_2size,
861                            int data_3size, int data_4size, int data_5size,
862                            int data_6size)
863   {
864      std::string fieldid_str;
865      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
866
867      CTimer::get("XIOS").resume();
868      CTimer::get("XIOS recv field").resume();
869
870      CContext* context = CContext::getCurrent();
871      if (!context->hasServer && !context->client->isAttachedModeEnabled())
872        context->checkBuffersAndListen();
873
874      CArray<double, 7>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData);
875      CField::get(fieldid_str)->getData(data);
876
877      CTimer::get("XIOS recv field").suspend();
878      CTimer::get("XIOS").suspend();
879   }
880
881   void cxios_read_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
882   {
883      std::string fieldid_str;
884      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
885
886      CTimer::get("XIOS").resume();
887      CTimer::get("XIOS recv field").resume();
888
889      CContext* context = CContext::getCurrent();
890      if (!context->hasServer && !context->client->isAttachedModeEnabled())
891        context->checkBuffersAndListen();
892
893      CArray<double, 1> data(data_Xsize);
894      CField::get(fieldid_str)->getData(data);
895      CArray<float, 1> data_tmp(data_k4, shape(data_Xsize), neverDeleteData);
896      data_tmp = data;
897
898      CTimer::get("XIOS recv field").suspend();
899      CTimer::get("XIOS").suspend();
900   }
901
902   void cxios_read_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
903   {
904      std::string fieldid_str;
905      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
906
907      CTimer::get("XIOS").resume();
908      CTimer::get("XIOS recv field").resume();
909
910      CContext* context = CContext::getCurrent();
911      if (!context->hasServer && !context->client->isAttachedModeEnabled())
912        context->checkBuffersAndListen();
913
914      CArray<double, 1> data(data_Xsize);
915      CField::get(fieldid_str)->getData(data);
916      CArray<float, 1> data_tmp(data_k4, shape(data_Xsize), neverDeleteData);
917      data_tmp = data;
918
919      CTimer::get("XIOS recv field").suspend();
920      CTimer::get("XIOS").suspend();
921   }
922
923   void cxios_read_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize)
924   {
925      std::string fieldid_str;
926      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
927
928      CTimer::get("XIOS").resume();
929      CTimer::get("XIOS recv field").resume();
930
931      CContext* context = CContext::getCurrent();
932      if (!context->hasServer && !context->client->isAttachedModeEnabled())
933        context->checkBuffersAndListen();
934
935      CArray<double, 2> data(data_Xsize, data_Ysize);
936      CField::get(fieldid_str)->getData(data);
937      CArray<float, 2> data_tmp(data_k4, shape(data_Xsize, data_Ysize), neverDeleteData);
938      data_tmp = data;
939
940      CTimer::get("XIOS recv field").suspend();
941      CTimer::get("XIOS").suspend();
942   }
943
944   void cxios_read_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
945   {
946      std::string fieldid_str;
947      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
948
949      CTimer::get("XIOS").resume();
950      CTimer::get("XIOS recv field").resume();
951
952      CContext* context = CContext::getCurrent();
953      if (!context->hasServer && !context->client->isAttachedModeEnabled())
954        context->checkBuffersAndListen();
955
956      CArray<double, 3> data(data_Xsize, data_Ysize, data_Zsize);
957      CField::get(fieldid_str)->getData(data);
958      CArray<float, 3> data_tmp(data_k4, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData);
959      data_tmp = data;
960
961      CTimer::get("XIOS recv field").suspend();
962      CTimer::get("XIOS").suspend();
963    }
964
965   void cxios_read_data_k44(const char* fieldid, int fieldid_size, float* data_k4,
966                            int data_0size, int data_1size, int data_2size,
967                            int data_3size)
968   {
969      std::string fieldid_str;
970      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
971
972      CTimer::get("XIOS").resume();
973      CTimer::get("XIOS recv field").resume();
974
975      CContext* context = CContext::getCurrent();
976      if (!context->hasServer && !context->client->isAttachedModeEnabled())
977        context->checkBuffersAndListen();
978
979      CArray<double, 4> data(data_0size, data_1size, data_2size, data_3size);
980      CField::get(fieldid_str)->getData(data);
981      CArray<float, 4> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData);
982      data_tmp = data;
983
984      CTimer::get("XIOS recv field").suspend();
985      CTimer::get("XIOS").suspend();
986    }
987
988   void cxios_read_data_k45(const char* fieldid, int fieldid_size, float* data_k4,
989                            int data_0size, int data_1size, int data_2size,
990                            int data_3size, int data_4size)
991   {
992      std::string fieldid_str;
993      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
994
995      CTimer::get("XIOS").resume();
996      CTimer::get("XIOS recv field").resume();
997
998      CContext* context = CContext::getCurrent();
999      if (!context->hasServer && !context->client->isAttachedModeEnabled())
1000        context->checkBuffersAndListen();
1001
1002      CArray<double, 5> data(data_0size, data_1size, data_2size, data_3size, data_4size);
1003      CField::get(fieldid_str)->getData(data);
1004      CArray<float, 5> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData);
1005      data_tmp = data;
1006
1007      CTimer::get("XIOS recv field").suspend();
1008      CTimer::get("XIOS").suspend();
1009    }
1010
1011   void cxios_read_data_k46(const char* fieldid, int fieldid_size, float* data_k4,
1012                            int data_0size, int data_1size, int data_2size,
1013                            int data_3size, int data_4size, int data_5size)
1014   {
1015      std::string fieldid_str;
1016      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
1017
1018      CTimer::get("XIOS").resume();
1019      CTimer::get("XIOS recv field").resume();
1020
1021      CContext* context = CContext::getCurrent();
1022      if (!context->hasServer && !context->client->isAttachedModeEnabled())
1023        context->checkBuffersAndListen();
1024
1025      CArray<double, 6> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size);
1026      CField::get(fieldid_str)->getData(data);
1027      CArray<float, 6> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData);
1028      data_tmp = data;
1029
1030      CTimer::get("XIOS recv field").suspend();
1031      CTimer::get("XIOS").suspend();
1032    }
1033
1034   void cxios_read_data_k47(const char* fieldid, int fieldid_size, float* data_k4,
1035                            int data_0size, int data_1size, int data_2size,
1036                            int data_3size, int data_4size, int data_5size,
1037                            int data_6size)
1038   {
1039      std::string fieldid_str;
1040      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
1041
1042      CTimer::get("XIOS").resume();
1043      CTimer::get("XIOS recv field").resume();
1044
1045      CContext* context = CContext::getCurrent();
1046      if (!context->hasServer && !context->client->isAttachedModeEnabled())
1047        context->checkBuffersAndListen();
1048
1049      CArray<double, 7> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size);
1050      CField::get(fieldid_str)->getData(data);
1051      CArray<float, 7> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData);
1052      data_tmp = data;
1053
1054      CTimer::get("XIOS recv field").suspend();
1055      CTimer::get("XIOS").suspend();
1056    }
1057} // extern "C"
Note: See TracBrowser for help on using the repository browser.