SURFEX v8.1
General documentation of Surfex
read_surf.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 !##################
7 !##################
8 !
9 !!**** *READX0* - routine to read a real scalar
10 !!
11 !! PURPOSE
12 !! -------
13 !
14 ! The purpose of READX0 is
15 !
16 !!** METHOD
17 !! ------
18 !!
19 !! EXTERNAL
20 !! --------
21 !!
22 !!
23 !!
24 !! IMPLICIT ARGUMENTS
25 !! ------------------
26 !!
27 !!
28 !! REFERENCE
29 !! ---------
30 !!
31 !!
32 !! AUTHOR
33 !! ------
34 !!
35 !! S.Malardel *METEO-FRANCE*
36 !!
37 !! MODIFICATIONS
38 !! -------------
39 !!
40 !! original 01/08/03
41 !! J.Escobar 10/06/2013: replace DOUBLE PRECISION by REAL to handle problem for promotion of real on IBM SP
42 !----------------------------------------------------------------------------
43 !
44  INTERFACE read_surf
45 !
46  SUBROUTINE read_surfx0 (&
47  HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
48 !
49 !
50  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
51  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
52 REAL, INTENT(OUT) :: PFIELD ! real scalar to be read
53 INTEGER,INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
54  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
55  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR
56 !
57 END SUBROUTINE read_surfx0
58 !
59  SUBROUTINE read_surfx1 (&
60  HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
61 !
62 !
63  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
64  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
65 REAL, DIMENSION(:), INTENT(OUT) ::PFIELD ! array containing the data field
66 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
67  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
68  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR ! type of field :
69 ! ! 'H' : field with
70 ! ! horizontal spatial dim.
71 ! ! '-' : no horizontal dim.
72 END SUBROUTINE read_surfx1
73 !
74  SUBROUTINE read_surfx2 (&
75  HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
76 !
77 !
78  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
79  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
80 REAL, DIMENSION(:,:), INTENT(OUT) :: PFIELD ! array containing the data field
81 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
82  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
83  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR ! type of field :
84 ! ! 'H' : field with
85 ! ! horizontal spatial dim.
86 ! ! '-' : no horizontal dim.
87 END SUBROUTINE read_surfx2
88 !
89 !RJ: interface to READ_SURFX2COV moved out
90 !
91  SUBROUTINE read_surfx3 (&
92  HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
93 !
94 !
95  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
96  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
97 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFIELD ! array containing the data field
98 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
99  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
100  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR ! type of field :
101 ! ! 'H' : field with
102 ! ! horizontal spatial dim.
103 ! ! '-' : no horizontal dim.
104 END SUBROUTINE read_surfx3
105 !
106  SUBROUTINE read_surfn0 (&
107  HPROGRAM,HREC,KFIELD,KRESP,HCOMMENT,HDIR)
108 !
109 !
110  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
111  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
112 INTEGER, INTENT(OUT) :: KFIELD ! integer to be read
113 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
114  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
115  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR
116 !
117 END SUBROUTINE read_surfn0
118 !
119  SUBROUTINE read_surfn1 (&
120  HPROGRAM,HREC,KFIELD,KRESP,HCOMMENT,HDIR)
121 !
122 !
123  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
124  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
125 INTEGER, DIMENSION(:), INTENT(OUT) :: KFIELD ! integer to be read
126 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
127  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
128  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR ! type of field :
129 ! ! 'H' : field with
130 ! ! horizontal spatial dim.
131 ! ! '-' : no horizontal dim.
132 END SUBROUTINE read_surfn1
133 !
134  SUBROUTINE read_surfc0 (&
135  HPROGRAM,HREC,HFIELD,KRESP,HCOMMENT,HDIR)
136 !
137 !
138  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
139  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
140  CHARACTER(LEN=*), INTENT(OUT) :: HFIELD ! caracter to be read
141 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
142  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
143  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR
144 !
145 END SUBROUTINE read_surfc0
146 !
147  SUBROUTINE read_surfl0 (&
148  HPROGRAM,HREC,OFIELD,KRESP,HCOMMENT,HDIR)
149 !
150 !
151  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
152  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
153 LOGICAL, INTENT(OUT) :: OFIELD ! array containing the data field
154 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
155  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
156  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR
157 !
158 END SUBROUTINE read_surfl0
159 !
160  SUBROUTINE read_surfl1 (&
161  HPROGRAM,HREC,OFIELD,KRESP,HCOMMENT,HDIR)
162 !
163 !
164  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
165  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
166 LOGICAL, DIMENSION(:), INTENT(OUT) :: OFIELD ! array containing the data field
167 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
168  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
169  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR ! type of field :
170 ! ! 'H' : field with
171 ! ! horizontal spatial dim.
172 ! ! '-' : no horizontal dim.
173 END SUBROUTINE read_surfl1
174 !
175  SUBROUTINE read_surft0 (&
176  HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT,HDIR)
177 !
178 !
180 !
181  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
182  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
183 TYPE(date_time), INTENT(INOUT) ::TFIELD ! array containing the data field
184 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
185  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
186  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR
187 !
188 END SUBROUTINE read_surft0
189 !
190  SUBROUTINE read_surft1 (&
191  HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT,HDIR)
192 !
193 !
195 !
196  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
197  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
198 type(date_time), DIMENSION(:), INTENT(INOUT) :: tfield ! array containing the data field
199 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
200  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
201  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR
202 !
203 END SUBROUTINE read_surft1
204 !
205  SUBROUTINE read_surft2 (&
206  HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT,HDIR)
207 !
208 !
210 !
211  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
212  CHARACTER(LEN=*), INTENT(IN) ::HREC ! name of the article to be read
213 type(date_time), DIMENSION(:,:), INTENT(INOUT)::tfield ! array containing the data field
214 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
215  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
216  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR
217 !
218 END SUBROUTINE read_surft2
219 !
220 END INTERFACE
221 !
222 END MODULE modi_read_surf
223 !
224 ! #############################################################
225  SUBROUTINE read_surfx0 (&
226  HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
227 ! #############################################################
228 !
229 !
230 !
231 !
232 USE yomhook ,ONLY : lhook, dr_hook
233 USE parkind1 ,ONLY : jprb
234 !
236 !
237 #ifdef SFX_OL
239 #endif
240 #ifdef SFX_LFI
242 #endif
243 #ifdef SFX_NC
245 #endif
246 #ifdef SFX_ASC
248 #endif
249 #ifdef SFX_FA
251 #endif
252 #ifdef SFX_MNH
253 USE modi_read_surfx0_mnh
254 #endif
255 #ifdef SFX_ARO
256 USE modi_read_surfx0_aro
257 #endif
258 !
259 IMPLICIT NONE
260 !
261 #ifdef SFX_MPI
262 include "mpif.h"
263 #endif
264 !
265 !
266 !* 0.1 Declarations of arguments
267 !
268  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
269  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
270 REAL, INTENT(OUT) :: PFIELD ! the real scalar to be read
271 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
272  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
273  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR
274 !
275 !* 0.2 Declarations of local variables
276 !
277  CHARACTER(LEN=100) :: YCOMMENT
278  CHARACTER(LEN=16) :: YREC
279  CHARACTER(LEN=1) :: YDIR
280 REAL :: XTIME0
281 INTEGER :: INFOMPI
282 REAL :: ZWORK
283 REAL(KIND=JPRB) :: ZHOOK_HANDLE
284 !
285 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX0',0,zhook_handle)
286 !
287 kresp = 0
288 ycomment = ""
289 !
290 yrec = hrec
291 ydir = 'H'
292 IF (PRESENT(hdir)) ydir = hdir
293 !
294 IF (hprogram=='MESONH') THEN
295 #ifdef SFX_MNH
296  CALL read_surfx0_mnh(yrec,pfield,kresp,ycomment)
297 #endif
298 ENDIF
299 !
300 IF (hprogram=='AROME ') THEN
301 #ifdef SFX_ARO
302  CALL read_surfx0_aro(yrec,pfield,kresp,ycomment)
303 #endif
304 ENDIF
305 !
306 IF (hprogram=='OFFLIN' .OR. hprogram=='ASCII ' .OR. &
307  hprogram=='FA ' .OR. hprogram=='LFI ' .OR. &
308  hprogram=='NC ') THEN
309  !
310  IF (nrank==npio) THEN
311  !
312 #ifdef SFX_MPI
313  xtime0 = mpi_wtime()
314 #endif
315  !
316  IF (hprogram=='OFFLIN') THEN
317 #ifdef SFX_OL
318  CALL read_surf0_ol(yrec,pfield,kresp,ycomment)
319 #endif
320  ELSEIF (hprogram=='LFI ') THEN
321 #ifdef SFX_LFI
322  CALL read_surf0_lfi(yrec,pfield,kresp,ycomment)
323 #endif
324  ELSEIF (hprogram=='ASCII ') THEN
325 #ifdef SFX_ASC
326  CALL read_surf0_asc(&
327  yrec,pfield,kresp,ycomment)
328 #endif
329  ELSEIF (hprogram=='FA ') THEN
330 #ifdef SFX_FA
331  CALL read_surf0_fa(&
332  yrec,pfield,kresp,ycomment)
333 #endif
334  ELSEIF (hprogram=='NC ') THEN
335 #ifdef SFX_NC
336  CALL read_surf0_nc(yrec,pfield,kresp,ycomment)
337 #endif
338  ENDIF
339  !
340 #ifdef SFX_MPI
341  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
342 #endif
343  !
344  ENDIF
345  !
346 #ifdef SFX_MPI
347  IF (ydir/='A' .AND. nproc>1) THEN
348  xtime0 = mpi_wtime()
349  CALL mpi_bcast(pfield,kind(pfield)/4,mpi_real,npio,ncomm,infompi)
350  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
351  ENDIF
352 #endif
353  !
354 ENDIF
355 !
356 IF (PRESENT(hcomment)) hcomment = ycomment
357 !
358 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX0',1,zhook_handle)
359 !
360 END SUBROUTINE read_surfx0
361 !
362 ! #############################################################
363  SUBROUTINE read_surfx1 (HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
364 ! #############################################################
365 !
366 !
367 !
368 !
369 USE yomhook ,ONLY : lhook, dr_hook
370 USE parkind1 ,ONLY : jprb
371 !
372 USE modd_surf_par, ONLY : xundef
373 USE modd_assim, ONLY : lassim, lread_all, cassim_isba
374 !
375 #ifdef SFX_OL
377 #endif
378 #ifdef SFX_LFI
380 #endif
381 #ifdef SFX_NC
383 #endif
384 #ifdef SFX_ASC
386 #endif
387 #ifdef SFX_FA
389 #endif
390 #ifdef SFX_MNH
391 USE modi_read_surfx1_mnh
392 #endif
393 #ifdef SFX_ARO
394 USE modi_read_surfx1_aro
395 #endif
396 !
397 USE modi_get_iok_assim
398 !
399 IMPLICIT NONE
400 !
401 !
402 !* 0.1 Declarations of arguments
403 !
404  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
405 !
406 !
407  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
408 REAL, DIMENSION(:), INTENT(OUT) :: PFIELD ! array containing the data field
409 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
410  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
411  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR ! type of field :
412 ! ! 'H' : field with
413 ! ! horizontal spatial dim.
414 ! ! '-' : no horizontal dim.
415 !* 0.2 Declarations of local variables
416 !
417  CHARACTER(LEN=100) :: YCOMMENT
418  CHARACTER(LEN=16) :: YREC
419  CHARACTER(LEN=1) :: YDIR
420 INTEGER :: IL, IOK
421 REAL(KIND=JPRB) :: ZHOOK_HANDLE
422 !
423 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX1',0,zhook_handle)
424 !
425 yrec = hrec
426 ydir = 'H'
427 IF (PRESENT(hdir)) ydir = hdir
428 !
429 il = SIZE(pfield)
430 !
431 IF (lassim .AND. cassim_isba/="OI " .AND. .NOT.lread_all) THEN
432  !
433  CALL get_iok_assim(yrec,iok)
434  !
435  IF (iok==0) THEN
436  pfield(:) = xundef
437  IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX1',1,zhook_handle)
438  RETURN
439  ENDIF
440  !
441 ENDIF
442 !
443 IF (hprogram=='MESONH') THEN
444 #ifdef SFX_MNH
445  CALL read_surfx1_mnh(yrec,il,pfield,kresp,ycomment,ydir)
446 #endif
447 ENDIF
448 !
449 IF (hprogram=='AROME ') THEN
450 #ifdef SFX_ARO
451  CALL read_surfx1_aro(yrec,il,pfield,kresp,ycomment,ydir)
452 #endif
453 ENDIF
454 !
455 IF (hprogram=='OFFLIN') THEN
456 #ifdef SFX_OL
457  CALL read_surfx1n1_ol(yrec,pfield,kresp,ycomment,ydir)
458 #endif
459 ENDIF
460 !
461 IF (hprogram=='LFI ') THEN
462 #ifdef SFX_LFI
463  CALL read_surfn_lfi(yrec,pfield,kresp,ycomment,ydir)
464 #endif
465 ENDIF
466 !
467 IF (hprogram=='NC ') THEN
468 #ifdef SFX_NC
469  CALL read_surfn_nc(yrec,pfield,kresp,ycomment,ydir)
470 #endif
471 ENDIF
472 !
473 IF (hprogram=='ASCII ') THEN
474 #ifdef SFX_ASC
475  CALL read_surfn_asc(&
476  yrec,pfield,kresp,ycomment,ydir)
477 #endif
478 ENDIF
479 !
480 IF (hprogram=='FA ') THEN
481 #ifdef SFX_FA
482  CALL read_surfx_fa(yrec,il,pfield,kresp,ycomment,ydir)
483 #endif
484 ENDIF
485 !
486 IF (PRESENT(hcomment)) hcomment = ycomment
487 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX1',1,zhook_handle)
488 !
489 END SUBROUTINE read_surfx1
490 !
491 ! #############################################################
492  SUBROUTINE read_surfx2 (HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
493 ! #############################################################
494 !
495 !
496 !
497 !
498 USE yomhook ,ONLY : lhook, dr_hook
499 USE parkind1 ,ONLY : jprb
500 !
501 USE modd_surf_par, ONLY : xundef
502 USE modd_assim, ONLY : lassim, lread_all, cassim_isba
503 !
504 #ifdef SFX_OL
506 #endif
507 #ifdef SFX_LFI
509 #endif
510 #ifdef SFX_NC
512 #endif
513 #ifdef SFX_ASC
515 #endif
516 #ifdef SFX_FA
518 #endif
519 #ifdef SFX_MNH
520 USE modi_read_surfx2_mnh
521 #endif
522 #ifdef SFX_ARO
523 USE modi_read_surfx2_aro
524 #endif
525 !
526 USE modi_get_iok_assim
527 !
528 IMPLICIT NONE
529 !
530 !
531 !* 0.1 Declarations of arguments
532 !
533  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
534 !
535 !
536  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
537 REAL, DIMENSION(:,:), INTENT(OUT) :: PFIELD ! array containing the data field
538 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
539  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
540  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR ! type of field :
541 ! ! 'H' : field with
542 ! ! horizontal spatial dim.
543 ! ! '-' : no horizontal dim.
544 !* 0.2 Declarations of local variables
545 !
546  CHARACTER(LEN=100) :: YCOMMENT
547  CHARACTER(LEN=16) :: YREC
548  CHARACTER(LEN=1) :: YDIR
549 INTEGER :: IL1, IL2, IOK
550 REAL(KIND=JPRB) :: ZHOOK_HANDLE
551 !
552 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX2',0,zhook_handle)
553 !
554 yrec = hrec
555 ydir = 'H'
556 IF (PRESENT(hdir)) ydir = hdir
557 !
558 il1 = SIZE(pfield,1)
559 il2 = SIZE(pfield,2)
560 !
561 IF (lassim .AND. cassim_isba/="OI " .AND. .NOT.lread_all) THEN
562  !
563  CALL get_iok_assim(yrec,iok)
564  !
565  IF (iok==0) THEN
566  pfield(:,:) = xundef
567  IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX2',1,zhook_handle)
568  RETURN
569  ENDIF
570  !
571 ENDIF
572 !
573 IF (hprogram=='MESONH') THEN
574 #ifdef SFX_MNH
575  CALL read_surfx2_mnh(yrec,il1,il2,pfield,kresp,ycomment,ydir)
576 #endif
577 ENDIF
578 !
579 IF (hprogram=='AROME ') THEN
580 #ifdef SFX_ARO
581  CALL read_surfx2_aro(yrec,il1,il2,pfield,kresp,ycomment,ydir)
582 #endif
583 ENDIF
584 !
585 IF (hprogram=='OFFLIN') THEN
586 #ifdef SFX_OL
587  CALL read_surfl1x2_ol(yrec,pfield,kresp,ycomment,ydir)
588 #endif
589 ENDIF
590 !
591 IF (hprogram=='LFI ') THEN
592 #ifdef SFX_LFI
593  CALL read_surfn_lfi(yrec,pfield,kresp,ycomment,ydir)
594 #endif
595 ENDIF
596 !
597 IF (hprogram=='NC ') THEN
598 #ifdef SFX_NC
599  CALL read_surfn_nc(yrec,pfield,kresp,ycomment,ydir)
600 #endif
601 ENDIF
602 !
603 IF (hprogram=='ASCII ') THEN
604 #ifdef SFX_ASC
605  CALL read_surfn_asc(yrec,pfield,kresp,ycomment,ydir)
606 #endif
607 ENDIF
608 !
609 IF (hprogram=='FA ') THEN
610 #ifdef SFX_FA
611  CALL read_surfx_fa(yrec,il1,il2,pfield,kresp,ycomment,ydir)
612 #endif
613 ENDIF
614 !
615 IF (PRESENT(hcomment)) hcomment = ycomment
616 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX2',1,zhook_handle)
617 !
618 END SUBROUTINE read_surfx2
619 !
620 ! #############################################################
621  SUBROUTINE read_surfx3 (&
622  HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
623 ! #############################################################
624 !
625 !
626 !
627 !
628 USE yomhook ,ONLY : lhook, dr_hook
629 USE parkind1 ,ONLY : jprb
630 !
631 #ifdef SFX_OL
633 #endif
634 !
635 IMPLICIT NONE
636 !
637 !* 0.1 Declarations of arguments
638 !
639  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
640 !
641 !
642  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
643 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFIELD ! array containing the data field
644 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
645  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
646  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR ! type of field :
647 ! ! 'H' : field with
648 ! ! horizontal spatial dim.
649 ! ! '-' : no horizontal dim.
650 !* 0.2 Declarations of local variables
651 !
652  CHARACTER(LEN=100) :: YCOMMENT
653  CHARACTER(LEN=16) :: YREC
654  CHARACTER(LEN=1) :: YDIR
655 INTEGER :: IL1, IL2, IL3
656 REAL(KIND=JPRB) :: ZHOOK_HANDLE
657 !
658 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX3',0,zhook_handle)
659 !
660 yrec = hrec
661 ydir = 'H'
662 IF (PRESENT(hdir)) ydir = hdir
663 !
664 il1 = SIZE(pfield,1)
665 il2 = SIZE(pfield,2)
666 il3 = SIZE(pfield,3)
667 !
668 !plmIF (HPROGRAM=='MESONH') THEN
669 !plm CALL READ_SURFX3_MNH(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
670 !plmENDIF
671 !
672 IF (hprogram=='OFFLIN') THEN
673 #ifdef SFX_OL
674  CALL read_surfl1x2_ol(yrec,pfield,kresp,ycomment,ydir)
675 #endif
676 ENDIF
677 !
678 !plmIF (HPROGRAM=='ASCII ') THEN
679 !plm CALL READ_SURFX3_ASC(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
680 !plmENDIF
681 !
682 !plmIF (HPROGRAM=='AROME ') THEN
683 !plm CALL READ_SURFX3_ARO(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
684 !plmENDIF
685 !
686 !plmIF (HPROGRAM=='FA ') THEN
687 !plm CALL READ_SURFX3_FA(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
688 !plmENDIF
689 !
690 IF (PRESENT(hcomment)) hcomment = ycomment
691 !
692 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX3',1,zhook_handle)
693 !
694 END SUBROUTINE read_surfx3
695 !
696 ! #############################################################
697  SUBROUTINE read_surfn0 (&
698  HPROGRAM,HREC,KFIELD,KRESP,HCOMMENT,HDIR)
699 ! #############################################################
700 !
701 !
702 !
703 !
704 USE yomhook ,ONLY : lhook, dr_hook
705 USE parkind1 ,ONLY : jprb
706 !
708 !
709 #ifdef SFX_OL
711 #endif
712 #ifdef SFX_LFI
715 #endif
716 #ifdef SFX_NC
718 #endif
719 #ifdef SFX_ASC
721 #endif
722 #ifdef SFX_FA
724 #endif
725 #ifdef SFX_MNH
726 USE modi_read_surfn0_mnh
727 #endif
728 #ifdef SFX_ARO
729 USE modi_read_surfn0_aro
730 #endif
731 !
732 IMPLICIT NONE
733 !
734 #ifdef SFX_MPI
735 include "mpif.h"
736 #endif
737 !
738 !
739 !
740 !* 0.1 Declarations of arguments
741 !
742  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
743  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
744 INTEGER, INTENT(OUT) :: KFIELD ! the integer to be read
745 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
746  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
747  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR
748 !
749 !* 0.2 Declarations of local variables
750 !
751  CHARACTER(LEN=100) :: YCOMMENT
752  CHARACTER(LEN=16) :: YREC
753  CHARACTER(LEN=1) :: YDIR
754 REAL :: XTIME0
755 INTEGER, DIMENSION(6) :: IDIMS
756 INTEGER :: INFOMPI
757 REAL(KIND=JPRB) :: ZHOOK_HANDLE
758 !
759 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFN0',0,zhook_handle)
760 !
761 kresp = 0
762 ycomment = ""
763 !
764 yrec = hrec
765 ydir = 'H'
766 IF (PRESENT(hdir)) ydir = hdir
767 !
768 IF (hprogram=='MESONH') THEN
769 #ifdef SFX_MNH
770  CALL read_surfn0_mnh(yrec,kfield,kresp,ycomment)
771 #endif
772 ENDIF
773 !
774 IF (hprogram=='AROME ') THEN
775 #ifdef SFX_ARO
776  CALL read_surfn0_aro(yrec,kfield,kresp,ycomment)
777 #endif
778 ENDIF
779 !
780 IF (hprogram=='OFFLIN' .OR. hprogram=='ASCII ' .OR. &
781  hprogram=='FA ' .OR. hprogram=='LFI ' .OR. &
782  hprogram=='NC ' ) THEN
783  !
784  IF (nrank==npio) THEN
785  !
786 #ifdef SFX_MPI
787  xtime0 = mpi_wtime()
788 #endif
789  !
790  IF (hprogram=='OFFLIN') THEN
791 #ifdef SFX_OL
792  CALL read_surf0_ol(yrec,kfield,kresp,ycomment)
793 #endif
794  ENDIF
795  !
796  IF (hprogram=='LFI ') THEN
797 #ifdef SFX_LFI
798  CALL read_surf0_lfi(yrec,kfield,kresp,ycomment)
799 #endif
800  ENDIF
801  !
802  IF (hprogram=='NC ') THEN
803 #ifdef SFX_NC
804  CALL read_surf0_nc(yrec,kfield,kresp,ycomment)
805 #endif
806  ENDIF
807  !
808  IF (hprogram=='ASCII ') THEN
809 #ifdef SFX_ASC
810  CALL read_surf0_asc(&
811  yrec,kfield,kresp,ycomment)
812 #endif
813  ENDIF
814  !
815  IF (hprogram=='FA ') THEN
816 #ifdef SFX_FA
817  CALL read_surf0_fa(&
818  yrec,kfield,kresp,ycomment)
819 #endif
820  ENDIF
821  !
822 #ifdef SFX_MPI
823  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
824 #endif
825  !
826  ENDIF
827  !
828 #ifdef SFX_MPI
829  IF (ydir/='A' .AND. nproc>1) THEN
830  xtime0 = mpi_wtime()
831  CALL mpi_bcast(kfield,kind(kfield)/4,mpi_integer,npio,ncomm,infompi)
832 #ifdef SFX_LFI
833  IF (hprogram=='LFI '.AND.trim(hrec)=="DIM_FULL") THEN
834  CALL mpi_bcast(lmnh_compatible,1,mpi_logical,npio,ncomm,infompi)
835  IF (nrank==npio) THEN
836  idims(1) = niu
837  idims(2) = nib
838  idims(3) = nie
839  idims(4) = nju
840  idims(5) = njb
841  idims(6) = nje
842  ENDIF
843  CALL mpi_bcast(idims,SIZE(idims)*kind(idims)/4,mpi_integer,npio,ncomm,infompi)
844  IF (nrank/=npio) THEN
845  niu = idims(1)
846  nib = idims(2)
847  nie = idims(3)
848  nju = idims(4)
849  njb = idims(5)
850  nje = idims(6)
851  ENDIF
852  ENDIF
853 #endif
854  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
855  ENDIF
856 #endif
857  !
858 ENDIF
859 !
860 IF (PRESENT(hcomment)) hcomment = ycomment
861 !
862 !
863 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFN0',1,zhook_handle)
864 !
865 END SUBROUTINE read_surfn0
866 !
867 ! #############################################################
868  SUBROUTINE read_surfn1 (&
869  HPROGRAM,HREC,KFIELD,KRESP,HCOMMENT,HDIR)
870 ! #############################################################
871 !
872 !
873 !
874 !
875 USE yomhook ,ONLY : lhook, dr_hook
876 USE parkind1 ,ONLY : jprb
877 !
878 #ifdef SFX_OL
880 #endif
881 #ifdef SFX_LFI
883 #endif
884 #ifdef SFX_NC
886 #endif
887 #ifdef SFX_ASC
889 #endif
890 #ifdef SFX_FA
892 #endif
893 #ifdef SFX_MNH
894 USE modi_read_surfn1_mnh
895 #endif
896 #ifdef SFX_ARO
897 USE modi_read_surfn1_aro
898 #endif
899 !
900 IMPLICIT NONE
901 !
902 !
903 !* 0.1 Declarations of arguments
904 !
905  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
906 !
907 !
908  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
909 INTEGER, DIMENSION(:), INTENT(OUT) :: KFIELD ! the integer to be read
910 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
911  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
912  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR ! type of field :
913 ! ! 'H' : field with
914 ! ! horizontal spatial dim.
915 ! ! '-' : no horizontal dim.
916 !* 0.2 Declarations of local variables
917 !
918  CHARACTER(LEN=100) :: YCOMMENT
919  CHARACTER(LEN=16) :: YREC
920  CHARACTER(LEN=1) :: YDIR
921 INTEGER :: IL
922 REAL(KIND=JPRB) :: ZHOOK_HANDLE
923 !
924 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFN1',0,zhook_handle)
925 !
926 yrec = hrec
927 ydir = 'H'
928 IF (PRESENT(hdir)) ydir = hdir
929 !
930 il = SIZE(kfield,1)
931 !
932 IF (hprogram=='MESONH') THEN
933 #ifdef SFX_MNH
934  CALL read_surfn1_mnh(yrec,il,kfield,kresp,ycomment,ydir)
935 #endif
936 ENDIF
937 !
938 IF (hprogram=='AROME ') THEN
939 #ifdef SFX_ARO
940  CALL read_surfn1_aro(yrec,il,kfield,kresp,ycomment,ydir)
941 #endif
942 ENDIF
943 !
944 IF (hprogram=='OFFLIN') THEN
945 #ifdef SFX_OL
946  CALL read_surfx1n1_ol(yrec,kfield,kresp,ycomment,ydir)
947 #endif
948 ENDIF
949 !
950 IF (hprogram=='LFI ') THEN
951 #ifdef SFX_LFI
952  CALL read_surfn_lfi(yrec,kfield,kresp,ycomment,ydir)
953 #endif
954 ENDIF
955 !
956 IF (hprogram=='NC ') THEN
957 #ifdef SFX_NC
958  CALL read_surfn_nc(yrec,kfield,kresp,ycomment,ydir)
959 #endif
960 ENDIF
961 !
962 IF (hprogram=='ASCII ') THEN
963 #ifdef SFX_ASC
964  CALL read_surfn_asc(&
965  yrec,kfield,kresp,ycomment,ydir)
966 #endif
967 ENDIF
968 !
969 IF (hprogram=='FA ') THEN
970 #ifdef SFX_FA
971  CALL read_surfn_fa(&
972  yrec,il,kfield,kresp,ycomment,ydir)
973 #endif
974 ENDIF
975 !
976 IF (PRESENT(hcomment)) hcomment = ycomment
977 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFN1',1,zhook_handle)
978 !
979 END SUBROUTINE read_surfn1
980 
981 ! #############################################################
982  SUBROUTINE read_surfc0 (&
983  HPROGRAM,HREC,HFIELD,KRESP,HCOMMENT,HDIR)
984 ! #############################################################
985 !
986 !
987 !
988 !
989 USE yomhook ,ONLY : lhook, dr_hook
990 USE parkind1 ,ONLY : jprb
991 !
993 !
994 #ifdef SFX_OL
996 #endif
997 #ifdef SFX_LFI
999 #endif
1000 #ifdef SFX_NC
1002 #endif
1003 #ifdef SFX_ASC
1005 #endif
1006 #ifdef SFX_FA
1008 #endif
1009 #ifdef SFX_MNH
1010 USE modi_read_surfc0_mnh
1011 #endif
1012 #ifdef SFX_ARO
1013 USE modi_read_surfc0_aro
1014 #endif
1015 !
1016 IMPLICIT NONE
1017 !
1018 #ifdef SFX_MPI
1019 include "mpif.h"
1020 #endif
1021 !
1022 !
1023 !
1024 !* 0.1 Declarations of arguments
1025 !
1026  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
1027  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
1028  CHARACTER(LEN=*), INTENT(OUT) :: HFIELD ! the integer to be read
1029 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
1030  CHARACTER(LEN=*), OPTIONAL,INTENT(OUT) :: HCOMMENT ! name of the article to be read
1031  CHARACTER(LEN=1), OPTIONAL,INTENT(IN) :: HDIR
1032 !
1033 !* 0.2 Declarations of local variables
1034 !
1035  CHARACTER(LEN=40) :: YFIELD
1036  CHARACTER(LEN=100) :: YCOMMENT
1037  CHARACTER(LEN=16) :: YREC
1038  CHARACTER(LEN=1) :: YDIR
1039 REAL :: XTIME0
1040 INTEGER :: INFOMPI
1041 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1042 !
1043 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFC0',0,zhook_handle)
1044 !
1045 kresp = 0
1046 ycomment = ""
1047 !
1048 yrec = hrec
1049 ydir = 'H'
1050 IF (PRESENT(hdir)) ydir = hdir
1051 !
1052 IF (hprogram=='MESONH') THEN
1053 #ifdef SFX_MNH
1054  CALL read_surfc0_mnh(yrec,yfield,kresp,ycomment)
1055  hfield = yfield
1056 #endif
1057 ELSE IF (hprogram=='AROME ') THEN
1058 #ifdef SFX_ARO
1059  CALL read_surfc0_aro(yrec,yfield,kresp,ycomment)
1060  hfield = yfield
1061 #endif
1062 ELSEIF (hprogram=='OFFLIN' .OR. hprogram=='ASCII ' .OR. &
1063  hprogram=='FA ' .OR. hprogram=='LFI ' .OR. &
1064  hprogram=='NC ' ) THEN
1065  !
1066  IF (nrank==npio) THEN
1067  !
1068 #ifdef SFX_MPI
1069  xtime0 = mpi_wtime()
1070 #endif
1071  !
1072  IF (hprogram=='OFFLIN') THEN
1073 #ifdef SFX_OL
1074  CALL read_surf0_ol(yrec,yfield,kresp,ycomment)
1075 #endif
1076  ELSE IF (hprogram=='LFI ') THEN
1077 #ifdef SFX_LFI
1078  CALL read_surf0_lfi(yrec,yfield,kresp,ycomment)
1079 #endif
1080  ELSE IF (hprogram=='NC ') THEN
1081 #ifdef SFX_NC
1082  CALL read_surf0_nc(yrec,yfield,kresp,ycomment)
1083 #endif
1084  ELSE IF (hprogram=='ASCII ') THEN
1085 #ifdef SFX_ASC
1086  CALL read_surf0_asc(&
1087  yrec,yfield,kresp,ycomment)
1088 #endif
1089  ELSE IF (hprogram=='FA ') THEN
1090 #ifdef SFX_FA
1091  CALL read_surf0_fa(&
1092  yrec,yfield,kresp,ycomment)
1093 #endif
1094  ENDIF
1095  !
1096 #ifdef SFX_MPI
1097  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
1098 #endif
1099  !
1100  ENDIF
1101  !
1102 #ifdef SFX_MPI
1103  IF (ydir/='A' .AND. nproc>1) THEN
1104  xtime0 = mpi_wtime()
1105  CALL mpi_bcast(yfield,40,mpi_character,npio,ncomm,infompi)
1106  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
1107  ENDIF
1108 #endif
1109  !
1110  hfield = yfield(1:len(hfield))
1111  !
1112 ENDIF
1113 !
1114 IF (PRESENT(hcomment)) hcomment = ycomment
1115 !
1116 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFC0',1,zhook_handle)
1117 !
1118 END SUBROUTINE read_surfc0
1119 !
1120 ! #############################################################
1121  SUBROUTINE read_surfl0 (&
1122  HPROGRAM,HREC,OFIELD,KRESP,HCOMMENT,HDIR)
1123 ! #############################################################
1124 !
1125 !
1126 !
1127 !
1128 USE yomhook ,ONLY : lhook, dr_hook
1129 USE parkind1 ,ONLY : jprb
1130 !
1132 !
1133 #ifdef SFX_OL
1135 #endif
1136 #ifdef SFX_LFI
1138 #endif
1139 #ifdef SFX_NC
1141 #endif
1142 #ifdef SFX_ASC
1144 #endif
1145 #ifdef SFX_FA
1147 #endif
1148 #ifdef SFX_MNH
1149 USE modi_read_surfl0_mnh
1150 #endif
1151 #ifdef SFX_ARO
1152 USE modi_read_surfl0_aro
1153 #endif
1154 !
1155 IMPLICIT NONE
1156 !
1157 #ifdef SFX_MPI
1158 include "mpif.h"
1159 #endif
1160 !
1161 !
1162 !
1163 !* 0.1 Declarations of arguments
1164 !
1165  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
1166  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
1167 LOGICAL, INTENT(OUT) :: OFIELD ! array containing the data field
1168 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
1169  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
1170  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR
1171 !
1172 !* 0.2 Declarations of local variables
1173 !
1174  CHARACTER(LEN=100) :: YCOMMENT
1175  CHARACTER(LEN=16) :: YREC
1176  CHARACTER(LEN=1) :: YDIR
1177 REAL :: XTIME0
1178 INTEGER :: INFOMPI
1179 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1180 !
1181 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFL0',0,zhook_handle)
1182 !
1183 kresp = 0
1184 ycomment = ""
1185 !
1186 yrec = hrec
1187 ydir = 'H'
1188 IF (PRESENT(hdir)) ydir = hdir
1189 !
1190 IF (hprogram=='MESONH') THEN
1191 #ifdef SFX_MNH
1192  CALL read_surfl0_mnh(yrec,ofield,kresp,ycomment)
1193 #endif
1194 ELSE IF (hprogram=='AROME ') THEN
1195 #ifdef SFX_ARO
1196  CALL read_surfl0_aro(yrec,ofield,kresp,ycomment)
1197 #endif
1198 ELSEIF (hprogram=='OFFLIN' .OR. hprogram=='ASCII ' .OR. &
1199  hprogram=='FA ' .OR. hprogram=='LFI ' .OR. &
1200  hprogram=='NC ' ) THEN
1201  !
1202  IF (nrank==npio) THEN
1203  !
1204 #ifdef SFX_MPI
1205  xtime0 = mpi_wtime()
1206 #endif
1207  !
1208  IF (hprogram=='OFFLIN') THEN
1209 #ifdef SFX_OL
1210  CALL read_surf0_ol(yrec,ofield,kresp,ycomment)
1211 #endif
1212  ELSE IF (hprogram=='LFI ') THEN
1213 #ifdef SFX_LFI
1214  CALL read_surf0_lfi(yrec,ofield,kresp,ycomment)
1215 #endif
1216  ELSE IF (hprogram=='NC ') THEN
1217 #ifdef SFX_NC
1218  CALL read_surf0_nc(yrec,ofield,kresp,ycomment)
1219 #endif
1220  ELSE IF (hprogram=='ASCII ') THEN
1221 #ifdef SFX_ASC
1222  CALL read_surf0_asc(&
1223  yrec,ofield,kresp,ycomment)
1224 #endif
1225  ELSE IF (hprogram=='FA ') THEN
1226 #ifdef SFX_FA
1227  CALL read_surf0_fa(&
1228  yrec,ofield,kresp,ycomment)
1229 #endif
1230  ENDIF
1231  !
1232 #ifdef SFX_MPI
1233  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
1234 #endif
1235  !
1236  ENDIF
1237  !
1238 #ifdef SFX_MPI
1239  IF (ydir/='A' .AND. nproc>1) THEN
1240  xtime0 = mpi_wtime()
1241  CALL mpi_bcast(ofield,1,mpi_logical,npio,ncomm,infompi)
1242  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
1243  ENDIF
1244 #endif
1245  !
1246 ENDIF
1247 !
1248 IF (PRESENT(hcomment)) hcomment = ycomment
1249 !
1250 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFL0',1,zhook_handle)
1251 !
1252 END SUBROUTINE read_surfl0
1253 !
1254 ! #############################################################
1255  SUBROUTINE read_surfl1 (HPROGRAM,HREC,OFIELD,KRESP,HCOMMENT,HDIR)
1256 ! #############################################################
1257 !
1258 !
1259 !
1260 !
1261 USE yomhook ,ONLY : lhook, dr_hook
1262 USE parkind1 ,ONLY : jprb
1263 !
1264 #ifdef SFX_OL
1266 #endif
1267 #ifdef SFX_LFI
1269 #endif
1270 #ifdef SFX_NC
1272 #endif
1273 #ifdef SFX_ASC
1275 #endif
1276 #ifdef SFX_FA
1278 #endif
1279 #ifdef SFX_MNH
1280 USE modi_read_surfl1_mnh
1281 #endif
1282 #ifdef SFX_ARO
1283 USE modi_read_surfl1_aro
1284 #endif
1285 
1286 IMPLICIT NONE
1287 !
1288 !* 0.1 Declarations of arguments
1289 !
1290  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
1291 !
1292 !
1293  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
1294 LOGICAL, DIMENSION(:), INTENT(OUT) :: OFIELD ! array containing the data field
1295 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
1296  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
1297  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR ! type of field :
1298 ! ! 'H' : field with
1299 ! ! horizontal spatial dim.
1300 ! ! '-' : no horizontal dim.
1301 !* 0.2 Declarations of local variables
1302 !
1303  CHARACTER(LEN=100) :: YCOMMENT
1304  CHARACTER(LEN=16) :: YREC
1305  CHARACTER(LEN=1) :: YDIR
1306 INTEGER :: IL
1307 LOGICAL :: GDATA
1308 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1309 !
1310 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFL1',0,zhook_handle)
1311 !
1312 yrec = hrec
1313 ydir = 'H'
1314 IF (PRESENT(hdir)) ydir = hdir
1315 !
1316 il = SIZE(ofield)
1317 !
1318 IF (hprogram=='MESONH') THEN
1319 #ifdef SFX_MNH
1320  CALL read_surfl1_mnh(yrec,il,ofield,kresp,ycomment,ydir)
1321 #endif
1322 ELSE IF (hprogram=='AROME ') THEN
1323 #ifdef SFX_ARO
1324  ! ascendant reproducibility
1325  IF (yrec(1:2)=="L_".AND.il==1) THEN
1326  CALL read_surfl0_aro(yrec,gdata,kresp,ycomment)
1327  ofield = gdata
1328  ELSE
1329  CALL read_surfl1_aro(yrec,il,ofield,kresp,ycomment,ydir)
1330  ENDIF
1331 #endif
1332 ELSE IF (hprogram=='OFFLIN') THEN
1333 #ifdef SFX_OL
1334  CALL read_surfl1x2_ol(yrec,ofield,kresp,ycomment,ydir)
1335 #endif
1336 ELSE IF (hprogram=='LFI ') THEN
1337 #ifdef SFX_LFI
1338  CALL read_surfn_lfi(yrec,ofield,kresp,ycomment,ydir)
1339 #endif
1340 ELSE IF (hprogram=='NC ') THEN
1341 #ifdef SFX_NC
1342  CALL read_surfn_nc(yrec,ofield,kresp,ycomment,ydir)
1343 #endif
1344 ELSE IF (hprogram=='ASCII ') THEN
1345 #ifdef SFX_ASC
1346  CALL read_surfn_asc(&
1347  yrec,ofield,kresp,ycomment,ydir)
1348 #endif
1349 ELSE IF (hprogram=='FA ') THEN
1350 #ifdef SFX_FA
1351  CALL read_surfn_fa(&
1352  yrec,il,ofield,kresp,ycomment,ydir)
1353 #endif
1354 ENDIF
1355 !
1356 IF (PRESENT(hcomment)) hcomment = ycomment
1357 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFL1',1,zhook_handle)
1358 !
1359 END SUBROUTINE read_surfl1
1360 !
1361 ! #############################################################
1362  SUBROUTINE read_surft0 (&
1363  HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT,HDIR)
1364 ! #############################################################
1365 !
1366 !
1367 !
1368 !
1369 USE yomhook ,ONLY : lhook, dr_hook
1370 USE parkind1 ,ONLY : jprb
1371 !
1373 !
1375 !
1376 #ifdef SFX_OL
1378 #endif
1379 #ifdef SFX_LFI
1381 #endif
1382 #ifdef SFX_NC
1384 #endif
1385 #ifdef SFX_ASC
1387 #endif
1388 #ifdef SFX_FA
1390 #endif
1391 #ifdef SFX_MNH
1392 USE modi_read_surft0_mnh
1393 #endif
1394 #ifdef SFX_ARO
1395 USE modi_read_surft0_aro
1396 #endif
1397 !
1398 USE modi_get_luout
1399 !
1400 IMPLICIT NONE
1401 !
1402 #ifdef SFX_MPI
1403 include "mpif.h"
1404 #endif
1405 !
1406 !
1407 !
1408 !* 0.1 Declarations of arguments
1409 !
1410  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
1411  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
1412 !RJ: to match actual interface used above, can silently not update values in TFIELD
1413 !RJ TYPE(DATE_TIME), INTENT(OUT) :: TFIELD ! array containing the data field
1414 TYPE(date_time), INTENT(INOUT) :: TFIELD ! array containing the data field
1415 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
1416  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
1417  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR
1418 !
1419 !* 0.2 Declarations of local variables
1420 !
1421  CHARACTER(LEN=100) :: YCOMMENT
1422 REAL :: ZWORK
1423  INTEGER, DIMENSION(3) :: IWORK
1424  CHARACTER(LEN=16) :: YREC
1425  CHARACTER(LEN=1) :: YDIR
1426 !
1427 REAL :: XTIME0
1428 INTEGER :: ILUOUT
1429 INTEGER :: INFOMPI
1430 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1431 !
1432 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFT0',0,zhook_handle)
1433 !
1434 kresp = 0
1435 ycomment = ""
1436 !
1437 yrec = hrec
1438 ydir = 'H'
1439 IF (PRESENT(hdir)) ydir = hdir
1440 !
1441 IF (hprogram=='MESONH') THEN
1442 #ifdef SFX_MNH
1443  CALL read_surft0_mnh(yrec,iwork(1),iwork(2),iwork(3),zwork,kresp,ycomment)
1444 #endif
1445 ELSE IF (hprogram=='AROME ') THEN
1446 #ifdef SFX_ARO
1447  CALL read_surft0_aro(yrec,iwork(1),iwork(2),iwork(3),zwork,kresp,ycomment)
1448 #endif
1449 ELSEIF (hprogram=='OFFLIN' .OR. hprogram=='ASCII ' .OR. &
1450  hprogram=='FA ' .OR. hprogram=='LFI ' .OR. &
1451  hprogram=='NC ' ) THEN
1452  !
1453  IF (nrank==npio) THEN
1454  !
1455 #ifdef SFX_MPI
1456  xtime0 = mpi_wtime()
1457 #endif
1458  !
1459  IF (hprogram=='OFFLIN') THEN
1460 #ifdef SFX_OL
1461  CALL read_surft_ol(yrec,iwork(1),iwork(2),iwork(3),zwork,kresp,ycomment)
1462 #endif
1463  ELSE IF (hprogram=='LFI ') THEN
1464 #ifdef SFX_LFI
1465  CALL read_surft_lfi(yrec,iwork(1),iwork(2),iwork(3),zwork,kresp,ycomment)
1466 #endif
1467  ELSE IF (hprogram=='NC ') THEN
1468 #ifdef SFX_NC
1469  CALL read_surft_nc(yrec,iwork(1),iwork(2),iwork(3),zwork,kresp,ycomment)
1470 #endif
1471  ELSE IF (hprogram=='ASCII ') THEN
1472 #ifdef SFX_ASC
1473  CALL read_surft_asc(&
1474  yrec,iwork(1),iwork(2),iwork(3),zwork,kresp,ycomment)
1475 #endif
1476  ELSE IF (hprogram=='FA ') THEN
1477 #ifdef SFX_FA
1478  CALL read_surft_fa(&
1479  yrec,iwork(1),iwork(2),iwork(3),zwork,kresp,ycomment)
1480 #endif
1481  ENDIF
1482  !
1483 #ifdef SFX_MPI
1484  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
1485 #endif
1486  !
1487  ENDIF
1488  !
1489 #ifdef SFX_MPI
1490  IF (ydir/='A' .AND. nproc>1) THEN
1491  xtime0 = mpi_wtime()
1492  CALL mpi_bcast(iwork(1),kind(iwork)/4,mpi_integer,npio,ncomm,infompi)
1493  CALL mpi_bcast(iwork(2),kind(iwork)/4,mpi_integer,npio,ncomm,infompi)
1494  CALL mpi_bcast(iwork(3),kind(iwork)/4,mpi_integer,npio,ncomm,infompi)
1495  CALL mpi_bcast(zwork,kind(zwork)/4,mpi_real,npio,ncomm,infompi)
1496  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
1497  ENDIF
1498 #endif
1499  !
1500 ENDIF
1501 !
1502 IF (PRESENT(hcomment)) hcomment = ycomment
1503 !
1504 IF (kresp==-2) THEN
1505  CALL get_luout(hprogram,iluout)
1506  WRITE(iluout,*) '-------'
1507  WRITE(iluout,*) 'WARNING'
1508  WRITE(iluout,*) '-------'
1509  WRITE(iluout,*) ' '
1510  WRITE(iluout,*) 'Date is not present file'
1511  WRITE(iluout,*) 'Forcing value is kept'
1512  WRITE(iluout,*) ' '
1513 ELSE
1514  tfield%TDATE%YEAR = iwork(1)
1515  tfield%TDATE%MONTH = iwork(2)
1516  tfield%TDATE%DAY = iwork(3)
1517  tfield%TIME = zwork
1518 END IF
1519 !
1520 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFT0',1,zhook_handle)
1521 !
1522 END SUBROUTINE read_surft0
1523 !
1524 ! #############################################################
1525  SUBROUTINE read_surft1 (&
1526  HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT,HDIR)
1527 ! #############################################################
1528 !
1529 !
1530 !
1531 !
1532 USE yomhook ,ONLY : lhook, dr_hook
1533 USE parkind1 ,ONLY : jprb
1534 !
1536 !
1538 !
1539 #ifdef SFX_ASC
1541 #endif
1542 #ifdef SFX_LFI
1544 #endif
1545 #ifdef SFX_NC
1547 #endif
1548 #ifdef SFX_MNH
1549 USE modi_read_surft1_mnh
1550 #endif
1551 #ifdef SFX_ARO
1552 USE modi_read_surft1_aro
1553 #endif
1554 !
1555 USE modi_abor1_sfx
1556 USE modi_get_luout
1557 !
1558 IMPLICIT NONE
1559 !
1560 #ifdef SFX_MPI
1561 include "mpif.h"
1562 #endif
1563 !
1564 !
1565 !
1566 !* 0.1 Declarations of arguments
1567 !
1568  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
1569  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
1570 TYPE(date_time), DIMENSION(:), INTENT(INOUT)::TFIELD ! array containing the data field
1571 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
1572  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
1573  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR
1574 !
1575 !* 0.2 Declarations of local variables
1576 !
1577 INTEGER, DIMENSION(:,:), ALLOCATABLE :: IWORK2
1578 REAL, DIMENSION(:), ALLOCATABLE :: ZWORK2
1579  CHARACTER(LEN=16) :: YREC
1580  CHARACTER(LEN=1) :: YDIR
1581 INTEGER :: ILUOUT
1582 INTEGER :: INFOMPI
1583 !
1584  CHARACTER(LEN=100) :: YCOMMENT
1585 REAL :: XTIME0
1586 INTEGER :: IL1
1587 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1588 !
1589 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFT1',0,zhook_handle)
1590 !
1591 il1 = SIZE(tfield,1)
1592 kresp = 0
1593 ycomment = ""
1594 !
1595 yrec = hrec
1596 ydir = 'H'
1597 IF (PRESENT(hdir)) ydir = hdir
1598 !
1599 ALLOCATE(iwork2(il1,3))
1600 ALLOCATE(zwork2(il1))
1601 !
1602 IF (hprogram=='MESONH') THEN
1603 #ifdef SFX_MNH
1604  CALL read_surft1_mnh(yrec,il1,iwork2(:,1),iwork2(:,2),iwork2(:,3),zwork2,kresp,ycomment)
1605 #endif
1606 ELSE IF (hprogram=='AROME ') THEN
1607 #ifdef SFX_ARO
1608  CALL read_surft1_aro(yrec,il1,iwork2(:,1),iwork2(:,2),iwork2(:,3),zwork2,kresp,ycomment)
1609 #endif
1610 ELSEIF (hprogram=='OFFLIN' .OR. hprogram=='ASCII ' .OR. &
1611  hprogram=='FA ' .OR. hprogram=='LFI ' .OR. &
1612  hprogram=='NC ') THEN
1613  !
1614  IF (nrank==npio) THEN
1615  !
1616 #ifdef SFX_MPI
1617  xtime0 = mpi_wtime()
1618 #endif
1619  !
1620  IF (hprogram=='OFFLIN') THEN
1621  CALL abor1_sfx('READ_SURFT1: NOT AVAILABLE FOR OFFLIN')
1622  ELSE IF (hprogram=='FA ') THEN
1623  CALL abor1_sfx('READ_SURFT1: NOT AVAILABLE FOR FA')
1624  ELSE IF (hprogram=='ASCII ') THEN
1625 #ifdef SFX_ASC
1626  CALL read_surft_asc(&
1627  yrec,iwork2(:,1),iwork2(:,2),iwork2(:,3),zwork2,kresp,ycomment)
1628 #endif
1629  ELSE IF (hprogram=='LFI ') THEN
1630 #ifdef SFX_LFI
1631  CALL read_surft_lfi(yrec,iwork2(:,1),iwork2(:,2),iwork2(:,3),zwork2,kresp,ycomment)
1632 #endif
1633  ELSE IF (hprogram=='NC ') THEN
1634 #ifdef SFX_NC
1635  CALL read_surft_nc(yrec,iwork2(:,1),iwork2(:,2),iwork2(:,3),zwork2,kresp,ycomment)
1636 #endif
1637  ENDIF
1638  !
1639 #ifdef SFX_MPI
1640  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
1641 #endif
1642  !
1643  ENDIF
1644  !
1645 #ifdef SFX_MPI
1646  IF (ydir/='A' .AND. nproc>1) THEN
1647  xtime0 = mpi_wtime()
1648  CALL mpi_bcast(iwork2(:,1),il1*kind(iwork2)/4,mpi_integer,npio,ncomm,infompi)
1649  CALL mpi_bcast(iwork2(:,2),il1*kind(iwork2)/4,mpi_integer,npio,ncomm,infompi)
1650  CALL mpi_bcast(iwork2(:,3),il1*kind(iwork2)/4,mpi_integer,npio,ncomm,infompi)
1651  CALL mpi_bcast(zwork2,il1*kind(zwork2)/4,mpi_real,npio,ncomm,infompi)
1652  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
1653  ENDIF
1654 #endif
1655  !
1656 ENDIF
1657 !
1658 IF (PRESENT(hcomment)) hcomment = ycomment
1659 !
1660 IF (kresp==-2) THEN
1661  CALL get_luout(hprogram,iluout)
1662  WRITE(iluout,*) '-------'
1663  WRITE(iluout,*) 'WARNING'
1664  WRITE(iluout,*) '-------'
1665  WRITE(iluout,*) ' '
1666  WRITE(iluout,*) 'Date is not present file'
1667  WRITE(iluout,*) 'Forcing value is kept'
1668  WRITE(iluout,*) ' '
1669 ELSE
1670  tfield(:)%TDATE%YEAR = iwork2(:,1)
1671  tfield(:)%TDATE%MONTH = iwork2(:,2)
1672  tfield(:)%TDATE%DAY = iwork2(:,3)
1673  tfield(:)%TIME = zwork2(:)
1674 END IF
1675 !
1676 DEALLOCATE(iwork2)
1677 DEALLOCATE(zwork2)
1678 !
1679 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFT1',1,zhook_handle)
1680 !
1681 END SUBROUTINE read_surft1
1682 !
1683 ! #############################################################
1684  SUBROUTINE read_surft2 (&
1685  HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT,HDIR)
1686 ! #############################################################
1687 !
1688 !
1689 !
1690 !
1691 USE yomhook ,ONLY : lhook, dr_hook
1692 USE parkind1 ,ONLY : jprb
1693 !
1695 !
1697 !
1698 USE modi_abor1_sfx
1699 USE modi_get_luout
1700 !
1701 #ifdef SFX_ASC
1703 #endif
1704 #ifdef SFX_FA
1706 #endif
1707 #ifdef SFX_NC
1709 #endif
1710 #ifdef SFX_LFI
1712 #endif
1713 !
1714 IMPLICIT NONE
1715 !
1716 #ifdef SFX_MPI
1717 include "mpif.h"
1718 #endif
1719 !
1720 !* 0.1 Declarations of arguments
1721 !
1722  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
1723  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
1724 TYPE(date_time), DIMENSION(:,:), INTENT(INOUT) :: TFIELD ! array containing the data field
1725 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
1726  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
1727  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: HDIR
1728 !
1729 !* 0.2 Declarations of local variables
1730 !
1731 INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: IWORK3
1732 REAL, DIMENSION(:,:), ALLOCATABLE :: ZWORK3
1733  CHARACTER(LEN=16) :: YREC
1734  CHARACTER(LEN=1) :: YDIR
1735 INTEGER :: ILUOUT
1736 INTEGER :: INFOMPI
1737 !
1738  CHARACTER(LEN=100) :: YCOMMENT
1739 INTEGER :: IL1, IL2
1740 REAL :: XTIME0
1741 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1742 !
1743 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFT2',0,zhook_handle)
1744 !
1745 kresp = 0
1746 ycomment = ""
1747 !
1748 yrec = hrec
1749 ydir = 'H'
1750 IF (PRESENT(hdir)) ydir = hdir
1751 !
1752 il1 = SIZE(tfield,1)
1753 il2 = SIZE(tfield,2)
1754 !
1755 ALLOCATE(zwork3(il1,il2))
1756 ALLOCATE(iwork3(il1,il2,3))
1757 !
1758 IF (hprogram=='MESONH') THEN
1759  CALL abor1_sfx('READ_SURFT2: NOT AVAILABLE FOR MESONH')
1760 ELSE IF (hprogram=='AROME ') THEN
1761  CALL abor1_sfx('READ_SURFT2: NOT AVAILABLE FOR AROME')
1762 ELSEIF (hprogram=='OFFLIN' .OR. hprogram=='ASCII ' .OR. &
1763  hprogram=='FA ' .OR. hprogram=='LFI ' ) THEN
1764  !
1765  IF (nrank==npio) THEN
1766  !
1767 #ifdef SFX_MPI
1768  xtime0 = mpi_wtime()
1769 #endif
1770  !
1771  IF (hprogram=='OFFLIN') THEN
1772  CALL abor1_sfx('READ_SURFT2: NOT AVAILABLE FOR OFFLIN')
1773  ELSE IF (hprogram=='LFI ') THEN
1774 #ifdef SFX_LFI
1775  CALL read_surft_lfi(yrec,iwork3(:,:,1),iwork3(:,:,2),iwork3(:,:,3),&
1776  zwork3,kresp,ycomment)
1777 #endif
1778  ELSE IF (hprogram=='ASCII ') THEN
1779 #ifdef SFX_ASC
1780  CALL read_surft_asc(&
1781  yrec,iwork3(:,:,1),iwork3(:,:,2),iwork3(:,:,3),&
1782  zwork3,kresp,ycomment)
1783 #endif
1784  ELSE IF (hprogram=='FA ') THEN
1785 #ifdef SFX_FA
1786  CALL read_surft_fa(&
1787  yrec,il1,il2,iwork3(:,:,1),iwork3(:,:,2),iwork3(:,:,3),&
1788  zwork3,kresp,ycomment)
1789 #endif
1790  ELSE IF (hprogram=='NC ') THEN
1791 #ifdef SFX_NC
1792  CALL read_surft_nc(yrec,iwork3(:,:,1),iwork3(:,:,2),iwork3(:,:,3),&
1793  zwork3,kresp,ycomment)
1794 #endif
1795  ENDIF
1796  !
1797 #ifdef SFX_MPI
1798  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
1799 #endif
1800  !
1801  ENDIF
1802  !
1803 #ifdef SFX_MPI
1804  IF (ydir/='A' .AND. nproc>1) THEN
1805  xtime0 = mpi_wtime()
1806  CALL mpi_bcast(iwork3(:,:,1),il1*il2*kind(iwork3)/4,mpi_integer,npio,ncomm,infompi)
1807  CALL mpi_bcast(iwork3(:,:,2),il1*il2*kind(iwork3)/4,mpi_integer,npio,ncomm,infompi)
1808  CALL mpi_bcast(iwork3(:,:,3),il1*il2*kind(iwork3)/4,mpi_integer,npio,ncomm,infompi)
1809  CALL mpi_bcast(zwork3,il1*il2*kind(zwork3)/4,mpi_real,npio,ncomm,infompi)
1810  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
1811  ENDIF
1812 #endif
1813  !
1814 ENDIF
1815 !
1816 IF (PRESENT(hcomment)) hcomment = ycomment
1817 !
1818 IF (kresp==-2) THEN
1819  CALL get_luout(hprogram,iluout)
1820  WRITE(iluout,*) '-------'
1821  WRITE(iluout,*) 'WARNING'
1822  WRITE(iluout,*) '-------'
1823  WRITE(iluout,*) ' '
1824  WRITE(iluout,*) 'Date is not present file'
1825  WRITE(iluout,*) 'Forcing value is kept'
1826  WRITE(iluout,*) ' '
1827 ELSE
1828  tfield(:,:)%TDATE%YEAR = iwork3(:,:,1)
1829  tfield(:,:)%TDATE%MONTH = iwork3(:,:,2)
1830  tfield(:,:)%TDATE%DAY = iwork3(:,:,3)
1831  tfield(:,:)%TIME = zwork3(:,:)
1832 END IF
1833 !
1834 DEALLOCATE(iwork3)
1835 DEALLOCATE(zwork3)
1836 !
1837 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFT2',1,zhook_handle)
1838 !
1839 END SUBROUTINE read_surft2
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
subroutine read_surfx2(HPROGRAM, HREC, PFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:493
subroutine read_surfx1(HPROGRAM, HREC, PFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:364
subroutine read_surfx0(HPROGRAM, HREC, PFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:227
subroutine read_surft2(HPROGRAM, HREC, TFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:1686
subroutine read_surfc0(HPROGRAM, HREC, HFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:984
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
subroutine read_surfn1(HPROGRAM, HREC, KFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:870
integer, parameter jprb
Definition: parkind1.F90:32
subroutine read_surfn0(HPROGRAM, HREC, KFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:699
subroutine read_surfl0(HPROGRAM, HREC, OFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:1123
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
logical lhook
Definition: yomhook.F90:15
subroutine read_surfl1(HPROGRAM, HREC, OFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:1256
subroutine read_surfx3(HPROGRAM, HREC, PFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:623
subroutine read_surft1(HPROGRAM, HREC, TFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:1527
subroutine read_surft0(HPROGRAM, HREC, TFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:1364