SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/mode_read_surf_asc.F90
Go to the documentation of this file.
00001 MODULE MODE_READ_SURF_ASC
00002 !!
00003 !!    PURPOSE
00004 !!    -------
00005 !
00006 !       The purpose of READ_SURF_ASC is
00007 !
00008 !!**  METHOD
00009 !!    ------
00010 !!
00011 !!    EXTERNAL
00012 !!    --------
00013 !!
00014 !!     
00015 !!
00016 !!    IMPLICIT ARGUMENTS
00017 !!    ------------------
00018 !!
00019 !!
00020 !!    REFERENCE
00021 !!    ---------
00022 !!
00023 !!
00024 !!    AUTHOR
00025 !!    ------
00026 !!
00027 !!      S.Malardel      *METEO-FRANCE*
00028 !!
00029 !!    MODIFICATIONS
00030 !!    -------------
00031 !!
00032 !!      original                                                     01/08/03
00033 !----------------------------------------------------------------------------
00034 !
00035 INTERFACE READ_SURF0_ASC
00036         MODULE PROCEDURE READ_SURFX0_ASC
00037         MODULE PROCEDURE READ_SURFN0_ASC
00038         MODULE PROCEDURE READ_SURFL0_ASC
00039         MODULE PROCEDURE READ_SURFC0_ASC
00040 END INTERFACE
00041 INTERFACE READ_SURFN_ASC
00042         MODULE PROCEDURE READ_SURFX1_ASC
00043         MODULE PROCEDURE READ_SURFN1_ASC
00044         MODULE PROCEDURE READ_SURFL1_ASC
00045         MODULE PROCEDURE READ_SURFX2_ASC
00046 END INTERFACE
00047 INTERFACE READ_SURFT_ASC
00048         MODULE PROCEDURE READ_SURFT0_ASC
00049         MODULE PROCEDURE READ_SURFT1_ASC
00050         MODULE PROCEDURE READ_SURFT2_ASC
00051 END INTERFACE
00052 !
00053 CONTAINS
00054 !
00055 !     #############################################################
00056       SUBROUTINE READ_SURFX0_ASC(HREC,PFIELD,KRESP,HCOMMENT)
00057 !     #############################################################
00058 !
00059 USE MODD_IO_SURF_ASC, ONLY : NUNIT, NLUOUT, CMASK
00060 !
00061 USE MODE_POS_SURF
00062 !
00063 USE MODI_IO_BUFF_n
00064 USE MODI_ERROR_READ_SURF_ASC
00065 !
00066 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00067 USE PARKIND1  ,ONLY : JPRB
00068 !
00069 IMPLICIT NONE
00070 !
00071 !*      0.1   Declarations of arguments
00072 !
00073  CHARACTER(LEN=*), INTENT(IN)  :: HREC     ! name of the article to be read
00074 REAL,              INTENT(OUT) :: PFIELD   ! the real scalar to be read
00075 INTEGER,           INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
00076  CHARACTER(LEN=100),INTENT(OUT) :: HCOMMENT ! comment
00077 !
00078 !*      0.2   Declarations of local variables
00079 !
00080  CHARACTER(LEN=50):: YCOMMENT
00081  CHARACTER(LEN=6) :: YMASK
00082 LOGICAL          :: GFOUND
00083 LOGICAL          :: GKNOWN
00084 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00085 !
00086 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFX0_ASC',0,ZHOOK_HANDLE)
00087 !
00088 KRESP=0
00089 !
00090 YMASK=CMASK
00091  CALL IO_BUFF_n(HREC,'R',GKNOWN)
00092 IF (GKNOWN) YMASK='FULL  '
00093 !
00094  CALL POSNAM(NUNIT,YMASK//' '//HREC,GFOUND,NLUOUT)
00095 IF (.NOT. GFOUND) CALL POSNAM(NUNIT,'FULL  '//' '//HREC,GFOUND,NLUOUT) ! used for auxilliary files
00096 !
00097 READ(NUNIT,FMT=*,END=100)
00098 READ(NUNIT,FMT='(A50)') YCOMMENT
00099 READ(NUNIT,FMT=*,ERR=100) PFIELD
00100 !
00101 HCOMMENT = YCOMMENT
00102 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFX0_ASC',1,ZHOOK_HANDLE)
00103 RETURN
00104 !
00105 100 CONTINUE
00106  CALL ERROR_READ_SURF_ASC(HREC,KRESP)
00107 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFX0_ASC',1,ZHOOK_HANDLE)
00108 !
00109 END SUBROUTINE READ_SURFX0_ASC
00110 !
00111 !     #############################################################
00112       SUBROUTINE READ_SURFX1_ASC(HREC,PFIELD,KRESP,HCOMMENT,HDIR)
00113 !     #############################################################
00114 !
00115 !!****  *READX1* - routine to fill a real 1D array for the externalised surface 
00116 !
00117 USE MODD_SURFEX_MPI, ONLY : NRANK, NPROC, NCOMM, NPIO, XTIME_NPIO_READ, XTIME_COMM_READ
00118 !
00119 USE MODD_IO_SURF_ASC,  ONLY : NUNIT, NLUOUT, NMASK, NFULL, CMASK
00120 !
00121 USE MODE_POS_SURF
00122 !
00123 USE MODI_IO_BUFF_n
00124 USE MODI_ERROR_READ_SURF_ASC
00125 USE MODI_READ_AND_SEND_MPI
00126 !
00127 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00128 USE PARKIND1  ,ONLY : JPRB
00129 !
00130 IMPLICIT NONE
00131 !
00132 #ifndef NOMPI
00133 INCLUDE "mpif.h"
00134 #endif
00135 !
00136 !*      0.1   Declarations of arguments
00137 !
00138  CHARACTER(LEN=*),   INTENT(IN)  :: HREC     ! name of the article to be read
00139 REAL, DIMENSION(:), INTENT(OUT)  :: PFIELD   ! array containing the data field
00140 INTEGER,             INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
00141  CHARACTER(LEN=100),  INTENT(OUT) :: HCOMMENT ! comment
00142  CHARACTER(LEN=1),    INTENT(IN)  :: HDIR     ! type of field :
00143                                              ! 'H' : field with
00144                                              !       horizontal spatial dim.
00145                                              ! '-' : no horizontal dim.
00146 !*      0.2   Declarations of local variables
00147 !
00148  CHARACTER(LEN=50) :: YCOMMENT
00149  CHARACTER(LEN=6)  :: YMASK
00150 LOGICAL           :: GFOUND
00151 LOGICAL           :: GKNOWN
00152 INTEGER           :: I, INFOMPI
00153 !
00154 DOUBLE PRECISION   :: XTIME0
00155 REAL, DIMENSION(:),   ALLOCATABLE   :: ZWORK   ! work array read in the file
00156 #ifndef NOMPI
00157 INTEGER, DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
00158 #endif
00159 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00160 !
00161 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFX1_ASC',0,ZHOOK_HANDLE)
00162 !
00163 KRESP=0
00164 !
00165 #ifndef NOMPI
00166 XTIME0 = MPI_WTIME()
00167 #endif
00168 !
00169 IF (NRANK==NPIO) THEN
00170   !  
00171   IF (HDIR=='-' .OR. HDIR=='A') THEN
00172     ALLOCATE(ZWORK(SIZE(PFIELD)))
00173   ELSE
00174     ALLOCATE(ZWORK(NFULL))
00175   END IF          
00176   !
00177 !$OMP SINGLE      
00178   !
00179   IF (HDIR=='A') THEN
00180     CALL POSNAM(NUNIT,CMASK//' '//HREC,GFOUND,NLUOUT)
00181     IF (.NOT. GFOUND) CALL POSNAM(NUNIT,'FULL  '//' '//HREC,GFOUND,NLUOUT)
00182   ELSE
00183     YMASK=CMASK
00184     CALL IO_BUFF_n(HREC,'R',GKNOWN)
00185     IF (GKNOWN) YMASK='FULL  '
00186     CALL POSNAM(NUNIT,YMASK//' '//HREC,GFOUND,NLUOUT)
00187   END IF
00188   !
00189   READ(NUNIT,FMT=*,IOSTAT=KRESP)
00190   READ(NUNIT,FMT='(A50)',IOSTAT=KRESP) YCOMMENT
00191   READ(NUNIT,FMT=*,IOSTAT=KRESP) ZWORK
00192   !
00193   HCOMMENT = YCOMMENT
00194   !
00195 !$OMP END SINGLE COPYPRIVATE(ZWORK,HCOMMENT,KRESP)
00196   !
00197 ELSE
00198   ALLOCATE(ZWORK(0))
00199 ENDIF
00200 !
00201 #ifndef NOMPI
00202 XTIME_NPIO_READ = XTIME_NPIO_READ + (MPI_WTIME() - XTIME0)
00203 #endif
00204 !
00205 IF (KRESP/=0) CALL ERROR_READ_SURF_ASC(HREC,KRESP)
00206 !
00207 IF (HDIR=='A') THEN  ! no distribution on other tasks
00208   IF ( NRANK==NPIO ) THEN
00209 #ifndef NOMPI          
00210     XTIME0 = MPI_WTIME()
00211 #endif    
00212     PFIELD(:) = ZWORK(1:SIZE(PFIELD))
00213 #ifndef NOMPI    
00214     XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)
00215 #endif    
00216   ENDIF
00217 ELSEIF (HDIR=='-') THEN ! distribution of the total field on other tasks
00218 !$OMP SINGLE    
00219   IF (NRANK==NPIO) PFIELD(:) = ZWORK(1:SIZE(PFIELD))
00220 #ifndef NOMPI
00221   IF (NPROC>1) THEN
00222     XTIME0 = MPI_WTIME()
00223     CALL MPI_BCAST(PFIELD,SIZE(PFIELD)*KIND(PFIELD)/4,MPI_REAL,NPIO,NCOMM,INFOMPI)   
00224     XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)
00225   ENDIF
00226 #endif    
00227 !$OMP END SINGLE COPYPRIVATE(PFIELD)
00228 ELSE
00229   CALL READ_AND_SEND_MPI(ZWORK,PFIELD,NMASK)
00230 ENDIF
00231 !
00232 DEALLOCATE(ZWORK)
00233 !  
00234 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFX1_ASC',1,ZHOOK_HANDLE)
00235 !
00236 END SUBROUTINE READ_SURFX1_ASC
00237 !
00238 !     #############################################################
00239       SUBROUTINE READ_SURFX2_ASC(HREC,PFIELD,KRESP,HCOMMENT,HDIR)
00240 !     #############################################################
00241 !
00242 !!****  *READX2* - routine to fill a real 2D array for the externalised surface 
00243 !
00244 USE MODD_SURFEX_MPI, ONLY : NRANK, NPROC, NCOMM, NPIO, XTIME_NPIO_READ, XTIME_COMM_READ
00245 !
00246 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, NLUOUT, NMASK, NFULL, CMASK
00247 !
00248 USE MODE_POS_SURF
00249 !
00250 USE MODI_IO_BUFF_n
00251 USE MODI_ERROR_READ_SURF_ASC
00252 USE MODI_READ_AND_SEND_MPI
00253 !
00254 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00255 USE PARKIND1  ,ONLY : JPRB
00256 !
00257 IMPLICIT NONE
00258 !
00259 #ifndef NOMPI
00260 INCLUDE "mpif.h"
00261 #endif
00262 !
00263 !*      0.1   Declarations of arguments
00264 !
00265  CHARACTER(LEN=*),        INTENT(IN)  :: HREC     ! name of the article to be read
00266 REAL, DIMENSION(:,:),     INTENT(OUT) :: PFIELD   ! array containing the data field
00267 INTEGER,                  INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
00268  CHARACTER(LEN=100),       INTENT(OUT) :: HCOMMENT ! comment
00269  CHARACTER(LEN=1),         INTENT(IN)  :: HDIR     ! type of field :
00270                                                   ! 'H' : field with
00271                                                   !       horizontal spatial dim.
00272                                                   ! '-' : no horizontal dim.
00273 !*      0.2   Declarations of local variables
00274 ! 
00275  CHARACTER(LEN=50) :: YCOMMENT
00276  CHARACTER(LEN=6)  :: YMASK
00277 LOGICAL           :: GFOUND
00278 LOGICAL           :: GKNOWN
00279 INTEGER           :: I, INFOMPI
00280 !
00281 DOUBLE PRECISION   :: XTIME0
00282 REAL, DIMENSION(:,:), ALLOCATABLE :: ZWORK   ! work array read in the file
00283 #ifndef NOMPI
00284 INTEGER, DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
00285 #endif
00286 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00287 !
00288 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFX2_ASC',0,ZHOOK_HANDLE)
00289 !
00290 KRESP=0
00291 !
00292 #ifndef NOMPI
00293 XTIME0 = MPI_WTIME()
00294 #endif
00295 !
00296 IF (NRANK==NPIO) THEN
00297   !
00298   IF (HDIR=='-' .OR. HDIR=='A') THEN
00299     ALLOCATE(ZWORK(SIZE(PFIELD,1),SIZE(PFIELD,2)))
00300   ELSE
00301     ALLOCATE(ZWORK(NFULL,SIZE(PFIELD,2)))
00302   END IF        
00303   !
00304 !$OMP SINGLE         
00305   !
00306   IF (HDIR=='A') THEN
00307     CALL POSNAM(NUNIT,CMASK//' '//HREC,GFOUND,NLUOUT)
00308     IF (.NOT. GFOUND) CALL POSNAM(NUNIT,'FULL  '//' '//HREC,GFOUND,NLUOUT)
00309   ELSE
00310     YMASK=CMASK
00311     CALL IO_BUFF_n(HREC,'R',GKNOWN)
00312     IF (GKNOWN) YMASK='FULL  '
00313     CALL POSNAM(NUNIT,YMASK//' '//HREC,GFOUND,NLUOUT)
00314   END IF
00315   !
00316   READ(NUNIT,FMT=*,IOSTAT=KRESP)
00317   READ(NUNIT,FMT='(A50)',IOSTAT=KRESP) YCOMMENT
00318   READ(NUNIT,FMT=*,IOSTAT=KRESP) ZWORK
00319   !
00320   HCOMMENT = YCOMMENT
00321   !
00322 !$OMP END SINGLE COPYPRIVATE(ZWORK,HCOMMENT,KRESP)
00323   !
00324 ELSE
00325   ALLOCATE(ZWORK(0,0))
00326 ENDIF
00327 !
00328 #ifndef NOMPI
00329 XTIME_NPIO_READ = XTIME_NPIO_READ + (MPI_WTIME() - XTIME0)
00330 #endif
00331 !
00332 IF (KRESP/=0) CALL ERROR_READ_SURF_ASC(HREC,KRESP)
00333 !
00334 IF (HDIR=='A') THEN
00335   IF ( NRANK==NPIO ) THEN
00336 #ifndef NOMPI
00337     XTIME0 = MPI_WTIME()
00338 #endif
00339     PFIELD(:,:) = ZWORK(1:SIZE(PFIELD,1),:)
00340 #ifndef NOMPI
00341     XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)
00342 #endif
00343   ENDIF
00344 ELSEIF (HDIR=='-') THEN
00345 !$OMP SINGLE    
00346   IF (NRANK==NPIO) PFIELD(:,:) = ZWORK(1:SIZE(PFIELD),:)
00347 #ifndef NOMPI       
00348   IF (NPROC>1) THEN
00349     XTIME0 = MPI_WTIME()
00350     CALL MPI_BCAST(PFIELD,SIZE(PFIELD)*KIND(PFIELD)/4,MPI_REAL,NPIO,NCOMM,INFOMPI)   
00351     XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)
00352   ENDIF
00353 #endif    
00354 !$OMP END SINGLE COPYPRIVATE(PFIELD)
00355 ELSE
00356   CALL READ_AND_SEND_MPI(ZWORK,PFIELD,NMASK)
00357 ENDIF
00358 !
00359 DEALLOCATE(ZWORK)
00360 !
00361 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFX2_ASC',1,ZHOOK_HANDLE)
00362 !
00363 END SUBROUTINE READ_SURFX2_ASC
00364 !
00365 !     #############################################################
00366       SUBROUTINE READ_SURFN0_ASC(HREC,KFIELD,KRESP,HCOMMENT)
00367 !     #############################################################
00368 !
00369 !!****  *READN0* - routine to read an integer
00370 !
00371 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, NLUOUT, NMASK, CMASK
00372 !
00373 USE MODE_POS_SURF
00374 !
00375 USE MODI_IO_BUFF_n
00376 USE MODI_ERROR_READ_SURF_ASC
00377 !
00378 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00379 USE PARKIND1  ,ONLY : JPRB
00380 !
00381 IMPLICIT NONE
00382 !
00383 !*      0.1   Declarations of arguments
00384 !
00385  CHARACTER(LEN=*),  INTENT(IN)  :: HREC     ! name of the article to be read
00386 INTEGER,            INTENT(OUT) :: KFIELD   ! the integer to be read
00387 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
00388  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
00389 !
00390 !*      0.2   Declarations of local variables
00391 !
00392  CHARACTER(LEN=50) :: YCOMMENT
00393  CHARACTER(LEN=6)  :: YMASK
00394 LOGICAL           :: GFOUND
00395 LOGICAL           :: GKNOWN
00396 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00397 !
00398 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFN0_ASC',0,ZHOOK_HANDLE)
00399 !
00400 KRESP=0
00401 !
00402 YMASK=CMASK
00403  CALL IO_BUFF_n(HREC,'R',GKNOWN)
00404 IF (GKNOWN) YMASK='FULL  '
00405 !
00406  CALL POSNAM(NUNIT,YMASK//' '//HREC,GFOUND,NLUOUT)
00407 IF (.NOT. GFOUND) CALL POSNAM(NUNIT,'FULL  '//' '//HREC,GFOUND,NLUOUT) ! used for auxilliary files
00408 !
00409 READ(NUNIT,FMT=*,END=100)
00410 READ(NUNIT,FMT='(A50)') YCOMMENT
00411 READ(NUNIT,FMT=*,ERR=100) KFIELD
00412 !
00413 HCOMMENT = YCOMMENT
00414 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFN0_ASC',1,ZHOOK_HANDLE)
00415 RETURN
00416 !
00417 100 CONTINUE
00418  CALL ERROR_READ_SURF_ASC(HREC,KRESP)
00419 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFN0_ASC',1,ZHOOK_HANDLE)
00420 !-------------------------------------------------------------------------------
00421 END SUBROUTINE READ_SURFN0_ASC
00422 !
00423 !     #############################################################
00424       SUBROUTINE READ_SURFN1_ASC(HREC,KFIELD,KRESP,HCOMMENT,HDIR)
00425 !     #############################################################
00426 !
00427 !!****  *READN0* - routine to read an integer
00428 !
00429 USE MODD_SURFEX_MPI, ONLY : NRANK, NPROC, NCOMM, NPIO, XTIME_NPIO_READ, XTIME_COMM_READ
00430 !
00431 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, NLUOUT, NMASK, NFULL, CMASK
00432 !
00433 USE MODE_POS_SURF
00434 !
00435 USE MODI_IO_BUFF_n
00436 USE MODI_ERROR_READ_SURF_ASC
00437 USE MODI_READ_AND_SEND_MPI
00438 !
00439 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00440 USE PARKIND1  ,ONLY : JPRB
00441 !
00442 IMPLICIT NONE
00443 !
00444 #ifndef NOMPI
00445 INCLUDE "mpif.h"
00446 #endif
00447 !
00448 !*      0.1   Declarations of arguments
00449 !
00450  CHARACTER(LEN=*),      INTENT(IN)  :: HREC     ! name of the article to be read
00451 INTEGER, DIMENSION(:),  INTENT(OUT) :: KFIELD   ! the integer to be read
00452 INTEGER,                INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
00453  CHARACTER(LEN=100),     INTENT(OUT) :: HCOMMENT ! comment
00454  CHARACTER(LEN=1),       INTENT(IN)  :: HDIR     ! type of field :
00455                                                 ! 'H' : field with
00456                                                 !       horizontal spatial dim.
00457                                                 ! '-' : no horizontal dim.
00458 !*      0.2   Declarations of local variables
00459 !
00460  CHARACTER(LEN=50) :: YCOMMENT
00461  CHARACTER(LEN=6)  :: YMASK
00462 LOGICAL           :: GFOUND
00463 LOGICAL           :: GKNOWN
00464 INTEGER           :: I, INFOMPI
00465 !
00466 INTEGER, DIMENSION(:), ALLOCATABLE  :: IWORK   ! work array read in the file
00467 #ifndef NOMPI
00468 INTEGER, DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
00469 #endif
00470 DOUBLE PRECISION   :: XTIME0
00471 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00472 !
00473 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFN1_ASC',0,ZHOOK_HANDLE)
00474 !  
00475 KRESP=0
00476 !
00477 #ifndef NOMPI
00478 XTIME0 = MPI_WTIME()
00479 #endif
00480 !
00481 IF (NRANK==NPIO) THEN
00482   !
00483   IF (HDIR=='-' .OR. HDIR=='A') THEN
00484     ALLOCATE(IWORK(SIZE(KFIELD)))
00485   ELSE
00486     ALLOCATE(IWORK(NFULL))
00487   END IF        
00488   !
00489 !$OMP SINGLE        
00490   !
00491   IF (HDIR=='A') THEN
00492     CALL POSNAM(NUNIT,CMASK//' '//HREC,GFOUND,NLUOUT)
00493     IF (.NOT. GFOUND) CALL POSNAM(NUNIT,'FULL  '//' '//HREC,GFOUND,NLUOUT)
00494   ELSE
00495     YMASK=CMASK
00496     CALL IO_BUFF_n(HREC,'R',GKNOWN)
00497     IF (GKNOWN) YMASK='FULL  '
00498     CALL POSNAM(NUNIT,YMASK//' '//HREC,GFOUND,NLUOUT)
00499   END IF
00500   !
00501   READ(NUNIT,FMT=*,IOSTAT=KRESP)
00502   READ(NUNIT,FMT='(A50)',IOSTAT=KRESP) YCOMMENT
00503   READ(NUNIT,FMT=*,IOSTAT=KRESP) IWORK
00504   !
00505   HCOMMENT = YCOMMENT
00506   !
00507 !$OMP END SINGLE COPYPRIVATE(IWORK,HCOMMENT,KRESP)
00508   !
00509 ELSE
00510   ALLOCATE(IWORK(0))
00511 ENDIF
00512 !
00513 #ifndef NOMPI
00514 XTIME_NPIO_READ = XTIME_NPIO_READ + (MPI_WTIME() - XTIME0)
00515 #endif
00516 !
00517 IF (KRESP/=0) CALL ERROR_READ_SURF_ASC(HREC,KRESP)
00518 !
00519 IF (HDIR=='A') THEN
00520   IF ( NRANK==NPIO ) THEN
00521 #ifndef NOMPI          
00522     XTIME0 = MPI_WTIME()
00523 #endif
00524     KFIELD(:) = IWORK(1:SIZE(KFIELD))
00525 #ifndef NOMPI    
00526     XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)
00527 #endif    
00528   ENDIF
00529 ELSEIF (HDIR=='-') THEN
00530 !$OMP SINGLE    
00531   IF (NRANK==NPIO) KFIELD(:) = IWORK(1:SIZE(KFIELD))
00532 #ifndef NOMPI     
00533   IF (NPROC>1) THEN
00534     XTIME0 = MPI_WTIME()
00535     CALL MPI_BCAST(KFIELD,SIZE(KFIELD)*KIND(KFIELD)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI)   
00536     XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)
00537   ENDIF
00538 #endif    
00539 !$OMP END SINGLE COPYPRIVATE(KFIELD)
00540 ELSE
00541   CALL READ_AND_SEND_MPI(IWORK,KFIELD,NMASK)
00542 ENDIF
00543 !
00544 DEALLOCATE(IWORK)
00545 !
00546 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFN1_ASC',1,ZHOOK_HANDLE)
00547 !
00548 END SUBROUTINE READ_SURFN1_ASC
00549 !
00550 !     #############################################################
00551       SUBROUTINE READ_SURFC0_ASC(HREC,HFIELD,KRESP,HCOMMENT)
00552 !     #############################################################
00553 !
00554 !!****  *READC0* - routine to read a character
00555 !
00556 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, NLUOUT, CMASK
00557 !
00558 USE MODE_POS_SURF
00559 !
00560 USE MODI_IO_BUFF_n
00561 USE MODI_ERROR_READ_SURF_ASC
00562 !
00563 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00564 USE PARKIND1  ,ONLY : JPRB
00565 !
00566 IMPLICIT NONE
00567 !
00568 !*      0.1   Declarations of arguments
00569 !
00570  CHARACTER(LEN=*),  INTENT(IN)  :: HREC      ! name of the article to be read
00571  CHARACTER(LEN=40),  INTENT(OUT) :: HFIELD    ! the integer to be read
00572 INTEGER,            INTENT(OUT) :: KRESP     ! KRESP  : return-code if a problem appears
00573  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT  ! comment
00574 !
00575 !*      0.2   Declarations of local variables
00576 !
00577  CHARACTER(LEN=50):: YCOMMENT
00578  CHARACTER(LEN=6) :: YMASK
00579 LOGICAL          :: GFOUND
00580 LOGICAL          :: GKNOWN
00581 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00582 !
00583 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFC0_ASC',0,ZHOOK_HANDLE)
00584 !
00585 KRESP=0
00586 !
00587 YMASK=CMASK
00588  CALL IO_BUFF_n(HREC,'R',GKNOWN)
00589 IF (GKNOWN) YMASK='FULL  '
00590 !
00591  CALL POSNAM(NUNIT,YMASK//' '//HREC,GFOUND,NLUOUT)
00592 IF (.NOT. GFOUND) CALL POSNAM(NUNIT,'FULL  '//' '//HREC,GFOUND,NLUOUT) ! used for auxilliary files
00593 !
00594 READ(NUNIT,FMT=*,END=100)
00595 READ(NUNIT,FMT='(A50)') YCOMMENT
00596 READ(NUNIT,FMT='(A40)',ERR=100) HFIELD
00597 !
00598 HCOMMENT = YCOMMENT
00599 !
00600 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFC0_ASC',1,ZHOOK_HANDLE)
00601 RETURN
00602 !
00603 100 CONTINUE
00604  CALL ERROR_READ_SURF_ASC(HREC,KRESP)
00605 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFC0_ASC',1,ZHOOK_HANDLE)
00606 !
00607 END SUBROUTINE READ_SURFC0_ASC
00608 !
00609 !     #############################################################
00610       SUBROUTINE READ_SURFL0_ASC(HREC,OFIELD,KRESP,HCOMMENT)
00611 !     #############################################################
00612 !
00613 !!****  *READL0* - routine to read a logical
00614 !
00615 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, NLUOUT, CMASK
00616 !
00617 USE MODE_POS_SURF
00618 !
00619 USE MODI_IO_BUFF_n
00620 USE MODI_ERROR_READ_SURF_ASC
00621 !
00622 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00623 USE PARKIND1  ,ONLY : JPRB
00624 !
00625 IMPLICIT NONE
00626 !
00627 !*      0.1   Declarations of arguments
00628 !
00629  CHARACTER(LEN=*),  INTENT(IN)  :: HREC     ! name of the article to be read
00630 LOGICAL,            INTENT(OUT) :: OFIELD   ! array containing the data field
00631 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
00632  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
00633 !
00634 !*      0.2   Declarations of local variables
00635 !
00636  CHARACTER(LEN=50) :: YCOMMENT
00637  CHARACTER(LEN=6)  :: YMASK
00638 LOGICAL           :: GFOUND
00639 LOGICAL           :: GKNOWN
00640 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00641 !
00642 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFL0_ASC',0,ZHOOK_HANDLE)
00643 KRESP=0
00644 !
00645 YMASK=CMASK
00646  CALL IO_BUFF_n(HREC,'R',GKNOWN)
00647 IF (GKNOWN) YMASK='FULL  '
00648 !
00649  CALL POSNAM(NUNIT,YMASK//' '//HREC,GFOUND,NLUOUT)
00650 IF (.NOT. GFOUND) CALL POSNAM(NUNIT,'FULL  '//' '//HREC,GFOUND,NLUOUT) ! used for auxilliary files
00651 !
00652 READ(NUNIT,FMT=*,END=100)
00653 READ(NUNIT,FMT='(A50)') YCOMMENT
00654 READ(NUNIT,FMT=*,ERR=100) OFIELD
00655 !
00656 HCOMMENT = YCOMMENT
00657 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFL0_ASC',1,ZHOOK_HANDLE)
00658 RETURN
00659 !
00660 100 CONTINUE
00661  CALL ERROR_READ_SURF_ASC(HREC,KRESP)
00662 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFL0_ASC',1,ZHOOK_HANDLE)
00663 !
00664 END SUBROUTINE READ_SURFL0_ASC
00665 !
00666 !     #############################################################
00667       SUBROUTINE READ_SURFL1_ASC(HREC,OFIELD,KRESP,HCOMMENT,HDIR)
00668 !     #############################################################
00669 !
00670 !!****  *READL1* - routine to read a logical array
00671 !
00672 USE MODD_SURFEX_MPI, ONLY : NRANK, NPROC, NCOMM, NPIO, XTIME_NPIO_READ, XTIME_COMM_READ
00673 !
00674 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, NLUOUT, CMASK
00675 !
00676 USE MODE_POS_SURF
00677 !
00678 USE MODI_IO_BUFF_n
00679 USE MODI_ERROR_READ_SURF_ASC
00680 !
00681 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00682 USE PARKIND1  ,ONLY : JPRB
00683 !
00684 IMPLICIT NONE
00685 !
00686 #ifndef NOMPI
00687 INCLUDE "mpif.h"
00688 #endif
00689 !
00690 !*      0.1   Declarations of arguments
00691 !
00692  CHARACTER(LEN=*),      INTENT(IN)  :: HREC     ! name of the article to be read
00693 LOGICAL, DIMENSION(:),  INTENT(OUT) :: OFIELD   ! array containing the data field
00694 INTEGER,                INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
00695  CHARACTER(LEN=100),     INTENT(OUT) :: HCOMMENT ! comment
00696  CHARACTER(LEN=1),       INTENT(IN)  :: HDIR     ! type of field :
00697                                                 ! 'H' : field with
00698                                                 !       horizontal spatial dim.
00699                                                 ! '-' : no horizontal dim.
00700 !*      0.2   Declarations of local variables
00701 !
00702  CHARACTER(LEN=50):: YCOMMENT
00703  CHARACTER(LEN=6) :: YMASK
00704 LOGICAL          :: GFOUND
00705 LOGICAL          :: GKNOWN
00706 INTEGER          :: INFOMPI
00707 DOUBLE PRECISION :: XTIME0
00708 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00709 !
00710 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFL1_ASC',0,ZHOOK_HANDLE)
00711 !
00712 KRESP=0
00713 !
00714 #ifndef NOMPI
00715 XTIME0 = MPI_WTIME()
00716 #endif
00717 !
00718 IF (NRANK==NPIO) THEN
00719   !
00720 !$OMP SINGLE
00721   ! 
00722   YMASK=CMASK
00723   CALL IO_BUFF_n(HREC,'R',GKNOWN)
00724   IF (GKNOWN) YMASK='FULL  '
00725   !
00726   CALL POSNAM(NUNIT,YMASK//' '//HREC,GFOUND,NLUOUT)
00727   IF (.NOT. GFOUND) CALL POSNAM(NUNIT,'FULL  '//' '//HREC,GFOUND,NLUOUT) ! used for auxilliary files
00728   !
00729   READ(NUNIT,FMT=*,IOSTAT=KRESP)
00730   READ(NUNIT,FMT='(A50)',IOSTAT=KRESP) YCOMMENT
00731   READ(NUNIT,FMT=*,IOSTAT=KRESP) OFIELD
00732   !
00733   HCOMMENT = YCOMMENT
00734   !
00735 !$OMP END SINGLE COPYPRIVATE(OFIELD,HCOMMENT,KRESP)
00736   !
00737 ENDIF
00738 !
00739 #ifndef NOMPI
00740 XTIME_NPIO_READ = XTIME_NPIO_READ + (MPI_WTIME() - XTIME0)
00741 #endif
00742 !
00743 IF (KRESP/=0) CALL ERROR_READ_SURF_ASC(HREC,KRESP)
00744 !
00745 #ifndef NOMPI
00746 IF (NPROC>1 .AND. HDIR/='A') THEN
00747 !$OMP SINGLE 
00748   XTIME0 = MPI_WTIME()
00749   CALL MPI_BCAST(OFIELD,SIZE(OFIELD),MPI_LOGICAL,NPIO,NCOMM,INFOMPI)
00750   XTIME_COMM_READ = XTIME_COMM_READ + (MPI_WTIME() - XTIME0)
00751 !$OMP END SINGLE COPYPRIVATE(OFIELD)
00752 ENDIF
00753 #endif
00754 !
00755 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFL1_ASC',1,ZHOOK_HANDLE)
00756 !
00757 END SUBROUTINE READ_SURFL1_ASC
00758 !
00759 !
00760 !     #############################################################
00761       SUBROUTINE READ_SURFT0_ASC(HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
00762 !     #############################################################
00763 !
00764 !!****  *READT0* - routine to read a date
00765 !
00766 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, NLUOUT, CMASK
00767 !
00768 USE MODE_POS_SURF
00769 !
00770 USE MODI_IO_BUFF_n
00771 USE MODI_ERROR_READ_SURF_ASC
00772 !
00773 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00774 USE PARKIND1  ,ONLY : JPRB
00775 !
00776 IMPLICIT NONE
00777 !
00778 !*      0.1   Declarations of arguments
00779 !
00780  CHARACTER(LEN=*),  INTENT(IN)  :: HREC     ! name of the article to be read
00781 INTEGER,            INTENT(OUT) :: KYEAR    ! year
00782 INTEGER,            INTENT(OUT) :: KMONTH   ! month
00783 INTEGER,            INTENT(OUT) :: KDAY     ! day
00784 REAL,               INTENT(OUT) :: PTIME    ! year
00785 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
00786  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
00787 
00788 !*      0.2   Declarations of local variables
00789 !
00790  CHARACTER(LEN=50) :: YCOMMENT
00791  CHARACTER(LEN=6)  :: YMASK
00792 LOGICAL           :: GFOUND
00793 LOGICAL           :: GKNOWN
00794 INTEGER, DIMENSION(3) :: ITDATE
00795 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00796 !
00797 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFT0_ASC',0,ZHOOK_HANDLE)
00798 KRESP=0
00799 !
00800 YMASK=CMASK
00801  CALL IO_BUFF_n(HREC,'R',GKNOWN)
00802 IF (GKNOWN) YMASK='FULL  '
00803 !
00804  CALL POSNAM(NUNIT,YMASK//' '//TRIM(HREC)//'%TDATE',GFOUND,NLUOUT)
00805 !IF (.NOT. GFOUND) CALL POSNAM(NUNIT,'FULL  '//' '//HREC,GFOUND,NLUOUT) ! used for auxilliary files
00806 !
00807 READ(NUNIT,FMT=*,END=100)
00808 READ(NUNIT,FMT='(A50)') YCOMMENT
00809 READ(NUNIT,FMT=*,ERR=100) ITDATE(:)
00810 !
00811 KYEAR  = ITDATE(1)
00812 KMONTH = ITDATE(2)
00813 KDAY   = ITDATE(3)
00814 !
00815  CALL POSNAM(NUNIT,YMASK//' '//TRIM(HREC)//'%TIME',GFOUND,NLUOUT)
00816 IF (.NOT. GFOUND) CALL POSNAM(NUNIT,'FULL  '//' '//HREC,GFOUND,NLUOUT) ! used for auxilliary files
00817 !
00818 READ(NUNIT,FMT=*,END=100)
00819 READ(NUNIT,FMT='(A50)') YCOMMENT
00820 READ(NUNIT,FMT=*,ERR=100) PTIME
00821 !
00822 HCOMMENT = YCOMMENT
00823 !
00824 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFT0_ASC',1,ZHOOK_HANDLE)
00825 RETURN
00826 !
00827 100 CONTINUE
00828  CALL ERROR_READ_SURF_ASC(HREC,KRESP)
00829 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFT0_ASC',1,ZHOOK_HANDLE)
00830 !
00831 END SUBROUTINE READ_SURFT0_ASC
00832 !
00833 !     #############################################################
00834       SUBROUTINE READ_SURFT1_ASC(HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
00835 !     #############################################################
00836 !
00837 !!****  *READT2* - routine to read a date
00838 !
00839 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, NLUOUT, CMASK
00840 !
00841 USE MODE_POS_SURF
00842 !
00843 USE MODI_IO_BUFF_n
00844 USE MODI_ERROR_READ_SURF_ASC
00845 !
00846 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00847 USE PARKIND1  ,ONLY : JPRB
00848 !
00849 IMPLICIT NONE
00850 !
00851 !*      0.1   Declarations of arguments
00852 !
00853  CHARACTER(LEN=*),     INTENT(IN)  :: HREC     ! name of the article to be read
00854 INTEGER, DIMENSION(:), INTENT(OUT) :: KYEAR    ! year
00855 INTEGER, DIMENSION(:), INTENT(OUT) :: KMONTH   ! month
00856 INTEGER, DIMENSION(:), INTENT(OUT) :: KDAY     ! day
00857 REAL,    DIMENSION(:), INTENT(OUT) :: PTIME    ! year
00858 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
00859  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
00860 !
00861 !*      0.2   Declarations of local variables
00862 !
00863  CHARACTER(LEN=50) :: YCOMMENT
00864  CHARACTER(LEN=6)  :: YMASK
00865 LOGICAL           :: GFOUND
00866 LOGICAL           :: GKNOWN
00867 INTEGER, DIMENSION(3,SIZE(KYEAR)) :: ITDATE
00868 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00869 !
00870 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFT1_ASC',0,ZHOOK_HANDLE)
00871 KRESP=0
00872 !
00873 YMASK=CMASK
00874  CALL IO_BUFF_n(HREC,'R',GKNOWN)
00875 IF (GKNOWN) YMASK='FULL  '
00876 !
00877  CALL POSNAM(NUNIT,YMASK//' '//TRIM(HREC)//'%TDATE',GFOUND,NLUOUT)
00878 !
00879 READ(NUNIT,FMT=*,END=100)
00880 READ(NUNIT,FMT='(A50)') YCOMMENT
00881 READ(NUNIT,FMT=*,ERR=100) ITDATE(:,:)
00882 !
00883 KYEAR  (:) = ITDATE(1,:)
00884 KMONTH (:) = ITDATE(2,:)
00885 KDAY   (:) = ITDATE(3,:)
00886 !
00887  CALL POSNAM(NUNIT,CMASK//' '//TRIM(HREC)//'%TIME',GFOUND,NLUOUT)
00888 !
00889 READ(NUNIT,FMT=*,END=100)
00890 READ(NUNIT,FMT='(A50)') YCOMMENT
00891 READ(NUNIT,FMT=*,ERR=100) PTIME
00892 !
00893 HCOMMENT = YCOMMENT
00894 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFT1_ASC',1,ZHOOK_HANDLE)
00895 RETURN
00896 !
00897 100 CONTINUE
00898  CALL ERROR_READ_SURF_ASC(HREC,KRESP)
00899 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFT1_ASC',1,ZHOOK_HANDLE)
00900 !
00901 END SUBROUTINE READ_SURFT1_ASC
00902 !
00903 !     #############################################################
00904       SUBROUTINE READ_SURFT2_ASC(HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
00905 !     #############################################################
00906 !
00907 !!****  *READT2* - routine to read a date
00908 !
00909 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, NLUOUT, CMASK
00910 !
00911 USE MODE_POS_SURF
00912 !
00913 USE MODI_IO_BUFF_n
00914 USE MODI_ERROR_READ_SURF_ASC
00915 !
00916 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00917 USE PARKIND1  ,ONLY : JPRB
00918 !
00919 IMPLICIT NONE
00920 !
00921 !*      0.1   Declarations of arguments
00922 !
00923  CHARACTER(LEN=*),  INTENT(IN)  :: HREC     ! name of the article to be read
00924 INTEGER, DIMENSION(:,:), INTENT(OUT) :: KYEAR    ! year
00925 INTEGER, DIMENSION(:,:), INTENT(OUT) :: KMONTH   ! month
00926 INTEGER, DIMENSION(:,:), INTENT(OUT) :: KDAY     ! day
00927 REAL,    DIMENSION(:,:), INTENT(OUT) :: PTIME    ! year
00928 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
00929  CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment
00930 
00931 !*      0.2   Declarations of local variables
00932 !
00933  CHARACTER(LEN=50) :: YCOMMENT
00934  CHARACTER(LEN=6)  :: YMASK
00935 LOGICAL           :: GFOUND
00936 LOGICAL           :: GKNOWN
00937 INTEGER, DIMENSION(3,SIZE(KYEAR,1),SIZE(KYEAR,2)) :: ITDATE
00938 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00939 !
00940 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFT2_ASC',0,ZHOOK_HANDLE)
00941 !
00942 KRESP=0
00943 !
00944 YMASK=CMASK
00945  CALL IO_BUFF_n(HREC,'R',GKNOWN)
00946 IF (GKNOWN) YMASK='FULL  '
00947 !
00948  CALL POSNAM(NUNIT,YMASK//' '//TRIM(HREC)//'%TDATE',GFOUND,NLUOUT)
00949 !
00950 READ(NUNIT,FMT=*,END=100)
00951 READ(NUNIT,FMT='(A50)') YCOMMENT
00952 READ(NUNIT,FMT=*,ERR=100) ITDATE(:,:,:)
00953 !
00954 KYEAR  (:,:) = ITDATE(1,:,:)
00955 KMONTH (:,:) = ITDATE(2,:,:)
00956 KDAY   (:,:) = ITDATE(3,:,:)
00957 !
00958  CALL POSNAM(NUNIT,YMASK//' '//TRIM(HREC)//'%TIME',GFOUND,NLUOUT)
00959 
00960 READ(NUNIT,FMT=*,END=100)
00961 READ(NUNIT,FMT='(A50)') YCOMMENT
00962 READ(NUNIT,FMT=*,ERR=100) PTIME
00963 !
00964 HCOMMENT = YCOMMENT
00965 !
00966 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFT2_ASC',1,ZHOOK_HANDLE)
00967 RETURN
00968 !
00969 100 CONTINUE
00970  CALL ERROR_READ_SURF_ASC(HREC,KRESP)
00971 IF (LHOOK) CALL DR_HOOK('MODE_READ_SURF_ASC:READ_SURFT2_ASC',1,ZHOOK_HANDLE)
00972 !
00973 END SUBROUTINE READ_SURFT2_ASC
00974 !
00975 END MODULE MODE_READ_SURF_ASC