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