SURFEX v8.1
General documentation of Surfex
mode_read_surf_asc.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.
6 !!
7 !! PURPOSE
8 !! -------
9 !
10 ! The purpose of READ_SURF_ASC is
11 !
12 !!** METHOD
13 !! ------
14 !!
15 !! EXTERNAL
16 !! --------
17 !!
18 !!
19 !!
20 !! IMPLICIT ARGUMENTS
21 !! ------------------
22 !!
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !!
28 !! AUTHOR
29 !! ------
30 !!
31 !! S.Malardel *METEO-FRANCE*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !!
36 !! original 01/08/03
37 !! J.Escobar 10/06/2013: replace DOUBLE PRECISION by REAL to handle problem for promotion of real on IBM SP
38 !----------------------------------------------------------------------------
39 !
40 INTERFACE read_surf0_asc
41  MODULE PROCEDURE read_surfx0_asc
42  MODULE PROCEDURE read_surfn0_asc
43  MODULE PROCEDURE read_surfl0_asc
44  MODULE PROCEDURE read_surfc0_asc
45 END INTERFACE
46 INTERFACE read_surfn_asc
47  MODULE PROCEDURE read_surfx1_asc
48  MODULE PROCEDURE read_surfn1_asc
49  MODULE PROCEDURE read_surfl1_asc
50  MODULE PROCEDURE read_surfx2_asc
51 END INTERFACE
52 INTERFACE read_surft_asc
53  MODULE PROCEDURE read_surft0_asc
54  MODULE PROCEDURE read_surft1_asc
55  MODULE PROCEDURE read_surft2_asc
56 END INTERFACE
57 !
58 CONTAINS
59 !
60 ! #############################################################
61  SUBROUTINE read_surfx0_asc (&
62  HREC,PFIELD,KRESP,HCOMMENT)
63 ! #############################################################
64 !
65 !
66 USE modd_io_surf_asc, ONLY : nunit, nluout, cmask
67 !
68 USE mode_pos_surf
69 !
70 USE modi_io_buff
71 USE modi_error_read_surf_asc
72 !
73 USE yomhook ,ONLY : lhook, dr_hook
74 USE parkind1 ,ONLY : jprb
75 !
76 IMPLICIT NONE
77 !
78 !* 0.1 Declarations of arguments
79 !
80 !
81 !
82  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
83 REAL, INTENT(OUT) :: PFIELD ! the real scalar to be read
84 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
85  CHARACTER(LEN=100),INTENT(OUT) :: HCOMMENT ! comment
86 !
87 !* 0.2 Declarations of local variables
88 !
89  CHARACTER(LEN=50):: YCOMMENT
90  CHARACTER(LEN=6) :: YMASK
91 LOGICAL :: GFOUND
92 REAL(KIND=JPRB) :: ZHOOK_HANDLE
93 !
94 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFX0_ASC',0,zhook_handle)
95 !
96 kresp=0
97 !
98 ymask=cmask
99  CALL io_buff(&
100  hrec,'R',gfound)
101 IF (gfound) ymask='FULL '
102 !
103  CALL posnam(nunit,ymask//' '//hrec,gfound,nluout)
104 IF (.NOT. gfound) CALL posnam(nunit,'FULL '//' '//hrec,gfound,nluout) ! used for auxilliary files
105 !
106 READ(nunit,fmt=*,end=100)
107 READ(nunit,fmt='(A50)') ycomment
108 READ(nunit,fmt=*,err=100) pfield
109 !
110 hcomment = ycomment
111 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFX0_ASC',1,zhook_handle)
112 RETURN
113 !
114 100 CONTINUE
115  CALL error_read_surf_asc(hrec,kresp)
116 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFX0_ASC',1,zhook_handle)
117 !
118 END SUBROUTINE read_surfx0_asc
119 !
120 ! #############################################################
121  SUBROUTINE read_surfx1_asc (&
122  HREC,PFIELD,KRESP,HCOMMENT,HDIR)
123 ! #############################################################
124 !
125 !!**** *READX1* - routine to fill a real 1D array for the externalised surface
126 !
127 !
129 !
131 !
132 USE mode_pos_surf
133 !
135 USE modi_io_buff
136 USE modi_error_read_surf_asc
138 !
139 USE yomhook ,ONLY : lhook, dr_hook
140 USE parkind1 ,ONLY : jprb
141 !
142 IMPLICIT NONE
143 !
144 #ifdef SFX_MPI
145 include "mpif.h"
146 #endif
147 !
148 !* 0.1 Declarations of arguments
149 !
150 !
151 !
152  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
153 REAL, DIMENSION(:), INTENT(OUT) :: PFIELD ! array containing the data field
154 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
155  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
156  CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
157  ! 'H' : field with
158  ! horizontal spatial dim.
159  ! '-' : no horizontal dim.
160 !* 0.2 Declarations of local variables
161 !
162  CHARACTER(LEN=6) :: YMASK
163 INTEGER :: IL1, INFOMPI
164 LOGICAL :: GFOUND
165 !
166 REAL, DIMENSION(:), ALLOCATABLE :: ZWORK
167 REAL :: XTIME0
168 #ifdef SFX_MPI
169 INTEGER, DIMENSION(MPI_STATUS_SIZE,NPROC-1) :: ISTATUS
170 #endif
171 REAL(KIND=JPRB) :: ZHOOK_HANDLE
172 !
173 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFX1_ASC',0,zhook_handle)
174 !
175 il1 = SIZE(pfield)
176 !
177 kresp=0
178 !
179 #ifdef SFX_MPI
180 xtime0 = mpi_wtime()
181 #endif
182 !
183 IF (hdir=='-') THEN
184  ALLOCATE(zwork(il1))
185 ENDIF
186 !
187 IF (nrank==npio) THEN
188  !
189  IF (hdir=='A') THEN
190  ALLOCATE(zwork(il1))
191  ELSEIF (hdir/='-') THEN
192  ALLOCATE(zwork(nfull))
193  END IF
194  !
195  IF (hdir=='A' .OR. hdir=='-' .OR. hdir=='E') THEN
196  CALL posnam(nunit,cmask//' '//hrec,gfound,nluout)
197  IF (.NOT. gfound) CALL posnam(nunit,'FULL '//' '//hrec,gfound,nluout)
198  ELSE
199  ymask=cmask
200  CALL io_buff(&
201  hrec,'R',gfound)
202  IF (gfound) ymask='FULL '
203  CALL posnam(nunit,ymask//' '//hrec,gfound,nluout)
204  ENDIF
205  !
206  READ(nunit,fmt=*,iostat=kresp)
207  READ(nunit,fmt='(A50)',iostat=kresp) hcomment
208  READ(nunit,fmt=*,iostat=kresp) zwork
209  !
210 ELSEIF (hdir/='-') THEN
211  ALLOCATE(zwork(0))
212 ENDIF
213 !
214 #ifdef SFX_MPI
215 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
216 #endif
217 !
218 IF (kresp/=0) CALL error_read_surf_asc(hrec,kresp)
219 !
220 IF (hdir=='E') THEN
221  IF ( nrank==npio ) THEN
222  CALL pack_same_rank(nmask,zwork(:),pfield(:))
223  ENDIF
224 ELSEIF (hdir=='A') THEN ! no distribution on other tasks
225  IF ( nrank==npio ) THEN
226 #ifdef SFX_MPI
227  xtime0 = mpi_wtime()
228 #endif
229  pfield(:) = zwork(1:il1)
230 #ifdef SFX_MPI
231  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
232 #endif
233  ENDIF
234 ELSEIF (hdir=='-') THEN ! distribution of the total field on other tasks
235 #ifdef SFX_MPI
236  IF (nproc>1) THEN
237  xtime0 = mpi_wtime()
238  CALL mpi_bcast(zwork,il1*kind(zwork)/4,mpi_real,npio,ncomm,infompi)
239  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
240  ENDIF
241 #endif
242  pfield(:) = zwork(1:il1)
243 ELSE
244  CALL read_and_send_mpi(zwork,pfield,nmask)
245  !IF (NRANK==NPIO) THEN
246  ! CALL MPI_WAITALL(NPROC-1,NREQ,ISTATUS,INFOMPI)
247  !ENDIF
248 ENDIF
249 !
250 DEALLOCATE(zwork)
251 !
252 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFX1_ASC',1,zhook_handle)
253 !
254 END SUBROUTINE read_surfx1_asc
255 !
256 ! #############################################################
257  SUBROUTINE read_surfx2_asc (&
258  HREC,PFIELD,KRESP,HCOMMENT,HDIR)
259 ! #############################################################
260 !
261 !!**** *READX2* - routine to fill a real 2D array for the externalised surface
262 !
264 !
266 !
267 USE mode_pos_surf
268 !
270 USE modi_io_buff
271 USE modi_error_read_surf_asc
273 !
274 USE yomhook ,ONLY : lhook, dr_hook
275 USE parkind1 ,ONLY : jprb
276 !
277 IMPLICIT NONE
278 !
279 #ifdef SFX_MPI
280 include "mpif.h"
281 #endif
282 !
283 !* 0.1 Declarations of arguments
284 !
285 !
286 !
287  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
288 REAL, DIMENSION(:,:), INTENT(OUT) :: PFIELD ! array containing the data field
289 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
290  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
291  CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
292  ! 'H' : field with
293  ! horizontal spatial dim.
294  ! '-' : no horizontal dim.
295 !* 0.2 Declarations of local variables
296 !
297 LOGICAL :: GFOUND
298  CHARACTER(LEN=6) :: YMASK
299 INTEGER :: IL1, IL2, INFOMPI
300 !
301 REAL, DIMENSION(:,:), ALLOCATABLE :: ZWORK2
302 REAL :: XTIME0
303 #ifdef SFX_MPI
304 INTEGER, DIMENSION(MPI_STATUS_SIZE,NPROC-1) :: ISTATUS
305 #endif
306 REAL(KIND=JPRB) :: ZHOOK_HANDLE
307 !
308 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFX2_ASC',0,zhook_handle)
309 !
310 il1 = SIZE(pfield,1)
311 il2 = SIZE(pfield,2)
312 !
313 kresp=0
314 !
315 #ifdef SFX_MPI
316 xtime0 = mpi_wtime()
317 #endif
318 !
319 IF (hdir=='-') THEN
320  ALLOCATE(zwork2(il1,il2))
321 ENDIF
322 !
323 IF (nrank==npio) THEN
324  !
325  IF (hdir=='A') THEN
326  ALLOCATE(zwork2(il1,il2))
327  ELSEIF (hdir/='-') THEN
328  ALLOCATE(zwork2(nfull,il2))
329  END IF
330  !
331  IF (hdir=='A' .OR. hdir=='-'.OR.hdir=='E') THEN
332  CALL posnam(nunit,cmask//' '//hrec,gfound,nluout)
333  IF (.NOT. gfound) CALL posnam(nunit,'FULL '//' '//hrec,gfound,nluout)
334  ELSE
335  ymask=cmask
336  CALL io_buff(&
337  hrec,'R',gfound)
338  IF (gfound) ymask='FULL '
339  CALL posnam(nunit,ymask//' '//hrec,gfound,nluout)
340  ENDIF
341  !
342  READ(nunit,fmt=*,iostat=kresp)
343  READ(nunit,fmt='(A50)',iostat=kresp) hcomment
344  READ(nunit,fmt=*,iostat=kresp) zwork2
345  !
346 ELSEIF (hdir/='-') THEN
347  ALLOCATE(zwork2(0,0))
348 ENDIF
349 !
350 #ifdef SFX_MPI
351 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
352 #endif
353 !
354 IF (kresp/=0) CALL error_read_surf_asc(hrec,kresp)
355 !
356 IF (hdir=='E') THEN
357  IF ( nrank==npio ) THEN
358  CALL pack_same_rank(nmask,zwork2(:,:),pfield(:,:))
359  ENDIF
360 ELSEIF (hdir=='A') THEN
361  IF ( nrank==npio ) THEN
362 #ifdef SFX_MPI
363  xtime0 = mpi_wtime()
364 #endif
365  pfield(:,:) = zwork2(1:il1,:)
366 #ifdef SFX_MPI
367  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
368 #endif
369  ENDIF
370 ELSEIF (hdir=='-') THEN
371 #ifdef SFX_MPI
372  IF (nproc>1) THEN
373  xtime0 = mpi_wtime()
374  CALL mpi_bcast(zwork2,il1*il2*kind(zwork2)/4,mpi_real,npio,ncomm,infompi)
375  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
376  ENDIF
377 #endif
378  IF (nrank==npio) pfield(:,:) = zwork2(1:il1,:)
379 ELSE
380  CALL read_and_send_mpi(zwork2,pfield,nmask)
381  !IF (NRANK==NPIO) THEN
382  ! CALL MPI_WAITALL(NPROC-1,NREQ,ISTATUS,INFOMPI)
383  !ENDIF
384 ENDIF
385 !
386 DEALLOCATE(zwork2)
387 !
388 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFX2_ASC',1,zhook_handle)
389 !
390 END SUBROUTINE read_surfx2_asc
391 !
392 ! #############################################################
393  SUBROUTINE read_surfn0_asc (&
394  HREC,KFIELD,KRESP,HCOMMENT)
395 ! #############################################################
396 !
397 !!**** *READN0* - routine to read an integer
398 !
399 !
400 USE modd_io_surf_asc, ONLY : nunit, nluout, nmask, cmask
401 !
402 USE mode_pos_surf
403 !
404 USE modi_io_buff
405 USE modi_error_read_surf_asc
406 !
407 USE yomhook ,ONLY : lhook, dr_hook
408 USE parkind1 ,ONLY : jprb
409 !
410 IMPLICIT NONE
411 !
412 !* 0.1 Declarations of arguments
413 !
414 !
415 !
416  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
417 INTEGER, INTENT(OUT) :: KFIELD ! the integer to be read
418 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
419  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
420 !
421 !* 0.2 Declarations of local variables
422 !
423  CHARACTER(LEN=50) :: YCOMMENT
424  CHARACTER(LEN=6) :: YMASK
425 LOGICAL :: GFOUND
426 REAL(KIND=JPRB) :: ZHOOK_HANDLE
427 !
428 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFN0_ASC',0,zhook_handle)
429 !
430 kresp=0
431 !
432 ymask=cmask
433  CALL io_buff(&
434  hrec,'R',gfound)
435 IF (gfound) ymask='FULL '
436 !
437  CALL posnam(nunit,ymask//' '//hrec,gfound,nluout)
438 IF (.NOT. gfound) CALL posnam(nunit,'FULL '//' '//hrec,gfound,nluout) ! used for auxilliary files
439 !
440 READ(nunit,fmt=*,end=100)
441 READ(nunit,fmt='(A50)') ycomment
442 READ(nunit,fmt=*,err=100) kfield
443 !
444 hcomment = ycomment
445 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFN0_ASC',1,zhook_handle)
446 RETURN
447 !
448 100 CONTINUE
449  CALL error_read_surf_asc(hrec,kresp)
450 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFN0_ASC',1,zhook_handle)
451 !-------------------------------------------------------------------------------
452 END SUBROUTINE read_surfn0_asc
453 !
454 ! #############################################################
455  SUBROUTINE read_surfn1_asc (&
456  HREC,KFIELD,KRESP,HCOMMENT,HDIR)
457 ! #############################################################
458 !
459 !!**** *READN0* - routine to read an integer
460 !
461 !
462 !
463 !
465 !
467 !
468 USE mode_pos_surf
469 !
470 USE modi_io_buff
471 USE modi_error_read_surf_asc
473 !
474 USE yomhook ,ONLY : lhook, dr_hook
475 USE parkind1 ,ONLY : jprb
476 !
477 IMPLICIT NONE
478 !
479 #ifdef SFX_MPI
480 include "mpif.h"
481 #endif
482 !
483 !* 0.1 Declarations of arguments
484 !
485 !
486 !
487  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
488 INTEGER, DIMENSION(:), INTENT(OUT) :: KFIELD ! the integer to be read
489 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
490  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
491  CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
492  ! 'H' : field with
493  ! horizontal spatial dim.
494  ! '-' : no horizontal dim.
495 !* 0.2 Declarations of local variables
496 !
497  CHARACTER(LEN=6) :: YMASK
498 INTEGER :: IL1, INFOMPI
499 !
500 INTEGER, DIMENSION(:), ALLOCATABLE :: IWORK
501 #ifdef SFX_MPI
502 INTEGER, DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
503 #endif
504 REAL :: XTIME0
505 LOGICAL :: GFOUND
506 REAL(KIND=JPRB) :: ZHOOK_HANDLE
507 !
508 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFN1_ASC',0,zhook_handle)
509 !
510 il1 = SIZE(kfield)
511 !
512 kresp = 0
513 !
514 #ifdef SFX_MPI
515 xtime0 = mpi_wtime()
516 #endif
517 !
518 IF (hdir=='-') THEN
519  ALLOCATE(iwork(il1))
520 ENDIF
521 !
522 IF (nrank==npio) THEN
523  !
524  !
525  IF (hdir=='A') THEN
526  ALLOCATE(iwork(il1))
527  ELSEIF (hdir/='-') THEN
528  ALLOCATE(iwork(nfull))
529  END IF
530  !
531  IF (hdir=='A' .OR. hdir=='-') THEN
532  CALL posnam(nunit,cmask//' '//hrec,gfound,nluout)
533  IF (.NOT. gfound) CALL posnam(nunit,'FULL '//' '//hrec,gfound,nluout)
534  ELSE
535  ymask=cmask
536  CALL io_buff(&
537  hrec,'R',gfound)
538  IF (gfound) ymask='FULL '
539  CALL posnam(nunit,ymask//' '//hrec,gfound,nluout)
540  ENDIF
541  !
542  READ(nunit,fmt=*,iostat=kresp)
543  READ(nunit,fmt='(A50)',iostat=kresp) hcomment
544  READ(nunit,fmt=*,iostat=kresp) iwork
545  !
546  !
547 ELSEIF (hdir/='-') THEN
548  ALLOCATE(iwork(0))
549 ENDIF
550 !
551 #ifdef SFX_MPI
552 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
553 #endif
554 !
555 IF (kresp/=0) CALL error_read_surf_asc(hrec,kresp)
556 !
557 IF (hdir=='A') THEN
558  IF ( nrank==npio ) THEN
559 #ifdef SFX_MPI
560  xtime0 = mpi_wtime()
561 #endif
562  kfield(:) = iwork(1:il1)
563 #ifdef SFX_MPI
564  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
565 #endif
566  ENDIF
567 ELSEIF (hdir=='-') THEN
568 #ifdef SFX_MPI
569  IF (nproc>1) THEN
570  xtime0 = mpi_wtime()
571  CALL mpi_bcast(iwork,il1*kind(iwork)/4,mpi_integer,npio,ncomm,infompi)
572  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
573  ENDIF
574 #endif
575  kfield(:) = iwork(1:il1)
576 ELSE
577  CALL read_and_send_mpi(iwork,kfield,nmask)
578 ENDIF
579 !
580 DEALLOCATE(iwork)
581 !
582 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFN1_ASC',1,zhook_handle)
583 !
584 END SUBROUTINE read_surfn1_asc
585 !
586 ! #############################################################
587  SUBROUTINE read_surfc0_asc (&
588  HREC,HFIELD,KRESP,HCOMMENT)
589 ! #############################################################
590 !
591 !!**** *READC0* - routine to read a character
592 !
593 USE modd_io_surf_asc, ONLY : nunit, nluout, cmask
594 !
595 USE mode_pos_surf
596 !
597 USE modi_io_buff
598 USE modi_error_read_surf_asc
599 !
600 USE yomhook ,ONLY : lhook, dr_hook
601 USE parkind1 ,ONLY : jprb
602 !
603 IMPLICIT NONE
604 !
605 !* 0.1 Declarations of arguments
606 !
607 !
608 !
609  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
610  CHARACTER(LEN=40), INTENT(OUT) :: HFIELD ! the integer to be read
611 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
612  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
613 !
614 !* 0.2 Declarations of local variables
615 !
616 INTEGER :: IRESP
617  CHARACTER(LEN=50):: YCOMMENT
618  CHARACTER(LEN=6) :: YMASK
619 LOGICAL :: GFOUND
620 REAL(KIND=JPRB) :: ZHOOK_HANDLE
621 !
622 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFC0_ASC',0,zhook_handle)
623 !
624 kresp=0
625 !
626 ymask=cmask
627  CALL io_buff(&
628  hrec,'R',gfound)
629 IF (gfound) ymask='FULL '
630 !
631  CALL posnam(nunit,ymask//' '//hrec,gfound,nluout)
632 IF (.NOT. gfound) CALL posnam(nunit,'FULL '//' '//hrec,gfound,nluout) ! used for auxilliary files
633 !
634 READ(nunit,fmt=*,iostat=iresp)
635 READ(nunit,fmt='(A50)',iostat=iresp) ycomment
636 READ(nunit,fmt='(A40)',iostat=iresp) hfield
637 !
638 IF (iresp/=0) CALL error_read_surf_asc(hrec,kresp)
639 
640 hcomment = ycomment
641 !
642 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFC0_ASC',1,zhook_handle)
643 !
644 END SUBROUTINE read_surfc0_asc
645 !
646 ! #############################################################
647  SUBROUTINE read_surfl0_asc (&
648  HREC,OFIELD,KRESP,HCOMMENT)
649 ! #############################################################
650 !
651 !!**** *READL0* - routine to read a logical
652 !
653 USE modd_io_surf_asc, ONLY : nunit, nluout, cmask
654 !
655 USE mode_pos_surf
656 !
657 USE modi_io_buff
658 USE modi_error_read_surf_asc
659 !
660 USE yomhook ,ONLY : lhook, dr_hook
661 USE parkind1 ,ONLY : jprb
662 !
663 IMPLICIT NONE
664 !
665 !* 0.1 Declarations of arguments
666 !
667 !
668 !
669  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
670 LOGICAL, INTENT(OUT) :: OFIELD ! array containing the data field
671 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
672  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
673 !
674 !* 0.2 Declarations of local variables
675 !
676  CHARACTER(LEN=50) :: YCOMMENT
677  CHARACTER(LEN=6) :: YMASK
678 LOGICAL :: GFOUND
679 REAL(KIND=JPRB) :: ZHOOK_HANDLE
680 !
681 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFL0_ASC',0,zhook_handle)
682 kresp=0
683 !
684 ymask=cmask
685  CALL io_buff(&
686  hrec,'R',gfound)
687 IF (gfound) ymask='FULL '
688 !
689  CALL posnam(nunit,ymask//' '//hrec,gfound,nluout)
690 IF (.NOT. gfound) CALL posnam(nunit,'FULL '//' '//hrec,gfound,nluout) ! used for auxilliary files
691 !
692 READ(nunit,fmt=*,end=100)
693 READ(nunit,fmt='(A50)') ycomment
694 READ(nunit,fmt=*,err=100) ofield
695 !
696 hcomment = ycomment
697 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFL0_ASC',1,zhook_handle)
698 RETURN
699 !
700 100 CONTINUE
701  CALL error_read_surf_asc(hrec,kresp)
702 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFL0_ASC',1,zhook_handle)
703 !
704 END SUBROUTINE read_surfl0_asc
705 !
706 ! #############################################################
707  SUBROUTINE read_surfl1_asc (&
708  HREC,OFIELD,KRESP,HCOMMENT,HDIR)
709 ! #############################################################
710 !
711 !!**** *READL1* - routine to read a logical array
712 !
714 !
715 USE modd_io_surf_asc, ONLY : nunit, nluout, cmask
716 !
717 USE mode_pos_surf
718 !
719 USE modi_io_buff
720 USE modi_error_read_surf_asc
721 !
722 USE yomhook ,ONLY : lhook, dr_hook
723 USE parkind1 ,ONLY : jprb
724 !
725 IMPLICIT NONE
726 !
727 #ifdef SFX_MPI
728 include "mpif.h"
729 #endif
730 !
731 !* 0.1 Declarations of arguments
732 !
733 !
734 !
735  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
736 LOGICAL, DIMENSION(:), INTENT(OUT) :: OFIELD ! array containing the data field
737 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
738  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
739  CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
740  ! 'H' : field with
741  ! horizontal spatial dim.
742  ! '-' : no horizontal dim.
743 !* 0.2 Declarations of local variables
744 !
745  CHARACTER(LEN=6) :: YMASK
746 INTEGER :: INFOMPI, IL1
747 REAL :: XTIME0
748 LOGICAL :: GFOUND
749 REAL(KIND=JPRB) :: ZHOOK_HANDLE
750 !
751 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFL1_ASC',0,zhook_handle)
752 !
753 il1 = SIZE(ofield)
754 !
755 kresp = 0
756 !
757 !
758 #ifdef SFX_MPI
759 xtime0 = mpi_wtime()
760 #endif
761 !
762 IF (nrank==npio) THEN
763  !
764  !
765  ymask=cmask
766  CALL io_buff(&
767  hrec,'R',gfound)
768  IF (gfound) ymask='FULL '
769  !
770  CALL posnam(nunit,ymask//' '//hrec,gfound,nluout)
771  IF (.NOT. gfound) CALL posnam(nunit,'FULL '//' '//hrec,gfound,nluout) ! used for auxilliary files
772  !
773  READ(nunit,fmt=*,iostat=kresp)
774  READ(nunit,fmt='(A50)',iostat=kresp) hcomment
775  READ(nunit,fmt=*,iostat=kresp) ofield
776  !
777  !
778 ENDIF
779 !
780 #ifdef SFX_MPI
781 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
782 #endif
783 !
784 IF (kresp/=0) CALL error_read_surf_asc(hrec,kresp)
785 !
786 #ifdef SFX_MPI
787 IF (nproc>1 .AND. hdir/='A') THEN
788  xtime0 = mpi_wtime()
789  CALL mpi_bcast(ofield,il1,mpi_logical,npio,ncomm,infompi)
790  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
791 ENDIF
792 #endif
793 !
794 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFL1_ASC',1,zhook_handle)
795 !
796 END SUBROUTINE read_surfl1_asc
797 !
798 !
799 ! #############################################################
800  SUBROUTINE read_surft0_asc (&
801  HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
802 ! #############################################################
803 !
804 !!**** *READT0* - routine to read a date
805 !
806 !
807 !
808 !
809 USE modd_surfex_mpi, ONLY : nrank
810 !
811 USE modd_io_surf_asc, ONLY : nunit, nluout, cmask
812 !
813 USE mode_pos_surf
814 !
815 USE modi_io_buff
816 USE modi_error_read_surf_asc
817 !
818 USE yomhook ,ONLY : lhook, dr_hook
819 USE parkind1 ,ONLY : jprb
820 !
821 IMPLICIT NONE
822 !
823 !* 0.1 Declarations of arguments
824 !
825 !
826 !
827  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
828 INTEGER, INTENT(OUT) :: KYEAR ! year
829 INTEGER, INTENT(OUT) :: KMONTH ! month
830 INTEGER, INTENT(OUT) :: KDAY ! day
831 REAL, INTENT(OUT) :: PTIME ! year
832 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
833  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
834 
835 !* 0.2 Declarations of local variables
836 !
837  CHARACTER(LEN=50) :: YCOMMENT
838  CHARACTER(LEN=6) :: YMASK
839 LOGICAL :: GFOUND
840 INTEGER, DIMENSION(3) :: ITDATE
841 REAL(KIND=JPRB) :: ZHOOK_HANDLE
842 !
843 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFT0_ASC',0,zhook_handle)
844 kresp=0
845 !
846 ymask=cmask
847  CALL io_buff(&
848  hrec,'R',gfound)
849 IF (gfound) ymask='FULL '
850 !
851  CALL posnam(nunit,ymask//' '//trim(hrec)//'%TDATE',gfound,nluout)
852 !IF (.NOT. GFOUND) CALL POSNAM(NUNIT,'FULL '//' '//HREC,GFOUND,NLUOUT) ! used for auxilliary files
853 !
854 READ(nunit,fmt=*,end=100)
855 READ(nunit,fmt='(A50)') ycomment
856 READ(nunit,fmt=*,err=100) itdate(:)
857 !
858 kyear = itdate(1)
859 kmonth = itdate(2)
860 kday = itdate(3)
861 !
862  CALL posnam(nunit,ymask//' '//trim(hrec)//'%TIME',gfound,nluout)
863 IF (.NOT. gfound) CALL posnam(nunit,'FULL '//' '//hrec,gfound,nluout) ! used for auxilliary files
864 !
865 READ(nunit,fmt=*,end=100)
866 READ(nunit,fmt='(A50)') ycomment
867 READ(nunit,fmt=*,err=100) ptime
868 !
869 hcomment = ycomment
870 !
871 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFT0_ASC',1,zhook_handle)
872 RETURN
873 !
874 100 CONTINUE
875  CALL error_read_surf_asc(hrec,kresp)
876 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFT0_ASC',1,zhook_handle)
877 !
878 END SUBROUTINE read_surft0_asc
879 !
880 ! #############################################################
881  SUBROUTINE read_surft1_asc (&
882  HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
883 ! #############################################################
884 !
885 !!**** *READT2* - routine to read a date
886 !
887 !
888 !
889 !
890 USE modd_surfex_mpi, ONLY : nrank
891 !
892 USE modd_io_surf_asc, ONLY : nunit, nluout, cmask
893 !
894 USE mode_pos_surf
895 !
896 USE modi_io_buff
897 USE modi_error_read_surf_asc
898 !
899 USE yomhook ,ONLY : lhook, dr_hook
900 USE parkind1 ,ONLY : jprb
901 !
902 IMPLICIT NONE
903 !
904 !* 0.1 Declarations of arguments
905 !
906 !
907 !
908  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
909 INTEGER, DIMENSION(:), INTENT(OUT) :: KYEAR ! year
910 INTEGER, DIMENSION(:), INTENT(OUT) :: KMONTH ! month
911 INTEGER, DIMENSION(:), INTENT(OUT) :: KDAY ! day
912 REAL, DIMENSION(:), INTENT(OUT) :: PTIME ! year
913 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
914  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
915 !
916 !* 0.2 Declarations of local variables
917 !
918  CHARACTER(LEN=50) :: YCOMMENT
919  CHARACTER(LEN=6) :: YMASK
920 LOGICAL :: GFOUND
921 INTEGER, DIMENSION(3,SIZE(KYEAR)) :: ITDATE
922 REAL(KIND=JPRB) :: ZHOOK_HANDLE
923 !
924 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFT1_ASC',0,zhook_handle)
925 !
926 kresp=0
927 !
928 ymask=cmask
929  CALL io_buff(&
930  hrec,'R',gfound)
931 IF (gfound) ymask='FULL '
932 !
933  CALL posnam(nunit,ymask//' '//trim(hrec)//'%TDATE',gfound,nluout)
934 !
935 READ(nunit,fmt=*,end=100)
936 READ(nunit,fmt='(A50)') ycomment
937 READ(nunit,fmt=*,err=100) itdate(:,:)
938 !
939 kyear(:) = itdate(1,:)
940 kmonth(:) = itdate(2,:)
941 kday(:) = itdate(3,:)
942 !
943  CALL posnam(nunit,cmask//' '//trim(hrec)//'%TIME',gfound,nluout)
944 !
945 READ(nunit,fmt=*,end=100)
946 READ(nunit,fmt='(A50)') ycomment
947 READ(nunit,fmt=*,err=100) ptime
948 !
949 hcomment = ycomment
950 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFT1_ASC',1,zhook_handle)
951 RETURN
952 !
953 100 CONTINUE
954  CALL error_read_surf_asc(hrec,kresp)
955 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFT1_ASC',1,zhook_handle)
956 !
957 END SUBROUTINE read_surft1_asc
958 !
959 ! #############################################################
960  SUBROUTINE read_surft2_asc (&
961  HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
962 ! #############################################################
963 !
964 !!**** *READT2* - routine to read a date
965 !
966 !
967 USE modd_io_surf_asc, ONLY : nunit, nluout, cmask
968 !
969 USE mode_pos_surf
970 !
971 USE modi_io_buff
972 USE modi_error_read_surf_asc
973 !
974 USE yomhook ,ONLY : lhook, dr_hook
975 USE parkind1 ,ONLY : jprb
976 !
977 IMPLICIT NONE
978 !
979 !* 0.1 Declarations of arguments
980 !
981 !
982 !
983  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
984 INTEGER, DIMENSION(:,:), INTENT(OUT) :: KYEAR ! year
985 INTEGER, DIMENSION(:,:), INTENT(OUT) :: KMONTH ! month
986 INTEGER, DIMENSION(:,:), INTENT(OUT) :: KDAY ! day
987 REAL, DIMENSION(:,:), INTENT(OUT) :: PTIME ! year
988 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
989  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
990 
991 !* 0.2 Declarations of local variables
992 !
993  CHARACTER(LEN=50) :: YCOMMENT
994  CHARACTER(LEN=6) :: YMASK
995 LOGICAL :: GFOUND
996 INTEGER, DIMENSION(3,SIZE(KYEAR,1),SIZE(KYEAR,2)) :: ITDATE
997 REAL(KIND=JPRB) :: ZHOOK_HANDLE
998 !
999 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFT2_ASC',0,zhook_handle)
1000 !
1001 kresp=0
1002 !
1003 ymask=cmask
1004  CALL io_buff(&
1005  hrec,'R',gfound)
1006 IF (gfound) ymask='FULL '
1007 !
1008  CALL posnam(nunit,ymask//' '//trim(hrec)//'%TDATE',gfound,nluout)
1009 !
1010 READ(nunit,fmt=*,end=100)
1011 READ(nunit,fmt='(A50)') ycomment
1012 READ(nunit,fmt=*,err=100) itdate(:,:,:)
1013 !
1014 kyear(:,:) = itdate(1,:,:)
1015 kmonth(:,:) = itdate(2,:,:)
1016 kday(:,:) = itdate(3,:,:)
1017 !
1018  CALL posnam(nunit,ymask//' '//trim(hrec)//'%TIME',gfound,nluout)
1019 
1020 READ(nunit,fmt=*,end=100)
1021 READ(nunit,fmt='(A50)') ycomment
1022 READ(nunit,fmt=*,err=100) ptime
1023 !
1024 hcomment = ycomment
1025 !
1026 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFT2_ASC',1,zhook_handle)
1027 RETURN
1028 !
1029 100 CONTINUE
1030  CALL error_read_surf_asc(hrec,kresp)
1031 IF (lhook) CALL dr_hook('MODE_READ_SURF_ASC:READ_SURFT2_ASC',1,zhook_handle)
1032 !
1033 END SUBROUTINE read_surft2_asc
1034 !
1035 END MODULE mode_read_surf_asc
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
subroutine read_surft1_asc(HREC, KYEAR, KMONTH, KDAY, PTIME, KRESP, HCOMMENT)
integer, dimension(:), allocatable nreq
subroutine read_surfx0_asc(HREC, PFIELD, KRESP, HCOMMENT)
character(len=6) cmask
subroutine read_surfn0_asc(HREC, KFIELD, KRESP, HCOMMENT)
integer, dimension(:), pointer nmask
subroutine posnam(KULNAM, HDNAML, OFOUND, KLUOUT)
subroutine error_read_surf_asc(HREC, KRESP)
subroutine read_surfl1_asc(HREC, OFIELD, KRESP, HCOMMENT, HDIR)
integer, parameter jprb
Definition: parkind1.F90:32
subroutine read_surfn1_asc(HREC, KFIELD, KRESP, HCOMMENT, HDIR)
subroutine read_surfc0_asc(HREC, HFIELD, KRESP, HCOMMENT)
logical lhook
Definition: yomhook.F90:15
subroutine read_surfx1_asc(HREC, PFIELD, KRESP, HCOMMENT, HDIR)
subroutine io_buff(HREC, HACTION, OKNOWN)
Definition: io_buff.F90:8
subroutine read_surfl0_asc(HREC, OFIELD, KRESP, HCOMMENT)
subroutine read_surfx2_asc(HREC, PFIELD, KRESP, HCOMMENT, HDIR)
subroutine read_surft2_asc(HREC, KYEAR, KMONTH, KDAY, PTIME, KRESP, HCOMMENT)
subroutine read_surft0_asc(HREC, KYEAR, KMONTH, KDAY, PTIME, KRESP, HCOMMENT)