SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/mode_write_surf_asc.F90
Go to the documentation of this file.
00001 MODULE MODE_WRITE_SURF_ASC
00002 !
00003 INTERFACE WRITE_SURF0_ASC
00004         MODULE PROCEDURE WRITE_SURFX0_ASC
00005         MODULE PROCEDURE WRITE_SURFN0_ASC
00006         MODULE PROCEDURE WRITE_SURFL0_ASC
00007         MODULE PROCEDURE WRITE_SURFC0_ASC
00008 END INTERFACE
00009 INTERFACE WRITE_SURFN_ASC
00010         MODULE PROCEDURE WRITE_SURFX1_ASC
00011         MODULE PROCEDURE WRITE_SURFN1_ASC
00012         MODULE PROCEDURE WRITE_SURFL1_ASC
00013         MODULE PROCEDURE WRITE_SURFX2_ASC
00014 END INTERFACE
00015 INTERFACE WRITE_SURFT_ASC
00016         MODULE PROCEDURE WRITE_SURFT0_ASC
00017         MODULE PROCEDURE WRITE_SURFT1_ASC
00018         MODULE PROCEDURE WRITE_SURFT2_ASC
00019 END INTERFACE
00020 !
00021 CONTAINS
00022 !
00023 !     #############################################################
00024       SUBROUTINE WRITE_SURFX0_ASC(HREC,PFIELD,KRESP,HCOMMENT)
00025 !     #############################################################
00026 !
00027 !!****  * - routine to write a real scalar
00028 !
00029 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, CMASK
00030 !
00031 USE MODI_IO_BUFF_n
00032 USE MODI_ERROR_WRITE_SURF_ASC
00033 !
00034 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00035 USE PARKIND1  ,ONLY : JPRB
00036 !
00037 IMPLICIT NONE
00038 !
00039 !*      0.1   Declarations of arguments
00040 !
00041  CHARACTER(LEN=12),  INTENT(IN) :: HREC     ! name of the article to be read
00042 REAL,               INTENT(IN) :: PFIELD   ! the real scalar to be read
00043 INTEGER,            INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears
00044  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
00045 !
00046 !*      0.2   Declarations of local variables
00047 !
00048 LOGICAL         :: GKNOWN
00049 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00050 !
00051 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFX0_ASC',0,ZHOOK_HANDLE)
00052 !
00053 KRESP=0
00054 !
00055  CALL IO_BUFF_n(HREC,'W',GKNOWN)
00056 IF (GKNOWN .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFX0_ASC',1,ZHOOK_HANDLE)
00057 IF (GKNOWN) RETURN
00058 !
00059 WRITE(NUNIT,FMT=*,ERR=100) '&'//CMASK//' '//HREC
00060 WRITE(NUNIT,FMT='(A50)',ERR=100) HCOMMENT(1:50)
00061 WRITE(NUNIT,FMT=*,ERR=100) PFIELD
00062 !
00063 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFX0_ASC',1,ZHOOK_HANDLE)
00064 RETURN
00065 !
00066 100 CONTINUE
00067  CALL ERROR_WRITE_SURF_ASC(HREC,KRESP)
00068 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFX0_ASC',1,ZHOOK_HANDLE)
00069 !
00070 END SUBROUTINE WRITE_SURFX0_ASC
00071 !
00072 !     #############################################################
00073       SUBROUTINE WRITE_SURFN0_ASC(HREC,KFIELD,KRESP,HCOMMENT)
00074 !     #############################################################
00075 !
00076 !!****  * - routine to write an integer
00077 !
00078 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, NMASK, CMASK
00079 !
00080 USE MODI_IO_BUFF_n
00081 USE MODI_ERROR_WRITE_SURF_ASC
00082 !
00083 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00084 USE PARKIND1  ,ONLY : JPRB
00085 !
00086 IMPLICIT NONE
00087 !
00088 !*      0.1   Declarations of arguments
00089 !
00090  CHARACTER(LEN=12),  INTENT(IN) :: HREC     ! name of the article to be read
00091 INTEGER,            INTENT(IN) :: KFIELD   ! the integer to be read
00092 INTEGER,            INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears
00093  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
00094 !
00095 !*      0.2   Declarations of local variables
00096 !
00097 LOGICAL          :: GKNOWN
00098 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00099 !
00100 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFN0_ASC',0,ZHOOK_HANDLE)
00101 !
00102 KRESP=0
00103 !
00104  CALL IO_BUFF_n(HREC,'W',GKNOWN)
00105 IF (GKNOWN .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFN0_ASC',1,ZHOOK_HANDLE)
00106 IF (GKNOWN) RETURN
00107 !
00108 WRITE(NUNIT,FMT=*,ERR=100) '&'//CMASK//' '//HREC
00109 WRITE(NUNIT,FMT='(A50)',ERR=100) HCOMMENT(1:50)
00110 WRITE(NUNIT,FMT=*,ERR=100) KFIELD
00111 !
00112 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFN0_ASC',1,ZHOOK_HANDLE)
00113 RETURN
00114 !
00115 100 CONTINUE
00116  CALL ERROR_WRITE_SURF_ASC(HREC,KRESP)
00117 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFN0_ASC',1,ZHOOK_HANDLE)
00118 !
00119 END SUBROUTINE WRITE_SURFN0_ASC
00120 !
00121 !     #############################################################
00122       SUBROUTINE WRITE_SURFL0_ASC(HREC,OFIELD,KRESP,HCOMMENT)
00123 !     #############################################################
00124 !
00125 !!****  * - routine to write a logical
00126 !
00127 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, CMASK
00128 !
00129 USE MODI_IO_BUFF_n
00130 USE MODI_ERROR_WRITE_SURF_ASC
00131 !
00132 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00133 USE PARKIND1  ,ONLY : JPRB
00134 !
00135 IMPLICIT NONE
00136 !
00137 !*      0.1   Declarations of arguments
00138 !
00139  CHARACTER(LEN=12),  INTENT(IN) :: HREC     ! name of the article to be read
00140 LOGICAL,            INTENT(IN) :: OFIELD   ! array containing the data field
00141 INTEGER,            INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears
00142  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
00143 !
00144 !*      0.2   Declarations of local variables
00145 !
00146 LOGICAL          :: GKNOWN
00147 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00148 !
00149 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFL0_ASC',0,ZHOOK_HANDLE)
00150 !
00151 KRESP=0
00152 !
00153  CALL IO_BUFF_n(HREC,'W',GKNOWN)
00154 IF (GKNOWN .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFL0_ASC',1,ZHOOK_HANDLE)
00155 IF (GKNOWN) RETURN
00156 !
00157 WRITE(NUNIT,FMT=*,ERR=100) '&'//CMASK//' '//HREC
00158 WRITE(NUNIT,FMT='(A50)',ERR=100) HCOMMENT(1:50)
00159 WRITE(NUNIT,FMT=*,ERR=100) OFIELD
00160 !
00161 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFL0_ASC',1,ZHOOK_HANDLE)
00162 RETURN
00163 !
00164 100 CONTINUE
00165  CALL ERROR_WRITE_SURF_ASC(HREC,KRESP)
00166 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFL0_ASC',1,ZHOOK_HANDLE)
00167 !
00168 END SUBROUTINE WRITE_SURFL0_ASC
00169 !
00170 !     #############################################################
00171       SUBROUTINE WRITE_SURFC0_ASC(HREC,HFIELD,KRESP,HCOMMENT)
00172 !     #############################################################
00173 !
00174 !!****  * - routine to write a character
00175 !
00176 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, CMASK
00177 !
00178 USE MODI_IO_BUFF_n
00179 USE MODI_ERROR_WRITE_SURF_ASC
00180 !
00181 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00182 USE PARKIND1  ,ONLY : JPRB
00183 !
00184 IMPLICIT NONE
00185 !
00186 !*      0.1   Declarations of arguments
00187 !
00188  CHARACTER(LEN=12),  INTENT(IN)  :: HREC      ! name of the article to be read
00189  CHARACTER(LEN=40),  INTENT(IN)  :: HFIELD    ! the integer to be read
00190 INTEGER,            INTENT(OUT) :: KRESP     ! KRESP  : return-code if a problem appears
00191  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT  ! comment string
00192 !
00193 !*      0.2   Declarations of local variables
00194 !
00195 LOGICAL          :: GKNOWN
00196 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00197 !
00198 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFC0_ASC',0,ZHOOK_HANDLE)
00199 !
00200 KRESP=0
00201 !
00202  CALL IO_BUFF_n(HREC,'W',GKNOWN)
00203 IF (GKNOWN .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFC0_ASC',1,ZHOOK_HANDLE)
00204 IF (GKNOWN) RETURN
00205 !
00206 WRITE(NUNIT,FMT=*,ERR=100) '&'//CMASK//' '//HREC
00207 WRITE(NUNIT,FMT='(A50)',ERR=100) HCOMMENT(1:50)
00208 WRITE(NUNIT,FMT='(A40)',ERR=100) HFIELD
00209 !
00210 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFC0_ASC',1,ZHOOK_HANDLE)
00211 RETURN
00212 !
00213 100 CONTINUE
00214  CALL ERROR_WRITE_SURF_ASC(HREC,KRESP)
00215 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFC0_ASC',1,ZHOOK_HANDLE)
00216 !
00217 END SUBROUTINE WRITE_SURFC0_ASC
00218 !
00219 !     #############################################################
00220       SUBROUTINE WRITE_SURFX1_ASC(HREC,PFIELD,KRESP,HCOMMENT,HDIR)
00221 !     #############################################################
00222 !
00223 !!****  * - routine to fill a write 1D array for the externalised surface 
00224 !
00225 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE, WLOG_MPI
00226 !
00227 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, NMASK, NFULL, CMASK
00228 !
00229 USE MODI_IO_BUFF_n
00230 USE MODI_ERROR_WRITE_SURF_ASC
00231 USE MODI_GATHER_AND_WRITE_MPI
00232 !
00233 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00234 USE PARKIND1  ,ONLY : JPRB
00235 !
00236 IMPLICIT NONE
00237 !
00238 #ifndef NOMPI
00239 INCLUDE "mpif.h"
00240 #endif
00241 !
00242 !*      0.1   Declarations of arguments
00243 !
00244  CHARACTER(LEN=12),   INTENT(IN) :: HREC     ! name of the article to be read
00245 REAL, DIMENSION(:),  INTENT(IN) :: PFIELD   ! array containing the data field
00246 INTEGER,             INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears
00247  CHARACTER(LEN=100),  INTENT(IN) :: HCOMMENT ! comment string
00248  CHARACTER(LEN=1),    INTENT(IN) :: HDIR     ! type of field :
00249                                             ! 'H' : field with
00250                                             !       horizontal spatial dim.
00251                                             ! '-' : no horizontal dim.
00252 !*      0.2   Declarations of local variables
00253 !
00254 INTEGER :: ISIZE, J
00255 LOGICAL :: GKNOWN
00256 DOUBLE PRECISION   :: XTIME0
00257 REAL, DIMENSION(MAX(NFULL,SIZE(PFIELD))) :: ZWORK   ! work array read in the file
00258 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00259 !
00260 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFX1_ASC',0,ZHOOK_HANDLE)
00261 !
00262 KRESP=0
00263 !
00264 !$OMP SINGLE
00265 !
00266  CALL IO_BUFF_n(HREC,'W',GKNOWN)
00267 !
00268 !$OMP END SINGLE COPYPRIVATE(GKNOWN)
00269 !
00270 IF (GKNOWN .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFX1_ASC',1,ZHOOK_HANDLE)
00271 IF (GKNOWN) RETURN
00272 !
00273 IF (HDIR=='-') THEN
00274   ISIZE = SIZE(PFIELD)
00275   ZWORK(1:ISIZE) = PFIELD
00276 ELSE
00277   ISIZE = SIZE(ZWORK)
00278   CALL GATHER_AND_WRITE_MPI(PFIELD,ZWORK,NMASK)
00279 ENDIF
00280 !
00281 IF (NRANK==NPIO) THEN
00282   !
00283 #ifndef NOMPI  
00284   XTIME0 = MPI_WTIME()
00285 #endif  
00286   !
00287 !$OMP SINGLE
00288   !  
00289   WRITE(NUNIT,FMT=*,IOSTAT=KRESP) '&'//CMASK//' '//HREC
00290   WRITE(NUNIT,FMT='(A50)',IOSTAT=KRESP) HCOMMENT(1:50)
00291   WRITE(NUNIT,FMT='(50D20.8)',IOSTAT=KRESP) ZWORK(1:ISIZE)
00292   !
00293 !$OMP END SINGLE COPYPRIVATE(KRESP)
00294   !  
00295   IF (KRESP/=0) CALL ERROR_WRITE_SURF_ASC(HREC,KRESP)
00296   !
00297 #ifndef NOMPI
00298   XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
00299 #endif
00300   !
00301 ENDIF
00302 !
00303 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFX1_ASC',1,ZHOOK_HANDLE)
00304 !
00305 END SUBROUTINE WRITE_SURFX1_ASC
00306 !
00307 !     #############################################################
00308       SUBROUTINE WRITE_SURFX2_ASC(HREC,PFIELD,KRESP,HCOMMENT,HDIR)
00309 !     #############################################################
00310 !
00311 !!****  * - routine to fill a write 2D array for the externalised surface 
00312 !
00313 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE, WLOG_MPI
00314 !
00315 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, NMASK, NFULL, CMASK
00316 !
00317 USE MODI_IO_BUFF_n
00318 USE MODI_ERROR_WRITE_SURF_ASC
00319 USE MODI_GATHER_AND_WRITE_MPI
00320 !
00321 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00322 USE PARKIND1  ,ONLY : JPRB
00323 !
00324 IMPLICIT NONE
00325 !
00326 #ifndef NOMPI
00327 INCLUDE "mpif.h"
00328 #endif
00329 !
00330 !*      0.1   Declarations of arguments
00331 !
00332  CHARACTER(LEN=12),        INTENT(IN) :: HREC     ! name of the article to be read
00333 REAL, DIMENSION(:,:),     INTENT(IN) :: PFIELD   ! array containing the data field
00334 INTEGER,                  INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears
00335  CHARACTER(LEN=100),       INTENT(IN) :: HCOMMENT ! comment string
00336  CHARACTER(LEN=1),         INTENT(IN) :: HDIR     ! type of field :
00337                                                  ! 'H' : field with
00338                                                  !       horizontal spatial dim.
00339                                                  ! '-' : no horizontal dim.
00340 !*      0.2   Declarations of local variables
00341 ! 
00342 integer :: me
00343 INTEGER :: ISIZE
00344 LOGICAL :: GKNOWN=.FALSE.
00345 DOUBLE PRECISION   :: XTIME0
00346 REAL, DIMENSION(MAX(NFULL,SIZE(PFIELD,1)),SIZE(PFIELD,2)) :: ZWORK   ! work array read in the file
00347 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00348 !
00349 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFX2_ASC',0,ZHOOK_HANDLE)
00350 !
00351 KRESP=0
00352 !
00353 !$OMP SINGLE
00354 !
00355  CALL IO_BUFF_n(HREC,'W',GKNOWN)
00356 !
00357 !$OMP END SINGLE COPYPRIVATE(GKNOWN)
00358 !
00359 IF (GKNOWN .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFX2_ASC',1,ZHOOK_HANDLE)
00360 IF (GKNOWN) RETURN
00361 !
00362 IF (HDIR=='-') THEN
00363   ISIZE = SIZE(PFIELD,1)
00364   ZWORK(1:ISIZE,:) = PFIELD(:,:)
00365 ELSE
00366   ISIZE = SIZE(ZWORK,1)
00367   CALL GATHER_AND_WRITE_MPI(PFIELD,ZWORK,NMASK)
00368 ENDIF
00369 !
00370 IF (NRANK==NPIO) THEN
00371   !
00372 #ifndef NOMPI  
00373   XTIME0 = MPI_WTIME()
00374 #endif  
00375   !
00376 !$OMP SINGLE
00377   !    
00378   WRITE(NUNIT,FMT=*,IOSTAT=KRESP) '&'//CMASK//' '//HREC
00379   WRITE(NUNIT,FMT='(A50)',IOSTAT=KRESP) HCOMMENT(1:50)
00380   WRITE(NUNIT,FMT='(50D20.8)',IOSTAT=KRESP) ZWORK(1:ISIZE,:)
00381   !
00382 !$OMP END SINGLE COPYPRIVATE(KRESP)
00383   !  
00384   IF (KRESP/=0) CALL ERROR_WRITE_SURF_ASC(HREC,KRESP)
00385   !
00386 #ifndef NOMPI
00387   XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
00388 #endif  
00389   !  
00390 ENDIF
00391 !
00392 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFX2_ASC',1,ZHOOK_HANDLE)
00393 !
00394 END SUBROUTINE WRITE_SURFX2_ASC
00395 !
00396 !     #############################################################
00397       SUBROUTINE WRITE_SURFN1_ASC(HREC,KFIELD,KRESP,HCOMMENT,HDIR)
00398 !     #############################################################
00399 !
00400 !!****  * - routine to write an integer array
00401 !
00402 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE
00403 !
00404 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, NMASK, NFULL, CMASK
00405 !
00406 USE MODI_IO_BUFF_n
00407 USE MODI_ERROR_WRITE_SURF_ASC
00408 USE MODI_GATHER_AND_WRITE_MPI
00409 !
00410 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00411 USE PARKIND1  ,ONLY : JPRB
00412 !
00413 IMPLICIT NONE
00414 !
00415 #ifndef NOMPI
00416 INCLUDE "mpif.h"
00417 #endif
00418 !
00419 !*      0.1   Declarations of arguments
00420 !
00421  CHARACTER(LEN=12),      INTENT(IN) :: HREC     ! name of the article to be read
00422 INTEGER, DIMENSION(:),  INTENT(IN) :: KFIELD   ! the integer to be read
00423 INTEGER,                INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears
00424  CHARACTER(LEN=100),     INTENT(IN) :: HCOMMENT ! comment string
00425  CHARACTER(LEN=1),       INTENT(IN) :: HDIR     ! type of field :
00426                                                ! 'H' : field with
00427                                                !       horizontal spatial dim.
00428                                                ! '-' : no horizontal dim.
00429 !*      0.2   Declarations of local variables
00430 !
00431 INTEGER :: ISIZE
00432 LOGICAL :: GKNOWN
00433 INTEGER, DIMENSION(MAX(NFULL,SIZE(KFIELD))) :: IWORK  ! work array read in the file
00434 DOUBLE PRECISION   :: XTIME0
00435 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00436 !
00437 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFN1_ASC',0,ZHOOK_HANDLE)
00438 !
00439 KRESP = 0
00440 !
00441 !$OMP SINGLE
00442 !
00443  CALL IO_BUFF_n(HREC,'W',GKNOWN)
00444 !
00445 !$OMP END SINGLE COPYPRIVATE(GKNOWN)
00446 !
00447 IF (GKNOWN .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFN1_ASC',1,ZHOOK_HANDLE)
00448 IF (GKNOWN) RETURN
00449 !
00450 IF (HDIR=='-' .OR. HREC=='-') THEN
00451   ISIZE = SIZE(KFIELD)
00452   IWORK(1:ISIZE) = KFIELD
00453 ELSE
00454   ISIZE = SIZE(IWORK)
00455   CALL GATHER_AND_WRITE_MPI(KFIELD,IWORK,NMASK)
00456 ENDIF
00457 !
00458 IF (NRANK==NPIO) THEN
00459   !
00460 #ifndef NOMPI  
00461   XTIME0 = MPI_WTIME()
00462 #endif
00463   !  
00464 !$OMP SINGLE
00465   !   
00466   WRITE(NUNIT,FMT=*,IOSTAT=KRESP) '&'//CMASK//' '//HREC
00467   WRITE(NUNIT,FMT='(A50)',IOSTAT=KRESP) HCOMMENT(1:50)
00468   WRITE(NUNIT,FMT='(100I8)',IOSTAT=KRESP) IWORK(1:ISIZE)
00469   !
00470 !$OMP END SINGLE COPYPRIVATE(KRESP)
00471   !  
00472   IF (KRESP/=0) CALL ERROR_WRITE_SURF_ASC(HREC,KRESP)
00473   !
00474 #ifndef NOMPI  
00475   XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
00476 #endif
00477   !  
00478 ENDIF
00479 !
00480 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFN1_ASC',1,ZHOOK_HANDLE)
00481 !
00482 END SUBROUTINE WRITE_SURFN1_ASC
00483 !
00484 !     #############################################################
00485       SUBROUTINE WRITE_SURFL1_ASC(HREC,OFIELD,KRESP,HCOMMENT,HDIR)
00486 !     #############################################################
00487 !
00488 !!****  * - routine to write a logical array
00489 !
00490 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE
00491 !
00492 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, CMASK
00493 !
00494 USE MODI_IO_BUFF_n
00495 USE MODI_ERROR_WRITE_SURF_ASC
00496 !
00497 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00498 USE PARKIND1  ,ONLY : JPRB
00499 !
00500 IMPLICIT NONE
00501 !
00502 #ifndef NOMPI
00503 INCLUDE "mpif.h"
00504 #endif
00505 !
00506 !*      0.1   Declarations of arguments
00507 !
00508  CHARACTER(LEN=12),      INTENT(IN) :: HREC     ! name of the article to be read
00509 LOGICAL, DIMENSION(:),  INTENT(IN) :: OFIELD   ! array containing the data field
00510 INTEGER,                INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears
00511  CHARACTER(LEN=100),     INTENT(IN) :: HCOMMENT ! comment string
00512  CHARACTER(LEN=1),       INTENT(IN) :: HDIR     ! type of field :
00513                                                ! 'H' : field with
00514                                                !       horizontal spatial dim.
00515                                                ! '-' : no horizontal dim.
00516 !*      0.2   Declarations of local variables
00517 !
00518 LOGICAL          :: GKNOWN
00519 DOUBLE PRECISION   :: XTIME0
00520 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00521 !
00522 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFL1_ASC',0,ZHOOK_HANDLE)
00523 !
00524 IF (NRANK==NPIO) THEN
00525   !
00526 #ifndef NOMPI  
00527   XTIME0 = MPI_WTIME()
00528 #endif  
00529   !
00530   KRESP=0
00531   !
00532 !$OMP SINGLE
00533   !
00534   CALL IO_BUFF_n(HREC,'W',GKNOWN)
00535   !
00536 !$OMP END SINGLE COPYPRIVATE(GKNOWN)
00537   !
00538   IF (GKNOWN .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFL1_ASC',1,ZHOOK_HANDLE)
00539   IF (GKNOWN) RETURN
00540   !
00541 !$OMP SINGLE
00542   !  
00543   WRITE(NUNIT,FMT=*,IOSTAT=KRESP) '&'//CMASK//' '//HREC
00544   WRITE(NUNIT,FMT='(A50)',IOSTAT=KRESP) HCOMMENT(1:50)
00545   WRITE(NUNIT,FMT=*,IOSTAT=KRESP) OFIELD
00546   !
00547 !$OMP END SINGLE COPYPRIVATE(KRESP)  
00548   !
00549   IF (KRESP/=0) CALL ERROR_WRITE_SURF_ASC(HREC,KRESP)
00550   !  
00551 #ifndef NOMPI  
00552   XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
00553 #endif  
00554   !
00555 ENDIF
00556 !
00557 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFL1_ASC',1,ZHOOK_HANDLE)
00558 !
00559 END SUBROUTINE WRITE_SURFL1_ASC
00560 !
00561 !     #############################################################
00562       SUBROUTINE WRITE_SURFT0_ASC(HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
00563 !     #############################################################
00564 !
00565 !!****  * - routine to write a date
00566 !
00567 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, CMASK
00568 !
00569 USE MODI_IO_BUFF_n
00570 USE MODI_ERROR_WRITE_SURF_ASC
00571 !
00572 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00573 USE PARKIND1  ,ONLY : JPRB
00574 !
00575 IMPLICIT NONE
00576 !
00577 !*      0.1   Declarations of arguments
00578 !
00579  CHARACTER(LEN=12),  INTENT(IN)  :: HREC     ! name of the article to be read
00580 INTEGER,            INTENT(IN)  :: KYEAR    ! year
00581 INTEGER,            INTENT(IN)  :: KMONTH   ! month
00582 INTEGER,            INTENT(IN)  :: KDAY     ! day
00583 REAL,               INTENT(IN)  :: PTIME    ! time
00584 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
00585  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT ! comment string
00586 
00587 !*      0.2   Declarations of local variables
00588 !
00589 LOGICAL               :: GKNOWN
00590 INTEGER, DIMENSION(3) :: ITDATE
00591 REAL(KIND=JPRB)       :: ZHOOK_HANDLE
00592 !
00593 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFT0_ASC',0,ZHOOK_HANDLE)
00594 !
00595 KRESP=0
00596 !
00597  CALL IO_BUFF_n(HREC,'W',GKNOWN)
00598 IF (GKNOWN .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFT0_ASC',1,ZHOOK_HANDLE)
00599 IF (GKNOWN) RETURN
00600 !
00601 ITDATE(1) = KYEAR
00602 ITDATE(2) = KMONTH
00603 ITDATE(3) = KDAY
00604 !
00605 WRITE(NUNIT,FMT=*,ERR=100) '&'//CMASK//' '//TRIM(HREC)//'%TDATE'
00606 WRITE(NUNIT,FMT='(A50)',ERR=100) HCOMMENT(1:50)
00607 WRITE(NUNIT,FMT=*,ERR=100) ITDATE(:)
00608 !
00609 WRITE(NUNIT,FMT=*,ERR=100) '&'//CMASK//' '//TRIM(HREC)//'%TIME'
00610 WRITE(NUNIT,FMT='(A50)',ERR=100) HCOMMENT(1:50)
00611 WRITE(NUNIT,FMT=*,ERR=100) PTIME
00612 !
00613 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFT0_ASC',1,ZHOOK_HANDLE)
00614 RETURN
00615 !
00616 100 CONTINUE
00617  CALL ERROR_WRITE_SURF_ASC(HREC,KRESP)
00618 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFT0_ASC',1,ZHOOK_HANDLE)
00619 !
00620 END SUBROUTINE WRITE_SURFT0_ASC
00621 !
00622 !     #############################################################
00623       SUBROUTINE WRITE_SURFT1_ASC(HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
00624 !     #############################################################
00625 !
00626 !!****  * - routine to write a date
00627 !
00628 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE
00629 !
00630 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, CMASK
00631 !
00632 USE MODI_IO_BUFF_n
00633 USE MODI_ERROR_WRITE_SURF_ASC
00634 !
00635 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00636 USE PARKIND1  ,ONLY : JPRB
00637 !
00638 IMPLICIT NONE
00639 !
00640 #ifndef NOMPI
00641 INCLUDE "mpif.h"
00642 #endif
00643 !
00644 !*      0.1   Declarations of arguments
00645 !
00646  CHARACTER(LEN=12),     INTENT(IN) :: HREC     ! name of the article to be read
00647 INTEGER, DIMENSION(:), INTENT(IN) :: KYEAR    ! year
00648 INTEGER, DIMENSION(:), INTENT(IN) :: KMONTH   ! month
00649 INTEGER, DIMENSION(:), INTENT(IN) :: KDAY     ! day
00650 REAL,    DIMENSION(:), INTENT(IN) :: PTIME    ! time
00651 INTEGER,               INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears
00652  CHARACTER(LEN=100),    INTENT(IN) :: HCOMMENT ! comment string
00653 
00654 !*      0.2   Declarations of local variables
00655 !
00656 LOGICAL                           :: GKNOWN
00657 INTEGER, DIMENSION(3,SIZE(KYEAR)) :: ITDATE
00658 DOUBLE PRECISION   :: XTIME0
00659 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00660 !
00661 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFT1_ASC',0,ZHOOK_HANDLE)
00662 !
00663 IF (NRANK==NPIO) THEN
00664   !
00665 #ifndef NOMPI  
00666   XTIME0 = MPI_WTIME()
00667 #endif  
00668   !  
00669   KRESP=0
00670   !
00671 !$OMP SINGLE
00672   !    
00673   CALL IO_BUFF_n(HREC,'W',GKNOWN)
00674   !
00675 !$OMP END SINGLE COPYPRIVATE(GKNOWN)
00676   !
00677   IF (GKNOWN .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFT1_ASC',1,ZHOOK_HANDLE)
00678   IF (GKNOWN) RETURN
00679   !
00680 !$OMP SINGLE
00681   !  
00682   ITDATE(1,:) = KYEAR  (:)
00683   ITDATE(2,:) = KMONTH (:)
00684   ITDATE(3,:) = KDAY   (:)
00685   !
00686   WRITE(NUNIT,FMT=*,IOSTAT=KRESP) '&'//CMASK//' '//TRIM(HREC)//'%TDATE'
00687   WRITE(NUNIT,FMT='(A50)',IOSTAT=KRESP) HCOMMENT(1:50)
00688   WRITE(NUNIT,FMT=*,IOSTAT=KRESP) ITDATE(:,:)
00689   !
00690   WRITE(NUNIT,FMT=*,IOSTAT=KRESP) '&'//CMASK//' '//TRIM(HREC)//'%TIME'
00691   WRITE(NUNIT,FMT='(A50)',IOSTAT=KRESP) HCOMMENT(1:50)
00692   WRITE(NUNIT,FMT=*,IOSTAT=KRESP) PTIME
00693   !
00694 !$OMP END SINGLE COPYPRIVATE(KRESP)
00695   !   
00696   IF (KRESP/=0) CALL ERROR_WRITE_SURF_ASC(HREC,KRESP)
00697   !
00698 #ifndef NOMPI  
00699   XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
00700 #endif  
00701   !
00702 ENDIF
00703 !
00704 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFT1_ASC',1,ZHOOK_HANDLE)
00705 !
00706 END SUBROUTINE WRITE_SURFT1_ASC
00707 !
00708 !     #############################################################
00709       SUBROUTINE WRITE_SURFT2_ASC(HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
00710 !     #############################################################
00711 !
00712 !!****  * - routine to write a date
00713 !
00714 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE
00715 !
00716 USE MODD_IO_SURF_ASC,        ONLY : NUNIT, CMASK
00717 !
00718 USE MODI_IO_BUFF_n
00719 USE MODI_ERROR_WRITE_SURF_ASC
00720 !
00721 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00722 USE PARKIND1  ,ONLY : JPRB
00723 !
00724 IMPLICIT NONE
00725 !
00726 #ifndef NOMPI
00727 INCLUDE "mpif.h"
00728 #endif
00729 !
00730 !*      0.1   Declarations of arguments
00731 !
00732  CHARACTER(LEN=12),       INTENT(IN)  :: HREC     ! name of the article to be read
00733 INTEGER, DIMENSION(:,:), INTENT(IN)  :: KYEAR    ! year
00734 INTEGER, DIMENSION(:,:), INTENT(IN)  :: KMONTH   ! month
00735 INTEGER, DIMENSION(:,:), INTENT(IN)  :: KDAY     ! day
00736 REAL,    DIMENSION(:,:), INTENT(IN)  :: PTIME    ! time
00737 INTEGER,                 INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
00738  CHARACTER(LEN=100),      INTENT(IN)  :: HCOMMENT ! comment string
00739 
00740 !*      0.2   Declarations of local variables
00741 !
00742 LOGICAL          :: GKNOWN
00743 INTEGER, DIMENSION(3,SIZE(KYEAR,1),SIZE(KYEAR,2)) :: ITDATE
00744 DOUBLE PRECISION   :: XTIME0
00745 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00746 !
00747 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFT2_ASC',0,ZHOOK_HANDLE)
00748 !
00749 IF (NRANK==NPIO) THEN
00750   !
00751 #ifndef NOMPI  
00752   XTIME0 = MPI_WTIME()
00753 #endif  
00754   !  
00755   KRESP=0
00756   !
00757 !$OMP SINGLE
00758   !
00759   CALL IO_BUFF_n(HREC,'W',GKNOWN) 
00760   !
00761 !$OMP END SINGLE COPYPRIVATE(GKNOWN)
00762   !
00763   IF (GKNOWN .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFT2_ASC',1,ZHOOK_HANDLE)
00764   IF (GKNOWN) RETURN
00765   !
00766 !$OMP SINGLE
00767   !    
00768   ITDATE(1,:,:) = KYEAR  (:,:)
00769   ITDATE(2,:,:) = KMONTH (:,:)
00770   ITDATE(3,:,:) = KDAY   (:,:)
00771   !
00772   WRITE(NUNIT,FMT=*,IOSTAT=KRESP) '&'//CMASK//' '//TRIM(HREC)//'%TDATE'
00773   WRITE(NUNIT,FMT='(A50)',IOSTAT=KRESP) HCOMMENT(1:50)
00774   WRITE(NUNIT,FMT=*,IOSTAT=KRESP) ITDATE(:,:,:)
00775   !
00776   WRITE(NUNIT,FMT=*,IOSTAT=KRESP) '&'//CMASK//' '//TRIM(HREC)//'%TIME'
00777   WRITE(NUNIT,FMT='(A50)',IOSTAT=KRESP) HCOMMENT(1:50)
00778   WRITE(NUNIT,FMT=*,IOSTAT=KRESP) PTIME
00779   !
00780 !$OMP END SINGLE  
00781   !
00782   IF (KRESP/=0) CALL ERROR_WRITE_SURF_ASC(HREC,KRESP)
00783   !
00784 #ifndef NOMPI  
00785   XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
00786 #endif  
00787   !
00788 ENDIF
00789 !
00790 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_ASC:WRITE_SURFT2_ASC',1,ZHOOK_HANDLE)
00791 !
00792 END SUBROUTINE WRITE_SURFT2_ASC
00793 !
00794 END MODULE MODE_WRITE_SURF_ASC