source: dynamico_lmdz/aquaplanet/IOIPSL/rebuild_src/i.flio_rbld.L @ 3890

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

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

YM

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