SURFEX v7.3
General documentation of Surfex
|
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