source: branches/publications/ORCHIDEE_CAN_r2290/src_sechiba/sechiba_io_p.f90 @ 5242

Last change on this file since 5242 was 1740, checked in by matthew.mcgrath, 11 years ago

DEV: Trunk changes up to and including r1537

  • Property svn:keywords set to Revision Date HeadURL Date Author Revision
File size: 19.2 KB
Line 
1!! This subroutines initialize a variable or an array
2!! with a variable or an array of smaller rank
3!! - i is for integer interface - r for real interface
4!! - 0 is for a scalar - 1 for a 1D array - 2 for a 2D array
5!! Thee right routines is automatically called depending type of input variable
6!! This initialisation is done only if the value of input field is egal to val_exp
7!!
8!! If a key word is provided which is not equal to "NO_KEYWORD" or "NOKEYWORD" then
9!! we try to find the value to fill in in the configuration file.
10!!
11!! @author Marie-Alice Foujols and Jan Polcher
12!! @Version : $Revision$, $Date$
13!!
14!< $HeadURL$
15!< $Date$
16!< $Author$
17!< $Revision$
18!! IPSL (2006)
19!!  This software is governed by the CeCILL licence see ORCHIDEE/ORCHIDEE_CeCILL.LIC
20!!
21MODULE sechiba_io_p
22
23  USE defprec
24  USE constantes
25  USE ioipsl
26  USE ioipsl_para
27  USE mod_orchidee_para
28
29  IMPLICIT NONE
30
31  INTERFACE setvar_p
32    MODULE PROCEDURE i0setvar_p, i10setvar_p, i20setvar_p, i11setvar_p, i21setvar_p, i22setvar_p
33    MODULE PROCEDURE r0setvar_p, r10setvar_p, r20setvar_p, r11setvar_p, r21setvar_p, r22setvar_p, r30setvar_p
34  END INTERFACE
35
36!
37! mettre la l'interface des routines utilisees:
38!
39! restget/put/ini histbeg/def flinopen/close
40!
41
42LOGICAL, SAVE                  :: long_print_setvar_p=.FALSE.  !! change to true to have more information
43!$OMP THREADPRIVATE(long_print_setvar_p)
44
45CONTAINS 
46
47!! pour declencher les restarts rajoutes avec un parametre externe
48FUNCTION ok_var ( varname )
49  CHARACTER(LEN=*), INTENT(IN) :: varname
50  LOGICAL ok_var
51  ok_var=.FALSE.
52  CALL getin_p(varname, ok_var)
53END FUNCTION ok_var
54
55!! Interface for integer scalar to scalar.
56SUBROUTINE i0setvar_p (var, val_exp, key_wd, val_put)
57
58  INTEGER(i_std), INTENT(inout)                   :: var                  !! Integer scalar to modify
59  INTEGER(i_std), INTENT(in)                      :: val_exp              !! Exceptional value
60  CHARACTER(LEN=*), INTENT(in)                :: key_wd               !! The Key word we will look for
61  INTEGER(i_std), INTENT(in)                      :: val_put              !! Initial value to stored
62
63  INTEGER(i_std)                                  :: val_tmp
64  INTEGER(i_std)                                  :: is_key
65
66  is_key = MAX(INDEX(key_wd, 'NO_KEYWORD'), INDEX(key_wd, 'NOKEYWORD'))
67 
68  IF (long_print_setvar_p) WRITE (numout,*) "i0setvar :", key_wd, val_exp, val_put
69
70  val_tmp = val_put
71
72  IF ( var == val_exp ) THEN
73     IF ( is_key <= 0 ) THEN
74        CALL getin_p(key_wd,  val_tmp)
75     ENDIF
76     var = val_tmp
77  END IF
78 
79END SUBROUTINE i0setvar_p
80
81
82!! Interface for initialising an 1D integer array with a scalar integer.
83SUBROUTINE i10setvar_p (var, val_exp, key_wd, val_put)
84
85  INTEGER(i_std), DIMENSION(:), INTENT(inout)     :: var                  !! 1D integer array to modify
86  INTEGER(i_std), INTENT(in)                      :: val_exp              !! Exceptional value
87  CHARACTER(LEN=*), INTENT(in)                :: key_wd               !! The Key word we will look for
88  INTEGER(i_std), INTENT(in)                      :: val_put              !! Scalar value to stored
89 
90  INTEGER(i_std)                                  :: val_tmp
91  INTEGER(i_std)                                  :: is_key
92
93  is_key = MAX(INDEX(key_wd, 'NO_KEYWORD'), INDEX(key_wd, 'NOKEYWORD'))
94
95  IF (long_print_setvar_p) WRITE (numout,*) "i10setvar :", key_wd, val_exp, val_put
96
97  val_tmp = val_put
98
99  IF ( ALL( var(:) == val_exp ) ) THEN
100     IF ( is_key <= 0 ) THEN
101       CALL getin_p(key_wd,  val_tmp)
102     ENDIF
103     var(:) = val_tmp
104  END IF
105 
106END SUBROUTINE i10setvar_p
107
108
109!! Interface for initialising an 1D array integer with an other 1D array integer.
110SUBROUTINE i11setvar_p (var, val_exp, key_wd, val_put, is_grid)
111 
112  INTEGER(i_std), DIMENSION(:), INTENT(inout)     :: var                 !! 1D integer array to modify
113  INTEGER(i_std), INTENT(in)                      :: val_exp             !! Exceptional value
114  CHARACTER(LEN=*), INTENT(in)                :: key_wd               !! The Key word we will look for
115  INTEGER(i_std), DIMENSION(:), INTENT(in)        :: val_put             !! 1D integer array to stored
116  LOGICAL,        OPTIONAL                        :: is_grid              !! Parameter present indicates a setvar for a grid variable
117
118  INTEGER(i_std), ALLOCATABLE,DIMENSION(:)        :: val_tmp
119  INTEGER(i_std), ALLOCATABLE,DIMENSION(:)        :: val_tmp_g
120  INTEGER(i_std)                                  :: is_key
121
122  is_key = MAX(INDEX(key_wd, 'NO_KEYWORD'), INDEX(key_wd, 'NOKEYWORD'))
123 
124  IF (long_print_setvar_p) WRITE (numout,*) "i11setvar :", key_wd, val_exp, SIZE(val_put), val_put(1)
125
126  ALLOCATE(val_tmp(SIZE(val_put)))
127  val_tmp(:) = val_put(:)
128
129  IF ( ALL( var(:) == val_exp ) ) THEN
130     IF ( is_key <= 0 ) THEN
131        IF (PRESENT(is_grid) ) THEN
132           IF (is_root_prc) THEN
133              ALLOCATE( val_tmp_g(nbp_glo) )
134           ELSE
135              ALLOCATE( val_tmp_g(1) )
136           ENDIF
137           CALL gather( val_tmp,val_tmp_g )
138           IF (is_root_prc) &
139              CALL getin(key_wd,  val_tmp_g)
140           CALL scatter( val_tmp,val_tmp_g )
141           DEALLOCATE( val_tmp_g )
142        ELSE
143           CALL getin_p(key_wd,  val_tmp)
144        ENDIF
145     ENDIF
146     var(:) = val_tmp (:)
147  END IF
148
149  DEALLOCATE(val_tmp)
150 
151END SUBROUTINE i11setvar_p
152
153
154!! Interface for initialising an 2D array integer with a scalar integer.
155SUBROUTINE i20setvar_p (var, val_exp, key_wd, val_put)
156 
157  INTEGER(i_std), DIMENSION(:,:), INTENT(inout)   :: var                  !! 2D integer array to modify
158  INTEGER(i_std), INTENT(in)                      :: val_exp              !! Exceptional value
159  CHARACTER(LEN=*), INTENT(in)                :: key_wd               !! The Key word we will look for
160  INTEGER(i_std), INTENT(in)                      :: val_put              !! Scalar value to stored
161
162  INTEGER(i_std)                                  :: val_tmp
163  INTEGER(i_std)                                  :: is_key
164
165  is_key = MAX(INDEX(key_wd, 'NO_KEYWORD'), INDEX(key_wd, 'NOKEYWORD'))
166 
167  !
168  ! this subroutine set val_put value to var if var is constant
169  !
170  !
171  IF (long_print_setvar_p) WRITE (numout,*) "i20setvar :", key_wd, val_exp, val_put
172
173  val_tmp = val_put
174
175  IF ( ALL( var(:,:) == val_exp ) ) THEN
176     IF ( is_key <= 0 ) THEN
177       CALL getin_p(key_wd,  val_tmp)
178     ENDIF
179     var(:,:) = val_tmp
180  END IF
181 
182END SUBROUTINE i20setvar_p
183
184
185!! Interface for initialising an 2D array integer with an 1D array integer.
186!! Row or column depending size of 1D array to stored.
187!!
188!! example: 1D 1,2,3     2D is 1, 2, 3,
189!!                             1, 2, 3
190!!
191!!
192!! example: 1D 1,2,3     2D is 1, 1,
193!!                             2, 2,
194!!                             3, 3
195!!
196SUBROUTINE i21setvar_p (var, val_exp, key_wd, val_put, is_grid)
197 
198  INTEGER(i_std), DIMENSION(:,:), INTENT(inout)   :: var                  !! 2D integer array to modify
199  INTEGER(i_std), INTENT(in)                      :: val_exp              !! Exceptional value
200  CHARACTER(LEN=*), INTENT(in)                :: key_wd               !! The Key word we will look for
201  INTEGER(i_std), DIMENSION(:), INTENT(in)        :: val_put              !! 1D integer array to stored
202  LOGICAL,        OPTIONAL                        :: is_grid              !! Parameter present indicates a setvar for a grid variable
203 
204  INTEGER(i_std), ALLOCATABLE,DIMENSION(:)        :: val_tmp
205  INTEGER(i_std)                                  :: is_key
206
207  is_key = MAX(INDEX(key_wd, 'NO_KEYWORD'), INDEX(key_wd, 'NOKEYWORD'))
208
209  ! test if the 1D array dimension is compatible with first or second
210  ! dimension of the 2D array
211
212  IF (long_print_setvar_p) WRITE (numout,*) "i21setvar :", key_wd, val_exp, val_put
213
214  ALLOCATE(val_tmp(SIZE(val_put)))
215  val_tmp(:) = val_put(:)
216
217  IF (SIZE(val_put)==SIZE(var,1)) THEN 
218      !
219      ! example: 1D 1.,2.,3.     2D is 1., 2., 3.,
220      !                                1., 2., 3.
221      !
222      IF ( ALL( var(:,:) == val_exp ) ) THEN
223         IF ( is_key <= 0 ) THEN
224           CALL getin_p(key_wd,  val_tmp)
225         ENDIF
226         var(:,:) = SPREAD(val_tmp(:),2,SIZE(var,1))
227      END IF
228  ELSEIF (SIZE(val_put)==SIZE(var,2)) THEN 
229      !
230      ! example: 1D 1.,2.,3.     2D is 1., 1.,
231      !                                2., 2.,
232      !                                3., 3.
233      !
234      IF ( ALL( var(:,:) == val_exp ) ) THEN
235         IF ( is_key <= 0 ) THEN
236           CALL getin_p(key_wd,  val_tmp)
237         ENDIF
238         var(:,:) = SPREAD(val_tmp(:),1,SIZE(var,1))
239      END IF
240  ELSE
241      WRITE (numout,*) ' incompatible dimension var and val_put'
242      WRITE (numout,*) ' var     ', SIZE(var,1), SIZE(var,2)
243      WRITE (numout,*) ' val_put ', SIZE(val_put)
244      STOP 'setvar'
245  END IF
246
247  DEALLOCATE(val_tmp)
248 
249END SUBROUTINE i21setvar_p
250
251!! Interface for initialising an 2D array integer with an other 2D array integer.
252SUBROUTINE i22setvar_p (var, val_exp, key_wd, val_put, is_grid)
253 
254  INTEGER(i_std), DIMENSION(:,:), INTENT(inout)   :: var                 !! 2D integer array to modify
255  INTEGER(i_std), INTENT(in)                      :: val_exp             !! Exceptional value
256  CHARACTER(LEN=*), INTENT(in)                :: key_wd              !! The Key word we will look for
257  INTEGER(i_std), DIMENSION(:,:), INTENT(in)      :: val_put             !! 2D integer array to stored
258  LOGICAL,        OPTIONAL                        :: is_grid              !! Parameter present indicates a setvar for a grid variable
259
260  INTEGER(i_std), ALLOCATABLE, DIMENSION(:,:)     :: val_tmp
261  INTEGER(i_std)                                  :: is_key
262
263  is_key = MAX(INDEX(key_wd, 'NO_KEYWORD'), INDEX(key_wd, 'NOKEYWORD'))
264 
265  IF (long_print_setvar_p) WRITE (numout,*) "i21setvar :", key_wd, val_exp, SIZE(val_put), val_put(1,1)
266
267  ALLOCATE(val_tmp(SIZE(val_put,DIM=1),SIZE(val_put,DIM=2)))
268  val_tmp(:,:) = val_put(:,:)
269
270  IF ( ALL(var(:,:) == val_exp ) ) THEN
271     IF ( is_key <= 0 ) THEN
272       CALL getin_p(key_wd,  val_tmp)
273     ENDIF
274     var(:,:) = val_tmp(:,:)
275  END IF
276
277  DEALLOCATE(val_tmp)
278 
279END SUBROUTINE i22setvar_p
280
281
282!! Interface for scalar to scalar real
283SUBROUTINE r0setvar_p (var, val_exp, key_wd, val_put)
284 
285  REAL(r_std), INTENT(inout)                   :: var                  !! Real scalar to modify
286  REAL(r_std), INTENT(in)                      :: val_exp              !! Exceptional value
287  CHARACTER(LEN=*), INTENT(in)                   :: key_wd               !! The Key word we will look for
288  REAL(r_std), INTENT(in)                      :: val_put              !! Initial value to stored
289 
290  REAL(r_std)                                  :: val_tmp
291  INTEGER(i_std)                                     :: is_key
292
293  is_key = MAX(INDEX(key_wd, 'NO_KEYWORD'), INDEX(key_wd, 'NOKEYWORD'))
294
295  IF (long_print_setvar_p) WRITE (numout,*) "r0setvar :", key_wd, val_exp, val_put
296
297  val_tmp = val_put
298
299  IF ( var==val_exp ) THEN
300     IF ( is_key <= 0 ) THEN
301       CALL getin_p(key_wd,  val_tmp)
302     ENDIF
303     var = val_tmp
304  END IF
305 
306END SUBROUTINE r0setvar_p
307
308
309!! Interface for initialising an 1D real array with a scalar real.
310SUBROUTINE r10setvar_p (var, val_exp, key_wd, val_put)
311 
312  REAL(r_std), DIMENSION(:), INTENT(inout)     :: var                  !! 1D real array to modify
313  REAL(r_std), INTENT(in)                      :: val_exp              !! Exceptional value
314  CHARACTER(LEN=*), INTENT(in)                   :: key_wd               !! The Key word we will look for
315  REAL(r_std), INTENT(in)                      :: val_put              !! Scalar value to stored
316   
317  REAL(r_std)                                  :: val_tmp
318  INTEGER(i_std)                                     :: is_key
319
320  is_key = MAX(INDEX(key_wd, 'NO_KEYWORD'), INDEX(key_wd, 'NOKEYWORD'))
321 
322  IF (long_print_setvar_p) WRITE (numout,*) "r10setvar :", key_wd, val_exp, val_put
323
324  val_tmp = val_put
325
326  IF ( ALL( var(:) == val_exp ) ) THEN
327     IF ( is_key <= 0 ) THEN
328       CALL getin_p(key_wd,  val_tmp)
329     ENDIF
330     var(:) = val_tmp
331  END IF
332 
333END SUBROUTINE r10setvar_p
334
335
336!! Interface for initialising an 1D array real with an other 1D array real.
337SUBROUTINE r11setvar_p (var, val_exp, key_wd, val_put, is_grid)
338 
339  REAL(r_std), DIMENSION(:), INTENT(inout)     :: var                 !! 1D real array to modify
340  REAL(r_std), INTENT(in)                      :: val_exp             !! Exceptional value
341  CHARACTER(LEN=*), INTENT(in)                   :: key_wd              !! The Key word we will look for
342  REAL(r_std), DIMENSION(:), INTENT(in)        :: val_put             !! 1D integer array to stored
343  LOGICAL,        OPTIONAL                        :: is_grid              !! Parameter present indicates a setvar for a grid variable
344
345  REAL(r_std), ALLOCATABLE,DIMENSION(:)        :: val_tmp
346  INTEGER(i_std)                                     :: is_key
347
348  is_key = MAX(INDEX(key_wd, 'NO_KEYWORD'), INDEX(key_wd, 'NOKEYWORD'))
349   
350  IF (long_print_setvar_p) WRITE (numout,*) "r11setvar :", key_wd, val_exp, SIZE(val_put), val_put(1)
351
352  ALLOCATE(val_tmp(SIZE(val_put)))
353  val_tmp(:) = val_put(:)
354
355  IF ( ALL( var(:) == val_exp ) ) THEN
356     IF ( is_key <= 0 ) THEN
357       CALL getin_p(key_wd,  val_tmp)
358     ENDIF
359     var(:) = val_tmp (:)
360  END IF
361
362  DEALLOCATE(val_tmp)
363 
364END SUBROUTINE r11setvar_p
365
366
367!! Interface for initialising an 2D array real with a scalar real.
368SUBROUTINE r20setvar_p (var, val_exp, key_wd, val_put)
369 
370  ! interface for scalar to 2D array real
371
372  REAL(r_std), DIMENSION(:,:), INTENT(inout)   :: var                  !! 2D integer array to modify
373  REAL(r_std), INTENT(in)                      :: val_exp              !! Exceptional value
374  CHARACTER(LEN=*), INTENT(in)                   :: key_wd                  !! The Key word we will look for
375  REAL(r_std), INTENT(in)                      :: val_put              !! Scalar value to stored
376 
377  REAL(r_std)                                  :: val_tmp 
378  INTEGER(i_std)                                     :: is_key
379
380  is_key = MAX(INDEX(key_wd, 'NO_KEYWORD'), INDEX(key_wd, 'NOKEYWORD'))
381 
382  IF (long_print_setvar_p) WRITE (numout,*) "r20setvar :", key_wd, val_exp, val_put
383
384  val_tmp = val_put
385
386  IF ( ALL( var(:,:) == val_exp ) ) THEN
387     IF ( is_key <= 0 ) THEN
388       CALL getin_p(key_wd,  val_tmp)
389     ENDIF
390     var(:,:) = val_tmp
391  END IF
392 
393END SUBROUTINE r20setvar_p
394
395
396!! Interface for initialising an 2D array real with an 1D array real.
397!! Row or column depending size of 1D array to stored.
398!!
399!! example: 1D 1.,2.,3.     2D is 1., 2., 3.,
400!!                                1., 2., 3.
401!!
402!!
403!! example: 1D 1.,2.,3.     2D is 1., 1.,
404!!                                2., 2.,
405!!                                3., 3.
406!!
407SUBROUTINE r21setvar_p (var, val_exp, key_wd, val_put, is_grid)
408 
409  ! interface for 1D array to 2D array real
410
411  REAL(r_std), DIMENSION(:,:), INTENT(inout)   :: var                  !! 2D real array to modify
412  REAL(r_std), INTENT(in)                      :: val_exp              !! Exceptional value
413  CHARACTER(LEN=*), INTENT(in)                   :: key_wd               !! The Key word we will look for
414  REAL(r_std), DIMENSION(:), INTENT(in)        :: val_put              !! 1D real array to stored
415  LOGICAL,        OPTIONAL                        :: is_grid              !! Parameter present indicates a setvar for a grid variable
416
417  REAL(r_std), ALLOCATABLE,DIMENSION(:)        :: val_tmp
418  INTEGER(i_std)                                     :: is_key
419
420  is_key = MAX(INDEX(key_wd, 'NO_KEYWORD'), INDEX(key_wd, 'NOKEYWORD'))
421 
422  ! test if the 1D array dimension is compatible with first or second
423  ! dimension of the 2D array
424
425  IF (long_print_setvar_p) WRITE (numout,*) "r21setvar :", key_wd, val_exp, SIZE(val_put), val_put(1)
426
427  ALLOCATE(val_tmp(SIZE(val_put)))
428  val_tmp(:) = val_put(:)
429
430  IF (SIZE(val_put)==SIZE(var,1)) THEN 
431      !
432      ! example: 1D 1.,2.,3.     2D is 1., 2., 3.,
433      !                                1., 2., 3.
434      !
435      IF ( ALL( var(:,:) == val_exp ) ) THEN
436         IF ( is_key <= 0 ) THEN
437           CALL getin_p(key_wd,  val_tmp)
438         ENDIF
439         var(:,:) = SPREAD(val_tmp(:),2,SIZE(var,1))
440      END IF
441  ELSEIF (SIZE(val_put)==SIZE(var,2)) THEN 
442      !
443      ! example: 1D 1.,2.,3.     2D is 1., 1.,
444      !                                2., 2.,
445      !                                3., 3.
446      !
447      IF ( ALL( var(:,:) == val_exp ) ) THEN
448         IF ( is_key <= 0 ) THEN
449           CALL getin_p(key_wd,  val_tmp)
450         ENDIF
451         var(:,:) = SPREAD(val_tmp(:),1,SIZE(var,1))
452      END IF
453  ELSE
454      WRITE (numout,*) ' incompatible dimension var and val_put'
455      WRITE (numout,*) ' var     ', SIZE(var,1), SIZE(var,2)
456      WRITE (numout,*) ' val_put ', SIZE(val_put)
457      STOP 'setvar'
458  END IF
459
460  DEALLOCATE(val_tmp)
461 
462END SUBROUTINE r21setvar_p
463
464
465!! Interface for initialising a real 2D array with a scalar parameter from run.def or an other 2D array in argument
466SUBROUTINE r22setvar_p (var, val_exp, key_wd, val_put)
467 
468  ! interface for 2D array to 2D array real
469  ! If a key_wd is set, it is supposed to be a scalar parameter will be read from run.def
470  ! It is not possible to read a 2D variable from run.def
471
472  REAL(r_std), DIMENSION(:,:), INTENT(inout)   :: var                 !! 2D real array to modify
473  REAL(r_std), INTENT(in)                      :: val_exp             !! Exceptional value
474  CHARACTER(LEN=*), INTENT(in)                 :: key_wd              !! The Key word we will look for
475  REAL(r_std), DIMENSION(:,:), INTENT(in)      :: val_put             !! 2D integer array to stored
476  REAL(r_std), ALLOCATABLE, DIMENSION(:,:)     :: val_tmp
477  REAL(r_std)                                  :: val_scal            !! Temporary variable to read a scalar value from run.def
478  INTEGER(i_std)                               :: is_key
479
480  is_key = MAX(INDEX(key_wd, 'NO_KEYWORD'), INDEX(key_wd, 'NOKEYWORD'))
481
482  IF (long_print_setvar_p) WRITE (numout,*) "r22setvar :", key_wd, val_exp, SIZE(val_put), val_put(1,1)
483
484  ALLOCATE(val_tmp(SIZE(val_put,DIM=1),SIZE(val_put,DIM=2)))
485  val_tmp(:,:) = val_put(:,:)
486
487  IF ( ALL( var(:,:) == val_exp ) ) THEN
488     IF ( is_key <= 0 ) THEN
489        ! This case only read a scalar value with getin
490        val_scal=val_exp
491        CALL getin_p(key_wd, val_scal)
492        ! If a value was found in run.def, then set val_tmp to this value.
493        IF (val_scal/=val_exp) val_tmp(:,:)=val_scal 
494     ENDIF
495     var(:,:) = val_tmp(:,:)
496  END IF
497
498  DEALLOCATE(val_tmp)
499 
500END SUBROUTINE r22setvar_p
501
502!! Interface for initialising an 3D array real with a scalar real.
503SUBROUTINE r30setvar_p (var, val_exp, key_wd, val_put)
504
505  ! interface for scalar to 3D array real
506
507  REAL(r_std), DIMENSION(:,:,:), INTENT(inout) :: var                  !! 3D integer array to modify
508  REAL(r_std), INTENT(in)                      :: val_exp              !! Exceptional value
509  CHARACTER(LEN=*), INTENT(in)                :: key_wd               !! The Key word we will look for
510  REAL(r_std), INTENT(in)                      :: val_put              !! Scalar value to stored
511
512  REAL(r_std)                                  :: val_tmp 
513  INTEGER(i_std)                              :: is_key
514
515  is_key = MAX(INDEX(key_wd, 'NO_KEYWORD'), INDEX(key_wd, 'NOKEYWORD'))
516
517  IF (long_print_setvar_p) WRITE(numout,*) 'r30setvar',val_exp, val_put
518
519  val_tmp = val_put
520
521  IF ( ALL( var(:,:,:) == val_exp ) ) THEN
522     IF ( is_key <= 0 ) THEN
523       CALL getin_p(key_wd,  val_tmp)
524     ENDIF
525     var(:,:,:) = val_tmp
526  END IF
527
528END SUBROUTINE r30setvar_p
529
530END MODULE sechiba_io_p
Note: See TracBrowser for help on using the repository browser.