source: XMLIO_V2/dev/dev_rv/src/xmlio/fortran/icdomain.cpp @ 285

Last change on this file since 285 was 285, checked in by hozdoba, 13 years ago
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 xios_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 xios_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 xios_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 xios_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 xios_set_domain_ni_glo(XDomainPtr domain_hdl, int ni_glo)
60   {
61      domain_hdl->ni_glo.setValue(ni_glo);
62   }
63   
64   void xios_set_domain_nj_glo(XDomainPtr domain_hdl, int nj_glo)
65   {
66      domain_hdl->nj_glo.setValue(nj_glo);
67   }
68   
69   void xios_set_domain_ibegin(XDomainPtr domain_hdl, int ibegin)
70   {
71      domain_hdl->ibegin.setValue(ibegin);
72   }
73   
74   void xios_set_domain_iend(XDomainPtr domain_hdl, int iend)
75   {
76      domain_hdl->iend.setValue(iend);
77   }
78   
79   void xios_set_domain_ni(XDomainPtr domain_hdl, int ni)
80   {
81      domain_hdl->ni.setValue(ni);
82   }
83   
84   void xios_set_domain_jbegin(XDomainPtr domain_hdl, int jbegin)
85   {
86      domain_hdl->jbegin.setValue(jbegin);
87   }
88   
89   void xios_set_domain_jend(XDomainPtr domain_hdl, int jend)
90   {
91      domain_hdl->jend.setValue(jend);
92   }
93   
94   void xios_set_domain_nj(XDomainPtr domain_hdl, int nj)
95   {
96      domain_hdl->nj.setValue(nj);
97   }
98   
99   void xios_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 xios_set_domain_data_dim(XDomainPtr domain_hdl, int data_dim)
108   {
109      domain_hdl->data_dim.setValue(data_dim);
110   }
111   
112   void xios_set_domain_data_ni(XDomainPtr domain_hdl, int data_ni)
113   {
114      domain_hdl->data_ni.setValue(data_ni);
115   }
116   
117   void xios_set_domain_data_nj(XDomainPtr domain_hdl, int data_nj)
118   {
119      domain_hdl->data_nj.setValue(data_nj);
120   }
121   
122   void xios_set_domain_data_ibegin(XDomainPtr domain_hdl, int data_ibegin)
123   {
124      domain_hdl->data_ibegin.setValue(data_ibegin);
125   }
126   
127   void xios_set_domain_data_jbegin(XDomainPtr domain_hdl, int data_jbegin)
128   {
129      domain_hdl->data_jbegin.setValue(data_jbegin);
130   }
131   
132   void xios_set_domain_zoom_ni(XDomainPtr domain_hdl, int zoom_ni)
133   {
134      domain_hdl->zoom_ni.setValue(zoom_ni);
135   }
136   
137   void xios_set_domain_zoom_nj(XDomainPtr domain_hdl, int zoom_nj)
138   {
139      domain_hdl->zoom_nj.setValue(zoom_nj);
140   }
141   
142   void xios_set_domain_zoom_ibegin(XDomainPtr domain_hdl, int zoom_ibegin)
143   {
144      domain_hdl->zoom_ibegin.setValue(zoom_ibegin);
145   }
146   
147   void xios_set_domain_zoom_jbegin(XDomainPtr domain_hdl, int zoom_jbegin)
148   {
149      domain_hdl->zoom_jbegin.setValue(zoom_jbegin);
150   }
151   
152   void xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_set_domaingroup_ni_glo(XDomainGroupPtr domaingroup_hdl, int ni_glo)
245   {
246      domaingroup_hdl->ni_glo.setValue(ni_glo);
247   }
248   
249   void xios_set_domaingroup_nj_glo(XDomainGroupPtr domaingroup_hdl, int nj_glo)
250   {
251      domaingroup_hdl->nj_glo.setValue(nj_glo);
252   }
253   
254   void xios_set_domaingroup_ibegin(XDomainGroupPtr domaingroup_hdl, int ibegin)
255   {
256      domaingroup_hdl->ibegin.setValue(ibegin);
257   }
258   
259   void xios_set_domaingroup_iend(XDomainGroupPtr domaingroup_hdl, int iend)
260   {
261      domaingroup_hdl->iend.setValue(iend);
262   }
263   
264   void xios_set_domaingroup_ni(XDomainGroupPtr domaingroup_hdl, int ni)
265   {
266      domaingroup_hdl->ni.setValue(ni);
267   }
268   
269   void xios_set_domaingroup_jbegin(XDomainGroupPtr domaingroup_hdl, int jbegin)
270   {
271      domaingroup_hdl->jbegin.setValue(jbegin);
272   }
273   
274   void xios_set_domaingroup_jend(XDomainGroupPtr domaingroup_hdl, int jend)
275   {
276      domaingroup_hdl->jend.setValue(jend);
277   }
278   
279   void xios_set_domaingroup_nj(XDomainGroupPtr domaingroup_hdl, int nj)
280   {
281      domaingroup_hdl->nj.setValue(nj);
282   }
283   
284   void xios_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 xios_set_domaingroup_data_dim(XDomainGroupPtr domaingroup_hdl, int data_dim)
293   {
294      domaingroup_hdl->data_dim.setValue(data_dim);
295   }
296   
297   void xios_set_domaingroup_data_ni(XDomainGroupPtr domaingroup_hdl, int data_ni)
298   {
299      domaingroup_hdl->data_ni.setValue(data_ni);
300   }
301   
302   void xios_set_domaingroup_data_nj(XDomainGroupPtr domaingroup_hdl, int data_nj)
303   {
304      domaingroup_hdl->data_nj.setValue(data_nj);
305   }
306   
307   void xios_set_domaingroup_data_ibegin(XDomainGroupPtr domaingroup_hdl, int data_ibegin)
308   {
309      domaingroup_hdl->data_ibegin.setValue(data_ibegin);
310   }
311   
312   void xios_set_domaingroup_data_jbegin(XDomainGroupPtr domaingroup_hdl, int data_jbegin)
313   {
314      domaingroup_hdl->data_jbegin.setValue(data_jbegin);
315   }
316   
317   void xios_set_domaingroup_zoom_ni(XDomainGroupPtr domaingroup_hdl, int zoom_ni)
318   {
319      domaingroup_hdl->zoom_ni.setValue(zoom_ni);
320   }
321   
322   void xios_set_domaingroup_zoom_nj(XDomainGroupPtr domaingroup_hdl, int zoom_nj)
323   {
324      domaingroup_hdl->zoom_nj.setValue(zoom_nj);
325   }
326   
327   void xios_set_domaingroup_zoom_ibegin(XDomainGroupPtr domaingroup_hdl, int zoom_ibegin)
328   {
329      domaingroup_hdl->zoom_ibegin.setValue(zoom_ibegin);
330   }
331   
332   void xios_set_domaingroup_zoom_jbegin(XDomainGroupPtr domaingroup_hdl, int zoom_jbegin)
333   {
334      domaingroup_hdl->zoom_jbegin.setValue(zoom_jbegin);
335   }
336   
337   void xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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 xios_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.