source: dynamico_lmdz/aquaplanet/IOIPSL/rebuild_src/flio_rbld.f90 @ 3847

Last change on this file since 3847 was 3847, checked in by ymipsl, 9 years ago

Add IOIPSL in the configuration.
Temporary configuration.
Makefile is ready for Curie

YM

File size: 49.2 KB
Line 
1!$Header: /home/ioipsl/CVSROOT/IOIPSL/tools/flio_rbld.f90,v 1.1 2005/10/10 07:36:45 adm Exp $
2PROGRAM flio_rbld
3!!--------------------------------------------------------------------
4!! PROGRAM flio_rbld
5!!
6!! PURPOSE :
7!!   Recombine the files of MPI version of IOIPSL
8!!   along several dimensions.
9!!
10!! CALLING SEQUENCE :
11!!
12!!   "flio_rbld" is usually invoked by the script "rebuild"
13!!
14!!   rebuild -h
15!!   
16!!   rebuild [-v] -o outfile infile[1] ... infile[n]
17!!
18!! INPUT for "rebuild" :
19!!
20!!   -h      : help
21!!   -v      : writing mode (silencious/verbose)
22!!   outfile : name of the recombined file.
23!!   infiles : names of the files that must be recombined.
24!!
25!! INPUT for "flio_rbld" :
26!!
27!!  (C) c_w_mode : writing mode (silencious/verbose)
28!!  (I) f_nb     : total number of files
29!!  (C) f_nm(:)  : names of the files
30!!
31!!
32!! ASSOCIATED MODULES :
33!!   IOIPSL(fliocom)
34!!
35!! RESTRICTIONS :
36!!
37!!   Cases for character are not coded.
38!!
39!!   Cases for netCDF variables such as array with more
40!!   than 5 dimensions are not coded.
41!!
42!!   Input files must have the following global attributes :
43!!
44!!     "DOMAIN_number_total"
45!!     "DOMAIN_number"
46!!     "DOMAIN_dimensions_ids"
47!!     "DOMAIN_size_global"
48!!     "DOMAIN_size_local"
49!!     "DOMAIN_position_first"
50!!     "DOMAIN_position_last"
51!!     "DOMAIN_halo_size_start"
52!!     "DOMAIN_halo_size_end"
53!!     "DOMAIN_type"
54!!
55!!   NetCDF files must be smaller than 2 Gb.
56!!
57!!   Character variables should have less than 257 letters
58!!
59!! EXAMPLE :
60!!
61!!   rebuild -v -o sst.nc sst_[0-9][0-9][0-9][0-9].nc
62!!
63!! MODIFICATION HISTORY :
64!!   Sebastien Masson   (smasson@jamstec.go.jp)   March 2004
65!!   Jacques   Bellier  (Jacques.Bellier@cea.fr)  June  2005
66!!--------------------------------------------------------------------
67  USE IOIPSL
68  USE defprec
69!-
70  IMPLICIT NONE
71!-
72! Character length
73  INTEGER,PARAMETER :: chlen=256
74!-
75! DO loops and test related variables
76  INTEGER :: i,ia,id,iv,iw,i_i,i_n
77!-
78! Input arguments related variables
79  CHARACTER(LEN=15) :: c_w_mode
80  INTEGER :: f_nb
81  CHARACTER(LEN=chlen),DIMENSION(:),ALLOCATABLE :: f_nm
82  INTEGER,DIMENSION(:),ALLOCATABLE :: f_a_id
83!-
84! Domains related variables
85  INTEGER :: d_n_t,i_ntd
86  INTEGER,DIMENSION(:),ALLOCATABLE :: dom_att,d_d_i,d_s_g
87  INTEGER,DIMENSION(:,:),ALLOCATABLE :: d_s_l,d_p_f,d_p_l,d_h_s,d_h_e
88  LOGICAL :: l_cgd,l_cof,l_col,l_o_f,l_o_l
89  CHARACTER(LEN=chlen) :: c_d_n
90!-
91! Model files related variables
92  INTEGER :: f_id_i1,f_id_i,f_id_o
93  INTEGER :: f_d_nb,f_v_nb,f_a_nb,f_ul_d
94  INTEGER :: v_type,v_d_nb,v_a_nb
95  CHARACTER(LEN=chlen),DIMENSION(:),ALLOCATABLE :: &
96&  f_d_nm,f_v_nm,f_a_nm,v_a_nm
97  CHARACTER(LEN=chlen) :: f_u_nm
98  INTEGER,DIMENSION(:),ALLOCATABLE :: f_d_i,f_d_l
99  INTEGER :: a_l
100  INTEGER,DIMENSION(flio_max_var_dims) :: v_d_i,ib,ie
101  INTEGER,DIMENSION(:),ALLOCATABLE :: &
102 &  io_i,io_n, ia_sf,io_sf,io_cf,ia_sm,io_sm,io_cm,ia_sl,io_sl,io_cl
103  LOGICAL :: l_ex
104  CHARACTER(LEN=chlen) :: c_wn1,c_wn2
105!-
106!?INTEGERS of KIND 1 are not supported on all computers
107!?INTEGER(KIND=i_1) :: i1_0d
108!?INTEGER(KIND=i_1),DIMENSION(:),ALLOCATABLE :: i1_1d
109!?INTEGER(KIND=i_1),DIMENSION(:,:),ALLOCATABLE :: i1_2d
110!?INTEGER(KIND=i_1),DIMENSION(:,:,:),ALLOCATABLE :: i1_3d
111!?INTEGER(KIND=i_1),DIMENSION(:,:,:,:),ALLOCATABLE :: i1_4d
112!?INTEGER(KIND=i_1),DIMENSION(:,:,:,:,:),ALLOCATABLE :: i1_5d
113  INTEGER(KIND=i_2) :: i2_0d
114  INTEGER(KIND=i_2),DIMENSION(:),ALLOCATABLE :: i2_1d
115  INTEGER(KIND=i_2),DIMENSION(:,:),ALLOCATABLE :: i2_2d
116  INTEGER(KIND=i_2),DIMENSION(:,:,:),ALLOCATABLE :: i2_3d
117  INTEGER(KIND=i_2),DIMENSION(:,:,:,:),ALLOCATABLE :: i2_4d
118  INTEGER(KIND=i_2),DIMENSION(:,:,:,:,:),ALLOCATABLE :: i2_5d
119  INTEGER(KIND=i_4) :: i4_0d
120  INTEGER(KIND=i_4),DIMENSION(:),ALLOCATABLE :: i4_1d
121  INTEGER(KIND=i_4),DIMENSION(:,:),ALLOCATABLE :: i4_2d
122  INTEGER(KIND=i_4),DIMENSION(:,:,:),ALLOCATABLE :: i4_3d
123  INTEGER(KIND=i_4),DIMENSION(:,:,:,:),ALLOCATABLE :: i4_4d
124  INTEGER(KIND=i_4),DIMENSION(:,:,:,:,:),ALLOCATABLE :: i4_5d
125  REAL(KIND=r_4) :: r4_0d
126  REAL(KIND=r_4),DIMENSION(:),ALLOCATABLE :: r4_1d
127  REAL(KIND=r_4),DIMENSION(:,:),ALLOCATABLE :: r4_2d
128  REAL(KIND=r_4),DIMENSION(:,:,:),ALLOCATABLE :: r4_3d
129  REAL(KIND=r_4),DIMENSION(:,:,:,:),ALLOCATABLE :: r4_4d
130  REAL(KIND=r_8),DIMENSION(:,:,:,:,:),ALLOCATABLE :: r4_5d
131  REAL(KIND=r_8) :: r8_0d
132  REAL(KIND=r_8),DIMENSION(:),ALLOCATABLE :: r8_1d
133  REAL(KIND=r_8),DIMENSION(:,:),ALLOCATABLE :: r8_2d
134  REAL(KIND=r_8),DIMENSION(:,:,:),ALLOCATABLE :: r8_3d
135  REAL(KIND=r_8),DIMENSION(:,:,:,:),ALLOCATABLE :: r8_4d
136  REAL(KIND=r_8),DIMENSION(:,:,:,:,:),ALLOCATABLE :: r8_5d
137!-
138! elapsed and cpu time computation variables
139  INTEGER :: nb_cc_ini,nb_cc_end,nb_cc_sec,nb_cc_max
140  REAL :: t_cpu_ini,t_cpu_end
141!---------------------------------------------------------------------
142!-
143!-------------------
144! INPUT arguments
145!-------------------
146!-
147! Retrieve the write mode
148  READ (UNIT=*,FMT='(A)') c_w_mode
149!-
150! Retrieve the number of arguments
151  READ (UNIT=*,FMT=*) f_nb
152!-
153! Retrieve the file names
154  ALLOCATE(f_nm(f_nb))
155  DO iw=1,f_nb
156    READ (UNIT=*,FMT='(A)') f_nm(iw)
157  ENDDO
158!-
159  IF (TRIM(c_w_mode) == 'verbose') THEN
160    WRITE (UNIT=*,FMT='("")')
161    WRITE (UNIT=*,FMT='(" mode     : """,A,"""")') TRIM(c_w_mode)
162    WRITE (UNIT=*,FMT='(" nb_args  : ",I4)') f_nb
163    WRITE (UNIT=*,FMT='(" Input  files :")')
164    DO iw=1,f_nb-1
165      WRITE (*,'("   ",A)') TRIM(f_nm(iw))
166    ENDDO
167    WRITE (UNIT=*,FMT='(" Output file  :")')
168    WRITE (*,'("   ",A)') TRIM(f_nm(f_nb))
169  ENDIF
170!-
171  IF (TRIM(c_w_mode) == 'verbose') THEN
172!-- time initializations
173    CALL system_clock &
174 &   (count=nb_cc_ini,count_rate=nb_cc_sec,count_max=nb_cc_max)
175    CALL cpu_time (t_cpu_ini)
176  ENDIF
177!-
178!---------------------------------------------------
179! Retrieve basic informations from the first file
180!---------------------------------------------------
181!-
182! Open the first file
183  CALL flioopfd (TRIM(f_nm(1)),f_id_i)
184!-
185! Get the attribute "DOMAIN_number_total"
186  CALL fliogeta (f_id_i,"?","DOMAIN_number_total",d_n_t)
187!-
188! Validate the number of input files :
189! must be equal to the total number
190! of domains used in the simulation
191  IF (d_n_t == (f_nb-1)) THEN
192!---
193!-- Retrieve the basic characteristics of the first input file
194    CALL flioinqf &
195 &   (f_id_i,nb_dim=f_d_nb,nb_var=f_v_nb,nb_gat=f_a_nb,id_uld=f_ul_d)
196!---
197!-- Build the list of the names
198!-- of the dimensions/variables/global_attributes
199!-- and retrieve the unlimited_dimension name
200!-- from the first input file
201    ALLOCATE(f_d_nm(f_d_nb),f_v_nm(f_v_nb),f_a_nm(f_a_nb))
202    CALL flioinqn (f_id_i,cn_dim=f_d_nm,cn_var=f_v_nm, &
203 &                        cn_gat=f_a_nm,cn_uld=f_u_nm)
204!---
205!-- Build the list of the dimensions identifiers and lengths
206    ALLOCATE(f_d_i(f_d_nb),f_d_l(f_d_nb))
207    CALL flioinqf (f_id_i,id_dim=f_d_i,ln_dim=f_d_l)
208  ENDIF
209!-
210! Close the file
211  CALL flioclo (f_id_i)
212!-
213  IF (d_n_t /= (f_nb-1)) THEN
214    DEALLOCATE(f_nm)
215    CALL ipslerr (3,"flio_rbld", &
216 &   "The number of input files", &
217 &   "is not equal to the number of DOMAINS"," ")
218  ENDIF
219!-
220!----------------------------------------------------
221! Retrieve domain informations for each input file
222!----------------------------------------------------
223!-
224  ALLOCATE(f_a_id(f_nb-1))
225!-
226!-
227  DO iw=1,f_nb-1
228!---
229    CALL flioopfd (TRIM(f_nm(iw)),f_id_i)
230    f_a_id(iw) = f_id_i
231!---
232    IF (iw > 1) THEN
233      c_wn1 = "DOMAIN_number_total"
234      CALL flioinqa (f_id_i,"?",TRIM(c_wn1),l_ex,a_l=a_l)
235      IF (l_ex) THEN
236        CALL fliogeta (f_id_i,"?",TRIM(c_wn1),i_ntd)
237        IF (i_ntd /= d_n_t) THEN
238          CALL ipslerr (3,"flio_rbld", &
239 &        "File      : "//TRIM(f_nm(iw)), &
240 &        "Attribute : "//TRIM(c_wn1), &
241 &        "not equal to the one of the first file")
242        ENDIF
243      ELSE
244        CALL ipslerr (3,"flio_rbld", &
245 &       "File      : "//TRIM(f_nm(iw)), &
246 &       "Attribute : "//TRIM(c_wn1),"not found")
247      ENDIF
248    ENDIF
249!---
250    c_wn1 = "DOMAIN_dimensions_ids"
251    CALL flioinqa (f_id_i,"?",TRIM(c_wn1),l_ex,a_l=a_l)
252    IF (l_ex) THEN
253      ALLOCATE(dom_att(a_l))
254      CALL fliogeta (f_id_i,"?",TRIM(c_wn1),dom_att)
255      IF (iw == 1) THEN
256        ALLOCATE (d_d_i(a_l))
257        d_d_i(:) = dom_att(:)
258      ELSEIF (SIZE(dom_att) /= SIZE(d_d_i)) THEN
259        CALL ipslerr (3,"flio_rbld", &
260 &       "File      : "//TRIM(f_nm(iw)), &
261 &       "size of the attribute : "//TRIM(c_wn1), &
262 &       "not equal to the one of the first file")
263      ELSEIF (ANY(dom_att(:) /= d_d_i(:))) THEN
264        CALL ipslerr (3,"flio_rbld", &
265 &       "File      : "//TRIM(f_nm(iw)), &
266 &       "Attribute : "//TRIM(c_wn1), &
267 &       "not equal to the one of the first file")
268      ENDIF
269      DEALLOCATE(dom_att)
270    ENDIF
271!---
272    c_wn1 = "DOMAIN_size_global"
273    CALL flioinqa (f_id_i,"?",TRIM(c_wn1),l_ex,a_l=a_l)
274    IF (l_ex) THEN
275      IF (a_l /= SIZE(d_d_i)) THEN
276        CALL ipslerr (3,"flio_rbld", &
277 &       "File      : "//TRIM(f_nm(iw)), &
278 &       "size of the attribute : "//TRIM(c_wn1), &
279 &       "not equal to the size of DOMAIN_dimensions_ids")
280      ELSE
281        ALLOCATE(dom_att(a_l))
282        CALL fliogeta (f_id_i,"?",TRIM(c_wn1),dom_att)
283        IF (iw == 1) THEN
284          ALLOCATE (d_s_g(a_l))
285          d_s_g(:)=dom_att(:)
286        ELSEIF (ANY(dom_att(:) /= d_s_g(:))) THEN
287          CALL ipslerr (3,"flio_rbld", &
288 &         "File      : "//TRIM(f_nm(iw)), &
289 &         "Attribute : "//TRIM(c_wn1), &
290 &         "not equal to the one of the first file")
291        ENDIF
292        DEALLOCATE(dom_att)
293      ENDIF
294    ELSE
295      CALL ipslerr (3,"flio_rbld", &
296 &     "File      : "//TRIM(f_nm(iw)), &
297 &     "Attribute : "//TRIM(c_wn1),"not found")
298    ENDIF
299!---
300    c_wn1 = "DOMAIN_size_local"
301    CALL flioinqa (f_id_i,"?",TRIM(c_wn1),l_ex,a_l=a_l)
302    IF (l_ex) THEN
303      IF (a_l /= SIZE(d_d_i)) THEN
304        CALL ipslerr (3,"flio_rbld", &
305 &       "File      : "//TRIM(f_nm(iw)), &
306 &       "size of the attribute : "//TRIM(c_wn1), &
307 &       "not equal to the size of DOMAIN_dimensions_ids")
308      ELSE
309        ALLOCATE(dom_att(a_l))
310        CALL fliogeta (f_id_i,"?",TRIM(c_wn1),dom_att)
311        IF (iw == 1) THEN
312          ALLOCATE (d_s_l(a_l,f_nb-1))
313        ENDIF
314        d_s_l(:,iw)=dom_att(:)
315        DEALLOCATE(dom_att)
316      ENDIF
317    ELSE
318      CALL ipslerr (3,"flio_rbld", &
319 &     "File      : "//TRIM(f_nm(iw)), &
320 &     "Attribute : "//TRIM(c_wn1),"not found")
321    ENDIF
322!---
323    c_wn1 = "DOMAIN_position_first"
324    CALL flioinqa (f_id_i,"?",TRIM(c_wn1),l_ex,a_l=a_l)
325    IF (l_ex) THEN
326      IF (a_l /= SIZE(d_d_i)) THEN
327        CALL ipslerr (3,"flio_rbld", &
328 &       "File      : "//TRIM(f_nm(iw)), &
329 &       "size of the attribute : "//TRIM(c_wn1), &
330 &       "not equal to the size of DOMAIN_dimensions_ids")
331      ELSE
332        ALLOCATE(dom_att(a_l))
333        CALL fliogeta (f_id_i,"?",TRIM(c_wn1),dom_att)
334        IF (iw == 1) THEN
335          ALLOCATE (d_p_f(a_l,f_nb-1))
336        ENDIF
337        d_p_f(:,iw)=dom_att(:)
338        DEALLOCATE(dom_att)
339      ENDIF
340    ELSE
341      CALL ipslerr (3,"flio_rbld", &
342 &     "File      : "//TRIM(f_nm(iw)), &
343 &     "Attribute : "//TRIM(c_wn1),"not found")
344    ENDIF
345!---
346    c_wn1 = "DOMAIN_position_last"
347    CALL flioinqa (f_id_i,"?",TRIM(c_wn1),l_ex,a_l=a_l)
348    IF (l_ex) THEN
349      IF (a_l /= SIZE(d_d_i)) THEN
350        CALL ipslerr (3,"flio_rbld", &
351 &       "File      : "//TRIM(f_nm(iw)), &
352 &       "size of the attribute : "//TRIM(c_wn1), &
353 &       "not equal to the size of DOMAIN_dimensions_ids")
354      ELSE
355        ALLOCATE(dom_att(a_l))
356        CALL fliogeta (f_id_i,"?",TRIM(c_wn1),dom_att)
357        IF (iw == 1) THEN
358          ALLOCATE (d_p_l(a_l,f_nb-1))
359        ENDIF
360        d_p_l(:,iw)=dom_att(:)
361        DEALLOCATE(dom_att)
362      ENDIF
363    ELSE
364      CALL ipslerr (3,"flio_rbld", &
365 &     "File      : "//TRIM(f_nm(iw)), &
366 &     "Attribute : "//TRIM(c_wn1),"not found")
367    ENDIF
368!---
369    c_wn1 = "DOMAIN_halo_size_start"
370    CALL flioinqa (f_id_i,"?",TRIM(c_wn1),l_ex,a_l=a_l)
371    IF (l_ex) THEN
372      IF (a_l /= SIZE(d_d_i)) THEN
373        CALL ipslerr (3,"flio_rbld", &
374 &       "File      : "//TRIM(f_nm(iw)), &
375 &       "size of the attribute : "//TRIM(c_wn1), &
376 &       "not equal to the size of DOMAIN_dimensions_ids")
377      ELSE
378        ALLOCATE(dom_att(a_l))
379        CALL fliogeta (f_id_i,"?",TRIM(c_wn1),dom_att)
380        IF (iw == 1) THEN
381          ALLOCATE (d_h_s(a_l,f_nb-1))
382        ENDIF
383        d_h_s(:,iw)=dom_att(:)
384        DEALLOCATE(dom_att)
385      ENDIF
386    ELSE
387      CALL ipslerr (3,"flio_rbld", &
388 &     "File      : "//TRIM(f_nm(iw)), &
389 &     "Attribute : "//TRIM(c_wn1),"not found")
390    ENDIF
391!---
392    c_wn1 = "DOMAIN_halo_size_end"
393    CALL flioinqa (f_id_i,"?",TRIM(c_wn1),l_ex,a_l=a_l)
394    IF (l_ex) THEN
395      IF (a_l /= SIZE(d_d_i)) THEN
396        CALL ipslerr (3,"flio_rbld", &
397 &       "File      : "//TRIM(f_nm(iw)), &
398 &       "size of the attribute : "//TRIM(c_wn1), &
399 &       "not equal to the size of DOMAIN_dimensions_ids")
400      ELSE
401        ALLOCATE(dom_att(a_l))
402        CALL fliogeta (f_id_i,"?",TRIM(c_wn1),dom_att)
403        IF (iw == 1) THEN
404          ALLOCATE (d_h_e(a_l,f_nb-1))
405        ENDIF
406        d_h_e(:,iw)=dom_att(:)
407        DEALLOCATE(dom_att)
408      ENDIF
409    ELSE
410      CALL ipslerr (3,"flio_rbld", &
411 &     "File      : "//TRIM(f_nm(iw)), &
412 &     "Attribute : "//TRIM(c_wn1),"not found")
413    ENDIF
414!---
415    c_wn1 = "DOMAIN_type"
416    c_wn2 = " "
417    CALL flioinqa (f_id_i,"?",TRIM(c_wn1),l_ex,a_l=a_l)
418    IF (l_ex) THEN
419      CALL fliogeta (f_id_i,"?",TRIM(c_wn1),c_wn2)
420      CALL strlowercase (c_wn2)
421      IF (iw == 1) THEN
422        IF (    (TRIM(c_wn2) == "box") &
423 &          .OR.(TRIM(c_wn2) == "apple") ) THEN
424          c_d_n = c_wn2
425        ELSE
426          CALL ipslerr (3,"flio_rbld", &
427 &         "File      : "//TRIM(f_nm(iw)), &
428 &         "Attribute : "//TRIM(c_wn1), &
429 &         "type "//TRIM(c_wn2)//" not (yet) supported")
430        ENDIF
431      ELSEIF (TRIM(c_wn2) /= TRIM(c_d_n)) THEN
432        CALL ipslerr (3,"flio_rbld", &
433 &       "File      : "//TRIM(f_nm(iw)), &
434 &       "Attribute : "//TRIM(c_wn1), &
435 &       "not equal to the one of the first file")
436      ENDIF
437    ELSE
438      CALL ipslerr (3,"flio_rbld", &
439 &     "File      : "//TRIM(f_nm(iw)), &
440 &     "Attribute : "//TRIM(c_wn1),"not found")
441    ENDIF
442!---
443!xxxxxxx
444!xxxxxxx CALL flioclo (f_id_i)
445!xxxxxxx
446  ENDDO
447!-
448  IF (TRIM(c_w_mode) == 'verbose') THEN
449    WRITE (UNIT=*,FMT='("")')
450    WRITE (*,'(" From the first file : ")')
451    WRITE (*,'("   Number of dimensions : ",I2)') f_d_nb
452    WRITE (*,'("     Idents  : ",(10(1X,I4),:))') f_d_i(1:f_d_nb)
453    WRITE (*,'("     Lengths : ",(10(1X,I4),:))') f_d_l(1:f_d_nb)
454    WRITE (*,'("     Names: ")')
455    DO i=1,f_d_nb
456      WRITE (*,'("       """,A,"""")') TRIM(f_d_nm(i))
457    ENDDO
458    IF (f_ul_d > 0) THEN
459      WRITE (*,'("   Unlimited dimension id : ",I2)') f_d_i(f_ul_d)
460    ENDIF
461    WRITE (*,'("   Number of variables  : ",I2)') f_v_nb
462    WRITE (*,'("     Names: ")')
463    DO i=1,f_v_nb
464      WRITE (*,'("       """,A,"""")') TRIM(f_v_nm(i))
465    ENDDO
466    WRITE (*,'("   Number of global attributes : ",I2)') f_a_nb
467    WRITE (*,'("     Names: ")')
468    DO i=1,f_a_nb
469      WRITE (*,'("       """,A,"""")') TRIM(f_a_nm(i))
470    ENDDO
471    WRITE (UNIT=*,FMT='("")')
472    WRITE (*,'(" From input files : ")')
473    WRITE (*,'("   Total number of DOMAINS : ",I4)') d_n_t
474    WRITE (*,'("   DOMAIN_dimensions_ids :",(10(1X,I5),:))') d_d_i(:)
475    WRITE (*,'("   DOMAIN_size_global    :",(10(1X,I5),:))') d_s_g(:)
476    WRITE (*,'("   DOMAIN_type           : """,(A),"""")') TRIM(c_d_n)
477    DO iw=1,f_nb-1
478      WRITE (*,'("   File   : ",A)') TRIM(f_nm(iw))
479      WRITE (*,'("     d_s_l  :",(10(1X,I5),:))') d_s_l(:,iw)
480      WRITE (*,'("     d_p_f  :",(10(1X,I5),:))') d_p_f(:,iw)
481      WRITE (*,'("     d_p_l  :",(10(1X,I5),:))') d_p_l(:,iw)
482      WRITE (*,'("     d_h_s  :",(10(1X,I5),:))') d_h_s(:,iw)
483      IF (TRIM(c_d_n) == "apple") THEN
484        IF (COUNT(d_h_s(:,iw) /= 0) > 1) THEN
485          CALL ipslerr (3,"flio_rbld", &
486 &          "Beginning offset is not yet supported", &
487 &          "for more than one dimension"," ")
488        ENDIF
489      ENDIF
490      WRITE (*,'("     d_h_e  :",(10(1X,I5),:))') d_h_e(:,iw)
491      IF (TRIM(c_d_n) == "apple") THEN
492        IF (COUNT(d_h_e(:,iw) /= 0) > 1) THEN
493          CALL ipslerr (3,"flio_rbld", &
494 &          "Ending offset is not yet supported", &
495 &          "for more than one dimension"," ")
496        ENDIF
497      ENDIF
498    ENDDO
499  ENDIF
500!-
501!---------------------------------------
502! Create the dimensionned output file
503!---------------------------------------
504!-
505! Define the dimensions used in the output file
506  DO id=1,f_d_nb
507    DO i=1,SIZE(d_d_i)
508      IF (f_d_i(id) == d_d_i(i)) THEN
509        f_d_l(id) = d_s_g(i)
510      ENDIF
511    ENDDO
512  ENDDO
513!-
514  IF (f_ul_d > 0) THEN
515    i = f_d_l(f_ul_d); f_d_l(f_ul_d) = -1;
516  ENDIF
517!-
518! Create the the output file
519  CALL fliocrfd (TRIM(f_nm(f_nb)),f_d_nm,f_d_l,f_id_o,c_f_n=c_wn1)
520!-
521  IF (TRIM(c_w_mode) == 'verbose') THEN
522    WRITE (UNIT=*,FMT='("")')
523    WRITE (UNIT=*,FMT=*) "Output file : ",TRIM(c_wn1)
524  ENDIF
525!-
526  IF (f_ul_d > 0) THEN
527    f_d_l(f_ul_d) = i
528  ENDIF
529!xxxxxxx
530!-
531! open the first input file used to build the output file
532!-
533!xxxxxxx CALL flioopfd (TRIM(f_nm(1)),f_id_i1)
534  f_id_i1 = f_a_id(1)
535!xxxxxxx
536!-
537! define the global attributes in the output file
538! copy all global attributes except those beginning by "DOMAIN_"
539! eventually actualize the "file_name" attribute
540!-
541  DO ia=1,f_a_nb
542    IF (INDEX(TRIM(f_a_nm(ia)),"DOMAIN_") == 1)  CYCLE
543    IF (TRIM(f_a_nm(ia)) == "file_name") THEN
544      CALL flioputa (f_id_o,"?",TRIM(f_a_nm(ia)),TRIM(c_wn1))
545    ELSE
546      CALL fliocpya (f_id_i1,"?",TRIM(f_a_nm(ia)),f_id_o,"?")
547    ENDIF
548  ENDDO
549!-
550! define the variables in the output file
551!-
552  DO iv=1,f_v_nb
553!-- get variable informations
554    CALL flioinqv &
555 &   (f_id_i1,TRIM(f_v_nm(iv)),l_ex,v_t=v_type, &
556 &    nb_dims=v_d_nb,id_dims=v_d_i,nb_atts=v_a_nb)
557!-- define the new variable
558    IF (v_d_nb == 0) THEN
559      CALL fliodefv &
560 &     (f_id_o,TRIM(f_v_nm(iv)),v_t=v_type)
561    ELSE
562      CALL fliodefv &
563 &     (f_id_o,TRIM(f_v_nm(iv)),v_d_i(1:v_d_nb),v_t=v_type)
564    ENDIF
565!-- copy all variable attributes
566    ALLOCATE(v_a_nm(v_a_nb))
567    CALL flioinqv (f_id_i1,TRIM(f_v_nm(iv)),l_ex,cn_atts=v_a_nm)
568    DO ia=1,v_a_nb
569      CALL fliocpya &
570 &     (f_id_i1,TRIM(f_v_nm(iv)),TRIM(v_a_nm(ia)), &
571 &      f_id_o,TRIM(f_v_nm(iv)))
572    ENDDO
573    DEALLOCATE(v_a_nm)
574  ENDDO
575!-
576!------------------------
577! Fill the output file
578!------------------------
579!-
580  DO iv=1,f_v_nb
581!-- get variable informations
582    CALL flioinqv &
583 &   (f_id_i1,TRIM(f_v_nm(iv)),l_ex,v_t=v_type, &
584 &    nb_dims=v_d_nb,id_dims=v_d_i)
585    IF (TRIM(c_w_mode) == 'verbose') THEN
586      WRITE (UNIT=*,FMT='("")')
587      WRITE (UNIT=*,FMT=*) "variable : ",TRIM(f_v_nm(iv))
588    ENDIF
589!-- do the variable contains dimensions to be recombined ?
590    l_cgd = .FALSE.
591    i_n = 1
592    DO i=1,SIZE(d_d_i)
593      l_cgd = ANY(v_d_i(1:v_d_nb) == d_d_i(i))
594      l_cgd = l_cgd.AND.ANY(d_s_l(i,1:f_nb-1) /= d_s_g(i))
595      IF (l_cgd) THEN
596        i_n = f_nb-1
597          EXIT
598      ENDIF
599    ENDDO
600    IF (v_d_nb > 0) THEN
601!---- Allocate io_i,io_n,ia_sm,io_sm,io_cm
602      ALLOCATE(io_i(v_d_nb),io_n(v_d_nb))
603      ALLOCATE(ia_sm(v_d_nb),io_sm(v_d_nb),io_cm(v_d_nb))
604!---- Default definition of io_i,io_n,io_sm,io_cm
605      io_i(:) = 1; io_n(:) = f_d_l(v_d_i(1:v_d_nb));
606      ia_sm(:) = 1; io_sm(:) = 1; io_cm(:) = io_n(:);
607!---- If needed, allocate offset
608      l_o_f = .FALSE.; l_o_l = .FALSE.;
609      IF (TRIM(c_d_n) == "apple") THEN
610        ALLOCATE(ia_sf(v_d_nb),io_sf(v_d_nb),io_cf(v_d_nb))
611        ALLOCATE(ia_sl(v_d_nb),io_sl(v_d_nb),io_cl(v_d_nb))
612        ia_sf(:) = 1; io_sf(:) = 1; io_cf(:) = io_n(:);
613        ia_sl(:) = 1; io_sl(:) = 1; io_cl(:) = io_n(:);
614      ENDIF
615    ENDIF
616!--
617    DO i_i=1,i_n
618      IF (l_cgd) THEN
619!------ the variable contains dimensions to be recombined
620!------
621!xxxxxxx
622!------ open each file containing a small piece of data
623!xxxxxxx CALL flioopfd (TRIM(f_nm(i_i)),f_id_i)
624        f_id_i = f_a_id(i_i)
625!xxxxxxx
626!------
627!------ do the variable has offset at first/last block ?
628        l_cof = .FALSE.; l_col = .FALSE.;
629        IF (TRIM(c_d_n) == "apple") THEN
630          L_BF: DO id=1,v_d_nb
631            DO i=1,SIZE(d_d_i)
632              IF (v_d_i(id) == d_d_i(i)) THEN
633                l_cof = (d_h_s(i,i_i) /= 0)
634                IF (l_cof)  EXIT L_BF
635              ENDIF
636            ENDDO
637          ENDDO L_BF
638          L_BL: DO id=1,v_d_nb
639            DO i=1,SIZE(d_d_i)
640              IF (v_d_i(id) == d_d_i(i)) THEN
641                l_col = (d_h_e(i,i_i) /= 0)
642                IF (l_col)  EXIT L_BL
643              ENDIF
644            ENDDO
645          ENDDO L_BL
646        ENDIF
647!------ if needed, redefine start and count for dimensions
648        l_o_f = .FALSE.; l_o_l = .FALSE.;
649        DO id=1,v_d_nb
650          DO i=1,SIZE(d_d_i)
651            IF (v_d_i(id) == d_d_i(i)) THEN
652              io_n(id) = d_p_l(i,i_i)-d_p_f(i,i_i)+1
653              ia_sm(id) = 1
654              io_sm(id) = d_p_f(i,i_i)
655              io_cm(id) = io_n(id)
656              IF     (TRIM(c_d_n) == "box") THEN
657                ia_sm(id) = ia_sm(id)+d_h_s(i,i_i)
658                io_sm(id) = io_sm(id)+d_h_s(i,i_i)
659                io_cm(id) = io_cm(id)-d_h_s(i,i_i)-d_h_e(i,i_i)
660              ELSEIF (TRIM(c_d_n) == "apple") THEN
661                IF (l_cof) THEN
662                  IF (d_h_s(i,i_i) /= 0) THEN
663                    ia_sf(id) = 1+d_h_s(i,i_i)
664                    io_sf(id) = d_p_f(i,i_i)+d_h_s(i,i_i)
665                    io_cf(id) = io_n(id)-d_h_s(i,i_i)
666                  ELSE
667                    io_sf(id) = d_p_f(i,i_i)
668                    io_cf(id) = 1
669                    ia_sm(id) = ia_sm(id)+1
670                    io_sm(id) = io_sm(id)+1
671                    io_cm(id) = io_cm(id)-1
672                    l_o_f = .TRUE.
673                  ENDIF
674                ENDIF
675                IF (l_col) THEN
676                  IF (d_h_e(i,i_i) /= 0) THEN
677                    ia_sl(id) = 1
678                    io_sl(id) = d_p_f(i,i_i)
679                    io_cl(id) = io_n(id)-d_h_e(i,i_i)
680                  ELSE
681                    io_cm(id) = io_cm(id)-1
682                    ia_sl(id) = 1+io_n(id)-1
683                    io_sl(id) = d_p_f(i,i_i)+io_n(id)-1
684                    io_cl(id) = 1
685                    l_o_l = .TRUE.
686                  ENDIF
687                ENDIF
688              ENDIF
689            ENDIF
690          ENDDO
691        ENDDO
692      ELSE
693!------ the data can be read/write in one piece
694        f_id_i = f_id_i1
695      ENDIF
696!-----
697      IF (TRIM(c_w_mode) == 'verbose') THEN
698        WRITE (UNIT=*,FMT=*) TRIM(f_nm(i_i))//" - "//TRIM(f_v_nm(iv))
699        WRITE (UNIT=*,FMT=*) "io_i  : ",io_i(:)
700        WRITE (UNIT=*,FMT=*) "io_n  : ",io_n(:)
701        WRITE (UNIT=*,FMT=*) "l_o_f : ",l_o_f
702        IF (l_o_f) THEN
703          WRITE (UNIT=*,FMT=*) "ia_sf : ",ia_sf(:)
704          WRITE (UNIT=*,FMT=*) "io_sf : ",io_sf(:)
705          WRITE (UNIT=*,FMT=*) "io_cf : ",io_cf(:)
706        ENDIF
707        WRITE (UNIT=*,FMT=*) "ia_sm : ",ia_sm(:)
708        WRITE (UNIT=*,FMT=*) "io_sm : ",io_sm(:)
709        WRITE (UNIT=*,FMT=*) "io_cm : ",io_cm(:)
710        WRITE (UNIT=*,FMT=*) "l_o_l : ",l_o_l
711        IF (l_o_l) THEN
712          WRITE (UNIT=*,FMT=*) "ia_sl : ",ia_sl(:)
713          WRITE (UNIT=*,FMT=*) "io_sl : ",io_sl(:)
714          WRITE (UNIT=*,FMT=*) "io_cl : ",io_cl(:)
715        ENDIF
716      ENDIF
717!-----
718!---- Cases according to the type, shape and offsets of the data
719!-----
720      SELECT CASE (v_type)
721!?INTEGERS of KIND 1 are not supported on all computers
722!?    CASE (flio_i1) !--- INTEGER 1
723!?      SELECT CASE (v_d_nb)
724!?      CASE (0) !--- Scalar
725!?        CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i1_0d)
726!?        CALL flioputv (f_id_o,TRIM(f_v_nm(iv)),i1_0d)
727!?      CASE (1) !--- 1d array
728!?        ALLOCATE(i1_1d(io_n(1)))
729!?        CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i1_1d, &
730!? &                     start=io_i(:),count=io_n(:))
731!?        IF (l_o_f) THEN
732!?          ib(1:1) = ia_sf(1:1); ie(1:1) = ib(1:1)+io_cf(1:1)-1;
733!?          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
734!? &          i1_1d(ib(1):ie(1)), &
735!? &          start=io_sf(:),count=io_cf(:))
736!?        ENDIF
737!?        ib(1:1) = ia_sm(1:1); ie(1:1) = ib(1:1)+io_cm(1:1)-1;
738!?        CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
739!? &        i1_1d(ib(1):ie(1)), &
740!? &        start=io_sm(:),count=io_cm(:))
741!?        IF (l_o_l) THEN
742!?          ib(1:1) = ia_sl(1:1); ie(1:1) = ib(1:1)+io_cl(1:1)-1;
743!?          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
744!? &          i1_1d(ib(1):ie(1)), &
745!? &          start=io_sl(:),count=io_cl(:))
746!?        ENDIF
747!?        DEALLOCATE(i1_1d)
748!?      CASE (2) !--- 2d array
749!?        ALLOCATE(i1_2d(io_n(1),io_n(2)))
750!?        CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i1_2d, &
751!? &                     start=io_i(:),count=io_n(:))
752!?        IF (l_o_f) THEN
753!?          ib(1:2) = ia_sf(1:2); ie(1:2) = ib(1:2)+io_cf(1:2)-1;
754!?          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
755!? &          i1_2d(ib(1):ie(1),ib(2):ie(2)), &
756!? &          start=io_sf(:),count=io_cf(:))
757!?        ENDIF
758!?        ib(1:2) = ia_sm(1:2); ie(1:2) = ib(1:2)+io_cm(1:2)-1;
759!?        CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
760!? &        i1_2d(ib(1):ie(1),ib(2):ie(2)), &
761!? &        start=io_sm(:),count=io_cm(:))
762!?        IF (l_o_l) THEN
763!?          ib(1:2) = ia_sl(1:2); ie(1:2) = ib(1:2)+io_cl(1:2)-1;
764!?          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
765!? &          i1_2d(ib(1):ie(1),ib(2):ie(2)), &
766!? &          start=io_sl(:),count=io_cl(:))
767!?        ENDIF
768!?        DEALLOCATE(i1_2d)
769!?      CASE (3) !--- 3d array
770!?        ALLOCATE(i1_3d(io_n(1),io_n(2),io_n(3)))
771!?        CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i1_3d, &
772!? &                     start=io_i(:),count=io_n(:))
773!?        IF (l_o_f) THEN
774!?          ib(1:3) = ia_sf(1:3); ie(1:3) = ib(1:3)+io_cf(1:3)-1;
775!?          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
776!? &          i1_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
777!? &          start=io_sf(:),count=io_cf(:))
778!?        ENDIF
779!?        ib(1:3) = ia_sm(1:3); ie(1:3) = ib(1:3)+io_cm(1:3)-1;
780!?        CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
781!? &        i1_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
782!? &        start=io_sm(:),count=io_cm(:))
783!?        IF (l_o_l) THEN
784!?          ib(1:3) = ia_sl(1:3); ie(1:3) = ib(1:3)+io_cl(1:3)-1;
785!?          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
786!? &          i1_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
787!? &          start=io_sl(:),count=io_cl(:))
788!?        ENDIF
789!?        DEALLOCATE(i1_3d)
790!?      CASE (4) !--- 4d array
791!?        ALLOCATE(i1_4d(io_n(1),io_n(2),io_n(3),io_n(4)))
792!?        CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i1_4d, &
793!? &                     start=io_i(:),count=io_n(:))
794!?        IF (l_o_f) THEN
795!?          ib(1:4) = ia_sf(1:4); ie(1:4) = ib(1:4)+io_cf(1:4)-1;
796!?          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
797!? &          i1_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
798!? &          start=io_sf(:),count=io_cf(:))
799!?        ENDIF
800!?        ib(1:4) = ia_sm(1:4); ie(1:4) = ib(1:4)+io_cm(1:4)-1;
801!?        CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
802!? &        i1_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
803!? &        start=io_sm(:),count=io_cm(:))
804!?        IF (l_o_l) THEN
805!?          ib(1:4) = ia_sl(1:4); ie(1:4) = ib(1:4)+io_cl(1:4)-1;
806!?          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
807!? &          i1_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
808!? &          start=io_sl(:),count=io_cl(:))
809!?        ENDIF
810!?        DEALLOCATE(i1_4d)
811!?      CASE (5) !--- 5d array
812!?        ALLOCATE(i1_5d(io_n(1),io_n(2),io_n(3),io_n(4),io_n(5)))
813!?        CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i1_5d, &
814!? &                     start=io_i(:),count=io_n(:))
815!?        IF (l_o_f) THEN
816!?          ib(1:5) = ia_sf(1:5); ie(1:5) = ib(1:5)+io_cf(1:5)-1;
817!?          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
818!? &          i1_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
819!? &                  ib(4):ie(4),ib(5):ie(5)), &
820!? &          start=io_sf(:),count=io_cf(:))
821!?        ENDIF
822!?        ib(1:5) = ia_sm(1:5); ie(1:5) = ib(1:5)+io_cm(1:5)-1;
823!?        CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
824!? &        i1_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
825!? &              ib(4):ie(4),ib(5):ie(5)), &
826!? &        start=io_sm(:),count=io_cm(:))
827!?        IF (l_o_l) THEN
828!?          ib(1:5) = ia_sl(1:5); ie(1:5) = ib(1:5)+io_cl(1:5)-1;
829!?          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
830!? &          i1_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
831!? &                ib(4):ie(4),ib(5):ie(5)), &
832!? &          start=io_sl(:),count=io_cl(:))
833!?        ENDIF
834!?        DEALLOCATE(i1_5d)
835!?      END SELECT
836!?    CASE (flio_i2) !--- INTEGER 2
837      CASE (flio_i1,flio_i2) !--- INTEGER 1/INTEGER 2
838        SELECT CASE (v_d_nb)
839        CASE (0) !--- Scalar
840          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i2_0d)
841          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)),i2_0d)
842        CASE (1) !--- 1d array
843          ALLOCATE(i2_1d(io_n(1)))
844          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i2_1d, &
845 &          start=io_i(:),count=io_n(:))
846          IF (l_o_f) THEN
847            ib(1:1) = ia_sf(1:1); ie(1:1) = ib(1:1)+io_cf(1:1)-1;
848            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
849 &            i2_1d(ib(1):ie(1)), &
850 &            start=io_sf(:),count=io_cf(:))
851          ENDIF
852          ib(1:1) = ia_sm(1:1); ie(1:1) = ib(1:1)+io_cm(1:1)-1;
853          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
854 &          i2_1d(ib(1):ie(1)), &
855 &          start=io_sm(:),count=io_cm(:))
856          IF (l_o_l) THEN
857            ib(1:1) = ia_sl(1:1); ie(1:1) = ib(1:1)+io_cl(1:1)-1;
858            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
859 &            i2_1d(ib(1):ie(1)), &
860 &            start=io_sl(:),count=io_cl(:))
861          ENDIF
862          DEALLOCATE(i2_1d)
863        CASE (2) !--- 2d array
864          ALLOCATE(i2_2d(io_n(1),io_n(2)))
865          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i2_2d, &
866 &          start=io_i(:),count=io_n(:))
867          IF (l_o_f) THEN
868            ib(1:2) = ia_sf(1:2); ie(1:2) = ib(1:2)+io_cf(1:2)-1;
869            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
870 &            i2_2d(ib(1):ie(1),ib(2):ie(2)), &
871 &            start=io_sf(:),count=io_cf(:))
872          ENDIF
873          ib(1:2) = ia_sm(1:2); ie(1:2) = ib(1:2)+io_cm(1:2)-1;
874          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
875 &          i2_2d(ib(1):ie(1),ib(2):ie(2)), &
876 &          start=io_sm(:),count=io_cm(:))
877          IF (l_o_l) THEN
878            ib(1:2) = ia_sl(1:2); ie(1:2) = ib(1:2)+io_cl(1:2)-1;
879            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
880 &            i2_2d(ib(1):ie(1),ib(2):ie(2)), &
881 &            start=io_sl(:),count=io_cl(:))
882          ENDIF
883          DEALLOCATE(i2_2d)
884        CASE (3) !--- 3d array
885          ALLOCATE(i2_3d(io_n(1),io_n(2),io_n(3)))
886          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i2_3d, &
887 &          start=io_i(:),count=io_n(:))
888          IF (l_o_f) THEN
889            ib(1:3) = ia_sf(1:3); ie(1:3) = ib(1:3)+io_cf(1:3)-1;
890            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
891 &            i2_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
892 &            start=io_sf(:),count=io_cf(:))
893          ENDIF
894          ib(1:3) = ia_sm(1:3); ie(1:3) = ib(1:3)+io_cm(1:3)-1;
895          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
896 &          i2_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
897 &          start=io_sm(:),count=io_cm(:))
898          IF (l_o_l) THEN
899            ib(1:3) = ia_sl(1:3); ie(1:3) = ib(1:3)+io_cl(1:3)-1;
900            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
901 &            i2_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
902 &            start=io_sl(:),count=io_cl(:))
903          ENDIF
904          DEALLOCATE(i2_3d)
905        CASE (4) !--- 4d array
906          ALLOCATE(i2_4d(io_n(1),io_n(2),io_n(3),io_n(4)))
907          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i2_4d, &
908 &          start=io_i(:),count=io_n(:))
909          IF (l_o_f) THEN
910            ib(1:4) = ia_sf(1:4); ie(1:4) = ib(1:4)+io_cf(1:4)-1;
911            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
912 &            i2_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
913 &            start=io_sf(:),count=io_cf(:))
914          ENDIF
915          ib(1:4) = ia_sm(1:4); ie(1:4) = ib(1:4)+io_cm(1:4)-1;
916          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
917 &          i2_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
918 &          start=io_sm(:),count=io_cm(:))
919          IF (l_o_l) THEN
920            ib(1:4) = ia_sl(1:4); ie(1:4) = ib(1:4)+io_cl(1:4)-1;
921            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
922 &            i2_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
923 &            start=io_sl(:),count=io_cl(:))
924          ENDIF
925          DEALLOCATE(i2_4d)
926        CASE (5) !--- 5d array
927          ALLOCATE(i2_5d(io_n(1),io_n(2),io_n(3),io_n(4),io_n(5)))
928          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i2_5d, &
929 &          start=io_i(:),count=io_n(:))
930          IF (l_o_f) THEN
931            ib(1:5) = ia_sf(1:5); ie(1:5) = ib(1:5)+io_cf(1:5)-1;
932            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
933 &            i2_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
934 &                  ib(4):ie(4),ib(5):ie(5)), &
935 &            start=io_sf(:),count=io_cf(:))
936          ENDIF
937          ib(1:5) = ia_sm(1:5); ie(1:5) = ib(1:5)+io_cm(1:5)-1;
938          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
939 &          i2_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
940 &                ib(4):ie(4),ib(5):ie(5)), &
941 &          start=io_sm(:),count=io_cm(:))
942          IF (l_o_l) THEN
943            ib(1:5) = ia_sl(1:5); ie(1:5) = ib(1:5)+io_cl(1:5)-1;
944            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
945 &            i2_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
946 &                  ib(4):ie(4),ib(5):ie(5)), &
947 &            start=io_sl(:),count=io_cl(:))
948          ENDIF
949          DEALLOCATE(i2_5d)
950        END SELECT
951      CASE (flio_i4) !--- INTEGER 4
952        SELECT CASE (v_d_nb)
953        CASE (0) !--- Scalar
954          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i4_0d)
955          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)),i4_0d)
956        CASE (1) !--- 1d array
957          ALLOCATE(i4_1d(io_n(1)))
958          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i4_1d, &
959 &          start=io_i(:),count=io_n(:))
960          IF (l_o_f) THEN
961            ib(1:1) = ia_sf(1:1); ie(1:1) = ib(1:1)+io_cf(1:1)-1;
962            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
963 &            i4_1d(ib(1):ie(1)), &
964 &            start=io_sf(:),count=io_cf(:))
965          ENDIF
966          ib(1:1) = ia_sm(1:1); ie(1:1) = ib(1:1)+io_cm(1:1)-1;
967          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
968 &          i4_1d(ib(1):ie(1)), &
969 &          start=io_sm(:),count=io_cm(:))
970          IF (l_o_l) THEN
971            ib(1:1) = ia_sl(1:1); ie(1:1) = ib(1:1)+io_cl(1:1)-1;
972            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
973 &            i4_1d(ib(1):ie(1)), &
974 &            start=io_sl(:),count=io_cl(:))
975          ENDIF
976          DEALLOCATE(i4_1d)
977        CASE (2) !--- 2d array
978          ALLOCATE(i4_2d(io_n(1),io_n(2)))
979          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i4_2d, &
980 &          start=io_i(:),count=io_n(:))
981          IF (l_o_f) THEN
982            ib(1:2) = ia_sf(1:2); ie(1:2) = ib(1:2)+io_cf(1:2)-1;
983            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
984 &            i4_2d(ib(1):ie(1),ib(2):ie(2)), &
985 &            start=io_sf(:),count=io_cf(:))
986          ENDIF
987          ib(1:2) = ia_sm(1:2); ie(1:2) = ib(1:2)+io_cm(1:2)-1;
988          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
989 &          i4_2d(ib(1):ie(1),ib(2):ie(2)), &
990 &          start=io_sm(:),count=io_cm(:))
991          IF (l_o_l) THEN
992            ib(1:2) = ia_sl(1:2); ie(1:2) = ib(1:2)+io_cl(1:2)-1;
993            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
994 &            i4_2d(ib(1):ie(1),ib(2):ie(2)), &
995 &            start=io_sl(:),count=io_cl(:))
996          ENDIF
997          DEALLOCATE(i4_2d)
998        CASE (3) !--- 3d array
999          ALLOCATE(i4_3d(io_n(1),io_n(2),io_n(3)))
1000          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i4_3d, &
1001 &          start=io_i(:),count=io_n(:))
1002          IF (l_o_f) THEN
1003            ib(1:3) = ia_sf(1:3); ie(1:3) = ib(1:3)+io_cf(1:3)-1;
1004            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1005 &            i4_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
1006 &            start=io_sf(:),count=io_cf(:))
1007          ENDIF
1008          ib(1:3) = ia_sm(1:3); ie(1:3) = ib(1:3)+io_cm(1:3)-1;
1009          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1010 &          i4_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
1011 &          start=io_sm(:),count=io_cm(:))
1012          IF (l_o_l) THEN
1013            ib(1:3) = ia_sl(1:3); ie(1:3) = ib(1:3)+io_cl(1:3)-1;
1014            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1015 &            i4_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
1016 &            start=io_sl(:),count=io_cl(:))
1017          ENDIF
1018          DEALLOCATE(i4_3d)
1019        CASE (4) !--- 4d array
1020          ALLOCATE(i4_4d(io_n(1),io_n(2),io_n(3),io_n(4)))
1021          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i4_4d, &
1022 &          start=io_i(:),count=io_n(:))
1023          IF (l_o_f) THEN
1024            ib(1:4) = ia_sf(1:4); ie(1:4) = ib(1:4)+io_cf(1:4)-1;
1025            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1026 &            i4_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
1027 &            start=io_sf(:),count=io_cf(:))
1028          ENDIF
1029          ib(1:4) = ia_sm(1:4); ie(1:4) = ib(1:4)+io_cm(1:4)-1;
1030          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1031 &          i4_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
1032 &          start=io_sm(:),count=io_cm(:))
1033          IF (l_o_l) THEN
1034            ib(1:4) = ia_sl(1:4); ie(1:4) = ib(1:4)+io_cl(1:4)-1;
1035            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1036 &            i4_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
1037 &            start=io_sl(:),count=io_cl(:))
1038          ENDIF
1039          DEALLOCATE(i4_4d)
1040        CASE (5) !--- 5d array
1041          ALLOCATE(i4_5d(io_n(1),io_n(2),io_n(3),io_n(4),io_n(5)))
1042          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),i4_5d, &
1043 &          start=io_i(:),count=io_n(:))
1044          IF (l_o_f) THEN
1045            ib(1:5) = ia_sf(1:5); ie(1:5) = ib(1:5)+io_cf(1:5)-1;
1046            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1047 &            i4_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
1048 &                  ib(4):ie(4),ib(5):ie(5)), &
1049 &            start=io_sf(:),count=io_cf(:))
1050          ENDIF
1051          ib(1:5) = ia_sm(1:5); ie(1:5) = ib(1:5)+io_cm(1:5)-1;
1052          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1053 &          i4_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
1054 &                ib(4):ie(4),ib(5):ie(5)), &
1055 &          start=io_sm(:),count=io_cm(:))
1056          IF (l_o_l) THEN
1057            ib(1:5) = ia_sl(1:5); ie(1:5) = ib(1:5)+io_cl(1:5)-1;
1058            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1059 &            i4_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
1060 &                  ib(4):ie(4),ib(5):ie(5)), &
1061 &            start=io_sl(:),count=io_cl(:))
1062          ENDIF
1063          DEALLOCATE(i4_5d)
1064        END SELECT
1065      CASE (flio_r4) !--- REAL 4
1066        SELECT CASE (v_d_nb)
1067        CASE (0) !--- Scalar
1068          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),r4_0d)
1069          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)),r4_0d)
1070        CASE (1) !--- 1d array
1071          ALLOCATE(r4_1d(io_n(1)))
1072          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),r4_1d, &
1073 &          start=io_i(:),count=io_n(:))
1074          IF (l_o_f) THEN
1075            ib(1:1) = ia_sf(1:1); ie(1:1) = ib(1:1)+io_cf(1:1)-1;
1076            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1077 &            r4_1d(ib(1):ie(1)), &
1078 &            start=io_sf(:),count=io_cf(:))
1079          ENDIF
1080          ib(1:1) = ia_sm(1:1); ie(1:1) = ib(1:1)+io_cm(1:1)-1;
1081          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1082 &          r4_1d(ib(1):ie(1)), &
1083 &          start=io_sm(:),count=io_cm(:))
1084          IF (l_o_l) THEN
1085            ib(1:1) = ia_sl(1:1); ie(1:1) = ib(1:1)+io_cl(1:1)-1;
1086            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1087 &            r4_1d(ib(1):ie(1)), &
1088 &            start=io_sl(:),count=io_cl(:))
1089          ENDIF
1090          DEALLOCATE(r4_1d)
1091        CASE (2) !--- 2d array
1092          ALLOCATE(r4_2d(io_n(1),io_n(2)))
1093          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),r4_2d, &
1094 &          start=io_i(:),count=io_n(:))
1095          IF (l_o_f) THEN
1096            ib(1:2) = ia_sf(1:2); ie(1:2) = ib(1:2)+io_cf(1:2)-1;
1097            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1098 &            r4_2d(ib(1):ie(1),ib(2):ie(2)), &
1099 &            start=io_sf(:),count=io_cf(:))
1100          ENDIF
1101          ib(1:2) = ia_sm(1:2); ie(1:2) = ib(1:2)+io_cm(1:2)-1;
1102          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1103 &          r4_2d(ib(1):ie(1),ib(2):ie(2)), &
1104 &          start=io_sm(:),count=io_cm(:))
1105          IF (l_o_l) THEN
1106            ib(1:2) = ia_sl(1:2); ie(1:2) = ib(1:2)+io_cl(1:2)-1;
1107            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1108 &            r4_2d(ib(1):ie(1),ib(2):ie(2)), &
1109 &            start=io_sl(:),count=io_cl(:))
1110          ENDIF
1111          DEALLOCATE(r4_2d)
1112        CASE (3) !--- 3d array
1113          ALLOCATE(r4_3d(io_n(1),io_n(2),io_n(3)))
1114          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),r4_3d, &
1115 &          start=io_i(:),count=io_n(:))
1116          IF (l_o_f) THEN
1117            ib(1:3) = ia_sf(1:3); ie(1:3) = ib(1:3)+io_cf(1:3)-1;
1118            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1119 &            r4_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
1120 &            start=io_sf(:),count=io_cf(:))
1121          ENDIF
1122          ib(1:3) = ia_sm(1:3); ie(1:3) = ib(1:3)+io_cm(1:3)-1;
1123          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1124 &          r4_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
1125 &          start=io_sm(:),count=io_cm(:))
1126          IF (l_o_l) THEN
1127            ib(1:3) = ia_sl(1:3); ie(1:3) = ib(1:3)+io_cl(1:3)-1;
1128            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1129 &            r4_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
1130 &            start=io_sl(:),count=io_cl(:))
1131          ENDIF
1132          DEALLOCATE(r4_3d)
1133        CASE (4) !--- 4d array
1134          ALLOCATE(r4_4d(io_n(1),io_n(2),io_n(3),io_n(4)))
1135          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),r4_4d, &
1136 &          start=io_i(:),count=io_n(:))
1137          IF (l_o_f) THEN
1138            ib(1:4) = ia_sf(1:4); ie(1:4) = ib(1:4)+io_cf(1:4)-1;
1139            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1140 &            r4_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
1141 &            start=io_sf(:),count=io_cf(:))
1142          ENDIF
1143          ib(1:4) = ia_sm(1:4); ie(1:4) = ib(1:4)+io_cm(1:4)-1;
1144          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1145 &          r4_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
1146 &          start=io_sm(:),count=io_cm(:))
1147          IF (l_o_l) THEN
1148            ib(1:4) = ia_sl(1:4); ie(1:4) = ib(1:4)+io_cl(1:4)-1;
1149            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1150 &            r4_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
1151 &            start=io_sl(:),count=io_cl(:))
1152          ENDIF
1153          DEALLOCATE(r4_4d)
1154        CASE (5) !--- 5d array
1155          ALLOCATE(r4_5d(io_n(1),io_n(2),io_n(3),io_n(4),io_n(5)))
1156          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),r4_5d, &
1157 &          start=io_i(:),count=io_n(:))
1158          IF (l_o_f) THEN
1159            ib(1:5) = ia_sf(1:5); ie(1:5) = ib(1:5)+io_cf(1:5)-1;
1160            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1161 &            r4_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
1162 &                  ib(4):ie(4),ib(5):ie(5)), &
1163 &            start=io_sf(:),count=io_cf(:))
1164          ENDIF
1165          ib(1:5) = ia_sm(1:5); ie(1:5) = ib(1:5)+io_cm(1:5)-1;
1166          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1167 &          r4_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
1168 &                ib(4):ie(4),ib(5):ie(5)), &
1169 &          start=io_sm(:),count=io_cm(:))
1170          IF (l_o_l) THEN
1171            ib(1:5) = ia_sl(1:5); ie(1:5) = ib(1:5)+io_cl(1:5)-1;
1172            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1173 &            r4_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
1174 &                  ib(4):ie(4),ib(5):ie(5)), &
1175 &            start=io_sl(:),count=io_cl(:))
1176          ENDIF
1177          DEALLOCATE(r4_5d)
1178        END SELECT
1179      CASE (flio_r8) !--- REAL 8
1180        SELECT CASE (v_d_nb)
1181        CASE (0) !--- Scalar
1182          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),r8_0d)
1183          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)),r8_0d)
1184        CASE (1) !--- 1d array
1185          ALLOCATE(r8_1d(io_n(1)))
1186          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),r8_1d, &
1187 &          start=io_i(:),count=io_n(:))
1188          IF (l_o_f) THEN
1189            ib(1:1) = ia_sf(1:1); ie(1:1) = ib(1:1)+io_cf(1:1)-1;
1190            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1191 &            r8_1d(ib(1):ie(1)), &
1192 &            start=io_sf(:),count=io_cf(:))
1193          ENDIF
1194          ib(1:1) = ia_sm(1:1); ie(1:1) = ib(1:1)+io_cm(1:1)-1;
1195          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1196 &          r8_1d(ib(1):ie(1)), &
1197 &          start=io_sm(:),count=io_cm(:))
1198          IF (l_o_l) THEN
1199            ib(1:1) = ia_sl(1:1); ie(1:1) = ib(1:1)+io_cl(1:1)-1;
1200            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1201 &            r8_1d(ib(1):ie(1)), &
1202 &            start=io_sl(:),count=io_cl(:))
1203          ENDIF
1204          DEALLOCATE(r8_1d)
1205        CASE (2) !--- 2d array
1206          ALLOCATE(r8_2d(io_n(1),io_n(2)))
1207          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),r8_2d, &
1208 &          start=io_i(:),count=io_n(:))
1209          IF (l_o_f) THEN
1210            ib(1:2) = ia_sf(1:2); ie(1:2) = ib(1:2)+io_cf(1:2)-1;
1211            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1212 &            r8_2d(ib(1):ie(1),ib(2):ie(2)), &
1213 &            start=io_sf(:),count=io_cf(:))
1214          ENDIF
1215          ib(1:2) = ia_sm(1:2); ie(1:2) = ib(1:2)+io_cm(1:2)-1;
1216          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1217 &          r8_2d(ib(1):ie(1),ib(2):ie(2)), &
1218 &          start=io_sm(:),count=io_cm(:))
1219          IF (l_o_l) THEN
1220            ib(1:2) = ia_sl(1:2); ie(1:2) = ib(1:2)+io_cl(1:2)-1;
1221            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1222 &            r8_2d(ib(1):ie(1),ib(2):ie(2)), &
1223 &            start=io_sl(:),count=io_cl(:))
1224          ENDIF
1225          DEALLOCATE(r8_2d)
1226        CASE (3) !--- 3d array
1227          ALLOCATE(r8_3d(io_n(1),io_n(2),io_n(3)))
1228          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),r8_3d, &
1229 &          start=io_i(:),count=io_n(:))
1230          IF (l_o_f) THEN
1231            ib(1:3) = ia_sf(1:3); ie(1:3) = ib(1:3)+io_cf(1:3)-1;
1232            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1233 &            r8_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
1234 &            start=io_sf(:),count=io_cf(:))
1235          ENDIF
1236          ib(1:3) = ia_sm(1:3); ie(1:3) = ib(1:3)+io_cm(1:3)-1;
1237          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1238 &          r8_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
1239 &          start=io_sm(:),count=io_cm(:))
1240          IF (l_o_l) THEN
1241            ib(1:3) = ia_sl(1:3); ie(1:3) = ib(1:3)+io_cl(1:3)-1;
1242            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1243 &            r8_3d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3)), &
1244 &            start=io_sl(:),count=io_cl(:))
1245          ENDIF
1246          DEALLOCATE(r8_3d)
1247        CASE (4) !--- 4d array
1248          ALLOCATE(r8_4d(io_n(1),io_n(2),io_n(3),io_n(4)))
1249          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),r8_4d, &
1250 &          start=io_i(:),count=io_n(:))
1251          IF (l_o_f) THEN
1252            ib(1:4) = ia_sf(1:4); ie(1:4) = ib(1:4)+io_cf(1:4)-1;
1253            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1254 &            r8_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
1255 &            start=io_sf(:),count=io_cf(:))
1256          ENDIF
1257          ib(1:4) = ia_sm(1:4); ie(1:4) = ib(1:4)+io_cm(1:4)-1;
1258          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1259 &          r8_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
1260 &          start=io_sm(:),count=io_cm(:))
1261          IF (l_o_l) THEN
1262            ib(1:4) = ia_sl(1:4); ie(1:4) = ib(1:4)+io_cl(1:4)-1;
1263            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1264 &            r8_4d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3),ib(4):ie(4)), &
1265 &            start=io_sl(:),count=io_cl(:))
1266          ENDIF
1267          DEALLOCATE(r8_4d)
1268        CASE (5) !--- 5d array
1269          ALLOCATE(r8_5d(io_n(1),io_n(2),io_n(3),io_n(4),io_n(5)))
1270          CALL fliogetv (f_id_i,TRIM(f_v_nm(iv)),r8_5d, &
1271 &          start=io_i(:),count=io_n(:))
1272          IF (l_o_f) THEN
1273            ib(1:5) = ia_sf(1:5); ie(1:5) = ib(1:5)+io_cf(1:5)-1;
1274            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1275 &            r8_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
1276 &                  ib(4):ie(4),ib(5):ie(5)), &
1277 &            start=io_sf(:),count=io_cf(:))
1278          ENDIF
1279          ib(1:5) = ia_sm(1:5); ie(1:5) = ib(1:5)+io_cm(1:5)-1;
1280          CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1281 &          r8_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
1282 &                ib(4):ie(4),ib(5):ie(5)), &
1283 &          start=io_sm(:),count=io_cm(:))
1284          IF (l_o_l) THEN
1285            ib(1:5) = ia_sl(1:5); ie(1:5) = ib(1:5)+io_cl(1:5)-1;
1286            CALL flioputv (f_id_o,TRIM(f_v_nm(iv)), &
1287 &            r8_5d(ib(1):ie(1),ib(2):ie(2),ib(3):ie(3), &
1288 &                  ib(4):ie(4),ib(5):ie(5)), &
1289 &            start=io_sl(:),count=io_cl(:))
1290          ENDIF
1291          DEALLOCATE(r8_5d)
1292        END SELECT
1293      END SELECT
1294!----
1295      IF (l_cgd) THEN
1296!------ Close each file containing a small piece of data
1297!xxxxxxx
1298!xxxxxxx CALL flioclo(f_id_i)
1299!xxxxxxx
1300      ENDIF
1301    ENDDO
1302!---
1303!-- If needed, deallocate io_* arrays
1304    IF (v_d_nb > 0) THEN
1305      DEALLOCATE(io_i,io_n,ia_sm,io_sm,io_cm)
1306      IF (TRIM(c_d_n) == "apple") THEN
1307        DEALLOCATE(ia_sf,io_sf,io_cf)
1308        DEALLOCATE(ia_sl,io_sl,io_cl)
1309      ENDIF
1310    ENDIF
1311  ENDDO
1312!-
1313!-------------------
1314! Ending the work
1315!-------------------
1316!-
1317! Close files
1318!xxxxxxx
1319!xxxxxxx CALL flioclo (f_id_i1)
1320!xxxxxxx CALL flioclo (f_id_o)
1321  CALL flioclo ()
1322!xxxxxxx
1323!-
1324! Deallocate
1325  DEALLOCATE(f_nm)
1326  DEALLOCATE(f_a_id)
1327  DEALLOCATE(f_d_nm,f_v_nm,f_a_nm)
1328  DEALLOCATE(f_d_i,f_d_l)
1329  DEALLOCATE(d_d_i,d_s_g)
1330  DEALLOCATE(d_s_l,d_p_f,d_p_l,d_h_s,d_h_e)
1331!-
1332  IF (TRIM(c_w_mode) == 'verbose') THEN
1333!-- elapsed and cpu time computation
1334    CALL cpu_time (t_cpu_end)
1335    CALL system_clock(count=nb_cc_end)
1336    WRITE (UNIT=*,FMT='("")')
1337    WRITE (UNIT=*,fmt='(" elapsed time (s) : ",1PE11.4)') &
1338 &   REAL(nb_cc_end-nb_cc_ini)/REAL(nb_cc_sec)
1339    WRITE (UNIT=*,fmt='(" CPU time (s) : ",1PE11.4)') &
1340 &   t_cpu_end-t_cpu_ini
1341  ENDIF
1342!--------------------
1343END PROGRAM flio_rbld
Note: See TracBrowser for help on using the repository browser.