source: XMLIO_V2/dev/common/src/xmlio/fortran/icdomain.cpp @ 286

Last change on this file since 286 was 286, checked in by ymipsl, 13 years ago

reprise en main de la version de H. Ozdoba. Correction de différentes erreurs de conception et bug.
Version NEMO operationnel en client/server, interoperabilita avec OASIS, reconstition de fichiers via netcdf4/HDF5

YM

File size: 14.2 KB
Line 
1/* ************************************************************************** *
2 *      Copyright © IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
3 * ************************************************************************** */
4
5#include <boost/multi_array.hpp>
6#include <boost/shared_ptr.hpp>
7
8#include "xmlioserver.hpp"
9
10#include "attribute_template_impl.hpp"
11#include "object_template_impl.hpp"
12#include "group_template_impl.hpp"
13
14#include "icutil.hpp"
15
16extern "C"
17{
18// /////////////////////////////// Définitions ////////////////////////////// //
19
20   // ----------------------- Redéfinition de types ----------------------------
21
22   typedef xmlioserver::tree::CDomain      * XDomainPtr;
23   typedef xmlioserver::tree::CDomainGroup * XDomainGroupPtr;
24
25   // ------------------------- Attributs des axes -----------------------------
26   
27   void cxios_set_domain_name(XDomainPtr domain_hdl, const char * name, int name_size)
28   {
29      std::string name_str; 
30      if (!cstr2string(name, name_size, name_str)) return;
31
32      domain_hdl->name.setValue(name_str);
33   }
34   
35   void cxios_set_domain_standard_name(XDomainPtr domain_hdl, const char * standard_name, int standard_name_size)
36   {
37      std::string standard_name_str; 
38      if (!cstr2string(standard_name, standard_name_size, standard_name_str)) return;
39
40      domain_hdl->standard_name.setValue(standard_name_str);
41   }
42   
43   void cxios_set_domain_long_name(XDomainPtr domain_hdl, const char * long_name, int long_name_size)
44   {
45      std::string long_name_str; 
46      if (!cstr2string(long_name, long_name_size, long_name_str)) return;
47
48      domain_hdl->long_name.setValue(long_name_str);
49   }
50   
51   void cxios_set_domain_domain_group_ref(XDomainPtr domain_hdl, const char * domain_group_ref, int domain_group_ref_size)
52   {
53      std::string domain_group_ref_str; 
54      if (!cstr2string(domain_group_ref, domain_group_ref_size, domain_group_ref_str)) return;
55
56      domain_hdl->domain_group_ref.setValue(domain_group_ref_str);
57   }
58   
59   void cxios_set_domain_ni_glo(XDomainPtr domain_hdl, int ni_glo)
60   {
61      domain_hdl->ni_glo.setValue(ni_glo);
62   }
63   
64   void cxios_set_domain_nj_glo(XDomainPtr domain_hdl, int nj_glo)
65   {
66      domain_hdl->nj_glo.setValue(nj_glo);
67   }
68   
69   void cxios_set_domain_ibegin(XDomainPtr domain_hdl, int ibegin)
70   {
71      domain_hdl->ibegin.setValue(ibegin);
72   }
73   
74   void cxios_set_domain_iend(XDomainPtr domain_hdl, int iend)
75   {
76      domain_hdl->iend.setValue(iend);
77   }
78   
79   void cxios_set_domain_ni(XDomainPtr domain_hdl, int ni)
80   {
81      domain_hdl->ni.setValue(ni);
82   }
83   
84   void cxios_set_domain_jbegin(XDomainPtr domain_hdl, int jbegin)
85   {
86      domain_hdl->jbegin.setValue(jbegin);
87   }
88   
89   void cxios_set_domain_jend(XDomainPtr domain_hdl, int jend)
90   {
91      domain_hdl->jend.setValue(jend);
92   }
93   
94   void cxios_set_domain_nj(XDomainPtr domain_hdl, int nj)
95   {
96      domain_hdl->nj.setValue(nj);
97   }
98   
99   void cxios_set_domain_mask(XDomainPtr domain_hdl, bool * mask, int mask_extent1, int mask_extent2)
100   {
101      ARRAY(bool, 2) mask_val(new CArray<bool, 2>(boost::extents [mask_extent1][mask_extent2]));
102      std::copy(mask, &(mask[mask_val->num_elements()]), mask_val->data());
103
104      domain_hdl->mask.setValue(mask_val);
105   }
106   
107   void cxios_set_domain_data_dim(XDomainPtr domain_hdl, int data_dim)
108   {
109      domain_hdl->data_dim.setValue(data_dim);
110   }
111   
112   void cxios_set_domain_data_ni(XDomainPtr domain_hdl, int data_ni)
113   {
114      domain_hdl->data_ni.setValue(data_ni);
115   }
116   
117   void cxios_set_domain_data_nj(XDomainPtr domain_hdl, int data_nj)
118   {
119      domain_hdl->data_nj.setValue(data_nj);
120   }
121   
122   void cxios_set_domain_data_ibegin(XDomainPtr domain_hdl, int data_ibegin)
123   {
124      domain_hdl->data_ibegin.setValue(data_ibegin);
125   }
126   
127   void cxios_set_domain_data_jbegin(XDomainPtr domain_hdl, int data_jbegin)
128   {
129      domain_hdl->data_jbegin.setValue(data_jbegin);
130   }
131   
132   void cxios_set_domain_zoom_ni(XDomainPtr domain_hdl, int zoom_ni)
133   {
134      domain_hdl->zoom_ni.setValue(zoom_ni);
135   }
136   
137   void cxios_set_domain_zoom_nj(XDomainPtr domain_hdl, int zoom_nj)
138   {
139      domain_hdl->zoom_nj.setValue(zoom_nj);
140   }
141   
142   void cxios_set_domain_zoom_ibegin(XDomainPtr domain_hdl, int zoom_ibegin)
143   {
144      domain_hdl->zoom_ibegin.setValue(zoom_ibegin);
145   }
146   
147   void cxios_set_domain_zoom_jbegin(XDomainPtr domain_hdl, int zoom_jbegin)
148   {
149      domain_hdl->zoom_jbegin.setValue(zoom_jbegin);
150   }
151   
152   void cxios_set_domain_zoom_ni_loc(XDomainPtr domain_hdl, int zoom_ni_loc)
153   {
154      domain_hdl->zoom_ni_loc.setValue(zoom_ni_loc);
155   }
156   
157   void cxios_set_domain_zoom_nj_loc(XDomainPtr domain_hdl, int zoom_nj_loc)
158   {
159      domain_hdl->zoom_nj_loc.setValue(zoom_nj_loc);
160   }
161   
162   void cxios_set_domain_zoom_ibegin_loc(XDomainPtr domain_hdl, int zoom_ibegin_loc)
163   {
164      domain_hdl->zoom_ibegin_loc.setValue(zoom_ibegin_loc);
165   }
166   
167   void cxios_set_domain_zoom_jbegin_loc(XDomainPtr domain_hdl, int zoom_jbegin_loc)
168   {
169      domain_hdl->zoom_jbegin_loc.setValue(zoom_jbegin_loc);
170   }
171   
172   void cxios_set_domain_data_n_index(XDomainPtr domain_hdl, int data_n_index)
173   {
174      domain_hdl->data_n_index.setValue(data_n_index);
175   }
176   
177   void cxios_set_domain_data_i_index(XDomainPtr domain_hdl, int * data_i_index, int data_i_index_extent1)
178   {
179      ARRAY(int, 1) data_i_index_val(new CArray<int, 1>(boost::extents [data_i_index_extent1]));
180      std::copy(data_i_index, &(data_i_index[data_i_index_val->num_elements()]), data_i_index_val->data());
181
182      domain_hdl->data_i_index.setValue(data_i_index_val);
183   }
184   
185   void cxios_set_domain_data_j_index(XDomainPtr domain_hdl, int * data_j_index, int data_j_index_extent1)
186   {
187      ARRAY(int, 1) data_j_index_val(new CArray<int, 1>(boost::extents [data_j_index_extent1]));
188      std::copy(data_j_index, &(data_j_index[data_j_index_val->num_elements()]), data_j_index_val->data());
189
190      domain_hdl->data_j_index.setValue(data_j_index_val);
191   }
192   
193   void cxios_set_domain_lonvalue(XDomainPtr domain_hdl, double * lonvalue, int lonvalue_extent1)
194   {
195      ARRAY(double, 1) lonvalue_val(new CArray<double, 1>(boost::extents [lonvalue_extent1]));
196      std::copy(lonvalue, &(lonvalue[lonvalue_val->num_elements()]), lonvalue_val->data());
197
198      domain_hdl->lonvalue.setValue(lonvalue_val);
199   }
200   
201   void cxios_set_domain_latvalue(XDomainPtr domain_hdl, double * latvalue, int latvalue_extent1)
202   {
203      ARRAY(double, 1) latvalue_val(new CArray<double, 1>(boost::extents [latvalue_extent1]));
204      std::copy(latvalue, &(latvalue[latvalue_val->num_elements()]), latvalue_val->data());
205
206      domain_hdl->latvalue.setValue(latvalue_val);
207   }   
208   
209   // -------------------- Attributs des groupes d'axes ------------------------
210   
211   
212   void cxios_set_domaingroup_name(XDomainGroupPtr domaingroup_hdl, const char * name, int name_size)
213   {
214      std::string name_str; 
215      if (!cstr2string(name, name_size, name_str)) return;
216
217      domaingroup_hdl->name.setValue(name_str);
218   }
219   
220   void cxios_set_domaingroup_standard_name(XDomainGroupPtr domaingroup_hdl, const char * standard_name, int standard_name_size)
221   {
222      std::string standard_name_str; 
223      if (!cstr2string(standard_name, standard_name_size, standard_name_str)) return;
224
225      domaingroup_hdl->standard_name.setValue(standard_name_str);
226   }
227   
228   void cxios_set_domaingroup_long_name(XDomainGroupPtr domaingroup_hdl, const char * long_name, int long_name_size)
229   {
230      std::string long_name_str; 
231      if (!cstr2string(long_name, long_name_size, long_name_str)) return;
232
233      domaingroup_hdl->long_name.setValue(long_name_str);
234   }
235   
236   void cxios_set_domaingroup_domain_group_ref(XDomainGroupPtr domaingroup_hdl, const char * domain_group_ref, int domain_group_ref_size)
237   {
238      std::string domain_group_ref_str; 
239      if (!cstr2string(domain_group_ref, domain_group_ref_size, domain_group_ref_str)) return;
240
241      domaingroup_hdl->domain_group_ref.setValue(domain_group_ref_str);
242   }
243   
244   void cxios_set_domaingroup_ni_glo(XDomainGroupPtr domaingroup_hdl, int ni_glo)
245   {
246      domaingroup_hdl->ni_glo.setValue(ni_glo);
247   }
248   
249   void cxios_set_domaingroup_nj_glo(XDomainGroupPtr domaingroup_hdl, int nj_glo)
250   {
251      domaingroup_hdl->nj_glo.setValue(nj_glo);
252   }
253   
254   void cxios_set_domaingroup_ibegin(XDomainGroupPtr domaingroup_hdl, int ibegin)
255   {
256      domaingroup_hdl->ibegin.setValue(ibegin);
257   }
258   
259   void cxios_set_domaingroup_iend(XDomainGroupPtr domaingroup_hdl, int iend)
260   {
261      domaingroup_hdl->iend.setValue(iend);
262   }
263   
264   void cxios_set_domaingroup_ni(XDomainGroupPtr domaingroup_hdl, int ni)
265   {
266      domaingroup_hdl->ni.setValue(ni);
267   }
268   
269   void cxios_set_domaingroup_jbegin(XDomainGroupPtr domaingroup_hdl, int jbegin)
270   {
271      domaingroup_hdl->jbegin.setValue(jbegin);
272   }
273   
274   void cxios_set_domaingroup_jend(XDomainGroupPtr domaingroup_hdl, int jend)
275   {
276      domaingroup_hdl->jend.setValue(jend);
277   }
278   
279   void cxios_set_domaingroup_nj(XDomainGroupPtr domaingroup_hdl, int nj)
280   {
281      domaingroup_hdl->nj.setValue(nj);
282   }
283   
284   void cxios_set_domaingroup_mask(XDomainGroupPtr domaingroup_hdl, bool * mask, int mask_extent1, int mask_extent2)
285   {
286      ARRAY(bool, 2) mask_val(new CArray<bool, 2>(boost::extents [mask_extent1][mask_extent2]));
287      std::copy(mask, &(mask[mask_val->num_elements()]), mask_val->data());
288
289      domaingroup_hdl->mask.setValue(mask_val);
290   }
291   
292   void cxios_set_domaingroup_data_dim(XDomainGroupPtr domaingroup_hdl, int data_dim)
293   {
294      domaingroup_hdl->data_dim.setValue(data_dim);
295   }
296   
297   void cxios_set_domaingroup_data_ni(XDomainGroupPtr domaingroup_hdl, int data_ni)
298   {
299      domaingroup_hdl->data_ni.setValue(data_ni);
300   }
301   
302   void cxios_set_domaingroup_data_nj(XDomainGroupPtr domaingroup_hdl, int data_nj)
303   {
304      domaingroup_hdl->data_nj.setValue(data_nj);
305   }
306   
307   void cxios_set_domaingroup_data_ibegin(XDomainGroupPtr domaingroup_hdl, int data_ibegin)
308   {
309      domaingroup_hdl->data_ibegin.setValue(data_ibegin);
310   }
311   
312   void cxios_set_domaingroup_data_jbegin(XDomainGroupPtr domaingroup_hdl, int data_jbegin)
313   {
314      domaingroup_hdl->data_jbegin.setValue(data_jbegin);
315   }
316   
317   void cxios_set_domaingroup_zoom_ni(XDomainGroupPtr domaingroup_hdl, int zoom_ni)
318   {
319      domaingroup_hdl->zoom_ni.setValue(zoom_ni);
320   }
321   
322   void cxios_set_domaingroup_zoom_nj(XDomainGroupPtr domaingroup_hdl, int zoom_nj)
323   {
324      domaingroup_hdl->zoom_nj.setValue(zoom_nj);
325   }
326   
327   void cxios_set_domaingroup_zoom_ibegin(XDomainGroupPtr domaingroup_hdl, int zoom_ibegin)
328   {
329      domaingroup_hdl->zoom_ibegin.setValue(zoom_ibegin);
330   }
331   
332   void cxios_set_domaingroup_zoom_jbegin(XDomainGroupPtr domaingroup_hdl, int zoom_jbegin)
333   {
334      domaingroup_hdl->zoom_jbegin.setValue(zoom_jbegin);
335   }
336   
337   void cxios_set_domaingroup_zoom_ni_loc(XDomainGroupPtr domaingroup_hdl, int zoom_ni_loc)
338   {
339      domaingroup_hdl->zoom_ni_loc.setValue(zoom_ni_loc);
340   }
341   
342   void cxios_set_domaingroup_zoom_nj_loc(XDomainGroupPtr domaingroup_hdl, int zoom_nj_loc)
343   {
344      domaingroup_hdl->zoom_nj_loc.setValue(zoom_nj_loc);
345   }
346   
347   void cxios_set_domaingroup_zoom_ibegin_loc(XDomainGroupPtr domaingroup_hdl, int zoom_ibegin_loc)
348   {
349      domaingroup_hdl->zoom_ibegin_loc.setValue(zoom_ibegin_loc);
350   }
351   
352   void cxios_set_domaingroup_zoom_jbegin_loc(XDomainGroupPtr domaingroup_hdl, int zoom_jbegin_loc)
353   {
354      domaingroup_hdl->zoom_jbegin_loc.setValue(zoom_jbegin_loc);
355   }
356   
357   void cxios_set_domaingroup_data_n_index(XDomainGroupPtr domaingroup_hdl, int data_n_index)
358   {
359      domaingroup_hdl->data_n_index.setValue(data_n_index);
360   }
361   
362   void cxios_set_domaingroup_data_i_index(XDomainGroupPtr domaingroup_hdl, int * data_i_index, int data_i_index_extent1)
363   {
364      ARRAY(int, 1) data_i_index_val(new CArray<int, 1>(boost::extents [data_i_index_extent1]));
365      std::copy(data_i_index, &(data_i_index[data_i_index_val->num_elements()]), data_i_index_val->data());
366
367      domaingroup_hdl->data_i_index.setValue(data_i_index_val);
368   }
369   
370   void cxios_set_domaingroup_data_j_index(XDomainGroupPtr domaingroup_hdl, int * data_j_index, int data_j_index_extent1)
371   {
372      ARRAY(int, 1) data_j_index_val(new CArray<int, 1>(boost::extents [data_j_index_extent1]));
373      std::copy(data_j_index, &(data_j_index[data_j_index_val->num_elements()]), data_j_index_val->data());
374
375      domaingroup_hdl->data_j_index.setValue(data_j_index_val);
376   }
377   
378   void cxios_set_domaingroup_lonvalue(XDomainGroupPtr domaingroup_hdl, double * lonvalue, int lonvalue_extent1)
379   {
380      ARRAY(double, 1) lonvalue_val(new CArray<double, 1>(boost::extents [lonvalue_extent1]));
381      std::copy(lonvalue, &(lonvalue[lonvalue_val->num_elements()]), lonvalue_val->data());
382
383      domaingroup_hdl->lonvalue.setValue(lonvalue_val);
384   }
385   
386   void cxios_set_domaingroup_latvalue(XDomainGroupPtr domaingroup_hdl, double * latvalue, int latvalue_extent1)
387   {
388      ARRAY(double, 1) latvalue_val(new CArray<double, 1>(boost::extents [latvalue_extent1]));
389      std::copy(latvalue, &(latvalue[latvalue_val->num_elements()]), latvalue_val->data());
390
391      domaingroup_hdl->latvalue.setValue(latvalue_val);
392   } 
393   
394   // ------------------------ Création des handle -----------------------------
395   
396   void cxios_domain_handle_create (XDomainPtr * _ret, const char * _id, int _id_len)
397   {
398      std::string id; 
399      if (!cstr2string(_id, _id_len, id)) return;
400
401      *_ret = xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CDomain>(id).get();
402   }
403   
404   void cxios_domaingroup_handle_create (XDomainGroupPtr * _ret, const char * _id, int _id_len)
405   {
406      std::string id; 
407      if (!cstr2string(_id, _id_len, id)) return;
408
409      *_ret = xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CDomainGroup>(id).get();
410   }
411
412   // -------------------- Vérification des identifiants -----------------------
413
414   void cxios_domain_valid_id (bool * _ret, const char * _id, int _id_len)
415   {
416      std::string id;
417      if (!cstr2string(_id, _id_len, id)) return;
418
419      *_ret = xmlioserver::CObjectFactory::HasObject<xmlioserver::tree::CDomain>(id);
420   }
421
422   void cxios_domaingroup_valid_id (bool * _ret, const char * _id, int _id_len)
423   {
424      std::string id;
425      if (!cstr2string(_id, _id_len, id)) return;
426
427      *_ret = xmlioserver::CObjectFactory::HasObject<xmlioserver::tree::CDomainGroup>(id);
428   }
429} // extern "C"
Note: See TracBrowser for help on using the repository browser.