SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_surf.F90
Go to the documentation of this file.
00001 !##################
00002 MODULE MODI_READ_SURF
00003 !##################
00004 !
00005 !!****  *READX0* - routine to read a real scalar
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !       The purpose of READX0 is
00011 !
00012 !!**  METHOD
00013 !!    ------
00014 !!
00015 !!    EXTERNAL
00016 !!    --------
00017 !!
00018 !!     
00019 !!
00020 !!    IMPLICIT ARGUMENTS
00021 !!    ------------------
00022 !!
00023 !!
00024 !!    REFERENCE
00025 !!    ---------
00026 !!
00027 !!
00028 !!    AUTHOR
00029 !!    ------
00030 !!
00031 !!      S.Malardel      *METEO-FRANCE*
00032 !!
00033 !!    MODIFICATIONS
00034 !!    -------------
00035 !!
00036 !!      original                                                     01/08/03
00037 !----------------------------------------------------------------------------
00038 !
00039   INTERFACE READ_SURF
00040 !
00041      SUBROUTINE READ_SURFX0(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
00042 !
00043  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
00044  CHARACTER(LEN=*), INTENT(IN) :: HREC     ! name of the article to be read
00045 REAL, INTENT(INOUT) :: PFIELD            ! real scalar to be read  
00046 INTEGER,INTENT(OUT) :: KRESP             ! KRESP  : return-code if a problem appears 
00047  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT  ! name of the article to be read
00048  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR
00049 !
00050 END SUBROUTINE READ_SURFX0
00051 !
00052      SUBROUTINE READ_SURFX1(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
00053 !
00054  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
00055  CHARACTER(LEN=*), INTENT(IN) :: HREC     ! name of the article to be read
00056 REAL, DIMENSION(:), INTENT(OUT) ::PFIELD ! array containing the data field  
00057 INTEGER, INTENT(OUT) :: KRESP            ! KRESP  : return-code if a problem appears
00058  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT   ! name of the article to be read
00059  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR       ! type of field :
00060 !                                                   ! 'H' : field with
00061 !                                                   !       horizontal spatial dim.
00062 !                                                   ! '-' : no horizontal dim.
00063 END SUBROUTINE READ_SURFX1
00064 !
00065      SUBROUTINE READ_SURFX2(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
00066 !
00067  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM    ! calling program
00068  CHARACTER(LEN=*), INTENT(IN) :: HREC        ! name of the article to be read
00069 REAL, DIMENSION(:,:), INTENT(OUT) :: PFIELD ! array containing the data field  
00070 INTEGER, INTENT(OUT) :: KRESP               ! KRESP  : return-code if a problem appears
00071  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
00072  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR     ! type of field :
00073 !                                                   ! 'H' : field with
00074 !                                                   !       horizontal spatial dim.
00075 !                                                   ! '-' : no horizontal dim.
00076 END SUBROUTINE READ_SURFX2
00077 !
00078       SUBROUTINE READ_SURFX2COV(HPROGRAM,HREC,PFIELD,OFLAG,KRESP,HCOMMENT,HDIR)
00079 !
00080  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM    ! calling program
00081  CHARACTER(LEN=*), INTENT(IN) :: HREC        ! name of the article to be read
00082 REAL, DIMENSION(:,:), INTENT(OUT) :: PFIELD ! array containing the data field
00083 LOGICAL,DIMENSION(:), INTENT(IN)  ::OFLAG   ! mask for array filling
00084 INTEGER, INTENT(OUT) :: KRESP               ! KRESP  : return-code if a problem appears
00085  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
00086  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR     ! type of field :
00087 !                                                   ! 'H' : field with
00088 !                                                   !       horizontal spatial dim.
00089 !                                                   ! '-' : no horizontal dim.
00090 END SUBROUTINE READ_SURFX2COV
00091 !
00092      SUBROUTINE READ_SURFX3(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
00093 !
00094  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM      ! calling program
00095  CHARACTER(LEN=*), INTENT(IN) :: HREC          ! name of the article to be read
00096 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFIELD ! array containing the data field  
00097 INTEGER, INTENT(OUT) :: KRESP                 ! KRESP  : return-code if a problem appears
00098  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
00099  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR     ! type of field :
00100 !                                                   ! 'H' : field with
00101 !                                                   !       horizontal spatial dim.
00102 !                                                   ! '-' : no horizontal dim.
00103 END SUBROUTINE READ_SURFX3
00104 !
00105      SUBROUTINE READ_SURFN0(HPROGRAM,HREC,KFIELD,KRESP,HCOMMENT,HDIR)
00106 !
00107  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
00108  CHARACTER(LEN=*), INTENT(IN) :: HREC     ! name of the article to be read
00109 INTEGER, INTENT(OUT) :: KFIELD           ! integer to be read  
00110 INTEGER, INTENT(OUT) :: KRESP            ! KRESP  : return-code if a problem appears
00111  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT   ! name of the article to be read
00112  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR
00113 !
00114 END SUBROUTINE READ_SURFN0
00115 !
00116      SUBROUTINE READ_SURFN1(HPROGRAM,HREC,KFIELD,KRESP,HCOMMENT,HDIR)
00117 !
00118  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM     ! calling program
00119  CHARACTER(LEN=*), INTENT(IN) :: HREC         ! name of the article to be read
00120 INTEGER, DIMENSION(:), INTENT(OUT) :: KFIELD ! integer to be read  
00121 INTEGER, INTENT(OUT) :: KRESP                ! KRESP  : return-code if a problem appears
00122  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
00123  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR     ! type of field :
00124 !                                                   ! 'H' : field with
00125 !                                                   !       horizontal spatial dim.
00126 !                                                   ! '-' : no horizontal dim.
00127 END SUBROUTINE READ_SURFN1
00128 !
00129      SUBROUTINE READ_SURFC0(HPROGRAM,HREC,HFIELD,KRESP,HCOMMENT,HDIR)
00130 !
00131  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM   ! calling program
00132  CHARACTER(LEN=*), INTENT(IN) :: HREC       ! name of the article to be read
00133  CHARACTER(LEN=*), INTENT(OUT) :: HFIELD    ! caracter to be read  
00134 INTEGER, INTENT(OUT) :: KRESP              ! KRESP  : return-code if a problem appears
00135  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT   ! name of the article to be read
00136  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR
00137 !
00138 END SUBROUTINE READ_SURFC0
00139 !
00140       SUBROUTINE READ_SURFL0(HPROGRAM,HREC,OFIELD,KRESP,HCOMMENT,HDIR)
00141 !
00142  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
00143  CHARACTER(LEN=*), INTENT(IN) :: HREC     ! name of the article to be read
00144 LOGICAL, INTENT(OUT)         :: OFIELD   ! array containing the data field
00145 INTEGER, INTENT(OUT) :: KRESP            ! KRESP  : return-code if a problem appears
00146  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT   ! name of the article to be read
00147  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR
00148 !
00149 END SUBROUTINE READ_SURFL0
00150 !
00151       SUBROUTINE READ_SURFL1(HPROGRAM,HREC,OFIELD,KRESP,HCOMMENT,HDIR)
00152 !
00153  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM     ! calling program
00154  CHARACTER(LEN=*), INTENT(IN) :: HREC         ! name of the article to be read
00155 LOGICAL, DIMENSION(:), INTENT(OUT) :: OFIELD ! array containing the data field  
00156 INTEGER, INTENT(OUT) :: KRESP                ! KRESP  : return-code if a problem appears
00157  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
00158  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR     ! type of field :
00159 !                                                   ! 'H' : field with
00160 !                                                   !       horizontal spatial dim.
00161 !                                                   ! '-' : no horizontal dim.
00162 END SUBROUTINE READ_SURFL1
00163 !
00164       SUBROUTINE READ_SURFT0(HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT,HDIR)
00165 !
00166 USE MODD_TYPE_DATE_SURF
00167 !
00168  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM  ! calling program
00169  CHARACTER(LEN=*), INTENT(IN) :: HREC      ! name of the article to be read
00170 TYPE(DATE_TIME), INTENT(INOUT) ::TFIELD   ! array containing the data field  
00171 INTEGER, INTENT(OUT) :: KRESP             ! KRESP  : return-code if a problem appears
00172  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT   ! name of the article to be read
00173  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR
00174 !
00175 END SUBROUTINE READ_SURFT0
00176 !
00177       SUBROUTINE READ_SURFT1(HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT,HDIR)
00178 !
00179 USE MODD_TYPE_DATE_SURF
00180 !
00181  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
00182  CHARACTER(LEN=*), INTENT(IN) :: HREC     ! name of the article to be read
00183 TYPE (DATE_TIME), DIMENSION(:), INTENT(INOUT) :: TFIELD ! array containing the data field  
00184 INTEGER, INTENT(OUT) :: KRESP ! KRESP  : return-code if a problem appears
00185  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT   ! name of the article to be read
00186  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR
00187 !
00188 END SUBROUTINE READ_SURFT1
00189 !
00190       SUBROUTINE READ_SURFT2(HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT,HDIR)
00191 !
00192 USE MODD_TYPE_DATE_SURF
00193 !
00194  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
00195  CHARACTER(LEN=*), INTENT(IN) ::HREC      ! name of the article to be read
00196 TYPE (DATE_TIME), DIMENSION(:,:), INTENT(INOUT)::TFIELD ! array containing the data field  
00197 INTEGER, INTENT(OUT) :: KRESP ! KRESP  : return-code if a problem appears
00198  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT   ! name of the article to be read
00199  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR
00200 !
00201 END SUBROUTINE READ_SURFT2
00202 !
00203 END INTERFACE
00204 !
00205 END MODULE MODI_READ_SURF
00206 !
00207 !     #############################################################
00208       SUBROUTINE READ_SURFX0(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
00209 !     #############################################################
00210 !
00211 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00212 USE PARKIND1  ,ONLY : JPRB
00213 !
00214 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, NCOMM, NPROC, XTIME_NPIO_READ, XTIME_COMM_READ
00215 !
00216 #ifdef OL
00217 USE MODE_READ_SURF_OL, ONLY: READ_SURF0_OL
00218 #endif
00219 #ifdef LFI
00220 USE MODE_READ_SURF_LFI, ONLY: READ_SURF0_LFI
00221 #endif
00222 #ifdef ASC
00223 USE MODE_READ_SURF_ASC, ONLY: READ_SURF0_ASC
00224 #endif
00225 #ifdef FA
00226 USE MODE_READ_SURF_FA, ONLY: READ_SURF0_FA
00227 #endif
00228 #ifdef MNH
00229 USE MODI_READ_SURFX0_MNH
00230 #endif
00231 !
00232 IMPLICIT NONE
00233 !
00234 #ifndef NOMPI
00235 INCLUDE "mpif.h"
00236 #endif
00237 !
00238 !*      0.1   Declarations of arguments
00239 !
00240  CHARACTER(LEN=6), INTENT(IN)  :: HPROGRAM ! calling program
00241  CHARACTER(LEN=*), INTENT(IN)  :: HREC     ! name of the article to be read
00242 REAL, INTENT(OUT) :: PFIELD               ! the real scalar to be read  
00243 INTEGER, INTENT(OUT) :: KRESP             ! KRESP  : return-code if a problem appears
00244  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT   ! name of the article to be read
00245  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR
00246 !
00247 !*      0.2   Declarations of local variables
00248 !
00249  CHARACTER(LEN=100) :: YCOMMENT
00250  CHARACTER(LEN=16)  :: YREC
00251  CHARACTER(LEN=1)   :: YDIR
00252 DOUBLE PRECISION   :: XTIME0
00253 INTEGER            :: INFOMPI
00254 REAL               :: ZWORK
00255 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00256 !
00257 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFX0',0,ZHOOK_HANDLE)
00258 !
00259 KRESP = 0
00260 YCOMMENT = ""
00261 !
00262 YREC = HREC
00263 YDIR = 'H'
00264 IF (PRESENT(HDIR)) YDIR = HDIR
00265 !
00266 IF (HPROGRAM=='MESONH') THEN
00267 #ifdef MNH
00268   CALL READ_SURFX0_MNH(YREC,ZWORK,KRESP,YCOMMENT)
00269 #endif
00270 ENDIF
00271 !
00272 IF (HPROGRAM=='AROME ') THEN
00273 #ifdef ARO 
00274   CALL READ_SURFX0_ARO(YREC,ZWORK,KRESP,YCOMMENT)
00275 #endif
00276 ENDIF
00277 !
00278 IF (HPROGRAM=='OFFLIN' .OR. HPROGRAM=='ASCII ' .OR. &
00279     HPROGRAM=='FA    ' .OR. HPROGRAM=='LFI   ' ) THEN 
00280   !
00281   IF (NRANK==NPIO) THEN
00282     ! 
00283 #ifndef NOMPI    
00284     XTIME0 = MPI_WTIME()
00285 #endif    
00286     !
00287 !$OMP SINGLE
00288     !    
00289     IF (HPROGRAM=='OFFLIN') THEN
00290 #ifdef OL
00291       CALL READ_SURF0_OL(YREC,ZWORK,KRESP,YCOMMENT)
00292 #endif
00293     ELSEIF (HPROGRAM=='LFI   ') THEN
00294 #ifdef LFI
00295       CALL READ_SURF0_LFI(YREC,ZWORK,KRESP,YCOMMENT)
00296 #endif
00297     ELSEIF (HPROGRAM=='ASCII ') THEN
00298 #ifdef ASC 
00299       CALL READ_SURF0_ASC(YREC,ZWORK,KRESP,YCOMMENT)
00300 #endif
00301     ELSEIF (HPROGRAM=='FA    ') THEN
00302 #ifdef FA 
00303       CALL READ_SURF0_FA(YREC,ZWORK,KRESP,YCOMMENT)
00304 #endif
00305     ENDIF
00306     !
00307 !$OMP END SINGLE COPYPRIVATE(ZWORK,KRESP,YCOMMENT)
00308     !
00309 #ifndef NOMPI    
00310     XTIME_NPIO_READ = XTIME_NPIO_READ + (MPI_WTIME() - XTIME0)
00311 #endif    
00312     !    
00313     IF (PRESENT(HCOMMENT)) HCOMMENT = YCOMMENT
00314     !    
00315   ENDIF
00316   !
00317 #ifndef NOMPI
00318   IF (YDIR/='A' .AND. NPROC>1) THEN
00319     XTIME0 = MPI_WTIME()
00320 !$OMP SINGLE   
00321     CALL MPI_BCAST(ZWORK,KIND(ZWORK)/4,MPI_REAL,NPIO,NCOMM,INFOMPI)
00322 !$OMP END SINGLE COPYPRIVATE(ZWORK)
00323     XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)
00324   ENDIF
00325 #endif
00326   !
00327 ENDIF
00328 !
00329 PFIELD=ZWORK
00330 !
00331 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFX0',1,ZHOOK_HANDLE)
00332 !
00333 END SUBROUTINE READ_SURFX0
00334 !
00335 !     #############################################################
00336       SUBROUTINE READ_SURFX1(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
00337 !     #############################################################
00338 !
00339 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00340 USE PARKIND1  ,ONLY : JPRB
00341 !
00342 #ifdef OL
00343 USE MODE_READ_SURF_OL, ONLY: READ_SURFN_OL
00344 #endif
00345 #ifdef LFI
00346 USE MODE_READ_SURF_LFI, ONLY: READ_SURFN_LFI
00347 #endif
00348 #ifdef ASC
00349 USE MODE_READ_SURF_ASC, ONLY: READ_SURFN_ASC
00350 #endif
00351 #ifdef FA
00352 USE MODE_READ_SURF_FA, ONLY: READ_SURFN_FA
00353 #endif
00354 #ifdef MNH 
00355 USE MODI_READ_SURFX1_MNH
00356 #endif
00357 !
00358 IMPLICIT NONE
00359 !
00360 !*      0.1   Declarations of arguments
00361 !
00362  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM  ! calling program
00363  CHARACTER(LEN=*), INTENT(IN) :: HREC      ! name of the article to be read
00364 REAL, DIMENSION(:), INTENT(OUT) :: PFIELD ! array containing the data field  
00365 INTEGER, INTENT(OUT) :: KRESP             ! KRESP  : return-code if a problem appears
00366  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
00367  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR     ! type of field :
00368 !                                                   ! 'H' : field with
00369 !                                                   !       horizontal spatial dim.
00370 !                                                   ! '-' : no horizontal dim.
00371 !*      0.2   Declarations of local variables
00372 !
00373  CHARACTER(LEN=100) :: YCOMMENT
00374  CHARACTER(LEN=16)  :: YREC
00375  CHARACTER(LEN=1)   :: YDIR
00376 INTEGER            :: IL
00377 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00378 !
00379 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFX1',0,ZHOOK_HANDLE)
00380 !
00381 YREC = HREC
00382 YDIR = 'H'
00383 IF (PRESENT(HDIR)) YDIR = HDIR
00384 !
00385 IL = SIZE(PFIELD)
00386 !
00387 IF (HPROGRAM=='MESONH') THEN
00388 #ifdef MNH 
00389   CALL READ_SURFX1_MNH(YREC,IL,PFIELD,KRESP,YCOMMENT,YDIR)
00390 #endif
00391 ENDIF
00392 !
00393 IF (HPROGRAM=='AROME ') THEN
00394 #ifdef ARO
00395   CALL READ_SURFX1_ARO(YREC,IL,PFIELD,KRESP,YCOMMENT,YDIR)
00396 #endif
00397 ENDIF
00398 !
00399 IF (HPROGRAM=='OFFLIN') THEN
00400 #ifdef OL 
00401   CALL READ_SURFN_OL(YREC,PFIELD,KRESP,YCOMMENT,YDIR)
00402 #endif
00403 ENDIF
00404 !
00405 IF (HPROGRAM=='LFI   ') THEN
00406 #ifdef LFI
00407   CALL READ_SURFN_LFI(YREC,PFIELD,KRESP,YCOMMENT,YDIR)
00408 #endif
00409 ENDIF
00410 !
00411 IF (HPROGRAM=='ASCII ') THEN
00412 #ifdef ASC 
00413   CALL READ_SURFN_ASC(YREC,PFIELD,KRESP,YCOMMENT,YDIR)
00414 #endif
00415 ENDIF
00416 !
00417 IF (HPROGRAM=='FA    ') THEN
00418 #ifdef FA 
00419   CALL READ_SURFN_FA(YREC,IL,PFIELD,KRESP,YCOMMENT,YDIR)
00420 #endif
00421 ENDIF
00422 !
00423 IF (PRESENT(HCOMMENT)) HCOMMENT = YCOMMENT
00424 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFX1',1,ZHOOK_HANDLE)
00425 !
00426 END SUBROUTINE READ_SURFX1
00427 !
00428 !     #############################################################
00429       SUBROUTINE READ_SURFX2(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
00430 !     #############################################################
00431 !
00432 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00433 USE PARKIND1  ,ONLY : JPRB
00434 !
00435 #ifdef OL
00436 USE MODE_READ_SURF_OL, ONLY: READ_SURFN_OL
00437 #endif
00438 #ifdef LFI
00439 USE MODE_READ_SURF_LFI, ONLY: READ_SURFN_LFI
00440 #endif
00441 #ifdef ASC
00442 USE MODE_READ_SURF_ASC, ONLY: READ_SURFN_ASC
00443 #endif
00444 #ifdef FA
00445 USE MODE_READ_SURF_FA, ONLY: READ_SURFN_FA
00446 #endif
00447 #ifdef MNH 
00448 USE MODI_READ_SURFX2_MNH
00449 #endif
00450 !
00451 IMPLICIT NONE
00452 !
00453 !*      0.1   Declarations of arguments
00454 !
00455  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM    ! calling program
00456  CHARACTER(LEN=*), INTENT(IN) :: HREC        ! name of the article to be read
00457 REAL, DIMENSION(:,:), INTENT(OUT) :: PFIELD ! array containing the data field  
00458 INTEGER, INTENT(OUT) :: KRESP               ! KRESP  : return-code if a problem appears
00459  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
00460  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR     ! type of field :
00461 !                                                   ! 'H' : field with
00462 !                                                   !       horizontal spatial dim.
00463 !                                                   ! '-' : no horizontal dim.
00464 !*      0.2   Declarations of local variables
00465 !
00466  CHARACTER(LEN=100) :: YCOMMENT
00467  CHARACTER(LEN=16)  :: YREC
00468  CHARACTER(LEN=1)   :: YDIR
00469 INTEGER            :: IL1, IL2
00470 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00471 !
00472 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFX2',0,ZHOOK_HANDLE)
00473 !
00474 YREC = HREC
00475 YDIR = 'H'
00476 IF (PRESENT(HDIR)) YDIR = HDIR
00477 !
00478 IL1 = SIZE(PFIELD,1)
00479 IL2 = SIZE(PFIELD,2)
00480 !
00481 IF (HPROGRAM=='MESONH') THEN
00482 #ifdef MNH 
00483   CALL READ_SURFX2_MNH(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
00484 #endif
00485 ENDIF
00486 !
00487 IF (HPROGRAM=='AROME ') THEN
00488 #ifdef ARO 
00489   CALL READ_SURFX2_ARO(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
00490 #endif
00491 ENDIF
00492 !
00493 IF (HPROGRAM=='OFFLIN') THEN
00494 #ifdef OL
00495   CALL READ_SURFN_OL(YREC,PFIELD,KRESP,YCOMMENT,YDIR)
00496 #endif
00497 ENDIF
00498 !
00499 IF (HPROGRAM=='LFI   ') THEN
00500 #ifdef LFI 
00501   CALL READ_SURFN_LFI(YREC,PFIELD,KRESP,YCOMMENT,YDIR)
00502 #endif
00503 ENDIF
00504 !
00505 IF (HPROGRAM=='ASCII ') THEN
00506 #ifdef ASC
00507   CALL READ_SURFN_ASC(YREC,PFIELD,KRESP,YCOMMENT,YDIR)
00508 #endif
00509 ENDIF
00510 !
00511 IF (HPROGRAM=='FA    ') THEN
00512 #ifdef FA 
00513   CALL READ_SURFN_FA(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
00514 #endif
00515 ENDIF
00516 !
00517 IF (PRESENT(HCOMMENT)) HCOMMENT = YCOMMENT
00518 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFX2',1,ZHOOK_HANDLE)
00519 !
00520 END SUBROUTINE READ_SURFX2
00521 !
00522 !     #############################################################
00523       SUBROUTINE READ_SURFX2COV(HPROGRAM,HREC,PFIELD,OFLAG,KRESP,HCOMMENT,HDIR)
00524 !     #############################################################
00525 !
00526 #ifdef OL
00527 USE MODE_READ_SURF_OL, ONLY: READ_SURFN_OL
00528 #endif
00529 #ifdef LFI
00530 USE MODE_READ_SURF_LFI, ONLY: READ_SURFN_LFI
00531 #endif
00532 #ifdef ASC
00533 USE MODE_READ_SURF_ASC, ONLY: READ_SURFN_ASC
00534 #endif
00535 #ifdef FA
00536 USE MODE_READ_SURF_FA, ONLY: READ_SURFN_FA
00537 #endif
00538 #ifdef MNH        
00539 USE MODI_READ_SURFX2COV_MNH
00540 #endif
00541 !
00542 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00543 USE PARKIND1  ,ONLY : JPRB
00544 !
00545 IMPLICIT NONE
00546 !
00547 !*      0.1   Declarations of arguments
00548 !
00549  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM    ! calling program
00550  CHARACTER(LEN=*), INTENT(IN) :: HREC        ! name of the article to be read
00551 REAL, DIMENSION(:,:), INTENT(OUT) :: PFIELD ! array containing the data field
00552 LOGICAL,DIMENSION(:), INTENT(IN) :: OFLAG   ! mask for array filling
00553 INTEGER, INTENT(OUT) :: KRESP               ! KRESP  : return-code if a problem appears
00554  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
00555  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR     ! type of field :
00556 !                                                   ! 'H' : field with
00557 !                                                   !       horizontal spatial dim.
00558 !                                                   ! '-' : no horizontal dim.
00559 !*      0.2   Declarations of local variables
00560 !
00561  CHARACTER(LEN=100) :: YCOMMENT
00562  CHARACTER(LEN=16)  :: YREC
00563  CHARACTER(LEN=1)   :: YDIR
00564 INTEGER            :: JCOVER
00565 INTEGER            :: IL1, IL2
00566 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00567 !
00568 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFX2COV',0,ZHOOK_HANDLE)
00569 !
00570 YREC = HREC
00571 YDIR = 'H'
00572 IF (PRESENT(HDIR)) YDIR = HDIR
00573 !
00574 IL1 = SIZE(PFIELD,1)
00575 IL2 = SIZE(PFIELD,2)
00576 !
00577 !
00578 IF (HPROGRAM=='MESONH') THEN
00579 #ifdef MNH        
00580     CALL READ_SURFX2COV_MNH(YREC,IL1,IL2,PFIELD,OFLAG,KRESP,YCOMMENT,YDIR)
00581 #endif
00582 ELSE
00583   !
00584   DO JCOVER=1,IL2
00585     !
00586     WRITE(YREC,'(A5,I3.3)') 'COVER',JCOVER
00587     YCOMMENT='X_Y_'//YREC
00588     PFIELD(:,JCOVER)=0.
00589     IF (.NOT. OFLAG(JCOVER)) CYCLE
00590     !
00591     IF (HPROGRAM=='AROME ') THEN
00592 #ifdef ARO
00593       CALL READ_SURFX1_ARO(YREC,IL1,PFIELD(:,JCOVER),KRESP,YCOMMENT,YDIR)
00594 #endif
00595     ENDIF
00596     !    
00597     IF (HPROGRAM=='OFFLIN') THEN
00598 #ifdef OL
00599       CALL READ_SURFN_OL(YREC,PFIELD(:,JCOVER),KRESP,YCOMMENT,YDIR)
00600 #endif
00601     ENDIF
00602     !
00603     IF (HPROGRAM=='ASCII ') THEN
00604 #ifdef ASC        
00605       CALL READ_SURFN_ASC(YREC,PFIELD(:,JCOVER),KRESP,YCOMMENT,YDIR)
00606 #endif
00607     ENDIF
00608     !
00609     IF (HPROGRAM=='FA    ') THEN
00610 #ifdef FA 
00611       CALL READ_SURFN_FA(YREC,IL1,PFIELD(:,JCOVER),KRESP,YCOMMENT,YDIR)
00612 #endif
00613     ENDIF
00614     !
00615     IF (HPROGRAM=='LFI   ') THEN
00616 #ifdef LFI 
00617       CALL READ_SURFN_LFI(YREC,PFIELD(:,JCOVER),KRESP,YCOMMENT,YDIR)
00618 #endif
00619     ENDIF
00620   END DO
00621   !
00622 ENDIF
00623 !
00624 IF (PRESENT(HCOMMENT)) HCOMMENT = YCOMMENT
00625 !
00626 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFX2COV',1,ZHOOK_HANDLE)
00627 !
00628 END SUBROUTINE READ_SURFX2COV
00629 !
00630 !     #############################################################
00631       SUBROUTINE READ_SURFX3(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
00632 !     #############################################################
00633 !
00634 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00635 USE PARKIND1  ,ONLY : JPRB
00636 !
00637 #ifdef OL
00638 USE MODE_READ_SURF_OL, ONLY: READ_SURFN_OL
00639 #endif
00640 !
00641 IMPLICIT NONE
00642 !
00643 !*      0.1   Declarations of arguments
00644 !
00645  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM      ! calling program
00646  CHARACTER(LEN=*), INTENT(IN) :: HREC          ! name of the article to be read
00647 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFIELD ! array containing the data field  
00648 INTEGER, INTENT(OUT) :: KRESP                 ! KRESP  : return-code if a problem appears
00649  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
00650  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR     ! type of field :
00651 !                                                   ! 'H' : field with
00652 !                                                   !       horizontal spatial dim.
00653 !                                                   ! '-' : no horizontal dim.
00654 !*      0.2   Declarations of local variables
00655 !
00656  CHARACTER(LEN=100) :: YCOMMENT
00657  CHARACTER(LEN=16)  :: YREC
00658  CHARACTER(LEN=1)   :: YDIR
00659 INTEGER            :: IL1, IL2, IL3
00660 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00661 !
00662 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFX3',0,ZHOOK_HANDLE)
00663 !
00664 YREC = HREC
00665 YDIR = 'H'
00666 IF (PRESENT(HDIR)) YDIR = HDIR
00667 !
00668 IL1 = SIZE(PFIELD,1)
00669 IL2 = SIZE(PFIELD,2)
00670 IL3 = SIZE(PFIELD,3)
00671 !
00672 !plmIF (HPROGRAM=='MESONH') THEN
00673 !plm  CALL READ_SURFX3_MNH(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
00674 !plmENDIF
00675 !
00676 IF (HPROGRAM=='OFFLIN') THEN
00677 #ifdef OL
00678   CALL READ_SURFN_OL(YREC,PFIELD,KRESP,YCOMMENT,YDIR)
00679 #endif
00680 ENDIF
00681 !
00682 !plmIF (HPROGRAM=='ASCII ') THEN
00683 !plm  CALL READ_SURFX3_ASC(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
00684 !plmENDIF
00685 !
00686 !plmIF (HPROGRAM=='AROME ') THEN
00687 !plm  CALL READ_SURFX3_ARO(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
00688 !plmENDIF
00689 !
00690 !plmIF (HPROGRAM=='FA    ') THEN
00691 !plm  CALL READ_SURFX3_FA(YREC,IL1,IL2,PFIELD,KRESP,YCOMMENT,YDIR)
00692 !plmENDIF
00693 !
00694 IF (PRESENT(HCOMMENT)) HCOMMENT = YCOMMENT
00695 !
00696 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFX3',1,ZHOOK_HANDLE)
00697 !
00698 END SUBROUTINE READ_SURFX3
00699 !
00700 !     #############################################################
00701       SUBROUTINE READ_SURFN0(HPROGRAM,HREC,KFIELD,KRESP,HCOMMENT,HDIR)
00702 !     #############################################################
00703 !
00704 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00705 USE PARKIND1  ,ONLY : JPRB
00706 !
00707 USE MODD_SURFEX_OMP, ONLY : NBLOCK
00708 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, NCOMM, NPROC, XTIME_NPIO_READ, XTIME_COMM_READ
00709 !
00710 #ifdef OL
00711 USE MODE_READ_SURF_OL, ONLY: READ_SURF0_OL
00712 #endif
00713 #ifdef LFI
00714 USE MODE_READ_SURF_LFI, ONLY: READ_SURF0_LFI
00715 #endif
00716 #ifdef ASC
00717 USE MODE_READ_SURF_ASC, ONLY: READ_SURF0_ASC
00718 #endif
00719 #ifdef FA
00720 USE MODE_READ_SURF_FA, ONLY: READ_SURF0_FA
00721 #endif
00722 #ifdef MNH
00723 USE MODI_READ_SURFN0_MNH
00724 #endif
00725 !
00726 IMPLICIT NONE
00727 !
00728 #ifndef NOMPI
00729 INCLUDE "mpif.h"
00730 #endif
00731 !
00732 !*      0.1   Declarations of arguments
00733 !
00734  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
00735  CHARACTER(LEN=*), INTENT(IN) :: HREC     ! name of the article to be read
00736 INTEGER, INTENT(OUT) :: KFIELD           ! the integer to be read  
00737 INTEGER, INTENT(OUT) :: KRESP            ! KRESP  : return-code if a problem appears
00738  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT   ! name of the article to be read
00739  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR
00740 !
00741 !*      0.2   Declarations of local variables
00742 !
00743  CHARACTER(LEN=100) :: YCOMMENT
00744  CHARACTER(LEN=16)  :: YREC
00745  CHARACTER(LEN=1)   :: YDIR
00746 DOUBLE PRECISION   :: XTIME0
00747 INTEGER            :: IWORK
00748 INTEGER            :: INFOMPI
00749 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00750 !
00751 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFN0',0,ZHOOK_HANDLE)
00752 !
00753 KRESP = 0
00754 YCOMMENT = ""
00755 !
00756 YREC = HREC
00757 YDIR = 'H'
00758 IF (PRESENT(HDIR)) YDIR = HDIR
00759 !
00760 IWORK = 0
00761 !
00762 IF (HPROGRAM=='MESONH') THEN
00763 #ifdef MNH
00764   CALL READ_SURFN0_MNH(YREC,IWORK,KRESP,YCOMMENT)
00765 #endif
00766 ENDIF
00767 !
00768 IF (HPROGRAM=='AROME ') THEN
00769 #ifdef ARO 
00770   CALL READ_SURFN0_ARO(YREC,IWORK,KRESP,YCOMMENT)
00771 #endif
00772 ENDIF
00773 !
00774 IF (HPROGRAM=='OFFLIN' .OR. HPROGRAM=='ASCII ' .OR. &
00775     HPROGRAM=='FA    ' .OR. HPROGRAM=='LFI   ' ) THEN 
00776   !
00777   IF (NRANK==NPIO) THEN
00778     !
00779 #ifndef NOMPI    
00780     XTIME0 = MPI_WTIME()
00781 #endif
00782     !
00783 !$OMP SINGLE
00784     !    
00785     IF (HPROGRAM=='OFFLIN') THEN
00786 #ifdef OL
00787       CALL READ_SURF0_OL(YREC,IWORK,KRESP,YCOMMENT)
00788 #endif
00789     ENDIF
00790     !
00791     IF (HPROGRAM=='LFI   ') THEN
00792 #ifdef LFI 
00793       CALL READ_SURF0_LFI(YREC,IWORK,KRESP,YCOMMENT)
00794 #endif
00795     ENDIF
00796     !
00797     IF (HPROGRAM=='ASCII ') THEN
00798 #ifdef ASC 
00799       CALL READ_SURF0_ASC(YREC,IWORK,KRESP,YCOMMENT)
00800 #endif
00801     ENDIF
00802     !
00803     IF (HPROGRAM=='FA    ') THEN
00804 #ifdef FA
00805       CALL READ_SURF0_FA(YREC,IWORK,KRESP,YCOMMENT)
00806 #endif
00807     ENDIF
00808     !
00809 !$OMP END SINGLE COPYPRIVATE(IWORK,KRESP,YCOMMENT)  
00810     !    
00811 #ifndef NOMPI    
00812     XTIME_NPIO_READ = XTIME_NPIO_READ + (MPI_WTIME() - XTIME0)
00813 #endif
00814     !
00815     IF (PRESENT(HCOMMENT)) HCOMMENT = YCOMMENT  
00816     !
00817   ENDIF
00818   !
00819 #ifndef NOMPI
00820   IF (YDIR/='A' .AND. NPROC>1) THEN          
00821     XTIME0 = MPI_WTIME()  
00822 !$OMP SINGLE
00823     CALL MPI_BCAST(IWORK,KIND(IWORK)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI)
00824 !$OMP END SINGLE COPYPRIVATE(IWORK)    
00825     XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)    
00826   ENDIF    
00827 #endif
00828   !
00829 ENDIF
00830 !
00831 KFIELD=IWORK
00832 !
00833 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFN0',1,ZHOOK_HANDLE)
00834 !
00835 END SUBROUTINE READ_SURFN0
00836 !
00837 !     #############################################################
00838       SUBROUTINE READ_SURFN1(HPROGRAM,HREC,KFIELD,KRESP,HCOMMENT,HDIR)
00839 !     #############################################################
00840 !
00841 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00842 USE PARKIND1  ,ONLY : JPRB
00843 !
00844 #ifdef OL
00845 USE MODE_READ_SURF_OL, ONLY: READ_SURFN_OL
00846 #endif
00847 #ifdef LFI
00848 USE MODE_READ_SURF_LFI, ONLY: READ_SURFN_LFI
00849 #endif
00850 #ifdef ASC
00851 USE MODE_READ_SURF_ASC, ONLY: READ_SURFN_ASC
00852 #endif
00853 #ifdef FA
00854 USE MODE_READ_SURF_FA, ONLY: READ_SURFN_FA
00855 #endif
00856 #ifdef MNH 
00857 USE MODI_READ_SURFN1_MNH
00858 #endif
00859 !
00860 IMPLICIT NONE
00861 !
00862 !*      0.1   Declarations of arguments
00863 !
00864  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM     ! calling program
00865  CHARACTER(LEN=*), INTENT(IN) :: HREC         ! name of the article to be read
00866 INTEGER, DIMENSION(:), INTENT(OUT) :: KFIELD ! the integer to be read  
00867 INTEGER, INTENT(OUT) :: KRESP                ! KRESP  : return-code if a problem appears
00868  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
00869  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR     ! type of field :
00870 !                                                   ! 'H' : field with
00871 !                                                   !       horizontal spatial dim.
00872 !                                                   ! '-' : no horizontal dim.
00873 !*      0.2   Declarations of local variables
00874 !
00875  CHARACTER(LEN=100) :: YCOMMENT
00876  CHARACTER(LEN=16)  :: YREC
00877  CHARACTER(LEN=1)   :: YDIR
00878 INTEGER            :: IL
00879 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00880 !
00881 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFN1',0,ZHOOK_HANDLE)
00882 !
00883 YREC = HREC
00884 YDIR = 'H'
00885 IF (PRESENT(HDIR)) YDIR = HDIR
00886 !
00887 IL = SIZE(KFIELD,1)
00888 !
00889 IF (HPROGRAM=='MESONH') THEN
00890 #ifdef MNH 
00891   CALL READ_SURFN1_MNH(YREC,IL,KFIELD,KRESP,YCOMMENT,YDIR)
00892 #endif
00893 ENDIF
00894 !
00895 IF (HPROGRAM=='AROME ') THEN
00896 #ifdef ARO 
00897   CALL READ_SURFN1_ARO(YREC,IL,KFIELD,KRESP,YCOMMENT,YDIR)
00898 #endif
00899 ENDIF
00900 !
00901 IF (HPROGRAM=='OFFLIN') THEN
00902 #ifdef OL
00903   CALL READ_SURFN_OL(YREC,KFIELD,KRESP,YCOMMENT,YDIR)
00904 #endif
00905 ENDIF
00906 !
00907 IF (HPROGRAM=='LFI   ') THEN
00908 #ifdef LFI 
00909   CALL READ_SURFN_LFI(YREC,KFIELD,KRESP,YCOMMENT,YDIR)
00910 #endif
00911 ENDIF
00912 !
00913 IF (HPROGRAM=='ASCII ') THEN
00914 #ifdef ASC 
00915   CALL READ_SURFN_ASC(YREC,KFIELD,KRESP,YCOMMENT,YDIR)
00916 #endif
00917 ENDIF
00918 !
00919 IF (HPROGRAM=='FA    ') THEN
00920 #ifdef FA
00921   CALL READ_SURFN_FA(YREC,IL,KFIELD,KRESP,YCOMMENT,YDIR)
00922 #endif
00923 ENDIF
00924 !
00925 IF (PRESENT(HCOMMENT)) HCOMMENT = YCOMMENT
00926 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFN1',1,ZHOOK_HANDLE)
00927 !
00928 END SUBROUTINE READ_SURFN1
00929 
00930 !     #############################################################
00931       SUBROUTINE READ_SURFC0(HPROGRAM,HREC,HFIELD,KRESP,HCOMMENT,HDIR)
00932 !     #############################################################
00933 !
00934 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00935 USE PARKIND1  ,ONLY : JPRB
00936 !
00937 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, NCOMM, NPROC, XTIME_NPIO_READ, XTIME_COMM_READ
00938 !
00939 #ifdef OL
00940 USE MODE_READ_SURF_OL, ONLY: READ_SURF0_OL
00941 #endif
00942 #ifdef LFI
00943 USE MODE_READ_SURF_LFI, ONLY: READ_SURF0_LFI
00944 #endif
00945 #ifdef ASC
00946 USE MODE_READ_SURF_ASC, ONLY: READ_SURF0_ASC
00947 #endif
00948 #ifdef FA
00949 USE MODE_READ_SURF_FA, ONLY: READ_SURF0_FA
00950 #endif
00951 #ifdef MNH 
00952 USE MODI_READ_SURFC0_MNH
00953 #endif
00954 !
00955 IMPLICIT NONE
00956 !
00957 #ifndef NOMPI
00958 INCLUDE "mpif.h"
00959 #endif
00960 !
00961 !*      0.1   Declarations of arguments
00962 !
00963  CHARACTER(LEN=6), INTENT(IN)  :: HPROGRAM ! calling program
00964  CHARACTER(LEN=*), INTENT(IN)  :: HREC     ! name of the article to be read
00965  CHARACTER(LEN=*), INTENT(OUT) :: HFIELD   ! the integer to be read  
00966 INTEGER, INTENT(OUT) :: KRESP             ! KRESP  : return-code if a problem appears
00967  CHARACTER(LEN=*), OPTIONAL,INTENT(OUT) :: HCOMMENT   ! name of the article to be read
00968  CHARACTER(LEN=1), OPTIONAL,INTENT(IN)  :: HDIR
00969 !
00970 !*      0.2   Declarations of local variables
00971 !
00972  CHARACTER(LEN=100) :: YCOMMENT
00973  CHARACTER(LEN=40)  :: YFIELD
00974  CHARACTER(LEN=16)  :: YREC
00975  CHARACTER(LEN=1)   :: YDIR
00976 DOUBLE PRECISION   :: XTIME0
00977 INTEGER            :: INFOMPI
00978 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00979 !
00980 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFC0',0,ZHOOK_HANDLE)
00981 !
00982 KRESP = 0
00983 YCOMMENT = ""
00984 !
00985 YREC = HREC
00986 YDIR = 'H'
00987 IF (PRESENT(HDIR)) YDIR = HDIR
00988 !
00989 IF (HPROGRAM=='MESONH') THEN
00990 #ifdef MNH 
00991   CALL READ_SURFC0_MNH(YREC,YFIELD,KRESP,YCOMMENT)
00992 #endif
00993 ELSE IF (HPROGRAM=='AROME ') THEN
00994 #ifdef ARO 
00995   CALL READ_SURFC0_ARO(YREC,YFIELD,KRESP,YCOMMENT)
00996 #endif
00997 ELSEIF (HPROGRAM=='OFFLIN' .OR. HPROGRAM=='ASCII ' .OR. &
00998     HPROGRAM=='FA    ' .OR. HPROGRAM=='LFI   ' ) THEN 
00999   !
01000   IF (NRANK==NPIO) THEN
01001     !
01002 #ifndef NOMPI    
01003     XTIME0 = MPI_WTIME()
01004 #endif
01005     !  
01006 !$OMP SINGLE    
01007     !    
01008     IF (HPROGRAM=='OFFLIN') THEN
01009 #ifdef OL
01010       CALL READ_SURF0_OL(YREC,YFIELD,KRESP,YCOMMENT)
01011 #endif
01012     ELSE IF (HPROGRAM=='LFI   ') THEN
01013 #ifdef LFI 
01014       CALL READ_SURF0_LFI(YREC,YFIELD,KRESP,YCOMMENT)
01015 #endif
01016     ELSE IF (HPROGRAM=='ASCII ') THEN
01017 #ifdef ASC 
01018       CALL READ_SURF0_ASC(YREC,YFIELD,KRESP,YCOMMENT)
01019 #endif
01020     ELSE IF (HPROGRAM=='FA    ') THEN
01021 #ifdef FA
01022       CALL READ_SURF0_FA(YREC,YFIELD,KRESP,YCOMMENT)
01023 #endif
01024     ENDIF
01025     !  
01026 !$OMP END SINGLE COPYPRIVATE(YFIELD,KRESP,YCOMMENT)
01027     !
01028 #ifndef NOMPI    
01029     XTIME_NPIO_READ = XTIME_NPIO_READ + (MPI_WTIME() - XTIME0)  
01030 #endif    
01031     !    
01032     IF (PRESENT(HCOMMENT)) HCOMMENT = YCOMMENT
01033     !    
01034   ENDIF
01035   !
01036 #ifndef NOMPI
01037   IF (YDIR/='A' .AND. NPROC>1) THEN
01038     XTIME0 = MPI_WTIME()            
01039 !$OMP SINGLE
01040     CALL MPI_BCAST(YFIELD,LEN(YFIELD),MPI_CHARACTER,NPIO,NCOMM,INFOMPI)
01041 !$OMP END SINGLE COPYPRIVATE(YFIELD)    
01042     XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)
01043   ENDIF    
01044 #endif
01045   !
01046 ENDIF
01047 !
01048 HFIELD = YFIELD(1:LEN(HFIELD))
01049 !
01050 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFC0',1,ZHOOK_HANDLE)
01051 !
01052 END SUBROUTINE READ_SURFC0
01053 !
01054 !     #############################################################
01055       SUBROUTINE READ_SURFL0(HPROGRAM,HREC,OFIELD,KRESP,HCOMMENT,HDIR)
01056 !     #############################################################
01057 !
01058 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
01059 USE PARKIND1  ,ONLY : JPRB
01060 !
01061 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, NCOMM, NPROC, XTIME_NPIO_READ, XTIME_COMM_READ
01062 !
01063 #ifdef OL
01064 USE MODE_READ_SURF_OL, ONLY: READ_SURF0_OL
01065 #endif
01066 #ifdef LFI
01067 USE MODE_READ_SURF_LFI, ONLY: READ_SURF0_LFI
01068 #endif
01069 #ifdef ASC
01070 USE MODE_READ_SURF_ASC, ONLY: READ_SURF0_ASC
01071 #endif
01072 #ifdef FA
01073 USE MODE_READ_SURF_FA, ONLY: READ_SURF0_FA
01074 #endif
01075 #ifdef MNH 
01076 USE MODI_READ_SURFL0_MNH
01077 #endif
01078 !
01079 IMPLICIT NONE
01080 !
01081 #ifndef NOMPI
01082 INCLUDE "mpif.h"
01083 #endif
01084 !
01085 !*      0.1   Declarations of arguments
01086 !
01087  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
01088  CHARACTER(LEN=*), INTENT(IN) :: HREC     ! name of the article to be read
01089 LOGICAL, INTENT(OUT) :: OFIELD           ! array containing the data field
01090 INTEGER, INTENT(OUT) :: KRESP           ! KRESP  : return-code if a problem appears
01091  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT  ! name of the article to be read
01092  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR
01093 !
01094 !*      0.2   Declarations of local variables
01095 !
01096  CHARACTER(LEN=100) :: YCOMMENT
01097  CHARACTER(LEN=16)  :: YREC
01098  CHARACTER(LEN=1)   :: YDIR
01099 DOUBLE PRECISION   :: XTIME0
01100 LOGICAL            :: GWORK
01101 INTEGER            :: INFOMPI
01102 REAL(KIND=JPRB) :: ZHOOK_HANDLE
01103 !
01104 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFL0',0,ZHOOK_HANDLE)
01105 !
01106 KRESP = 0
01107 YCOMMENT = ""
01108 !
01109 YREC = HREC
01110 YDIR = 'H'
01111 IF (PRESENT(HDIR)) YDIR = HDIR
01112 !
01113 IF (HPROGRAM=='MESONH') THEN
01114 #ifdef MNH 
01115   CALL READ_SURFL0_MNH(YREC,GWORK,KRESP,YCOMMENT)
01116 #endif
01117 ELSE IF (HPROGRAM=='AROME ') THEN
01118 #ifdef ARO 
01119   CALL READ_SURFL0_ARO(YREC,GWORK,KRESP,YCOMMENT)
01120 #endif
01121 ELSEIF (HPROGRAM=='OFFLIN' .OR. HPROGRAM=='ASCII ' .OR. &
01122     HPROGRAM=='FA    ' .OR. HPROGRAM=='LFI   ' ) THEN 
01123   !  
01124   IF (NRANK==NPIO) THEN
01125     !
01126 #ifndef NOMPI    
01127     XTIME0 = MPI_WTIME()
01128 #endif    
01129     ! 
01130 !$OMP SINGLE
01131     !    
01132     IF (HPROGRAM=='OFFLIN') THEN
01133 #ifdef OL
01134       CALL READ_SURF0_OL(YREC,GWORK,KRESP,YCOMMENT)
01135 #endif
01136     ELSE IF (HPROGRAM=='LFI   ') THEN
01137 #ifdef LFI 
01138       CALL READ_SURF0_LFI(YREC,GWORK,KRESP,YCOMMENT)
01139 #endif
01140     ELSE IF (HPROGRAM=='ASCII ') THEN
01141 #ifdef ASC 
01142       CALL READ_SURF0_ASC(YREC,GWORK,KRESP,YCOMMENT)
01143 #endif
01144     ELSE IF (HPROGRAM=='FA    ') THEN
01145 #ifdef FA 
01146       CALL READ_SURF0_FA(YREC,GWORK,KRESP,YCOMMENT)
01147 #endif
01148     ENDIF
01149     !
01150 !$OMP END SINGLE COPYPRIVATE(GWORK,KRESP,YCOMMENT)
01151     ! 
01152 #ifndef NOMPI    
01153     XTIME_NPIO_READ = XTIME_NPIO_READ + (MPI_WTIME() - XTIME0)
01154 #endif
01155     !    
01156     IF (PRESENT(HCOMMENT)) HCOMMENT = YCOMMENT
01157     !    
01158   ENDIF
01159   !
01160 #ifndef NOMPI
01161   IF (YDIR/='A' .AND. NPROC>1) THEN
01162     XTIME0 = MPI_WTIME()       
01163 !$OMP SINGLE    
01164     CALL MPI_BCAST(GWORK,1,MPI_LOGICAL,NPIO,NCOMM,INFOMPI)
01165 !$OMP END SINGLE COPYPRIVATE(GWORK)    
01166     XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)    
01167   ENDIF
01168 #endif 
01169   !
01170 ENDIF
01171 !
01172 OFIELD=GWORK
01173 !
01174 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFL0',1,ZHOOK_HANDLE)
01175 !
01176 END SUBROUTINE READ_SURFL0
01177 !
01178 !     #############################################################
01179       SUBROUTINE READ_SURFL1(HPROGRAM,HREC,OFIELD,KRESP,HCOMMENT,HDIR)
01180 !     #############################################################
01181 !
01182 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
01183 USE PARKIND1  ,ONLY : JPRB
01184 !
01185 #ifdef OL
01186 USE MODE_READ_SURF_OL, ONLY: READ_SURFN_OL
01187 #endif
01188 #ifdef LFI
01189 USE MODE_READ_SURF_LFI, ONLY: READ_SURFN_LFI
01190 #endif
01191 #ifdef ASC
01192 USE MODE_READ_SURF_ASC, ONLY: READ_SURFN_ASC
01193 #endif
01194 #ifdef FA
01195 USE MODE_READ_SURF_FA, ONLY: READ_SURFN_FA
01196 #endif
01197 #ifdef MNH 
01198 USE MODI_READ_SURFL1_MNH
01199 #endif
01200 !
01201 IMPLICIT NONE
01202 !
01203 !*      0.1   Declarations of arguments
01204 !
01205  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM     ! calling program
01206  CHARACTER(LEN=*), INTENT(IN) :: HREC         ! name of the article to be read
01207 LOGICAL, DIMENSION(:), INTENT(OUT) :: OFIELD ! array containing the data field  
01208 INTEGER, INTENT(OUT) :: KRESP                ! KRESP  : return-code if a problem appears
01209  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT ! name of the article to be read
01210  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR     ! type of field :
01211 !                                                   ! 'H' : field with
01212 !                                                   !       horizontal spatial dim.
01213 !                                                   ! '-' : no horizontal dim.
01214 !*      0.2   Declarations of local variables
01215 !
01216  CHARACTER(LEN=100) :: YCOMMENT
01217  CHARACTER(LEN=16)  :: YREC
01218  CHARACTER(LEN=1)   :: YDIR
01219 INTEGER            :: IL
01220 REAL(KIND=JPRB) :: ZHOOK_HANDLE
01221 !
01222 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFL1',0,ZHOOK_HANDLE)
01223 !
01224 YREC = HREC
01225 YDIR = 'H'
01226 IF (PRESENT(HDIR)) YDIR = HDIR
01227 !
01228 IL = SIZE(OFIELD)
01229 !
01230 IF (HPROGRAM=='MESONH') THEN
01231 #ifdef MNH 
01232   CALL READ_SURFL1_MNH(YREC,IL,OFIELD,KRESP,YCOMMENT,YDIR)
01233 #endif
01234 ELSE IF (HPROGRAM=='AROME ') THEN
01235 #ifdef ARO 
01236   CALL READ_SURFL1_ARO(YREC,IL,OFIELD,KRESP,YCOMMENT,YDIR)
01237 #endif
01238 ELSE IF (HPROGRAM=='OFFLIN') THEN
01239 #ifdef OL
01240   CALL READ_SURFN_OL(YREC,OFIELD,KRESP,YCOMMENT,YDIR)
01241 #endif
01242 ELSE IF (HPROGRAM=='LFI   ') THEN
01243 #ifdef LFI 
01244   CALL READ_SURFN_LFI(YREC,OFIELD,KRESP,YCOMMENT,YDIR)
01245 #endif
01246 ELSE IF (HPROGRAM=='ASCII ') THEN
01247 #ifdef ASC 
01248   CALL READ_SURFN_ASC(YREC,OFIELD,KRESP,YCOMMENT,YDIR)
01249 #endif
01250 ELSE IF (HPROGRAM=='FA    ') THEN
01251 #ifdef FA 
01252   CALL READ_SURFN_FA(YREC,IL,OFIELD,KRESP,YCOMMENT,YDIR)
01253 #endif
01254 ENDIF
01255 !
01256 IF (PRESENT(HCOMMENT)) HCOMMENT = YCOMMENT
01257 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFL1',1,ZHOOK_HANDLE)
01258 !
01259 END SUBROUTINE READ_SURFL1
01260 !
01261 !     #############################################################
01262       SUBROUTINE READ_SURFT0(HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT,HDIR)
01263 !     #############################################################
01264 !
01265 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
01266 USE PARKIND1  ,ONLY : JPRB
01267 !
01268 USE MODD_TYPE_DATE_SURF
01269 !
01270 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, NCOMM, NPROC, XTIME_NPIO_READ, XTIME_COMM_READ
01271 !
01272 #ifdef OL
01273 USE MODE_READ_SURF_OL, ONLY: READ_SURFT_OL
01274 #endif
01275 #ifdef LFI
01276 USE MODE_READ_SURF_LFI, ONLY: READ_SURFT_LFI
01277 #endif
01278 #ifdef ASC
01279 USE MODE_READ_SURF_ASC, ONLY: READ_SURFT_ASC
01280 #endif
01281 #ifdef FA
01282 USE MODE_READ_SURF_FA, ONLY: READ_SURFT_FA
01283 #endif
01284 #ifdef MNH 
01285 USE MODI_READ_SURFT0_MNH
01286 #endif
01287 !
01288 USE MODI_GET_LUOUT
01289 !
01290 IMPLICIT NONE
01291 !
01292 #ifndef NOMPI
01293 INCLUDE "mpif.h"
01294 #endif
01295 !
01296 !*      0.1   Declarations of arguments
01297 !
01298  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
01299  CHARACTER(LEN=*), INTENT(IN) :: HREC     ! name of the article to be read
01300 TYPE(DATE_TIME), INTENT(OUT) :: TFIELD   ! array containing the data field  
01301 INTEGER, INTENT(OUT) :: KRESP            ! KRESP  : return-code if a problem appears
01302  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT   ! name of the article to be read
01303  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR
01304 !
01305 !*      0.2   Declarations of local variables
01306 !
01307  CHARACTER(LEN=100) :: YCOMMENT
01308  CHARACTER(LEN=16)  :: YREC
01309  CHARACTER(LEN=1)   :: YDIR
01310 !
01311 DOUBLE PRECISION   :: XTIME0
01312 REAL    :: ZTIME
01313 INTEGER :: IDAY
01314 INTEGER :: IMONTH
01315 INTEGER :: IYEAR
01316 INTEGER :: ILUOUT
01317 INTEGER :: INFOMPI
01318 REAL(KIND=JPRB) :: ZHOOK_HANDLE
01319 !
01320 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFT0',0,ZHOOK_HANDLE)
01321 !
01322 KRESP = 0
01323 YCOMMENT = ""
01324 !
01325 YREC = HREC
01326 YDIR = 'H'
01327 IF (PRESENT(HDIR)) YDIR = HDIR
01328 !
01329 IF (HPROGRAM=='MESONH') THEN
01330 #ifdef MNH 
01331   CALL READ_SURFT0_MNH(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01332 #endif
01333 ELSE IF (HPROGRAM=='AROME ') THEN
01334 #ifdef ARO 
01335   CALL READ_SURFT0_ARO(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01336 #endif
01337 ELSEIF (HPROGRAM=='OFFLIN' .OR. HPROGRAM=='ASCII ' .OR. &
01338     HPROGRAM=='FA    ' .OR. HPROGRAM=='LFI   ' ) THEN 
01339   !  
01340   IF (NRANK==NPIO) THEN
01341     !
01342 #ifndef NOMPI    
01343     XTIME0 = MPI_WTIME()
01344 #endif    
01345     !
01346 !$OMP SINGLE
01347     !    
01348     IF (HPROGRAM=='OFFLIN') THEN
01349 #ifdef OL
01350       CALL READ_SURFT_OL(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01351 #endif
01352     ELSE IF (HPROGRAM=='LFI   ') THEN
01353 #ifdef LFI 
01354       CALL READ_SURFT_LFI(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01355 #endif
01356     ELSE IF (HPROGRAM=='ASCII ') THEN
01357 #ifdef ASC 
01358       CALL READ_SURFT_ASC(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01359 #endif
01360     ELSE IF (HPROGRAM=='FA    ') THEN
01361 #ifdef FA 
01362       CALL READ_SURFT_FA(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01363 #endif
01364     ENDIF
01365     !
01366 !$OMP END SINGLE COPYPRIVATE(IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)    
01367     ! 
01368 #ifndef NOMPI    
01369     XTIME_NPIO_READ = XTIME_NPIO_READ + (MPI_WTIME() - XTIME0)
01370 #endif    
01371     !    
01372     IF (PRESENT(HCOMMENT)) HCOMMENT = YCOMMENT
01373     !    
01374   ENDIF
01375   !
01376 #ifndef NOMPI
01377   IF (YDIR/='A' .AND. NPROC>1) THEN
01378     XTIME0 = MPI_WTIME() 
01379 !$OMP SINGLE    
01380     CALL MPI_BCAST(IYEAR,KIND(IYEAR)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI)
01381     CALL MPI_BCAST(IMONTH,KIND(IMONTH)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI)
01382     CALL MPI_BCAST(IDAY,KIND(IDAY)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI)
01383     CALL MPI_BCAST(ZTIME,KIND(ZTIME)/4,MPI_REAL,NPIO,NCOMM,INFOMPI)
01384 !$OMP END SINGLE COPYPRIVATE(IYEAR,IMONTH,IDAY,ZTIME)    
01385     XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)    
01386   ENDIF
01387 #endif
01388   !
01389 ENDIF
01390 !
01391 IF (KRESP==-2) THEN
01392   CALL GET_LUOUT(HPROGRAM,ILUOUT)
01393   WRITE(ILUOUT,*) '-------'
01394   WRITE(ILUOUT,*) 'WARNING'
01395   WRITE(ILUOUT,*) '-------'
01396   WRITE(ILUOUT,*) ' '
01397   WRITE(ILUOUT,*) 'Date is not present file'
01398   WRITE(ILUOUT,*) 'Forcing value is kept'
01399   WRITE(ILUOUT,*) ' '
01400 ELSE
01401   TFIELD%TDATE%YEAR = IYEAR
01402   TFIELD%TDATE%MONTH = IMONTH
01403   TFIELD%TDATE%DAY = IDAY
01404   TFIELD%TIME = ZTIME
01405 END IF
01406 !
01407 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFT0',1,ZHOOK_HANDLE)
01408 !
01409 END SUBROUTINE READ_SURFT0
01410 !
01411 !     #############################################################
01412       SUBROUTINE READ_SURFT1(HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT,HDIR)
01413 !     #############################################################
01414 !
01415 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
01416 USE PARKIND1  ,ONLY : JPRB
01417 !
01418 USE MODD_TYPE_DATE_SURF
01419 !
01420 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, NCOMM, NPROC, XTIME_NPIO_READ, XTIME_COMM_READ
01421 !
01422 #ifdef ASC
01423 USE MODE_READ_SURF_ASC, ONLY: READ_SURFT_ASC
01424 #endif
01425 #ifdef LFI
01426 USE MODE_READ_SURF_LFI, ONLY: READ_SURFT_LFI
01427 #endif
01428 #ifdef MNH 
01429 USE MODI_READ_SURFT1_MNH
01430 #endif
01431 !
01432 USE MODI_ABOR1_SFX
01433 USE MODI_GET_LUOUT
01434 !
01435 IMPLICIT NONE
01436 !
01437 #ifndef NOMPI
01438 INCLUDE "mpif.h"
01439 #endif
01440 !
01441 !*      0.1   Declarations of arguments
01442 !
01443  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM   ! calling program
01444  CHARACTER(LEN=*), INTENT(IN) :: HREC       ! name of the article to be read
01445 TYPE(DATE_TIME), DIMENSION(:), INTENT(INOUT)::TFIELD ! array containing the data field  
01446 INTEGER, INTENT(OUT) :: KRESP              ! KRESP  : return-code if a problem appears
01447  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT   ! name of the article to be read
01448  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR
01449 !
01450 !*      0.2   Declarations of local variables
01451 !
01452  CHARACTER(LEN=100) :: YCOMMENT
01453  CHARACTER(LEN=16)  :: YREC
01454  CHARACTER(LEN=1)   :: YDIR
01455 INTEGER            :: ILUOUT
01456 INTEGER            :: INFOMPI
01457 !
01458 DOUBLE PRECISION   :: XTIME0
01459 REAL , DIMENSION(SIZE(TFIELD,1))   :: ZTIME
01460 INTEGER, DIMENSION(SIZE(TFIELD,1)) :: IDAY
01461 INTEGER, DIMENSION(SIZE(TFIELD,1)) :: IMONTH
01462 INTEGER, DIMENSION(SIZE(TFIELD,1)) :: IYEAR
01463 REAL(KIND=JPRB) :: ZHOOK_HANDLE
01464 !
01465 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFT1',0,ZHOOK_HANDLE)
01466 !
01467 KRESP = 0
01468 YCOMMENT = ""
01469 !
01470 YREC = HREC
01471 YDIR = 'H'
01472 IF (PRESENT(HDIR)) YDIR = HDIR
01473 !
01474 IF (HPROGRAM=='MESONH') THEN
01475 #ifdef MNH 
01476   CALL READ_SURFT1_MNH(YREC,IL1,IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01477 #endif
01478 ELSE IF (HPROGRAM=='AROME ') THEN
01479 #ifdef ARO        
01480   CALL READ_SURFT1_ARO(YREC,IL1,IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01481 #endif
01482 ELSEIF (HPROGRAM=='OFFLIN' .OR. HPROGRAM=='ASCII ' .OR. &
01483     HPROGRAM=='FA    ' .OR. HPROGRAM=='LFI   ' ) THEN 
01484   !
01485   IF (NRANK==NPIO) THEN
01486     !
01487 #ifndef NOMPI    
01488     XTIME0 = MPI_WTIME()
01489 #endif    
01490     !
01491 !$OMP SINGLE
01492     !    
01493     IF (HPROGRAM=='OFFLIN') THEN
01494       CALL ABOR1_SFX('READ_SURFT1: NOT AVAILABLE FOR OFFLIN')
01495     ELSE IF (HPROGRAM=='FA    ') THEN
01496       CALL ABOR1_SFX('READ_SURFT1: NOT AVAILABLE FOR FA')      
01497     ELSE IF (HPROGRAM=='ASCII ') THEN
01498 #ifdef ASC 
01499       CALL READ_SURFT_ASC(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01500 #endif 
01501     ELSE IF (HPROGRAM=='LFI   ') THEN
01502 #ifdef LFI 
01503       CALL READ_SURFT_LFI(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01504 #endif  
01505     ENDIF
01506     !
01507 #ifndef NOMPI    
01508     XTIME_NPIO_READ = XTIME_NPIO_READ + (MPI_WTIME() - XTIME0)
01509 #endif    
01510     !      
01511 !$OMP END SINGLE COPYPRIVATE(IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01512     !  
01513   ENDIF
01514   !
01515 #ifndef NOMPI
01516   IF (YDIR/='A' .AND. NPROC>1) THEN
01517     XTIME0 = MPI_WTIME()         
01518 !$OMP SINGLE    
01519     CALL MPI_BCAST(IYEAR,SIZE(IYEAR)*KIND(IYEAR)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI)
01520     CALL MPI_BCAST(IMONTH,SIZE(IMONTH)*KIND(IMONTH)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI)
01521     CALL MPI_BCAST(IDAY,SIZE(IDAY)*KIND(IDAY)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI)
01522     CALL MPI_BCAST(ZTIME,SIZE(ZTIME)*KIND(ZTIME)/4,MPI_REAL,NPIO,NCOMM,INFOMPI)
01523 !$OMP END SINGLE COPYPRIVATE(IYEAR,IMONTH,IDAY,ZTIME)    
01524     XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)    
01525   ENDIF
01526 #endif
01527   !
01528 ENDIF  
01529 ! 
01530 IF (KRESP==-2) THEN
01531   CALL GET_LUOUT(HPROGRAM,ILUOUT)
01532   WRITE(ILUOUT,*) '-------'
01533   WRITE(ILUOUT,*) 'WARNING'
01534   WRITE(ILUOUT,*) '-------'
01535   WRITE(ILUOUT,*) ' '
01536   WRITE(ILUOUT,*) 'Date is not present file'
01537   WRITE(ILUOUT,*) 'Forcing value is kept'
01538   WRITE(ILUOUT,*) ' '
01539 ELSE
01540   TFIELD(:)%TDATE%YEAR  = IYEAR (:)
01541   TFIELD(:)%TDATE%MONTH = IMONTH(:)
01542   TFIELD(:)%TDATE%DAY   = IDAY  (:)  
01543   TFIELD(:)%TIME        = ZTIME (:)    
01544 END IF
01545 !
01546 IF (PRESENT(HCOMMENT)) HCOMMENT = YCOMMENT
01547 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFT1',1,ZHOOK_HANDLE)
01548 !
01549 END SUBROUTINE READ_SURFT1
01550 !
01551 !     #############################################################
01552       SUBROUTINE READ_SURFT2(HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT,HDIR)
01553 !     #############################################################
01554 !
01555 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
01556 USE PARKIND1  ,ONLY : JPRB
01557 !
01558 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, NCOMM, NPROC, XTIME_NPIO_READ, XTIME_COMM_READ
01559 !
01560 USE MODD_TYPE_DATE_SURF
01561 !
01562 USE MODI_ABOR1_SFX
01563 USE MODI_GET_LUOUT
01564 !
01565 #ifdef ASC
01566 USE MODE_READ_SURF_ASC, ONLY: READ_SURFT_ASC
01567 #endif
01568 #ifdef FA
01569 USE MODE_READ_SURF_FA, ONLY: READ_SURFT_FA
01570 #endif
01571 !
01572 IMPLICIT NONE
01573 !
01574 #ifndef NOMPI
01575 INCLUDE "mpif.h"
01576 #endif
01577 !
01578 !*      0.1   Declarations of arguments
01579 !
01580  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
01581  CHARACTER(LEN=*), INTENT(IN) :: HREC     ! name of the article to be read
01582 TYPE(DATE_TIME), DIMENSION(:,:), INTENT(INOUT) :: TFIELD ! array containing the data field  
01583 INTEGER, INTENT(OUT) :: KRESP            ! KRESP  : return-code if a problem appears
01584  CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: HCOMMENT   ! name of the article to be read
01585  CHARACTER(LEN=1), OPTIONAL, INTENT(IN)  :: HDIR
01586 !
01587 !*      0.2   Declarations of local variables
01588 !
01589  CHARACTER(LEN=100) :: YCOMMENT
01590  CHARACTER(LEN=16)  :: YREC
01591  CHARACTER(LEN=1)   :: YDIR
01592 INTEGER            :: ILUOUT
01593 INTEGER            :: INFOMPI
01594 !
01595 INTEGER :: IL1, IL2
01596 DOUBLE PRECISION   :: XTIME0
01597 REAL , DIMENSION(SIZE(TFIELD,1),SIZE(TFIELD,2))   :: ZTIME
01598 INTEGER, DIMENSION(SIZE(TFIELD,1),SIZE(TFIELD,2)) :: IDAY
01599 INTEGER, DIMENSION(SIZE(TFIELD,1),SIZE(TFIELD,2)) :: IMONTH
01600 INTEGER, DIMENSION(SIZE(TFIELD,1),SIZE(TFIELD,2)) :: IYEAR
01601 REAL(KIND=JPRB) :: ZHOOK_HANDLE
01602 !
01603 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFT2',0,ZHOOK_HANDLE)
01604 !
01605 KRESP = 0
01606 YCOMMENT = ""
01607 !
01608 YREC = HREC
01609 YDIR = 'H'
01610 IF (PRESENT(HDIR)) YDIR = HDIR
01611 !
01612 IL1 = SIZE(TFIELD,1)
01613 IL2 = SIZE(TFIELD,2)
01614 !
01615 IF (HPROGRAM=='MESONH') THEN
01616   CALL ABOR1_SFX('READ_SURFT2: NOT AVAILABLE FOR MESONH')
01617 ELSE IF (HPROGRAM=='AROME ') THEN
01618   CALL ABOR1_SFX('READ_SURFT2: NOT AVAILABLE FOR AROME')  
01619 ELSEIF (HPROGRAM=='OFFLIN' .OR. HPROGRAM=='ASCII ' .OR. &
01620     HPROGRAM=='FA    ' .OR. HPROGRAM=='LFI   ' ) THEN 
01621   !  
01622   IF (NRANK==NPIO) THEN
01623     !
01624 #ifndef NOMPI   
01625     XTIME0 = MPI_WTIME()
01626 #endif    
01627     !
01628 !$OMP SINGLE
01629     !     
01630     IF (HPROGRAM=='OFFLIN') THEN
01631       CALL ABOR1_SFX('READ_SURFT2: NOT AVAILABLE FOR OFFLIN')
01632     ELSE IF (HPROGRAM=='LFI   ') THEN
01633       CALL ABOR1_SFX('READ_SURFT2: NOT AVAILABLE FOR LFI')      
01634     ELSE IF (HPROGRAM=='ASCII ') THEN
01635 #ifdef ASC 
01636       CALL READ_SURFT_ASC(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01637 #endif
01638     ELSE IF (HPROGRAM=='FA    ') THEN
01639 #ifdef FA 
01640       CALL READ_SURFT_FA(YREC,IL1,IL2,IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01641 #endif
01642     ENDIF
01643     !
01644 #ifndef NOMPI
01645     XTIME_NPIO_READ = XTIME_NPIO_READ + (MPI_WTIME() - XTIME0)
01646 #endif
01647     !    
01648 !$OMP END SINGLE COPYPRIVATE(IYEAR,IMONTH,IDAY,ZTIME,KRESP,YCOMMENT)
01649     !    
01650   ENDIF
01651   !
01652 #ifndef NOMPI
01653   IF (YDIR/='A' .AND. NPROC>1) THEN
01654     XTIME0 = MPI_WTIME()   
01655 !$OMP SINGLE
01656     CALL MPI_BCAST(IYEAR,SIZE(IYEAR)*KIND(IYEAR)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI)
01657     CALL MPI_BCAST(IMONTH,SIZE(IMONTH)*KIND(IMONTH)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI)
01658     CALL MPI_BCAST(IDAY,SIZE(IDAY)*KIND(IDAY)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI)
01659     CALL MPI_BCAST(ZTIME,SIZE(ZTIME)*KIND(ZTIME)/4,MPI_REAL,NPIO,NCOMM,INFOMPI)
01660 !$OMP END SINGLE COPYPRIVATE(IYEAR,IMONTH,IDAY,ZTIME)    
01661     XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)
01662   ENDIF
01663 #endif
01664   !
01665 ENDIF
01666 !
01667 IF (KRESP==-2) THEN
01668   CALL GET_LUOUT(HPROGRAM,ILUOUT)
01669   WRITE(ILUOUT,*) '-------'
01670   WRITE(ILUOUT,*) 'WARNING'
01671   WRITE(ILUOUT,*) '-------'
01672   WRITE(ILUOUT,*) ' '
01673   WRITE(ILUOUT,*) 'Date is not present file'
01674   WRITE(ILUOUT,*) 'Forcing value is kept'
01675   WRITE(ILUOUT,*) ' '
01676 ELSE
01677   TFIELD(:,:)%TDATE%YEAR  = IYEAR (:,:)
01678   TFIELD(:,:)%TDATE%MONTH = IMONTH(:,:)
01679   TFIELD(:,:)%TDATE%DAY   = IDAY  (:,:)  
01680   TFIELD(:,:)%TIME        = ZTIME (:,:)  
01681 END IF
01682 !
01683 IF (PRESENT(HCOMMENT)) HCOMMENT = YCOMMENT
01684 IF (LHOOK) CALL DR_HOOK('MODI_READ_SURF:READ_SURFT2',1,ZHOOK_HANDLE)
01685 !
01686 END SUBROUTINE READ_SURFT2