SURFEX v8.1
General documentation of Surfex
mode_read_surf_fa.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_FA 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_fa
41  MODULE PROCEDURE read_surfx0_fa
42  MODULE PROCEDURE read_surfn0_fa
43  MODULE PROCEDURE read_surfl0_fa
44  MODULE PROCEDURE read_surfc0_fa
45 END INTERFACE
46 INTERFACE read_surfx_fa
47  MODULE PROCEDURE read_surfx1_fa
48  MODULE PROCEDURE read_surfx2_fa
49 END INTERFACE
50 INTERFACE read_surfn_fa
51  MODULE PROCEDURE read_surfn1_fa
52  MODULE PROCEDURE read_surfl1_fa
53 END INTERFACE
54 INTERFACE read_surft_fa
55  MODULE PROCEDURE read_surft0_fa
56  MODULE PROCEDURE read_surft2_fa
57 END INTERFACE
58 !
59 !----------------------------------------------------------------------------
60 !
61 CONTAINS
62 !
63 !----------------------------------------------------------------------------
64 !
65 ! #############################################################
66  SUBROUTINE sfx_fa_version(ONEW)
67 ! #############################################################
68 !
69 !!**** *SFX_FA_VERSION* - routine to find which fa version
70 ! (convergence with GMAP var name)
71 !
73 !
74 USE modi_error_read_surf_fa
75 !
76 USE yomhook ,ONLY : lhook, dr_hook
77 USE parkind1 ,ONLY : jprb
78 !
79 IMPLICIT NONE
80 !
81 LOGICAL, INTENT(OUT) :: ONEW
82 !
83 LOGICAL :: GOLD, GWORK
84 INTEGER :: INGRIB, INBITS, ISTRON, IPUILA, IRESP
85 !
86 REAL(KIND=JPRB) :: ZHOOK_HANDLE
87 !
88 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:SFX_FA_VERSION',0,zhook_handle)
89 !
90 iresp=0
91 !
92  CALL fanion(iresp,nunit_fa,cprefix1d,0,'VERSION',onew,gwork,ingrib,inbits,istron,ipuila)
93 IF (iresp/=0) CALL error_read_surf_fa('FULLVERSION',iresp)
94 !
95 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:SFX_FA_VERSION',1,zhook_handle)
96 !
97 END SUBROUTINE sfx_fa_version
98 !
99 !----------------------------------------------------------------------------
100 !
101 ! #############################################################
102  SUBROUTINE read_surfx0_fa (&
103  HREC,PFIELD,KRESP,HCOMMENT)
104 ! #############################################################
105 !
106 !!**** *READX0* - routine to read a real scalar
107 !
109 !
110 USE mode_fasurfex
111 !
112 USE modi_io_buff
113 USE modi_error_read_surf_fa
114 !
115 USE yomhook ,ONLY : lhook, dr_hook
116 USE parkind1 ,ONLY : jprb
117 !
118 IMPLICIT NONE
119 !
120 !* 0.1 Declarations of arguments
121 !
122 !
123 !
124  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
125 REAL, INTENT(OUT) :: PFIELD ! the real scalar to be read
126 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
127  CHARACTER(LEN=100),INTENT(OUT) :: HCOMMENT ! comment
128 !
129 !* 0.2 Declarations of local variables
130 !
131  CHARACTER(LEN=50) :: YCOMMENT
132  CHARACTER(LEN=6) :: YMASK
133  CHARACTER(LEN=18) :: YNAME ! Field Name
134 LOGICAL :: GV8, GFOUND
135 !
136 REAL(KIND=JPRB) :: ZHOOK_HANDLE
137 !
138 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFX0_FA',0,zhook_handle)
139 !
140 kresp=0
141 !
142  CALL io_buff(&
143  hrec,'R',gfound)
144 !
145  CALL sfx_fa_version(gv8)
146 IF(gv8)THEN
147  yname=cprefix1d//trim(hrec)
148 ELSE
149  ymask=cmask
150  IF (gfound) ymask='FULL '
151  yname=trim(ymask)//trim(hrec)
152 ENDIF
153 !
154  CALL falit_r(kresp,nunit_fa,yname,pfield)
155 IF (kresp/=0) CALL error_read_surf_fa(hrec,kresp)
156 !
157 ycomment = trim(yname)
158 hcomment = ycomment
159 !
160 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFX0_FA',1,zhook_handle)
161 !
162 END SUBROUTINE read_surfx0_fa
163 !
164 !----------------------------------------------------------------------------
165 !
166 ! #############################################################
167  SUBROUTINE read_surfx1_fa(HREC,KL,PFIELD,KRESP,HCOMMENT,HDIR)
168 ! #############################################################
169 !
170 !!**** *READX1* - routine to fill a real 1D array for the externalised surface
171 !
173  wlog_mpi, nreq
174 !
177 !
178 USE mode_fasurfex
179 !
181 USE modi_error_read_surf_fa
183 !
184 USE yomhook ,ONLY : lhook, dr_hook
185 USE parkind1 ,ONLY : jprb
186 !
187 IMPLICIT NONE
188 !
189 #ifdef SFX_MPI
190 include "mpif.h"
191 #endif
192 !
193 !* 0.1 Declarations of arguments
194 !
195  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
196 INTEGER, INTENT(IN) :: KL ! number of points
197 REAL, DIMENSION(:), INTENT(OUT) :: PFIELD ! array containing the data field
198 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
199  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
200  CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
201  ! 'H' : field with
202  ! horizontal spatial dim.
203  ! '-' : no horizontal dim.
204 !* 0.2 Declarations of local variables
205 !
206  CHARACTER(LEN=4) :: YPREFIX
207  CHARACTER(LEN=3) :: YPREF
208 LOGICAL :: GV8
209 !
210 INTEGER :: I, J, INFOMPI
211 #ifdef SFX_MPI
212 INTEGER, DIMENSION(MPI_STATUS_SIZE,NPROC-1) :: ISTATUS
213 #endif
214 !
215 REAL, DIMENSION(:), ALLOCATABLE :: ZWORK2, ZWORK
216 REAL :: XTIME0
217 REAL(KIND=JPRB) :: ZHOOK_HANDLE
218 !
219 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFX1_FA',0,zhook_handle)
220 !
221 !
222 kresp=0
223 !
224 #ifdef SFX_MPI
225 xtime0 = mpi_wtime()
226 #endif
227 !
228 IF (nrank==npio) THEN
229  !
230  ALLOCATE(zwork(nfull))
231  !
232  ypref=hrec(1:3)
233  !
234  IF (ypref=='CLS' .OR. ypref=='SUR' .OR. ypref=='PRO' .OR. ypref=='ATM') THEN
235  ALLOCATE(zwork2(nfull_ext))
236  CALL facile(kresp,nunit_fa,hrec(1:4),0,hrec(5:16),zwork2,.false.)
237  IF (kresp/=0) CALL error_read_surf_fa(hrec,kresp)
238  DO j=1,ndgux
239  DO i=1,ndlux
240  zwork((j-1)*ndlux + i) = zwork2((j-1)*ndlon + i)
241  ENDDO
242  ENDDO
243  DEALLOCATE(zwork2)
244  hcomment = trim(hrec)
245  ELSE
246  CALL sfx_fa_version(gv8)
247  IF(gv8)THEN
248  yprefix=cprefix1d
249  ELSE
250  yprefix='S1D_'
251  ENDIF
252  CALL facile(kresp,nunit_fa,yprefix,0,hrec,zwork,.false.)
253  IF (kresp/=0) CALL error_read_surf_fa(hrec,kresp)
254  hcomment = yprefix//trim(hrec)
255  ENDIF
256  !
257 ELSEIF (hdir/='-') THEN
258  ALLOCATE(zwork(0))
259 ENDIF
260 !
261 #ifdef SFX_MPI
262 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
263 #endif
264 !
265 IF (hdir=='E') THEN
266  IF ( nrank==npio ) THEN
267  CALL pack_same_rank(nmask,zwork(:),pfield(:))
268  ENDIF
269 ELSEIF (hdir=='A') THEN ! no distribution on other tasks
270  IF ( nrank==npio ) THEN
271 #ifdef SFX_MPI
272  xtime0 = mpi_wtime()
273 #endif
274  pfield(:) = zwork(1:kl)
275 #ifdef SFX_MPI
276  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
277 #endif
278  ENDIF
279 ELSEIF (hdir=='-') THEN ! distribution of the total field on other tasks
280 #ifdef SFX_MPI
281  IF (nproc>1) THEN
282  xtime0 = mpi_wtime()
283  CALL mpi_bcast(nfull,kind(nfull)/4,mpi_integer,npio,ncomm,infompi)
284  IF ( nrank/=npio ) ALLOCATE(zwork(nfull))
285  CALL mpi_bcast(zwork(1:kl),kl*kind(zwork)/4,mpi_real,npio,ncomm,infompi)
286  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
287  ENDIF
288 #endif
289  pfield(:) = zwork(1:kl)
290 ELSE
291  CALL read_and_send_mpi(zwork,pfield,nmask)
292  !IF (NRANK==NPIO) THEN
293  ! CALL MPI_WAITALL(NPROC-1,NREQ,ISTATUS,INFOMPI)
294  !ENDIF
295 ENDIF
296 !
297 DEALLOCATE(zwork)
298 !
299 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFX1_FA',1,zhook_handle)
300 !
301 END SUBROUTINE read_surfx1_fa
302 !
303 !----------------------------------------------------------------------------
304 !
305 ! #############################################################
306  SUBROUTINE read_surfx2_fa(HREC,KL1,KL2,PFIELD,KRESP,HCOMMENT,HDIR)
307 ! #############################################################
308 !
309 !!**** *READX2* - routine to fill a real 2D array for the externalised surface
310 !
312  wlog_mpi, nreq
313 !
315 !
316 USE mode_fasurfex
317 !
319 USE modi_error_read_surf_fa
321 !
322 USE yomhook ,ONLY : lhook, dr_hook
323 USE parkind1 ,ONLY : jprb
324 !
325 IMPLICIT NONE
326 !
327 #ifdef SFX_MPI
328 include "mpif.h"
329 #endif
330 !
331 !* 0.1 Declarations of arguments
332 !
333  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
334 INTEGER, INTENT(IN) :: KL1 ! number of points
335 INTEGER, INTENT(IN) :: KL2 ! 2nd dimension
336 REAL, DIMENSION(:,:), INTENT(OUT) :: PFIELD ! array containing the data field
337 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
338  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
339  CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
340  ! 'H' : field with
341  ! horizontal spatial dim.
342  ! '-' : no horizontal dim.
343 !* 0.2 Declarations of local variables
344 !
345  CHARACTER(LEN=4) :: YPREFIX
346  CHARACTER(LEN=2) :: YPATCH
347  CHARACTER(LEN=3) :: YNUM
348 LOGICAL :: GV8
349 !
350 INTEGER :: JL, I, INFOMPI ! loop counter
351 !
352 #ifdef SFX_MPI
353 INTEGER, DIMENSION(MPI_STATUS_SIZE,NPROC-1) :: ISTATUS
354 #endif
355 REAL, DIMENSION(:,:), ALLOCATABLE :: ZWORK2 ! work array read in the file
356 REAL:: XTIME0
357 REAL(KIND=JPRB) :: ZHOOK_HANDLE
358 !
359 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFX2_FA',0,zhook_handle)
360 !
361 !
362 kresp=0
363 !
364 #ifdef SFX_MPI
365 xtime0 = mpi_wtime()
366 #endif
367 !
368 IF (nrank==npio) THEN
369  !
370  ALLOCATE(zwork2(nfull,kl2))
371  !
372  CALL sfx_fa_version(gv8)
373  !
374  DO jl=1,kl2
375  IF(gv8)THEN
376  WRITE(ynum,'(I3.3)')jl
377  yprefix=cprefix2d//ynum
378  ELSE
379  WRITE(ypatch,'(I2.2)')jl
380  yprefix='S'//ypatch//'_'
381  ENDIF
382  CALL facile(kresp,nunit_fa,yprefix,jl,hrec,zwork2(:,jl),.false.)
383  IF (kresp/=0) THEN
384  hcomment = yprefix//trim(hrec)
385  CALL error_read_surf_fa(hcomment,kresp)
386  ENDIF
387  END DO
388  !
389  hcomment = 'PATCH_'//trim(hrec)
390  !
391 ELSEIF (hdir/='-') THEN
392  ALLOCATE(zwork2(0,0))
393 ENDIF
394 !
395 #ifdef SFX_MPI
396 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
397 #endif
398 !
399 IF (hdir=='E') THEN
400  IF ( nrank==npio ) THEN
401  CALL pack_same_rank(nmask,zwork2(:,:),pfield(:,:))
402  ENDIF
403 ELSEIF (hdir=='A') THEN ! no distribution on other tasks
404  IF ( nrank==npio ) THEN
405 #ifdef SFX_MPI
406  xtime0 = mpi_wtime()
407 #endif
408  pfield(:,:) = zwork2(1:kl1,1:kl2)
409 #ifdef SFX_MPI
410  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
411 #endif
412  ENDIF
413 ELSEIF (hdir=='-') THEN ! distribution of the total field on other tasks
414 #ifdef SFX_MPI
415  IF (nproc>1) THEN
416  xtime0 = mpi_wtime()
417  CALL mpi_bcast(nfull,kind(nfull)/4,mpi_integer,npio,ncomm,infompi)
418  IF ( nrank/=npio ) ALLOCATE(zwork2(nfull,kl2))
419  CALL mpi_bcast(zwork2(1:kl1,1:kl2),kl1*kl2*kind(zwork2)/4,mpi_real,npio,ncomm,infompi)
420  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
421  ENDIF
422 #endif
423  pfield(:,:) = zwork2(1:kl1,1:kl2)
424 ELSE
425  CALL read_and_send_mpi(zwork2,pfield,nmask)
426  !IF (NRANK==NPIO) THEN
427  ! CALL MPI_WAITALL(NPROC-1,NREQ,ISTATUS,INFOMPI)
428  !ENDIF
429 ENDIF
430 !
431 DEALLOCATE(zwork2)
432 !
433 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFX2_FA',1,zhook_handle)
434 !
435 END SUBROUTINE read_surfx2_fa
436 !
437 !----------------------------------------------------------------------------
438 !
439 ! #############################################################
440  SUBROUTINE read_surfn0_fa (&
441  HREC,KFIELD,KRESP,HCOMMENT)
442 ! #############################################################
443 !
444 !!**** *READN0* - routine to read an integer
445 !
447 !
448 USE mode_fasurfex
449 !
450 USE modi_io_buff
451 USE modi_error_read_surf_fa
452 !
453 USE yomhook ,ONLY : lhook, dr_hook
454 USE parkind1 ,ONLY : jprb
455 !
456 IMPLICIT NONE
457 !
458 !* 0.1 Declarations of arguments
459 !
460 !
461 !
462  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
463 INTEGER, INTENT(OUT) :: KFIELD ! the integer to be read
464 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
465  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
466 !
467 !* 0.2 Declarations of local variables
468 !
469  CHARACTER(LEN=50) :: YCOMMENT
470  CHARACTER(LEN=6) :: YMASK
471  CHARACTER(LEN=18) :: YNAME ! Field Name
472 LOGICAL :: GV8, GFOUND
473 !
474 REAL(KIND=JPRB) :: ZHOOK_HANDLE
475 !
476 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFN0_FA',0,zhook_handle)
477 !
478 kresp=0
479 !
480  CALL io_buff(&
481  hrec,'R',gfound)
482 !
483  CALL sfx_fa_version(gv8)
484 IF(gv8)THEN
485  yname=cprefix1d//trim(hrec)
486 ELSE
487  ymask=cmask
488  IF (gfound) ymask='FULL '
489  yname=trim(ymask)//trim(hrec)
490 ENDIF
491 !
492  CALL falit_i(kresp,nunit_fa,yname,kfield)
493 IF (kresp/=0) CALL error_read_surf_fa(hrec,kresp)
494 !
495 ycomment = yname
496 hcomment = ycomment
497 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFN0_FA',1,zhook_handle)
498 !
499 END SUBROUTINE read_surfn0_fa
500 !
501 !----------------------------------------------------------------------------
502 !
503 ! #############################################################
504  SUBROUTINE read_surfn1_fa (&
505  HREC,KL,KFIELD,KRESP,HCOMMENT,HDIR)
506 ! #############################################################
507 !
508 !!**** *READN0* - routine to read an integer
509 !
510 !
511 !
512 !
514  wlog_mpi
515 !
517 !
518 USE mode_fasurfex
519 !
520 USE modi_io_buff
521 USE modi_error_read_surf_fa
523 !
524 USE yomhook ,ONLY : lhook, dr_hook
525 USE parkind1 ,ONLY : jprb
526 !
527 IMPLICIT NONE
528 !
529 #ifdef SFX_MPI
530 include "mpif.h"
531 #endif
532 !
533 !* 0.1 Declarations of arguments
534 !
535 !
536 !
537  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
538 INTEGER, INTENT(IN) :: KL ! number of points
539 INTEGER, DIMENSION(:), INTENT(OUT) :: KFIELD ! the integer to be read
540 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
541  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
542  CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
543  ! 'H' : field with
544  ! horizontal spatial dim.
545  ! '-' : no horizontal dim.
546 !* 0.2 Declarations of local variables
547 !
548  CHARACTER(LEN=6) :: YMASK
549  CHARACTER(LEN=18) :: YNAME ! Field Name
550 LOGICAL :: GV8, GFOUND
551 !
552 INTEGER, DIMENSION(:), ALLOCATABLE :: IWORK
553 INTEGER :: I, INFOMPI
554 #ifdef SFX_MPI
555 INTEGER, DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
556 #endif
557 !
558 REAL :: XTIME0
559 REAL(KIND=JPRB) :: ZHOOK_HANDLE
560 !
561 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFN1_FA',0,zhook_handle)
562 !
563 kresp = 0
564 !
565 #ifdef SFX_MPI
566 xtime0 = mpi_wtime()
567 #endif
568 !
569 IF (hdir=='-') THEN
570  ALLOCATE(iwork(kl))
571 ENDIF
572 !
573 IF (nrank==npio) THEN
574  !
575  CALL io_buff(&
576  hrec,'R',gfound)
577  !
578  CALL sfx_fa_version(gv8)
579  IF(gv8)THEN
580  yname=cprefix1d//trim(hrec)
581  ELSE
582  ymask=cmask
583  IF (gfound) ymask='FULL '
584  yname=trim(ymask)//trim(hrec)
585  ENDIF
586  !
587  IF (hdir=='A') THEN
588  ALLOCATE(iwork(kl))
589  ELSEIF (hdir/='-') THEN
590  ALLOCATE(iwork(nfull))
591  END IF
592  !
593  CALL falit_i_d(kresp,nunit_fa,yname,SIZE(iwork),iwork)
594  IF (kresp/=0) CALL error_read_surf_fa(hrec,kresp)
595  !
596  hcomment = yname
597  !
598 ELSEIF (hdir/='-') THEN
599  ALLOCATE(iwork(0))
600 ENDIF
601 !
602 #ifdef SFX_MPI
603 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
604 #endif
605 !
606 IF (hdir=='A') THEN ! no distribution on other tasks
607  IF ( nrank==npio ) THEN
608 #ifdef SFX_MPI
609  xtime0 = mpi_wtime()
610 #endif
611  kfield(:) = iwork(1:kl)
612 #ifdef SFX_MPI
613  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
614 #endif
615  ENDIF
616 ELSEIF (hdir=='-') THEN ! distribution of the total field on other tasks
617 #ifdef SFX_MPI
618  IF (nproc>1) THEN
619  xtime0 = mpi_wtime()
620  CALL mpi_bcast(nfull,kind(nfull)/4,mpi_integer,npio,ncomm,infompi)
621  CALL mpi_bcast(iwork(1:kl),kl*kind(iwork)/4,mpi_integer,npio,ncomm,infompi)
622  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
623  ENDIF
624 #endif
625  kfield(:) = iwork(1:kl)
626 ELSE
627  CALL read_and_send_mpi(iwork,kfield,nmask)
628 ENDIF
629 !
630 DEALLOCATE(iwork)
631 !
632 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFN1_FA',1,zhook_handle)
633 !
634 END SUBROUTINE read_surfn1_fa
635 !
636 !----------------------------------------------------------------------------
637 !
638 ! #############################################################
639  SUBROUTINE read_surfc0_fa (&
640  HREC,HFIELD,KRESP,HCOMMENT)
641 ! #############################################################
642 !
643 !!**** *READC0* - routine to read a character
644 !
646 !
647 USE mode_fasurfex
648 !
649 USE modi_io_buff
650 USE modi_error_read_surf_fa
651 !
652 USE yomhook ,ONLY : lhook, dr_hook
653 USE parkind1 ,ONLY : jprb
654 !
655 IMPLICIT NONE
656 !
657 !* 0.1 Declarations of arguments
658 !
659 !
660 !
661  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
662  CHARACTER(LEN=40), INTENT(OUT) :: HFIELD ! the integer to be read
663 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
664  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
665 !
666 !* 0.2 Declarations of local variables
667 !
668  CHARACTER(LEN=50) :: YCOMMENT
669  CHARACTER(LEN=6) :: YMASK
670  CHARACTER(LEN=18) :: YNAME ! Field Name
671  CHARACTER,DIMENSION(40) :: YFIELD
672 LOGICAL :: GV8, GFOUND
673 !
674 REAL(KIND=JPRB) :: ZHOOK_HANDLE
675 !----------------------------------------------------------------------------
676 !
677 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFC0_FA',0,zhook_handle)
678 !
679 kresp=0
680 !
681  CALL io_buff(&
682  hrec,'R',gfound)
683 !
684  CALL sfx_fa_version(gv8)
685 IF(gv8)THEN
686  yname=cprefix1d//trim(hrec)
687 ELSE
688  ymask=cmask
689  IF (gfound) ymask='FULL '
690  yname=trim(ymask)//trim(hrec)
691 ENDIF
692 !
693  CALL falit_c(kresp,nunit_fa,yname,40,yfield)
694 IF (kresp/=0) CALL error_read_surf_fa(hrec,kresp)
695 WRITE(hfield,'(40A1)') yfield(:)
696 !
697 ycomment = yname
698 hcomment = ycomment
699 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFC0_FA',1,zhook_handle)
700 !
701 END SUBROUTINE read_surfc0_fa
702 !
703 !
704 ! #############################################################
705  SUBROUTINE read_surfl0_fa (&
706  HREC,OFIELD,KRESP,HCOMMENT)
707 ! #############################################################
708 !
709 !!**** *READL0* - routine to read a logical
710 !
712 !
713 USE mode_fasurfex
714 !
715 USE modi_io_buff
716 USE modi_error_read_surf_fa
717 !
718 USE yomhook ,ONLY : lhook, dr_hook
719 USE parkind1 ,ONLY : jprb
720 !
721 IMPLICIT NONE
722 !
723 !* 0.1 Declarations of arguments
724 !
725 !
726 !
727  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
728 LOGICAL, INTENT(OUT) :: OFIELD ! array containing the data field
729 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
730  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
731 !
732 !* 0.2 Declarations of local variables
733 !
734  CHARACTER(LEN=50) :: YCOMMENT
735  CHARACTER(LEN=6) :: YMASK
736  CHARACTER(LEN=18) :: YNAME ! Field Name
737 LOGICAL :: GV8, GFOUND
738 !
739 REAL(KIND=JPRB) :: ZHOOK_HANDLE
740 !
741 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFL0_FA',0,zhook_handle)
742 !
743 kresp=0
744 !
745  CALL io_buff(&
746  hrec,'R',gfound)
747 !
748  CALL sfx_fa_version(gv8)
749 IF(gv8)THEN
750  yname=cprefix1d//trim(hrec)
751 ELSE
752  ymask=cmask
753  IF (gfound) ymask='FULL '
754  yname=trim(ymask)//trim(hrec)
755 ENDIF
756 !
757  CALL falit_l(kresp,nunit_fa,yname,ofield)
758 IF (kresp/=0)CALL error_read_surf_fa(hrec,kresp)
759 !
760 ycomment = yname
761 hcomment = ycomment
762 !
763 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFL0_FA',1,zhook_handle)
764 !
765 END SUBROUTINE read_surfl0_fa
766 !
767 !
768 ! #############################################################
769  SUBROUTINE read_surfl1_fa (&
770  HREC,KL,OFIELD,KRESP,HCOMMENT,HDIR)
771 ! #############################################################
772 !
773 !!**** *READL1* - routine to read a logical array
774 !
776  wlog_mpi
777 !
779 !
780 USE mode_fasurfex
781 !
782 USE modi_io_buff
783 USE modi_error_read_surf_fa
784 !
785 USE yomhook ,ONLY : lhook, dr_hook
786 USE parkind1 ,ONLY : jprb
787 !
788 IMPLICIT NONE
789 !
790 #ifdef SFX_MPI
791 include "mpif.h"
792 #endif
793 !
794 !* 0.1 Declarations of arguments
795 !
796 !
797 !
798  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
799 INTEGER, INTENT(IN) :: KL ! number of points
800 LOGICAL, DIMENSION(:), INTENT(OUT) :: OFIELD ! array containing the data field
801 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
802  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
803  CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
804  ! 'H' : field with
805  ! horizontal spatial dim.
806  ! '-' : no horizontal dim.
807 !* 0.2 Declarations of local variables
808 !
809  CHARACTER(LEN=6) :: YMASK
810  CHARACTER(LEN=18) :: YNAME ! Field Name
811 LOGICAL :: GV8, GFOUND
812 !
813 INTEGER :: INFOMPI
814 REAL :: XTIME0
815 REAL(KIND=JPRB) :: ZHOOK_HANDLE
816 !
817 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFL1_FA',0,zhook_handle)
818 !
819 #ifdef SFX_MPI
820 xtime0 = mpi_wtime()
821 #endif
822 !
823 kresp = 0
824 !
825 IF (nrank==npio) THEN
826  !
827  !
828  CALL io_buff(&
829  hrec,'R',gfound)
830  !
831  CALL sfx_fa_version(gv8)
832  IF(gv8)THEN
833  yname=cprefix1d//trim(hrec)
834  ELSE
835  ymask=cmask
836  IF (gfound) ymask='FULL '
837  yname=trim(ymask)//trim(hrec)
838  ENDIF
839  !
840  CALL falit_l_d(kresp,nunit_fa,yname,kl,ofield)
841  IF (kresp/=0) CALL error_read_surf_fa(hrec,kresp)
842  !
843  hcomment = yname
844  !
845  !
846 ENDIF
847 !
848 #ifdef SFX_MPI
849 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
850 #endif
851 !
852 #ifdef SFX_MPI
853 IF (nproc>1 .AND. hdir/='A') THEN
854  xtime0 = mpi_wtime()
855  CALL mpi_bcast(ofield,kl,mpi_logical,npio,ncomm,infompi)
856  xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
857 ENDIF
858 #endif
859 !
860 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFL1_FA',1,zhook_handle)
861 !
862 END SUBROUTINE read_surfl1_fa
863 !
864 !----------------------------------------------------------------------------
865 !
866 ! #############################################################
867  SUBROUTINE read_surft0_fa (&
868  HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
869 ! #############################################################
870 !
871 !!**** *READT0* - routine to read a date
872 !
874 !
875 USE mode_fasurfex
876 !
877 USE modi_io_buff
878 USE modi_error_read_surf_fa
879 !
880 USE yomhook ,ONLY : lhook, dr_hook
881 USE parkind1 ,ONLY : jprb
882 !
883 IMPLICIT NONE
884 !
885 !* 0.1 Declarations of arguments
886 !
887 !
888 !
889  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
890 INTEGER, INTENT(OUT) :: KYEAR ! year
891 INTEGER, INTENT(OUT) :: KMONTH ! month
892 INTEGER, INTENT(OUT) :: KDAY ! day
893 REAL, INTENT(OUT) :: PTIME ! year
894 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
895  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
896 
897 !* 0.2 Declarations of local variables
898 !
899  CHARACTER(LEN=50) :: YCOMMENT
900  CHARACTER(LEN=6) :: YMASK
901  CHARACTER(LEN=18) :: YNAME ! Field Name
902 LOGICAL :: GV8, GFOUND
903 !
904 INTEGER, DIMENSION(3) :: ITDATE
905 REAL(KIND=JPRB) :: ZHOOK_HANDLE
906 !
907 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFT0_FA',0,zhook_handle)
908 !
909 kresp=0
910 !
911  CALL io_buff(&
912  hrec,'R',gfound)
913 !
914  CALL sfx_fa_version(gv8)
915 IF(gv8)THEN
916  yname=cprefix1d//trim(hrec)//'%TDATE'
917 ELSE
918  ymask=cmask
919  IF (gfound) ymask='FULL '
920  yname=trim(ymask)//trim(hrec)//'%TDATE'
921 ENDIF
922 !
923  CALL falit_i_d(kresp,nunit_fa,yname,3,itdate)
924 IF (kresp/=0) CALL error_read_surf_fa(hrec,kresp)
925 !
926 kyear = itdate(1)
927 kmonth = itdate(2)
928 kday = itdate(3)
929 !
930  CALL sfx_fa_version(gv8)
931 IF(gv8)THEN
932  yname=cprefix1d//trim(hrec)//'%TIME'
933 ELSE
934  ymask=cmask
935  IF (gfound) ymask='FULL '
936  yname=trim(ymask)//trim(hrec)//'%TIME'
937 ENDIF
938 !
939  CALL falit_r(kresp,nunit_fa,yname,ptime)
940 IF (kresp/=0) CALL error_read_surf_fa(hrec,kresp)
941 !
942 ycomment = trim(hrec)
943 hcomment = ycomment
944 !
945 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFT0_FA',1,zhook_handle)
946 !
947 END SUBROUTINE read_surft0_fa
948 !
949 !----------------------------------------------------------------------------
950 !
951 ! #############################################################
952  SUBROUTINE read_surft2_fa (&
953  HREC,KL1,KL2,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
954 ! #############################################################
955 !
956 !!**** *READT2* - routine to read a date
957 !
959 !
960 USE mode_fasurfex
961 !
962 USE modi_io_buff
963 USE modi_abor1_sfx
964 USE modi_error_read_surf_fa
965 !
966 USE yomhook ,ONLY : lhook, dr_hook
967 USE parkind1 ,ONLY : jprb
968 !
969 IMPLICIT NONE
970 !
971 !* 0.1 Declarations of arguments
972 !
973 !
974 !
975  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
976 INTEGER :: KL1, KL2
977 INTEGER, DIMENSION(:,:), INTENT(OUT) :: KYEAR ! year
978 INTEGER, DIMENSION(:,:), INTENT(OUT) :: KMONTH ! month
979 INTEGER, DIMENSION(:,:), INTENT(OUT) :: KDAY ! day
980 REAL, DIMENSION(:,:), INTENT(OUT) :: PTIME ! year
981 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
982  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
983 
984 !* 0.2 Declarations of local variables
985 !
986  CHARACTER(LEN=50) :: YCOMMENT
987  CHARACTER(LEN=6) :: YMASK
988  CHARACTER(LEN=18) :: YNAME ! Field Name
989 LOGICAL :: GV8, GFOUND
990 !
991 INTEGER, DIMENSION(3,SIZE(KYEAR,1),SIZE(KYEAR,2)) :: ITDATE
992 REAL(KIND=JPRB) :: ZHOOK_HANDLE
993 !
994 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFT2_FA',0,zhook_handle)
995 !
996 kresp=0
997 !
998 kyear=0
999 kmonth=0
1000 kday=0
1001 ptime=0.
1002 !
1003 hcomment=""
1004 !
1005  CALL io_buff(&
1006  hrec,'R',gfound)
1007 !
1008  CALL sfx_fa_version(gv8)
1009 IF(gv8)THEN
1010  yname=cprefix1d//trim(hrec)
1011 ELSE
1012  ymask=cmask
1013  IF (gfound) ymask='FULL '
1014  yname=trim(ymask)//trim(hrec)
1015 ENDIF
1016 !
1017 WRITE(nluout,*) ' READ_SURFT2_FA : time in 2 dimensions not yet implemented : YNAME=',yname
1018  CALL abor1_sfx('MODE_READ_SURF_FA:READ_SURFT2_FA: time in 2 dimensions not yet implemented')
1019 !
1020 hcomment = ycomment
1021 !
1022 IF (lhook) CALL dr_hook('MODE_READ_SURF_FA:READ_SURFT2_FA',1,zhook_handle)
1023 !
1024 END SUBROUTINE read_surft2_fa
1025 !
1026 END MODULE mode_read_surf_fa
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
integer, dimension(:), allocatable nreq
subroutine read_surfc0_fa(HREC, HFIELD, KRESP, HCOMMENT)
subroutine facile(KREP, KNUMER, CDPREF, KNIVAU, CDSUFF, KCHAMP, LDCOSP)
Definition: facile.F90:90
subroutine read_surfx1_fa(HREC, KL, PFIELD, KRESP, HCOMMENT, HDIR)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
character(len=4), save cprefix1d
subroutine falit_i(KREP, KN, CNOMC, KDATA)
integer, parameter jprb
Definition: parkind1.F90:32
subroutine fanion(KREP, KNUMER, CDPREF, KNIVAU, CDSUFF, LDEXIS, LDCOSP, KNGRIB, KNARG1, KNARG2, KNARG3)
Definition: fanion.F90:340
subroutine read_surfl1_fa(HREC, KL, OFIELD, KRESP, HCOMMENT, HDIR)
subroutine error_read_surf_fa(HREC, KRESP)
subroutine read_surfx2_fa(HREC, KL1, KL2, PFIELD, KRESP, HCOMMENT, HDIR)
subroutine falit_i_d(KREP, KN, CNOMC, KSIZE, KDATA)
subroutine falit_r(KREP, KN, CNOMC, PDATA)
character(len=6) cmask
subroutine falit_l_d(KREP, KN, CNOMC, KSIZE, LDATA)
subroutine read_surfx0_fa(HREC, PFIELD, KRESP, HCOMMENT)
character(len=1), save cprefix2d
logical lhook
Definition: yomhook.F90:15
subroutine read_surfn0_fa(HREC, KFIELD, KRESP, HCOMMENT)
subroutine io_buff(HREC, HACTION, OKNOWN)
Definition: io_buff.F90:8
subroutine read_surfl0_fa(HREC, OFIELD, KRESP, HCOMMENT)
subroutine read_surft2_fa(HREC, KL1, KL2, KYEAR, KMONTH, KDAY, PTIME, KRESP, HCOMMENT)
subroutine read_surft0_fa(HREC, KYEAR, KMONTH, KDAY, PTIME, KRESP, HCOMMENT)
subroutine falit_c(KREP, KN, CNOMC, KSIZE, CDATA)
subroutine sfx_fa_version(ONEW)
subroutine wlog_mpi(HLOG, PLOG, KLOG, KLOG2, OLOG)
subroutine read_surfn1_fa(HREC, KL, KFIELD, KRESP, HCOMMENT, HDIR)
integer, dimension(:), pointer nmask
subroutine falit_l(KREP, KN, CNOMC, LDATA)