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

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