SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
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 !
235 USE modd_surfex_mpi, ONLY : nrank, npio, ncomm, nproc, xtime_npio_read, xtime_comm_read
236 USE modd_surfex_omp, ONLY : xwork0, nworkb, cworkb
237 !
238 #ifdef SFX_OL
240 #endif
241 #ifdef SFX_LFI
243 #endif
244 #ifdef SFX_NC
246 #endif
247 #ifdef SFX_ASC
249 #endif
250 #ifdef SFX_FA
252 #endif
253 #ifdef SFX_MNH
254 USE modi_read_surfx0_mnh
255 #endif
256 !
257 IMPLICIT NONE
258 !
259 #ifdef SFX_MPI
260 include "mpif.h"
261 #endif
262 !
263 !
264 !
265 !* 0.1 Declarations of arguments
266 !
267  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
268  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be read
269 REAL, INTENT(OUT) :: pfield ! the real scalar to be read
270 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
271  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: hcomment ! name of the article to be read
272  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: hdir
273 !
274 !* 0.2 Declarations of local variables
275 !
276  CHARACTER(LEN=16) :: yrec
277  CHARACTER(LEN=1) :: ydir
278 REAL :: xtime0
279 INTEGER :: infompi
280 REAL :: zwork
281 REAL(KIND=JPRB) :: zhook_handle
282 !
283 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX0',0,zhook_handle)
284 !
285 !$OMP BARRIER
286 !
287 nworkb = 0
288  cworkb = ""
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,xwork0,nworkb,cworkb)
297 #endif
298 ENDIF
299 !
300 IF (hprogram=='AROME ') THEN
301 #ifdef SFX_ARO
302  CALL read_surfx0_aro(yrec,xwork0,nworkb,cworkb)
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 !$OMP SINGLE
317  !
318  IF (hprogram=='OFFLIN') THEN
319 #ifdef SFX_OL
320  CALL read_surf0_ol(yrec,xwork0,nworkb,cworkb)
321 #endif
322  ELSEIF (hprogram=='LFI ') THEN
323 #ifdef SFX_LFI
324  CALL read_surf0_lfi(yrec,xwork0,nworkb,cworkb)
325 #endif
326  ELSEIF (hprogram=='ASCII ') THEN
327 #ifdef SFX_ASC
328  CALL read_surf0_asc(&
329  yrec,xwork0,nworkb,cworkb)
330 #endif
331  ELSEIF (hprogram=='FA ') THEN
332 #ifdef SFX_FA
333  CALL read_surf0_fa(&
334  yrec,xwork0,nworkb,cworkb)
335 #endif
336  ELSEIF (hprogram=='NC ') THEN
337 #ifdef SFX_NC
338  CALL read_surf0_nc(yrec,xwork0,nworkb,cworkb)
339 #endif
340  ENDIF
341  !
342 !$OMP END SINGLE
343  !
344 #ifdef SFX_MPI
345  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
346 #endif
347  !
348  ENDIF
349  !
350 #ifdef SFX_MPI
351  IF (ydir/='A' .AND. nproc>1) THEN
352  xtime0 = mpi_wtime()
353 !$OMP SINGLE
354  CALL mpi_bcast(xwork0,kind(xwork0)/4,mpi_real,npio,ncomm,infompi)
355 !$OMP END SINGLE
356  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
357  ENDIF
358 #endif
359  !
360 ENDIF
361 !
362 pfield=xwork0
363 !
364 kresp = nworkb
365 !
366 IF (present(hcomment)) hcomment = cworkb
367 !
368 !$OMP BARRIER
369 !
370 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX0',1,zhook_handle)
371 !
372 END SUBROUTINE read_surfx0
373 !
374 ! #############################################################
375  SUBROUTINE read_surfx1 (&
376  hprogram,hrec,pfield,kresp,hcomment,hdir)
377 ! #############################################################
378 !
379 !
380 !
381 !
382 USE yomhook ,ONLY : lhook, dr_hook
383 USE parkind1 ,ONLY : jprb
384 !
385 USE modd_surf_par, ONLY : xundef
386 USE modd_assim, ONLY : lassim, lread_all, cassim_isba
387 !
388 #ifdef SFX_OL
390 #endif
391 #ifdef SFX_LFI
393 #endif
394 #ifdef SFX_NC
396 #endif
397 #ifdef SFX_ASC
399 #endif
400 #ifdef SFX_FA
402 #endif
403 #ifdef SFX_MNH
404 USE modi_read_surfx1_mnh
405 #endif
406 !
407 USE modi_get_iok_assim
408 !
409 IMPLICIT NONE
410 !
411 !* 0.1 Declarations of arguments
412 !
413  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
414 !
415 !
416  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be read
417 REAL, DIMENSION(:), INTENT(OUT) :: pfield ! array containing the data field
418 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
419  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: hcomment ! name of the article to be read
420  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: hdir ! type of field :
421 ! ! 'H' : field with
422 ! ! horizontal spatial dim.
423 ! ! '-' : no horizontal dim.
424 !* 0.2 Declarations of local variables
425 !
426  CHARACTER(LEN=100) :: ycomment
427  CHARACTER(LEN=16) :: yrec
428  CHARACTER(LEN=1) :: ydir
429 INTEGER :: il, iok
430 REAL(KIND=JPRB) :: zhook_handle
431 !
432 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX1',0,zhook_handle)
433 !
434 yrec = hrec
435 ydir = 'H'
436 IF (present(hdir)) ydir = hdir
437 !
438 il = SIZE(pfield)
439 !
440 IF (lassim .AND. cassim_isba/="OI " .AND. .NOT.lread_all) THEN
441  !
442  CALL get_iok_assim(yrec,iok)
443  !
444  IF (iok==0) THEN
445  pfield(:) = xundef
446  IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX1',1,zhook_handle)
447  RETURN
448  ENDIF
449  !
450 ENDIF
451 !
452 IF (hprogram=='MESONH') THEN
453 #ifdef SFX_MNH
454  CALL read_surfx1_mnh(yrec,il,pfield,kresp,ycomment,ydir)
455 #endif
456 ENDIF
457 !
458 IF (hprogram=='AROME ') THEN
459 #ifdef SFX_ARO
460  CALL read_surfx1_aro(yrec,il,pfield,kresp,ycomment,ydir)
461 #endif
462 ENDIF
463 !
464 IF (hprogram=='OFFLIN') THEN
465 #ifdef SFX_OL
466  CALL read_surfn_ol(yrec,pfield,kresp,ycomment,ydir)
467 #endif
468 ENDIF
469 !
470 IF (hprogram=='LFI ') THEN
471 #ifdef SFX_LFI
472  CALL read_surfn_lfi(yrec,pfield,kresp,ycomment,ydir)
473 #endif
474 ENDIF
475 !
476 IF (hprogram=='NC ') THEN
477 #ifdef SFX_NC
478  CALL read_surfn_nc(yrec,pfield,kresp,ycomment,ydir)
479 #endif
480 ENDIF
481 !
482 IF (hprogram=='ASCII ') THEN
483 #ifdef SFX_ASC
484  CALL read_surfn_asc(&
485  yrec,pfield,kresp,ycomment,ydir)
486 #endif
487 ENDIF
488 !
489 IF (hprogram=='FA ') THEN
490 #ifdef SFX_FA
491  CALL read_surfx_fa(yrec,il,pfield,kresp,ycomment,ydir)
492 #endif
493 ENDIF
494 !
495 IF (present(hcomment)) hcomment = ycomment
496 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX1',1,zhook_handle)
497 !
498 END SUBROUTINE read_surfx1
499 !
500 ! #############################################################
501  SUBROUTINE read_surfx2 (&
502  hprogram,hrec,pfield,kresp,hcomment,hdir)
503 ! #############################################################
504 !
505 !
506 !
507 !
508 USE yomhook ,ONLY : lhook, dr_hook
509 USE parkind1 ,ONLY : jprb
510 !
511 USE modd_surf_par, ONLY : xundef
512 USE modd_assim, ONLY : lassim, lread_all, cassim_isba
513 !
514 #ifdef SFX_OL
516 #endif
517 #ifdef SFX_LFI
519 #endif
520 #ifdef SFX_NC
522 #endif
523 #ifdef SFX_ASC
525 #endif
526 #ifdef SFX_FA
528 #endif
529 #ifdef SFX_MNH
530 USE modi_read_surfx2_mnh
531 #endif
532 !
533 USE modi_get_iok_assim
534 !
535 IMPLICIT NONE
536 !
537 !* 0.1 Declarations of arguments
538 !
539  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
540 !
541 !
542  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be read
543 REAL, DIMENSION(:,:), INTENT(OUT) :: pfield ! array containing the data field
544 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
545  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: hcomment ! name of the article to be read
546  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: hdir ! type of field :
547 ! ! 'H' : field with
548 ! ! horizontal spatial dim.
549 ! ! '-' : no horizontal dim.
550 !* 0.2 Declarations of local variables
551 !
552  CHARACTER(LEN=100) :: ycomment
553  CHARACTER(LEN=16) :: yrec
554  CHARACTER(LEN=1) :: ydir
555 INTEGER :: il1, il2, iok
556 REAL(KIND=JPRB) :: zhook_handle
557 !
558 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX2',0,zhook_handle)
559 !
560 yrec = hrec
561 ydir = 'H'
562 IF (present(hdir)) ydir = hdir
563 !
564 il1 = SIZE(pfield,1)
565 il2 = SIZE(pfield,2)
566 !
567 IF (lassim .AND. cassim_isba/="OI " .AND. .NOT.lread_all) THEN
568  !
569  CALL get_iok_assim(yrec,iok)
570  !
571  IF (iok==0) THEN
572  pfield(:,:) = xundef
573  IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX2',1,zhook_handle)
574  RETURN
575  ENDIF
576  !
577 ENDIF
578 !
579 IF (hprogram=='MESONH') THEN
580 #ifdef SFX_MNH
581  CALL read_surfx2_mnh(yrec,il1,il2,pfield,kresp,ycomment,ydir)
582 #endif
583 ENDIF
584 !
585 IF (hprogram=='AROME ') THEN
586 #ifdef SFX_ARO
587  CALL read_surfx2_aro(yrec,il1,il2,pfield,kresp,ycomment,ydir)
588 #endif
589 ENDIF
590 !
591 IF (hprogram=='OFFLIN') THEN
592 #ifdef SFX_OL
593  CALL read_surfn_ol(yrec,pfield,kresp,ycomment,ydir)
594 #endif
595 ENDIF
596 !
597 IF (hprogram=='LFI ') THEN
598 #ifdef SFX_LFI
599  CALL read_surfn_lfi(yrec,pfield,kresp,ycomment,ydir)
600 #endif
601 ENDIF
602 !
603 IF (hprogram=='NC ') THEN
604 #ifdef SFX_NC
605  CALL read_surfn_nc(yrec,pfield,kresp,ycomment,ydir)
606 #endif
607 ENDIF
608 !
609 IF (hprogram=='ASCII ') THEN
610 #ifdef SFX_ASC
611  CALL read_surfn_asc(&
612  yrec,pfield,kresp,ycomment,ydir)
613 #endif
614 ENDIF
615 !
616 IF (hprogram=='FA ') THEN
617 #ifdef SFX_FA
618  CALL read_surfx_fa(yrec,il1,il2,pfield,kresp,ycomment,ydir)
619 #endif
620 ENDIF
621 !
622 IF (present(hcomment)) hcomment = ycomment
623 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX2',1,zhook_handle)
624 !
625 END SUBROUTINE read_surfx2
626 !
627 ! #############################################################
628  SUBROUTINE read_surfx3 (&
629  hprogram,hrec,pfield,kresp,hcomment,hdir)
630 ! #############################################################
631 !
632 !
633 !
634 !
635 USE yomhook ,ONLY : lhook, dr_hook
636 USE parkind1 ,ONLY : jprb
637 !
638 #ifdef SFX_OL
640 #endif
641 !
642 IMPLICIT NONE
643 !
644 !* 0.1 Declarations of arguments
645 !
646  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
647 !
648 !
649  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be read
650 REAL, DIMENSION(:,:,:), INTENT(OUT) :: pfield ! array containing the data field
651 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
652  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: hcomment ! name of the article to be read
653  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: hdir ! type of field :
654 ! ! 'H' : field with
655 ! ! horizontal spatial dim.
656 ! ! '-' : no horizontal dim.
657 !* 0.2 Declarations of local variables
658 !
659  CHARACTER(LEN=100) :: ycomment
660  CHARACTER(LEN=16) :: yrec
661  CHARACTER(LEN=1) :: ydir
662 INTEGER :: il1, il2, il3
663 REAL(KIND=JPRB) :: zhook_handle
664 !
665 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX3',0,zhook_handle)
666 !
667 yrec = hrec
668 ydir = 'H'
669 IF (present(hdir)) ydir = hdir
670 !
671 il1 = SIZE(pfield,1)
672 il2 = SIZE(pfield,2)
673 il3 = SIZE(pfield,3)
674 !
675 !plmIF (HPROGRAM=='MESONH') THEN
676 !plm CALL READ_SURFX3_MNH(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
677 !plmENDIF
678 !
679 IF (hprogram=='OFFLIN') THEN
680 #ifdef SFX_OL
681  CALL read_surfn_ol(yrec,pfield,kresp,ycomment,ydir)
682 #endif
683 ENDIF
684 !
685 !plmIF (HPROGRAM=='ASCII ') THEN
686 !plm CALL READ_SURFX3_ASC(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
687 !plmENDIF
688 !
689 !plmIF (HPROGRAM=='AROME ') THEN
690 !plm CALL READ_SURFX3_ARO(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
691 !plmENDIF
692 !
693 !plmIF (HPROGRAM=='FA ') THEN
694 !plm CALL READ_SURFX3_FA(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
695 !plmENDIF
696 !
697 IF (present(hcomment)) hcomment = ycomment
698 !
699 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFX3',1,zhook_handle)
700 !
701 END SUBROUTINE read_surfx3
702 !
703 ! #############################################################
704  SUBROUTINE read_surfn0 (&
705  hprogram,hrec,kfield,kresp,hcomment,hdir)
706 ! #############################################################
707 !
708 !
709 !
710 !
711 USE yomhook ,ONLY : lhook, dr_hook
712 USE parkind1 ,ONLY : jprb
713 !
714 USE modd_surfex_mpi, ONLY : nrank, npio, ncomm, nproc, xtime_npio_read, xtime_comm_read
715 USE modd_surfex_omp, ONLY : nwork0, nworkb, cworkb
716 !
717 #ifdef SFX_OL
719 #endif
720 #ifdef SFX_LFI
722 #endif
723 #ifdef SFX_NC
725 #endif
726 #ifdef SFX_ASC
728 #endif
729 #ifdef SFX_FA
731 #endif
732 #ifdef SFX_MNH
733 USE modi_read_surfn0_mnh
734 #endif
735 !
736 IMPLICIT NONE
737 !
738 #ifdef SFX_MPI
739 include "mpif.h"
740 #endif
741 !
742 !
743 !
744 !* 0.1 Declarations of arguments
745 !
746  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
747  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be read
748 INTEGER, INTENT(OUT) :: kfield ! the integer to be read
749 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
750  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: hcomment ! name of the article to be read
751  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: hdir
752 !
753 !* 0.2 Declarations of local variables
754 !
755  CHARACTER(LEN=16) :: yrec
756  CHARACTER(LEN=1) :: ydir
757 REAL :: xtime0
758 INTEGER :: infompi
759 REAL(KIND=JPRB) :: zhook_handle
760 !
761 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFN0',0,zhook_handle)
762 !
763 !$OMP BARRIER
764 !
765 nworkb = 0
766  cworkb = ""
767 !
768 yrec = hrec
769 ydir = 'H'
770 IF (present(hdir)) ydir = hdir
771 !
772 IF (hprogram=='MESONH') THEN
773 #ifdef SFX_MNH
774  CALL read_surfn0_mnh(yrec,nwork0,nworkb,cworkb)
775 #endif
776 ENDIF
777 !
778 IF (hprogram=='AROME ') THEN
779 #ifdef SFX_ARO
780  CALL read_surfn0_aro(yrec,nwork0,nworkb,cworkb)
781 #endif
782 ENDIF
783 !
784 IF (hprogram=='OFFLIN' .OR. hprogram=='ASCII ' .OR. &
785  hprogram=='FA ' .OR. hprogram=='LFI ' .OR. &
786  hprogram=='NC ' ) THEN
787  !
788  IF (nrank==npio) THEN
789  !
790 #ifdef SFX_MPI
791  xtime0 = mpi_wtime()
792 #endif
793  !
794 !$OMP SINGLE
795  !
796  IF (hprogram=='OFFLIN') THEN
797 #ifdef SFX_OL
798  CALL read_surf0_ol(yrec,nwork0,nworkb,cworkb)
799 #endif
800  ENDIF
801  !
802  IF (hprogram=='LFI ') THEN
803 #ifdef SFX_LFI
804  CALL read_surf0_lfi(yrec,nwork0,nworkb,cworkb)
805 #endif
806  ENDIF
807  !
808  IF (hprogram=='NC ') THEN
809 #ifdef SFX_NC
810  CALL read_surf0_nc(yrec,nwork0,nworkb,cworkb)
811 #endif
812  ENDIF
813  !
814  IF (hprogram=='ASCII ') THEN
815 #ifdef SFX_ASC
816  CALL read_surf0_asc(&
817  yrec,nwork0,nworkb,cworkb)
818 #endif
819  ENDIF
820  !
821  IF (hprogram=='FA ') THEN
822 #ifdef SFX_FA
823  CALL read_surf0_fa(&
824  yrec,nwork0,nworkb,cworkb)
825 #endif
826  ENDIF
827  !
828 !$OMP END SINGLE
829  !
830 #ifdef SFX_MPI
831  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
832 #endif
833  !
834  ENDIF
835  !
836 #ifdef SFX_MPI
837  IF (ydir/='A' .AND. nproc>1) THEN
838  xtime0 = mpi_wtime()
839 !$OMP SINGLE
840  CALL mpi_bcast(nwork0,kind(nwork0)/4,mpi_integer,npio,ncomm,infompi)
841 !$OMP END SINGLE
842  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
843  ENDIF
844 #endif
845  !
846 ENDIF
847 !
848 kfield=nwork0
849 !
850 kresp = nworkb
851 !
852 IF (present(hcomment)) hcomment = cworkb
853 !
854 !$OMP BARRIER
855 !
856 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFN0',1,zhook_handle)
857 !
858 END SUBROUTINE read_surfn0
859 !
860 ! #############################################################
861  SUBROUTINE read_surfn1 (&
862  hprogram,hrec,kfield,kresp,hcomment,hdir)
863 ! #############################################################
864 !
865 !
866 !
867 !
868 USE yomhook ,ONLY : lhook, dr_hook
869 USE parkind1 ,ONLY : jprb
870 !
871 #ifdef SFX_OL
873 #endif
874 #ifdef SFX_LFI
876 #endif
877 #ifdef SFX_NC
879 #endif
880 #ifdef SFX_ASC
882 #endif
883 #ifdef SFX_FA
885 #endif
886 #ifdef SFX_MNH
887 USE modi_read_surfn1_mnh
888 #endif
889 !
890 IMPLICIT NONE
891 !
892 !* 0.1 Declarations of arguments
893 !
894  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
895 !
896 !
897  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be read
898 INTEGER, DIMENSION(:), INTENT(OUT) :: kfield ! the integer to be read
899 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
900  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: hcomment ! name of the article to be read
901  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: hdir ! type of field :
902 ! ! 'H' : field with
903 ! ! horizontal spatial dim.
904 ! ! '-' : no horizontal dim.
905 !* 0.2 Declarations of local variables
906 !
907  CHARACTER(LEN=100) :: ycomment
908  CHARACTER(LEN=16) :: yrec
909  CHARACTER(LEN=1) :: ydir
910 INTEGER :: il
911 REAL(KIND=JPRB) :: zhook_handle
912 !
913 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFN1',0,zhook_handle)
914 !
915 yrec = hrec
916 ydir = 'H'
917 IF (present(hdir)) ydir = hdir
918 !
919 il = SIZE(kfield,1)
920 !
921 IF (hprogram=='MESONH') THEN
922 #ifdef SFX_MNH
923  CALL read_surfn1_mnh(yrec,il,kfield,kresp,ycomment,ydir)
924 #endif
925 ENDIF
926 !
927 IF (hprogram=='AROME ') THEN
928 #ifdef SFX_ARO
929  CALL read_surfn1_aro(yrec,il,kfield,kresp,ycomment,ydir)
930 #endif
931 ENDIF
932 !
933 IF (hprogram=='OFFLIN') THEN
934 #ifdef SFX_OL
935  CALL read_surfn_ol(yrec,kfield,kresp,ycomment,ydir)
936 #endif
937 ENDIF
938 !
939 IF (hprogram=='LFI ') THEN
940 #ifdef SFX_LFI
941  CALL read_surfn_lfi(yrec,kfield,kresp,ycomment,ydir)
942 #endif
943 ENDIF
944 !
945 IF (hprogram=='NC ') THEN
946 #ifdef SFX_NC
947  CALL read_surfn_nc(yrec,kfield,kresp,ycomment,ydir)
948 #endif
949 ENDIF
950 !
951 IF (hprogram=='ASCII ') THEN
952 #ifdef SFX_ASC
953  CALL read_surfn_asc(&
954  yrec,kfield,kresp,ycomment,ydir)
955 #endif
956 ENDIF
957 !
958 IF (hprogram=='FA ') THEN
959 #ifdef SFX_FA
960  CALL read_surfn_fa(&
961  yrec,il,kfield,kresp,ycomment,ydir)
962 #endif
963 ENDIF
964 !
965 IF (present(hcomment)) hcomment = ycomment
966 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFN1',1,zhook_handle)
967 !
968 END SUBROUTINE read_surfn1
969 
970 ! #############################################################
971  SUBROUTINE read_surfc0 (&
972  hprogram,hrec,hfield,kresp,hcomment,hdir)
973 ! #############################################################
974 !
975 !
976 !
977 !
978 USE yomhook ,ONLY : lhook, dr_hook
979 USE parkind1 ,ONLY : jprb
980 !
981 USE modd_surfex_mpi, ONLY : nrank, npio, ncomm, nproc, xtime_npio_read, xtime_comm_read
982 USE modd_surfex_omp, ONLY : cwork0, nworkb, cworkb
983 !
984 #ifdef SFX_OL
986 #endif
987 #ifdef SFX_LFI
989 #endif
990 #ifdef SFX_NC
992 #endif
993 #ifdef SFX_ASC
995 #endif
996 #ifdef SFX_FA
998 #endif
999 #ifdef SFX_MNH
1000 USE modi_read_surfc0_mnh
1001 #endif
1002 !
1003 IMPLICIT NONE
1004 !
1005 #ifdef SFX_MPI
1006 include "mpif.h"
1007 #endif
1008 !
1009 !
1010 !
1011 !* 0.1 Declarations of arguments
1012 !
1013  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
1014  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be read
1015  CHARACTER(LEN=*), INTENT(OUT) :: hfield ! the integer to be read
1016 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
1017  CHARACTER(LEN=*), OPTIONAL,INTENT(OUT) :: hcomment ! name of the article to be read
1018  CHARACTER(LEN=1), OPTIONAL,INTENT(IN) :: hdir
1019 !
1020 !* 0.2 Declarations of local variables
1021 !
1022  CHARACTER(LEN=16) :: yrec
1023  CHARACTER(LEN=1) :: ydir
1024 REAL :: xtime0
1025 INTEGER :: infompi
1026 REAL(KIND=JPRB) :: zhook_handle
1027 !
1028 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFC0',0,zhook_handle)
1029 !
1030 !$OMP BARRIER
1031 !
1032 nworkb = 0
1033  cworkb = ""
1034 !
1035 yrec = hrec
1036 ydir = 'H'
1037 IF (present(hdir)) ydir = hdir
1038 !
1039 IF (hprogram=='MESONH') THEN
1040 #ifdef SFX_MNH
1041  CALL read_surfc0_mnh(yrec,cwork0(1:40),nworkb,cworkb)
1042 #endif
1043 ELSE IF (hprogram=='AROME ') THEN
1044 #ifdef SFX_ARO
1045  CALL read_surfc0_aro(yrec,cwork0(1:40),nworkb,cworkb)
1046 #endif
1047 ELSEIF (hprogram=='OFFLIN' .OR. hprogram=='ASCII ' .OR. &
1048  hprogram=='FA ' .OR. hprogram=='LFI ' .OR. &
1049  hprogram=='NC ' ) THEN
1050  !
1051  IF (nrank==npio) THEN
1052  !
1053 #ifdef SFX_MPI
1054  xtime0 = mpi_wtime()
1055 #endif
1056  !
1057 !$OMP SINGLE
1058  !
1059  IF (hprogram=='OFFLIN') THEN
1060 #ifdef SFX_OL
1061  CALL read_surf0_ol(yrec,cwork0(1:40),nworkb,cworkb)
1062 #endif
1063  ELSE IF (hprogram=='LFI ') THEN
1064 #ifdef SFX_LFI
1065  CALL read_surf0_lfi(yrec,cwork0(1:40),nworkb,cworkb)
1066 #endif
1067  ELSE IF (hprogram=='NC ') THEN
1068 #ifdef SFX_NC
1069  CALL read_surf0_nc(yrec,cwork0(1:40),nworkb,cworkb)
1070 #endif
1071  ELSE IF (hprogram=='ASCII ') THEN
1072 #ifdef SFX_ASC
1073  CALL read_surf0_asc(&
1074  yrec,cwork0(1:40),nworkb,cworkb)
1075 #endif
1076  ELSE IF (hprogram=='FA ') THEN
1077 #ifdef SFX_FA
1078  CALL read_surf0_fa(&
1079  yrec,cwork0(1:40),nworkb,cworkb)
1080 #endif
1081  ENDIF
1082  !
1083 !$OMP END SINGLE
1084  !
1085 #ifdef SFX_MPI
1086  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
1087 #endif
1088  !
1089  ENDIF
1090  !
1091 #ifdef SFX_MPI
1092  IF (ydir/='A' .AND. nproc>1) THEN
1093  xtime0 = mpi_wtime()
1094 !$OMP SINGLE
1095  CALL mpi_bcast(cwork0(1:40),40,mpi_character,npio,ncomm,infompi)
1096 !$OMP END SINGLE
1097  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
1098  ENDIF
1099 #endif
1100  !
1101 ENDIF
1102 !
1103 hfield = cwork0(1:len(hfield))
1104 !
1105 kresp = nworkb
1106 !
1107 IF (present(hcomment)) hcomment = cworkb
1108 !
1109 !$OMP BARRIER
1110 !
1111 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFC0',1,zhook_handle)
1112 !
1113 END SUBROUTINE read_surfc0
1114 !
1115 ! #############################################################
1116  SUBROUTINE read_surfl0 (&
1117  hprogram,hrec,ofield,kresp,hcomment,hdir)
1118 ! #############################################################
1119 !
1120 !
1121 !
1122 !
1123 USE yomhook ,ONLY : lhook, dr_hook
1124 USE parkind1 ,ONLY : jprb
1125 !
1126 USE modd_surfex_mpi, ONLY : nrank, npio, ncomm, nproc, xtime_npio_read, xtime_comm_read
1127 USE modd_surfex_omp, ONLY : lwork0, nworkb, cworkb
1128 !
1129 #ifdef SFX_OL
1131 #endif
1132 #ifdef SFX_LFI
1134 #endif
1135 #ifdef SFX_NC
1137 #endif
1138 #ifdef SFX_ASC
1140 #endif
1141 #ifdef SFX_FA
1143 #endif
1144 #ifdef SFX_MNH
1145 USE modi_read_surfl0_mnh
1146 #endif
1147 !
1148 IMPLICIT NONE
1149 !
1150 #ifdef SFX_MPI
1151 include "mpif.h"
1152 #endif
1153 !
1154 !
1155 !
1156 !* 0.1 Declarations of arguments
1157 !
1158  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
1159  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be read
1160 LOGICAL, INTENT(OUT) :: ofield ! array containing the data field
1161 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
1162  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: hcomment ! name of the article to be read
1163  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: hdir
1164 !
1165 !* 0.2 Declarations of local variables
1166 !
1167  CHARACTER(LEN=16) :: yrec
1168  CHARACTER(LEN=1) :: ydir
1169 REAL :: xtime0
1170 INTEGER :: infompi
1171 REAL(KIND=JPRB) :: zhook_handle
1172 !
1173 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFL0',0,zhook_handle)
1174 !
1175 !$OMP BARRIER
1176 !
1177 nworkb = 0
1178  cworkb = ""
1179 !
1180 yrec = hrec
1181 ydir = 'H'
1182 IF (present(hdir)) ydir = hdir
1183 !
1184 IF (hprogram=='MESONH') THEN
1185 #ifdef SFX_MNH
1186  CALL read_surfl0_mnh(yrec,lwork0,nworkb,cworkb)
1187 #endif
1188 ELSE IF (hprogram=='AROME ') THEN
1189 #ifdef SFX_ARO
1190  CALL read_surfl0_aro(yrec,lwork0,nworkb,cworkb)
1191 #endif
1192 ELSEIF (hprogram=='OFFLIN' .OR. hprogram=='ASCII ' .OR. &
1193  hprogram=='FA ' .OR. hprogram=='LFI ' .OR. &
1194  hprogram=='NC ' ) THEN
1195  !
1196  IF (nrank==npio) THEN
1197  !
1198 #ifdef SFX_MPI
1199  xtime0 = mpi_wtime()
1200 #endif
1201  !
1202 !$OMP SINGLE
1203  !
1204  IF (hprogram=='OFFLIN') THEN
1205 #ifdef SFX_OL
1206  CALL read_surf0_ol(yrec,lwork0,nworkb,cworkb)
1207 #endif
1208  ELSE IF (hprogram=='LFI ') THEN
1209 #ifdef SFX_LFI
1210  CALL read_surf0_lfi(yrec,lwork0,nworkb,cworkb)
1211 #endif
1212  ELSE IF (hprogram=='NC ') THEN
1213 #ifdef SFX_NC
1214  CALL read_surf0_nc(yrec,lwork0,nworkb,cworkb)
1215 #endif
1216  ELSE IF (hprogram=='ASCII ') THEN
1217 #ifdef SFX_ASC
1218  CALL read_surf0_asc(&
1219  yrec,lwork0,nworkb,cworkb)
1220 #endif
1221  ELSE IF (hprogram=='FA ') THEN
1222 #ifdef SFX_FA
1223  CALL read_surf0_fa(&
1224  yrec,lwork0,nworkb,cworkb)
1225 #endif
1226  ENDIF
1227  !
1228 !$OMP END SINGLE
1229  !
1230 #ifdef SFX_MPI
1231  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
1232 #endif
1233  !
1234  ENDIF
1235  !
1236 #ifdef SFX_MPI
1237  IF (ydir/='A' .AND. nproc>1) THEN
1238  xtime0 = mpi_wtime()
1239 !$OMP SINGLE
1240  CALL mpi_bcast(lwork0,1,mpi_logical,npio,ncomm,infompi)
1241 !$OMP END SINGLE
1242  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
1243  ENDIF
1244 #endif
1245  !
1246 ENDIF
1247 !
1248 ofield = lwork0
1249 !
1250 kresp = nworkb
1251 !
1252 IF (present(hcomment)) hcomment = cworkb
1253 !
1254 !$OMP BARRIER
1255 !
1256 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFL0',1,zhook_handle)
1257 !
1258 END SUBROUTINE read_surfl0
1259 !
1260 ! #############################################################
1261  SUBROUTINE read_surfl1 (&
1262  hprogram,hrec,ofield,kresp,hcomment,hdir)
1263 ! #############################################################
1264 !
1265 !
1266 !
1267 !
1268 USE yomhook ,ONLY : lhook, dr_hook
1269 USE parkind1 ,ONLY : jprb
1270 !
1271 #ifdef SFX_OL
1273 #endif
1274 #ifdef SFX_LFI
1276 #endif
1277 #ifdef SFX_NC
1279 #endif
1280 #ifdef SFX_ASC
1282 #endif
1283 #ifdef SFX_FA
1285 #endif
1286 #ifdef SFX_MNH
1287 USE modi_read_surfl1_mnh
1288 #endif
1289 !
1290 IMPLICIT NONE
1291 !
1292 !* 0.1 Declarations of arguments
1293 !
1294  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
1295 !
1296 !
1297  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be read
1298 LOGICAL, DIMENSION(:), INTENT(OUT) :: ofield ! array containing the data field
1299 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
1300  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: hcomment ! name of the article to be read
1301  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: hdir ! type of field :
1302 ! ! 'H' : field with
1303 ! ! horizontal spatial dim.
1304 ! ! '-' : no horizontal dim.
1305 !* 0.2 Declarations of local variables
1306 !
1307  CHARACTER(LEN=100) :: ycomment
1308  CHARACTER(LEN=16) :: yrec
1309  CHARACTER(LEN=1) :: ydir
1310 INTEGER :: il
1311 REAL(KIND=JPRB) :: zhook_handle
1312 !
1313 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFL1',0,zhook_handle)
1314 !
1315 yrec = hrec
1316 ydir = 'H'
1317 IF (present(hdir)) ydir = hdir
1318 !
1319 il = SIZE(ofield)
1320 !
1321 IF (hprogram=='MESONH') THEN
1322 #ifdef SFX_MNH
1323  CALL read_surfl1_mnh(yrec,il,ofield,kresp,ycomment,ydir)
1324 #endif
1325 ELSE IF (hprogram=='AROME ') THEN
1326 #ifdef SFX_ARO
1327  CALL read_surfl1_aro(yrec,il,ofield,kresp,ycomment,ydir)
1328 #endif
1329 ELSE IF (hprogram=='OFFLIN') THEN
1330 #ifdef SFX_OL
1331  CALL read_surfn_ol(yrec,ofield,kresp,ycomment,ydir)
1332 #endif
1333 ELSE IF (hprogram=='LFI ') THEN
1334 #ifdef SFX_LFI
1335  CALL read_surfn_lfi(yrec,ofield,kresp,ycomment,ydir)
1336 #endif
1337 ELSE IF (hprogram=='NC ') THEN
1338 #ifdef SFX_NC
1339  CALL read_surfn_nc(yrec,ofield,kresp,ycomment,ydir)
1340 #endif
1341 ELSE IF (hprogram=='ASCII ') THEN
1342 #ifdef SFX_ASC
1343  CALL read_surfn_asc(&
1344  yrec,ofield,kresp,ycomment,ydir)
1345 #endif
1346 ELSE IF (hprogram=='FA ') THEN
1347 #ifdef SFX_FA
1348  CALL read_surfn_fa(&
1349  yrec,il,ofield,kresp,ycomment,ydir)
1350 #endif
1351 ENDIF
1352 !
1353 IF (present(hcomment)) hcomment = ycomment
1354 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFL1',1,zhook_handle)
1355 !
1356 END SUBROUTINE read_surfl1
1357 !
1358 ! #############################################################
1359  SUBROUTINE read_surft0 (&
1360  hprogram,hrec,tfield,kresp,hcomment,hdir)
1361 ! #############################################################
1362 !
1363 !
1364 !
1365 !
1366 USE yomhook ,ONLY : lhook, dr_hook
1367 USE parkind1 ,ONLY : jprb
1368 !
1370 !
1371 USE modd_surfex_mpi, ONLY : nrank, npio, ncomm, nproc, xtime_npio_read, xtime_comm_read
1372 USE modd_surfex_omp, ONLY : nworkd, xwork0, nworkb, cworkb
1373 !
1374 #ifdef SFX_OL
1376 #endif
1377 #ifdef SFX_LFI
1379 #endif
1380 #ifdef SFX_NC
1382 #endif
1383 #ifdef SFX_ASC
1385 #endif
1386 #ifdef SFX_FA
1388 #endif
1389 #ifdef SFX_MNH
1390 USE modi_read_surft0_mnh
1391 #endif
1392 !
1393 USE modi_get_luout
1394 !
1395 IMPLICIT NONE
1396 !
1397 #ifdef SFX_MPI
1398 include "mpif.h"
1399 #endif
1400 !
1401 !
1402 !
1403 !* 0.1 Declarations of arguments
1404 !
1405  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
1406  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be read
1407 !RJ: to match actual interface used above, can silently not update values in TFIELD
1408 !RJ TYPE(DATE_TIME), INTENT(OUT) :: TFIELD ! array containing the data field
1409 TYPE(date_time), INTENT(INOUT) :: tfield ! array containing the data field
1410 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
1411  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: hcomment ! name of the article to be read
1412  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: hdir
1413 !
1414 !* 0.2 Declarations of local variables
1415 !
1416  CHARACTER(LEN=16) :: yrec
1417  CHARACTER(LEN=1) :: ydir
1418 !
1419 REAL :: xtime0
1420 INTEGER :: iluout
1421 INTEGER :: infompi
1422 REAL(KIND=JPRB) :: zhook_handle
1423 !
1424 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFT0',0,zhook_handle)
1425 !
1426 !$OMP BARRIER
1427 !
1428 nworkb = 0
1429  cworkb = ""
1430 !
1431 yrec = hrec
1432 ydir = 'H'
1433 IF (present(hdir)) ydir = hdir
1434 !
1435 !$OMP SINGLE
1436 ALLOCATE(nworkd(3))
1437 !$OMP END SINGLE
1438 !
1439 IF (hprogram=='MESONH') THEN
1440 #ifdef SFX_MNH
1441  CALL read_surft0_mnh(yrec,nworkd(1),nworkd(2),nworkd(3),xwork0,nworkb,cworkb)
1442 #endif
1443 ELSE IF (hprogram=='AROME ') THEN
1444 #ifdef SFX_ARO
1445  CALL read_surft0_aro(yrec,nworkd(1),nworkd(2),nworkd(3),xwork0,nworkb,cworkb)
1446 #endif
1447 ELSEIF (hprogram=='OFFLIN' .OR. hprogram=='ASCII ' .OR. &
1448  hprogram=='FA ' .OR. hprogram=='LFI ' .OR. &
1449  hprogram=='NC ' ) THEN
1450  !
1451  IF (nrank==npio) THEN
1452  !
1453 #ifdef SFX_MPI
1454  xtime0 = mpi_wtime()
1455 #endif
1456  !
1457 !$OMP SINGLE
1458  !
1459  IF (hprogram=='OFFLIN') THEN
1460 #ifdef SFX_OL
1461  CALL read_surft_ol(yrec,nworkd(1),nworkd(2),nworkd(3),xwork0,nworkb,cworkb)
1462 #endif
1463  ELSE IF (hprogram=='LFI ') THEN
1464 #ifdef SFX_LFI
1465  CALL read_surft_lfi(yrec,nworkd(1),nworkd(2),nworkd(3),xwork0,nworkb,cworkb)
1466 #endif
1467  ELSE IF (hprogram=='NC ') THEN
1468 #ifdef SFX_NC
1469  CALL read_surft_nc(yrec,nworkd(1),nworkd(2),nworkd(3),xwork0,nworkb,cworkb)
1470 #endif
1471  ELSE IF (hprogram=='ASCII ') THEN
1472 #ifdef SFX_ASC
1473  CALL read_surft_asc(&
1474  yrec,nworkd(1),nworkd(2),nworkd(3),xwork0,nworkb,cworkb)
1475 #endif
1476  ELSE IF (hprogram=='FA ') THEN
1477 #ifdef SFX_FA
1478  CALL read_surft_fa(&
1479  yrec,nworkd(1),nworkd(2),nworkd(3),xwork0,nworkb,cworkb)
1480 #endif
1481  ENDIF
1482  !
1483 !$OMP END SINGLE
1484  !
1485 #ifdef SFX_MPI
1486  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
1487 #endif
1488  !
1489  ENDIF
1490  !
1491 #ifdef SFX_MPI
1492  IF (ydir/='A' .AND. nproc>1) THEN
1493  xtime0 = mpi_wtime()
1494 !$OMP SINGLE
1495  CALL mpi_bcast(nworkd(1),kind(nworkd)/4,mpi_integer,npio,ncomm,infompi)
1496  CALL mpi_bcast(nworkd(2),kind(nworkd)/4,mpi_integer,npio,ncomm,infompi)
1497  CALL mpi_bcast(nworkd(3),kind(nworkd)/4,mpi_integer,npio,ncomm,infompi)
1498  CALL mpi_bcast(xwork0,kind(xwork0)/4,mpi_real,npio,ncomm,infompi)
1499 !$OMP END SINGLE
1500  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
1501  ENDIF
1502 #endif
1503  !
1504 ENDIF
1505 !
1506 kresp = nworkb
1507 !
1508 IF (present(hcomment)) hcomment = cworkb
1509 !
1510 !$OMP BARRIER
1511 !
1512 IF (kresp==-2) THEN
1513  CALL get_luout(hprogram,iluout)
1514  WRITE(iluout,*) '-------'
1515  WRITE(iluout,*) 'WARNING'
1516  WRITE(iluout,*) '-------'
1517  WRITE(iluout,*) ' '
1518  WRITE(iluout,*) 'Date is not present file'
1519  WRITE(iluout,*) 'Forcing value is kept'
1520  WRITE(iluout,*) ' '
1521 ELSE
1522  tfield%TDATE%YEAR = nworkd(1)
1523  tfield%TDATE%MONTH = nworkd(2)
1524  tfield%TDATE%DAY = nworkd(3)
1525  tfield%TIME = xwork0
1526 END IF
1527 !
1528 !$OMP BARRIER
1529 !
1530 !$OMP SINGLE
1531 DEALLOCATE(nworkd)
1532 !$OMP END SINGLE
1533 !
1534 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFT0',1,zhook_handle)
1535 !
1536 END SUBROUTINE read_surft0
1537 !
1538 ! #############################################################
1539  SUBROUTINE read_surft1 (&
1540  hprogram,hrec,tfield,kresp,hcomment,hdir)
1541 ! #############################################################
1542 !
1543 !
1544 !
1545 !
1546 USE yomhook ,ONLY : lhook, dr_hook
1547 USE parkind1 ,ONLY : jprb
1548 !
1550 !
1551 USE modd_surfex_mpi, ONLY : nrank, npio, ncomm, nproc, xtime_npio_read, xtime_comm_read
1552 USE modd_surfex_omp, ONLY : nworkd2, xworkd, nworkb, cworkb
1553 !
1554 #ifdef SFX_ASC
1556 #endif
1557 #ifdef SFX_LFI
1559 #endif
1560 #ifdef SFX_NC
1562 #endif
1563 #ifdef SFX_MNH
1564 USE modi_read_surft1_mnh
1565 #endif
1566 !
1567 USE modi_abor1_sfx
1568 USE modi_get_luout
1569 !
1570 IMPLICIT NONE
1571 !
1572 #ifdef SFX_MPI
1573 include "mpif.h"
1574 #endif
1575 !
1576 !
1577 !
1578 !* 0.1 Declarations of arguments
1579 !
1580  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
1581  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be read
1582 TYPE(date_time), DIMENSION(:), INTENT(INOUT)::tfield ! array containing the data field
1583 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
1584  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: hcomment ! name of the article to be read
1585  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: hdir
1586 !
1587 !* 0.2 Declarations of local variables
1588 !
1589  CHARACTER(LEN=16) :: yrec
1590  CHARACTER(LEN=1) :: ydir
1591 INTEGER :: iluout
1592 INTEGER :: infompi
1593 !
1594 REAL :: xtime0
1595 INTEGER :: il1
1596 REAL(KIND=JPRB) :: zhook_handle
1597 !
1598 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFT1',0,zhook_handle)
1599 !
1600 !$OMP BARRIER
1601 !
1602 il1 = SIZE(tfield,1)
1603 nworkb = 0
1604  cworkb = ""
1605 !
1606 yrec = hrec
1607 ydir = 'H'
1608 IF (present(hdir)) ydir = hdir
1609 !
1610 !$OMP SINGLE
1611 ALLOCATE(nworkd2(il1,3))
1612 ALLOCATE(xworkd(il1))
1613 !$OMP END SINGLE
1614 !
1615 IF (hprogram=='MESONH') THEN
1616 #ifdef SFX_MNH
1617  CALL read_surft1_mnh(yrec,il1,nworkd2(:,1),nworkd2(:,2),nworkd2(:,3),xworkd,nworkb,cworkb)
1618 #endif
1619 ELSE IF (hprogram=='AROME ') THEN
1620 #ifdef SFX_ARO
1621  CALL read_surft1_aro(yrec,il1,nworkd2(:,1),nworkd2(:,2),nworkd2(:,3),xworkd,nworkb,cworkb)
1622 #endif
1623 ELSEIF (hprogram=='OFFLIN' .OR. hprogram=='ASCII ' .OR. &
1624  hprogram=='FA ' .OR. hprogram=='LFI ' .OR. &
1625  hprogram=='NC ') THEN
1626  !
1627  IF (nrank==npio) THEN
1628  !
1629 #ifdef SFX_MPI
1630  xtime0 = mpi_wtime()
1631 #endif
1632  !
1633 !$OMP SINGLE
1634  !
1635  IF (hprogram=='OFFLIN') THEN
1636  CALL abor1_sfx('READ_SURFT1: NOT AVAILABLE FOR OFFLIN')
1637  ELSE IF (hprogram=='FA ') THEN
1638  CALL abor1_sfx('READ_SURFT1: NOT AVAILABLE FOR FA')
1639  ELSE IF (hprogram=='ASCII ') THEN
1640 #ifdef SFX_ASC
1641  CALL read_surft_asc(&
1642  yrec,nworkd2(:,1),nworkd2(:,2),nworkd2(:,3),xworkd,nworkb,cworkb)
1643 #endif
1644  ELSE IF (hprogram=='LFI ') THEN
1645 #ifdef SFX_LFI
1646  CALL read_surft_lfi(yrec,nworkd2(:,1),nworkd2(:,2),nworkd2(:,3),xworkd,nworkb,cworkb)
1647 #endif
1648  ELSE IF (hprogram=='NC ') THEN
1649 #ifdef SFX_NC
1650  CALL read_surft_nc(yrec,nworkd2(:,1),nworkd2(:,2),nworkd2(:,3),xworkd,nworkb,cworkb)
1651 #endif
1652  ENDIF
1653  !
1654 #ifdef SFX_MPI
1655  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
1656 #endif
1657  !
1658 !$OMP END SINGLE
1659  !
1660  ENDIF
1661  !
1662 #ifdef SFX_MPI
1663  IF (ydir/='A' .AND. nproc>1) THEN
1664  xtime0 = mpi_wtime()
1665 !$OMP SINGLE
1666  CALL mpi_bcast(nworkd2(:,1),il1*kind(nworkd2)/4,mpi_integer,npio,ncomm,infompi)
1667  CALL mpi_bcast(nworkd2(:,2),il1*kind(nworkd2)/4,mpi_integer,npio,ncomm,infompi)
1668  CALL mpi_bcast(nworkd2(:,3),il1*kind(nworkd2)/4,mpi_integer,npio,ncomm,infompi)
1669  CALL mpi_bcast(xworkd,il1*kind(xworkd)/4,mpi_real,npio,ncomm,infompi)
1670 !$OMP END SINGLE
1671  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
1672  ENDIF
1673 #endif
1674  !
1675 ENDIF
1676 !
1677 kresp = nworkb
1678 IF (present(hcomment)) hcomment = cworkb
1679 !
1680 IF (kresp==-2) THEN
1681  CALL get_luout(hprogram,iluout)
1682  WRITE(iluout,*) '-------'
1683  WRITE(iluout,*) 'WARNING'
1684  WRITE(iluout,*) '-------'
1685  WRITE(iluout,*) ' '
1686  WRITE(iluout,*) 'Date is not present file'
1687  WRITE(iluout,*) 'Forcing value is kept'
1688  WRITE(iluout,*) ' '
1689 ELSE
1690  tfield(:)%TDATE%YEAR = nworkd2(:,1)
1691  tfield(:)%TDATE%MONTH = nworkd2(:,2)
1692  tfield(:)%TDATE%DAY = nworkd2(:,3)
1693  tfield(:)%TIME = xworkd(:)
1694 END IF
1695 !
1696 !$OMP BARRIER
1697 !
1698 !$OMP SINGLE
1699 DEALLOCATE(nworkd2)
1700 DEALLOCATE(xworkd)
1701 !$OMP END SINGLE
1702 !
1703 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFT1',1,zhook_handle)
1704 !
1705 END SUBROUTINE read_surft1
1706 !
1707 ! #############################################################
1708  SUBROUTINE read_surft2 (&
1709  hprogram,hrec,tfield,kresp,hcomment,hdir)
1710 ! #############################################################
1711 !
1712 !
1713 !
1714 !
1715 USE yomhook ,ONLY : lhook, dr_hook
1716 USE parkind1 ,ONLY : jprb
1717 !
1718 USE modd_surfex_mpi, ONLY : nrank, npio, ncomm, nproc, xtime_npio_read, xtime_comm_read
1719 USE modd_surfex_omp, ONLY : nworkd3, xworkd2, nworkb, cworkb
1720 !
1722 !
1723 USE modi_abor1_sfx
1724 USE modi_get_luout
1725 !
1726 #ifdef SFX_ASC
1728 #endif
1729 #ifdef SFX_FA
1731 #endif
1732 #ifdef SFX_NC
1734 #endif
1735 #ifdef SFX_LFI
1737 #endif
1738 !
1739 IMPLICIT NONE
1740 !
1741 #ifdef SFX_MPI
1742 include "mpif.h"
1743 #endif
1744 !
1745 !
1746 !
1747 !* 0.1 Declarations of arguments
1748 !
1749  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
1750  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be read
1751 TYPE(date_time), DIMENSION(:,:), INTENT(INOUT) :: tfield ! array containing the data field
1752 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
1753  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: hcomment ! name of the article to be read
1754  CHARACTER(LEN=1), OPTIONAL, INTENT(IN) :: hdir
1755 !
1756 !* 0.2 Declarations of local variables
1757 !
1758  CHARACTER(LEN=16) :: yrec
1759  CHARACTER(LEN=1) :: ydir
1760 INTEGER :: iluout
1761 INTEGER :: infompi
1762 !
1763 INTEGER :: il1, il2
1764 REAL :: xtime0
1765 REAL(KIND=JPRB) :: zhook_handle
1766 !
1767 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFT2',0,zhook_handle)
1768 !
1769 !$OMP BARRIER
1770 !
1771 nworkb = 0
1772  cworkb = ""
1773 !
1774 yrec = hrec
1775 ydir = 'H'
1776 IF (present(hdir)) ydir = hdir
1777 !
1778 il1 = SIZE(tfield,1)
1779 il2 = SIZE(tfield,2)
1780 !
1781 !$OMP SINGLE
1782 ALLOCATE(xworkd2(il1,il2))
1783 ALLOCATE(nworkd3(il1,il2,3))
1784 !$OMP END SINGLE
1785 !
1786 IF (hprogram=='MESONH') THEN
1787  CALL abor1_sfx('READ_SURFT2: NOT AVAILABLE FOR MESONH')
1788 ELSE IF (hprogram=='AROME ') THEN
1789  CALL abor1_sfx('READ_SURFT2: NOT AVAILABLE FOR AROME')
1790 ELSEIF (hprogram=='OFFLIN' .OR. hprogram=='ASCII ' .OR. &
1791  hprogram=='FA ' .OR. hprogram=='LFI ' ) THEN
1792  !
1793  IF (nrank==npio) THEN
1794  !
1795 #ifdef SFX_MPI
1796  xtime0 = mpi_wtime()
1797 #endif
1798  !
1799 !$OMP SINGLE
1800  !
1801  IF (hprogram=='OFFLIN') THEN
1802  CALL abor1_sfx('READ_SURFT2: NOT AVAILABLE FOR OFFLIN')
1803  ELSE IF (hprogram=='LFI ') THEN
1804 #ifdef SFX_LFI
1805  CALL read_surft_lfi(yrec,nworkd3(:,:,1),nworkd3(:,:,2),nworkd3(:,:,3),&
1806  xworkd2,nworkb,cworkb)
1807 #endif
1808  ELSE IF (hprogram=='ASCII ') THEN
1809 #ifdef SFX_ASC
1810  CALL read_surft_asc(&
1811  yrec,nworkd3(:,:,1),nworkd3(:,:,2),nworkd3(:,:,3),&
1812  xworkd2,nworkb,cworkb)
1813 #endif
1814  ELSE IF (hprogram=='FA ') THEN
1815 #ifdef SFX_FA
1816  CALL read_surft_fa(&
1817  yrec,il1,il2,nworkd3(:,:,1),nworkd3(:,:,2),nworkd3(:,:,3),&
1818  xworkd2,nworkb,cworkb)
1819 #endif
1820  ELSE IF (hprogram=='NC ') THEN
1821 #ifdef SFX_NC
1822  CALL read_surft_nc(yrec,nworkd3(:,:,1),nworkd3(:,:,2),nworkd3(:,:,3),&
1823  xworkd2,nworkb,cworkb)
1824 #endif
1825  ENDIF
1826  !
1827 #ifdef SFX_MPI
1828  xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
1829 #endif
1830  !
1831 !$OMP END SINGLE
1832  !
1833  ENDIF
1834  !
1835 #ifdef SFX_MPI
1836  IF (ydir/='A' .AND. nproc>1) THEN
1837  xtime0 = mpi_wtime()
1838 !$OMP SINGLE
1839  CALL mpi_bcast(nworkd3(:,:,1),il1*il2*kind(nworkd3)/4,mpi_integer,npio,ncomm,infompi)
1840  CALL mpi_bcast(nworkd3(:,:,2),il1*il2*kind(nworkd3)/4,mpi_integer,npio,ncomm,infompi)
1841  CALL mpi_bcast(nworkd3(:,:,3),il1*il2*kind(nworkd3)/4,mpi_integer,npio,ncomm,infompi)
1842  CALL mpi_bcast(xworkd2,il1*il2*kind(xworkd2)/4,mpi_real,npio,ncomm,infompi)
1843 !$OMP END SINGLE
1844  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
1845  ENDIF
1846 #endif
1847  !
1848 ENDIF
1849 !
1850 kresp = nworkb
1851 IF (present(hcomment)) hcomment = cworkb
1852 !
1853 IF (kresp==-2) THEN
1854  CALL get_luout(hprogram,iluout)
1855  WRITE(iluout,*) '-------'
1856  WRITE(iluout,*) 'WARNING'
1857  WRITE(iluout,*) '-------'
1858  WRITE(iluout,*) ' '
1859  WRITE(iluout,*) 'Date is not present file'
1860  WRITE(iluout,*) 'Forcing value is kept'
1861  WRITE(iluout,*) ' '
1862 ELSE
1863  tfield(:,:)%TDATE%YEAR = nworkd3(:,:,1)
1864  tfield(:,:)%TDATE%MONTH = nworkd3(:,:,2)
1865  tfield(:,:)%TDATE%DAY = nworkd3(:,:,3)
1866  tfield(:,:)%TIME = xworkd2(:,:)
1867 END IF
1868 !
1869 !$OMP BARRIER
1870 !
1871 !$OMP SINGLE
1872 DEALLOCATE(nworkd3)
1873 DEALLOCATE(xworkd2)
1874 !$OMP END SINGLE
1875 !
1876 IF (lhook) CALL dr_hook('MODI_READ_SURF:READ_SURFT2',1,zhook_handle)
1877 !
1878 END SUBROUTINE read_surft2
subroutine read_surfx2(HPROGRAM, HREC, PFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:501
subroutine read_surfx1(HPROGRAM, HREC, PFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:375
subroutine read_surfx0(HPROGRAM, HREC, PFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:225
subroutine read_surft2(HPROGRAM, HREC, TFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:1708
subroutine read_surfc0(HPROGRAM, HREC, HFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:971
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine read_surfn1(HPROGRAM, HREC, KFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:861
subroutine read_surfn0(HPROGRAM, HREC, KFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:704
subroutine get_iok_assim(HREC, KOK)
subroutine read_surfl0(HPROGRAM, HREC, OFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:1116
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:6
subroutine read_surfl1(HPROGRAM, HREC, OFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:1261
subroutine read_surfx3(HPROGRAM, HREC, PFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:628
subroutine read_surft1(HPROGRAM, HREC, TFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:1539
subroutine read_surft0(HPROGRAM, HREC, TFIELD, KRESP, HCOMMENT, HDIR)
Definition: read_surf.F90:1359