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