source: XMLIO_V2/dev/dev_rv/src/xmlio/fake_client/fake_nemo.f90 @ 187

Last change on this file since 187 was 187, checked in by hozdoba, 12 years ago
File size: 22.4 KB
Line 
1! --------------------------------------------------- !
2!          XMLIO SERVER MAIN TEST (NEMO)              !
3! --------------------------------------------------- !
4
5MODULE NEMO_FAKE
6
7   ! Modules de la bibliothÚque xmlioserver
8   USE IXMLIOSERVER
9   USE ISO_C_BINDING
10
11include 'mpif.h'
12
13   CONTAINS
14
15   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16
17   SUBROUTINE NEMO_FAKE_ENTRY(comm_client, comm_client_grp, comm_client_server) BIND(C)
18      INTEGER(kind = C_INT), INTENT(IN), VALUE :: comm_client,       & ! communicateur des clients
19                                                  comm_client_grp,   & ! communicateur du groupe de clients
20                                                  comm_client_server   ! communicateur client-serveur
21      REAL(kind = 8), DIMENSION(10000)  :: real_array
22      INTEGER                           :: rankGrp, sizeGrp, error, i
23      INTEGER                           :: ibegin, iend, jbegin, jend, data_ni, data_ibegin, ni_glo, nj_glo
24      TYPE(XDate)                       :: init_date_nemo  = XDate(1985, 03, 15, 17, 35, 00)
25      TYPE(XHandle)                     :: nemo_style_ctxt = NULLHANDLE
26      TYPE(XHandle)                     :: temp_mod    = NULLHANDLE, &
27                                           temp_mod_   = NULLHANDLE, &
28                                           temp_mod__  = NULLHANDLE, &
29                                           temp_mod___ = NULLHANDLE
30                                           
31      CALL MPI_COMM_RANK(comm_client, rankGrp, error)
32      CALL MPI_COMM_SIZE(comm_client, sizeGrp, error)
33     
34      DO i = 1, 10000
35         real_array(i) = i;
36      END DO
37     
38      IF (rankGrp .EQ. 0) THEN
39          PRINT*," Starting NEMO Client Tests ..."
40      END IF
41
42      ! Parsing du document xml de définition à partir d'une faire de caractÚre.
43      CALL xml_parse_string ("<? xml version=1.0 ?><simulation></simulation>")
44
45      !!!!!!!!!!!!!!!!!!!! EXEMPLE RECONSTRUCTION !!!!!!!!!!!!!!!!!!!!!
46
47      ! On crée un nouveau context et on lui associe un handle.
48      CALL context_create(context_hdl   = nemo_style_ctxt, &
49                          context_id    = "nemo_style",    &
50                          calendar_type = GREGORIAN,       &
51                          init_date     = init_date_nemo)
52
53      ! ---------> field_definition
54      CALL handle_create(temp_mod, GFIELD,  "field_definition")
55
56      ! Ajout d'un groupe de champ anomyme
57      CALL xml_tree_add(parent_hdl  = temp_mod,        &
58                        parent_type = GFIELD,          &
59                        child_hdl   = temp_mod_,       &
60                        child_type  = GFIELD)
61
62      CALL set_field_attributes(field_hdl = temp_mod_, &
63                                ftype     = GFIELD,    &
64                                unit_     = "SI",      &
65                                prec_     = 8)
66
67      CALL xml_tree_add(parent_hdl  = temp_mod_,       &
68                        parent_type = GFIELD,          &
69                        child_hdl   = temp_mod,        &
70                        child_type  = GFIELD,          &
71                        child_id    = "field_enabled")
72
73      CALL set_field_attributes(field_hdl      = temp_mod,     &
74                                ftype          = GFIELD,       &
75                                operation_     = "instant",    &
76                                enabled_       = .TRUE._1,     &
77                                freq_op_       = "1h")
78
79      CALL xml_tree_add(parent_hdl  = temp_mod,        &
80                        parent_type = GFIELD,          &
81                        child_hdl   = temp_mod__,      &
82                        child_type  = EFIELD,          &
83                        child_id    = "champ_2D_k8_inst")
84
85      CALL set_field_attributes(field_hdl      = temp_mod__,   &
86                                ftype          = EFIELD,       &
87                                name_          = "champ1",     &
88                                standard_name_ = "lechamp1",   &
89                                long_name_     = "le champ 1", &
90                                domain_ref_    = "simple_domaine0")
91
92      CALL xml_tree_add(parent_hdl  = temp_mod,        &
93                        parent_type = GFIELD,          &
94                        child_hdl   = temp_mod__,      &
95                        child_type  = EFIELD,          &
96                        child_id    = "champ_2D_k4_once_dis")
97
98      CALL set_field_attributes(field_hdl      = temp_mod__,   &
99                                ftype          = EFIELD,       &
100                                prec_          = 4,            &
101                                operation_     = "once",       &
102                                enabled_       = .FALSE._1,    &
103                                name_          = "champ2",     &
104                                standard_name_ = "lechamp2",   &
105                                long_name_     = "le champ 2", &
106                                domain_ref_    = "simple_domaine1")
107
108      CALL xml_tree_add(parent_hdl  = temp_mod,        &
109                        parent_type = GFIELD,          &
110                        child_hdl   = temp_mod__,      &
111                        child_type  = EFIELD,          &
112                        child_id    = "champ_3D_k4_once")
113
114      CALL set_field_attributes(field_hdl      = temp_mod__,   &
115                                ftype          = EFIELD,       &
116                                prec_          = 4,            &
117                                operation_     = "once",       &
118                                name_          = "champ3",     &
119                                standard_name_ = "lechamp3",   &
120                                long_name_     = "le champ 3", &
121                                grid_ref_   = "simple_grille")
122
123      CALL xml_tree_add(parent_hdl  = temp_mod,        &
124                        parent_type = GFIELD,          &
125                        child_hdl   = temp_mod__,      &
126                        child_type  = EFIELD,          &
127                        child_id    = "champ_3D_k8_average")
128
129      CALL set_field_attributes(field_hdl      = temp_mod__,   &
130                                ftype          = EFIELD,       &
131                                prec_          = 8,            &
132                                operation_     = "average",    &
133                                name_          = "champ4",     &
134                                standard_name_ = "lechamp4",   &
135                                long_name_     = "le champ 4", &
136                                grid_ref_   = "simple_grille")
137                               
138      CALL xml_tree_add(parent_hdl  = temp_mod,        &
139                        parent_type = GFIELD,          &
140                        child_hdl   = temp_mod__,      &
141                        child_type  = EFIELD,          &
142                        child_id    = "champ_3D_k8_average_zoom")
143
144      CALL set_field_attributes(field_hdl      = temp_mod__,   &
145                                ftype          = EFIELD,       &
146                                prec_          = 8,            &
147                                operation_     = "average",    &
148                                name_          = "champ5",     &
149                                standard_name_ = "lechamp5",   &
150                                long_name_     = "le champ 5", &
151                                grid_ref_   = "simple_grille_zoom")
152
153      CALL xml_tree_add(parent_hdl  = temp_mod_,       &
154                        parent_type = GFIELD,          &
155                        child_hdl   = temp_mod,        &
156                        child_type  = GFIELD,          &
157                        child_id    = "field_disabled")
158
159      CALL set_field_attributes(field_hdl  = temp_mod,  &
160                                ftype      = GFIELD,    &
161                                operation_ = "instant", &
162                                enabled_   = .FALSE._1)
163
164      CALL xml_tree_add(parent_hdl  = temp_mod,        &
165                        parent_type = GFIELD,          &
166                        child_hdl   = temp_mod__,      &
167                        child_type  = EFIELD,          &
168                        child_id    = "champ_3D_k8_inst")
169
170      CALL set_field_attributes(field_hdl      = temp_mod__,       &
171                                ftype          = EFIELD,           &
172                                prec_          = 8,                &
173                                name_          = "champ5",         &
174                                standard_name_ = "lechamp5",       &
175                                long_name_     = "le champ 5",     &
176                                domain_ref_    = "simple_domaine", &
177                                axis_ref_      = "simple_axe")
178
179      ! ---------> axis_definition
180     
181      CALL handle_create(temp_mod, GAXIS,  "axis_definition")
182      CALL xml_tree_add(parent_hdl  = temp_mod,   &
183                        parent_type = GAXIS,      &
184                        child_hdl   = temp_mod_,  &
185                        child_type  = GAXIS,      &
186                        child_id    = "all_axis")
187
188      CALL set_axis_attributes(axis_hdl = temp_mod_, &
189                               ftype    = GAXIS,     &
190                               unit_    = "km")
191
192      CALL xml_tree_add(parent_hdl     = temp_mod_,       &
193                        parent_type    = GAXIS,           &
194                        child_hdl      = temp_mod,        &
195                        child_type     = EAXIS,           &
196                        child_id       = "simple_axe")
197
198      CALL set_axis_attributes(axis_hdl       = temp_mod, &
199                               ftype          = EAXIS,    &
200                               name_          = "axe1",   &
201                               standard_name_ = "laxe1",  &
202                               long_name_     = "l axe1", &
203                               size_          = 30,       &
204                               zvalue_        = real_array(1:30))
205
206      ! ---------> domain_definition
207      CALL handle_create(temp_mod, GDOMAIN,  "domain_definition")
208      CALL xml_tree_add(parent_hdl  = temp_mod,   &
209                        parent_type = GDOMAIN,    &
210                        child_hdl   = temp_mod_,  &
211                        child_type  = GDOMAIN,    &
212                        child_id    = "all_domain")
213                       
214      CALL xml_tree_add(parent_hdl  = temp_mod_,   &
215                        parent_type = GDOMAIN,     &
216                        child_hdl   = temp_mod___, &
217                        child_type  = GDOMAIN,     &
218                        child_id    = "simple_domaine_grp")
219
220
221      ni_glo = 100
222      nj_glo = 50
223      IF (rankGrp .EQ. 0) THEN
224         ibegin = 1
225         iend   = 26
226         jbegin = 1
227         jend   = 50
228         data_ni     = 25
229         data_ibegin = 0
230      ELSE IF (rankGrp .EQ. 1) THEN
231         ibegin = 25
232         iend   = 51
233         jbegin = 1
234         jend   = 50
235         data_ni     = 25
236         data_ibegin = 1
237      ELSE IF (rankGrp .EQ. 2) THEN
238         ibegin = 50
239         iend   = 76
240         jbegin = 1
241         jend   = 50
242         data_ni     = 25
243         data_ibegin = 1
244      ELSE IF (rankGrp .EQ. 3) THEN
245         ibegin = 75
246         iend   = 100
247         jbegin = 1
248         jend   = 50
249         data_ni     = 25
250         data_ibegin = 1         
251      END IF
252
253      CALL set_domain_attributes(domain_hdl     = temp_mod___,    &
254                                 ftype          = GDOMAIN,        &
255                                 lonvalue_      = real_array(1:((jend-jbegin+1)*(iend-ibegin+1))), &
256                                 latvalue_      = real_array(1:((jend-jbegin+1)*(iend-ibegin+1))), &
257                                 data_dim_      = 2,              &
258                                 ni_glo_        = ni_glo,         &
259                                 nj_glo_        = nj_glo,         &
260                                 ibegin_        = ibegin,         &
261                                 iend_          = iend,           &
262                                 jbegin_        = jbegin,         &
263                                 jend_          = jend,           &
264                                 data_ni_       = data_ni,        &
265                                 data_ibegin_   = data_ibegin)                       
266
267      CALL xml_tree_add(parent_hdl  = temp_mod___,&
268                        parent_type = GDOMAIN,    &
269                        child_hdl   = temp_mod,   &
270                        child_type  = EDOMAIN,    &
271                        child_id    = "simple_domaine0")
272
273      CALL set_domain_attributes(domain_hdl     = temp_mod,       &
274                                 ftype          = EDOMAIN,        &
275                                 name_          = "domaine0",     &
276                                 standard_name_ = "ledomaine0",   &
277                                 long_name_     = "le domaine 0")
278                                 
279      CALL xml_tree_add(parent_hdl  = temp_mod___,&
280                        parent_type = GDOMAIN,    &
281                        child_hdl   = temp_mod,   &
282                        child_type  = EDOMAIN,    &
283                        child_id    = "simple_domaine0_zoom")
284                       
285      CALL set_domain_attributes(domain_hdl     = temp_mod,           &
286                                 ftype          = EDOMAIN,            &
287                                 name_          = "domaine0zoom",     &
288                                 standard_name_ = "ledomaine0zoom",   &
289                                 long_name_     = "le domaine 0 zoom",&
290                                 zoom_ibegin_   = 21,                 &
291                                 zoom_jbegin_   = 5 ,                 &
292                                 zoom_ni_       = 20,                 &
293                                 zoom_nj_       = 15)
294
295      CALL xml_tree_add(parent_hdl  = temp_mod_,  &
296                        parent_type = GDOMAIN,    &
297                        child_hdl   = temp_mod,   &
298                        child_type  = EDOMAIN,    &
299                        child_id    = "simple_domaine1")
300
301
302      ni_glo = 90
303      nj_glo = 20
304      IF (rankGrp .EQ. 0) THEN
305         ibegin = 1
306         iend   = 90
307         jbegin = 1
308         jend   = 5       
309      ELSE IF (rankGrp .EQ. 1) THEN
310         ibegin = 1
311         iend   = 90
312         jbegin = 6
313         jend   = 10
314      ELSE IF (rankGrp .EQ. 2) THEN
315         ibegin = 1
316         iend   = 90
317         jbegin = 11
318         jend   = 15
319      ELSE IF (rankGrp .EQ. 3) THEN
320         ibegin = 1
321         iend   = 90
322         jbegin = 16
323         jend   = 20
324      END IF
325
326      CALL set_domain_attributes(domain_hdl     = temp_mod,       &
327                                 ftype          = EDOMAIN,        &
328                                 name_          = "domaine1",     &
329                                 standard_name_ = "ledomaine1",   &
330                                 long_name_     = "le domaine 1", &
331                                 lonvalue_      = real_array(1:((jend-jbegin+1)*(iend-ibegin+1))), &
332                                 latvalue_      = real_array(1:((jend-jbegin+1)*(iend-ibegin+1))), &
333                                 data_dim_      = 2,              &
334                                 ni_glo_        = ni_glo,         &
335                                 nj_glo_        = nj_glo,         &
336                                 ibegin_        = ibegin,         &
337                                 iend_          = iend,           &
338                                 jbegin_        = jbegin,         &
339                                 jend_          = jend)
340
341      ! ---------> grid_definition
342      CALL handle_create(temp_mod, GGRID, "grid_definition")
343      CALL xml_tree_add(parent_hdl  = temp_mod,   &
344                        parent_type = GGRID,      &
345                        child_hdl   = temp_mod_,  &
346                        child_type  = EGRID,      &
347                        child_id    = "simple_grille")
348
349      CALL set_grid_attributes(grid_hdl     = temp_mod_,         &
350                               ftype        = EGRID,             &
351                               name_        = "grille1",         &
352                               description_ = "la grille 1",     &
353                               domain_ref_  = "simple_domaine1", &
354                               axis_ref_    = "simple_axe")
355                               
356      CALL xml_tree_add(parent_hdl  = temp_mod,   &
357                        parent_type = GGRID,      &
358                        child_hdl   = temp_mod_,  &
359                        child_type  = EGRID,      &
360                        child_id    = "simple_grille_zoom")
361
362      CALL set_grid_attributes(grid_hdl     = temp_mod_,         &
363                               ftype        = EGRID,             &
364                               name_        = "grille2",         &
365                               description_ = "la grille 2",     &
366                               domain_ref_  = "simple_domaine0_zoom", &
367                               axis_ref_    = "simple_axe")
368
369      ! ---------> file_definition
370      CALL handle_create(temp_mod, GFILE, "file_definition")
371
372      CALL xml_tree_add(parent_hdl  = temp_mod,   &
373                        parent_type = GFILE,      &
374                        child_hdl   = temp_mod_,  &
375                        child_type  = EFILE,      &
376                        child_id    = "simple_fichier1")
377
378      CALL set_file_attributes(file_hdl      = temp_mod_,        &
379                               ftype         = EFILE,            &
380                               name_         = "fichier1",       &
381                               description_  = "mon fichier 1 ", &
382                               output_freq_  = "12h",            &
383                               output_level_ = 3,                &
384                               enabled_      =  .TRUE._1)
385
386      CALL xml_tree_add(parent_hdl  = temp_mod_,  &
387                        parent_type = EFILE,      &
388                        child_hdl   = temp_mod__, &
389                        child_type  = EFIELD)
390                       
391      CALL set_field_attributes(field_hdl      = temp_mod__,       &
392                                ftype          = EFIELD,           &
393                                field_ref_     = "champ_3D_k8_average_zoom") 
394
395      CALL xml_tree_add(parent_hdl  = temp_mod_,  &
396                        parent_type = EFILE,      &
397                        child_hdl   = temp_mod__, &
398                        child_type  = EFIELD)
399
400      CALL set_field_attributes(field_hdl      = temp_mod__,       &
401                                ftype          = EFIELD,           &
402                                field_ref_     = "champ_2D_k8_inst")
403
404      CALL xml_tree_add(parent_hdl  = temp_mod_,  &
405                        parent_type = EFILE,      &
406                        child_hdl   = temp_mod__, &
407                        child_type  = EFIELD)
408
409      CALL set_field_attributes(field_hdl      = temp_mod__,       &
410                                ftype          = EFIELD,           &
411                                field_ref_     = "champ_2D_k4_once_dis")
412
413      CALL xml_tree_add(parent_hdl  = temp_mod_,  &
414                        parent_type = EFILE,      &
415                        child_hdl   = temp_mod__, &
416                        child_type  = EFIELD)
417
418      CALL set_field_attributes(field_hdl      = temp_mod__,       &
419                                ftype          = EFIELD,           &
420                                field_ref_     = "champ_3D_k4_once")
421
422      CALL xml_tree_add(parent_hdl  = temp_mod_,  &
423                        parent_type = EFILE,      &
424                        child_hdl   = temp_mod__, &
425                        child_type  = EFIELD)
426
427      CALL set_field_attributes(field_hdl      = temp_mod__,       &
428                                ftype          = EFIELD,           &
429                                field_ref_     = "champ_3D_k8_average")
430
431      CALL xml_tree_add(parent_hdl  = temp_mod,   &
432                        parent_type = GFILE,      &
433                        child_hdl   = temp_mod_,  &
434                        child_type  = EFILE,      &
435                        child_id    = "simple_fichier2")
436
437      CALL set_file_attributes(file_hdl      = temp_mod_,        &
438                               ftype         = EFILE,            &
439                               name_         = "fichier2",       &
440                               description_  = "mon fichier 2 ", &
441                               output_freq_  = "1d",             &
442                               output_level_ = 3,                &
443                               enabled_      =  .TRUE._1)
444
445      CALL xml_tree_add(parent_hdl  = temp_mod_,  &
446                        parent_type = EFILE,      &
447                        child_hdl   = temp_mod__, &
448                        child_type  = EFIELD)
449
450      CALL set_field_attributes(field_hdl      = temp_mod__,       &
451                                ftype          = EFIELD,           &
452                                field_ref_     = "champ_2D_k8_inst")
453
454      CALL xml_tree_add(parent_hdl  = temp_mod,   &
455                        parent_type = GFILE,      &
456                        child_hdl   = temp_mod_,  &
457                        child_type  = EFILE,      &
458                        child_id    = "simple_fichier3")
459
460      CALL set_file_attributes(file_hdl      = temp_mod_,        &
461                               ftype         = EFILE,            &
462                               name_         = "fichier3",       &
463                               description_  = "mon fichier 3 ", &
464                               output_freq_  = "18h",            &
465                               output_level_ = 5,                &
466                               enabled_      =  .FALSE._1)
467
468      CALL xml_tree_add(parent_hdl  = temp_mod_,  &
469                        parent_type = EFILE,      &
470                        child_hdl   = temp_mod__, &
471                        child_type  = EFIELD)
472
473      CALL set_field_attributes(field_hdl      = temp_mod__,       &
474                                ftype          = EFIELD,           &
475                                field_ref_     = "champ_2D_k8_inst")
476
477      !!!!!!!!!!!!!!!!!!!!!!! Début du traitement !!!!!!!!!!!!!!!!!!!!!
478
479      ! On choisit le context dans lequel on va travailler
480      ! et on commence le traitement des données.
481      CALL dtreatment_start(nemo_style_ctxt, NETCDF4, comm_client_server)
482     
483      CALL dtreatment_end(nemo_style_ctxt)
484
485   END SUBROUTINE NEMO_FAKE_ENTRY
486
487   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
488
489END MODULE NEMO_FAKE
Note: See TracBrowser for help on using the repository browser.