SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE PREP_TRIP (HPROGRAM) 00003 ! ############################### 00004 ! 00005 !!**** *PREP_TRIP* 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! 00010 ! Prepare TRIP variables and parameters. 00011 ! 00012 !!** METHOD 00013 !! ------ 00014 ! 00015 ! Direct calculation 00016 ! 00017 !! EXTERNAL 00018 !! -------- 00019 ! 00020 ! None 00021 !! 00022 !! IMPLICIT ARGUMENTS 00023 !! ------------------ 00024 !! 00025 !! 00026 !! REFERENCE 00027 !! --------- 00028 !! 00029 !! AUTHOR 00030 !! ------ 00031 !! B. Decharme (Météo-France) 00032 !! 00033 !! MODIFICATIONS 00034 !! ------------- 00035 !! Original 27/05/08 00036 !------------------------------------------------------------------------------- 00037 ! 00038 !* 0. DECLARATIONS 00039 ! ------------ 00040 ! 00041 USE MODD_TRIP_PAR 00042 USE MODD_TRIP_GRID_n 00043 USE MODD_TRIP_n, ONLY : XSURF_STO, XGROUND_STO, XTAUG, XHC_BED, & 00044 XFLOOD_STO, XHFLOOD, XFFLOOD, XN, & 00045 XSLOPEBED, XWIDTH, XTAB_F, XTAB_H, & 00046 XTAB_VF, CGROUNDW, CVIT, LFLOODT, & 00047 LDIAG_CPL, LNCPRINT,LPRINT_TRIP, & 00048 XTSTEP_COUPLING, XTRIP_TSTEP,XLEN, & 00049 LTRIP_DIAG_MISC, XDATA_TAUG, & 00050 XN_FLOOD, XRATMED, XCVEL 00051 ! 00052 USE MODD_READ_NAMELIST, ONLY : LNAM_READ 00053 ! 00054 USE MODE_TRIP_INIT 00055 USE MODE_RW_TRIP 00056 ! 00057 USE MODI_INIT_TRIP_PAR 00058 USE MODI_GET_LUOUT 00059 USE MODI_GET_GRID_CONF_TRIP_n 00060 ! 00061 USE MODI_DEFAULT_TRIP 00062 USE MODI_READ_NAM_GRID_TRIP 00063 USE MODI_READ_TRIP_CONF_n 00064 USE MODI_INIT_PARAM_TRIP_n 00065 ! 00066 ! 00067 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00068 USE PARKIND1 ,ONLY : JPRB 00069 ! 00070 USE MODI_INIT_RESTART_TRIP_n 00071 IMPLICIT NONE 00072 ! 00073 !------------------------------------------------------------------------------- 00074 ! 00075 !* 0.1 declarations of arguments 00076 ! 00077 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM 00078 ! 00079 !------------------------------------------------------------------------------- 00080 ! 00081 !* 0.2 declarations of local variables 00082 ! 00083 CHARACTER(LEN=14), PARAMETER :: YFILE_PARAM_1D ='TRIP_PGD_1D.nc' 00084 CHARACTER(LEN=14), PARAMETER :: YFILE_PARAM_HD ='TRIP_PGD_HD.nc' 00085 CHARACTER(LEN=15), PARAMETER :: YFILE_INIT_1D ='TRIP_INIT_1D.nc' 00086 CHARACTER(LEN=15), PARAMETER :: YFILE_INIT_HD ='TRIP_INIT_HD.nc' 00087 ! 00088 CHARACTER(LEN=13), PARAMETER :: YFILE_PARAM ='TRIP_PARAM.nc' 00089 CHARACTER(LEN=12), PARAMETER :: YFILE_PREP ='TRIP_PREP.nc' 00090 ! 00091 CHARACTER(LEN=14) :: YFILE_READ 00092 CHARACTER(LEN=15) :: YFILE_READ_INIT 00093 ! 00094 CHARACTER(LEN=18), PARAMETER :: YFILE_FLOOD_1D ='TRIP_SGFLOOD_1D.nc' 00095 CHARACTER(LEN=18), PARAMETER :: YFILE_FLOOD_HD ='TRIP_SGFLOOD_HD.nc' 00096 CHARACTER(LEN=18) :: YFILE_FLOOD_READ 00097 ! 00098 CHARACTER(LEN=20) :: YVAR 00099 ! 00100 LOGICAL,DIMENSION(:,:),ALLOCATABLE :: LMASK_NATURE 00101 ! 00102 REAL,DIMENSION(:,:),ALLOCATABLE :: ZSAND, ZCLAY, ZSILT, ZPERM 00103 REAL,DIMENSION(:,:),ALLOCATABLE :: ZGRCN, ZSEQ, ZMASK, ZNUM_BAS, 00104 ZDR_AREA, ZELEV 00105 ! 00106 INTEGER,DIMENSION(:,:),ALLOCATABLE :: IGRCN,INEXTX,INEXTY 00107 ! 00108 REAL,DIMENSION(:,:),ALLOCATABLE :: ZREAD 00109 REAL,DIMENSION(:,:,:),ALLOCATABLE :: ZREAD3D 00110 REAL,DIMENSION(:),ALLOCATABLE :: ZTAUG 00111 ! 00112 INTEGER :: ILUOUT ! output listing logical unit 00113 ! 00114 ! 00115 REAL :: ZLONMIN ! minimum longitude (degrees) 00116 REAL :: ZLONMAX ! maximum longitude (degrees) 00117 REAL :: ZLATMIN ! minimum latitude (degrees) 00118 REAL :: ZLATMAX ! maximum latitude (degrees) 00119 REAL :: ZGRID_RES ! 1° or 0.5° resolution 00120 INTEGER :: ILON ! number of points in longitude 00121 INTEGER :: ILAT ! number of points in latitude 00122 ! 00123 INTEGER :: ILON_G, ILON_DEB, ILON_END 00124 INTEGER :: ILAT_G, ILAT_DEB, ILAT_END 00125 ! 00126 INTEGER :: IWORK, IFLOOD, I, J, INI, ILATF 00127 ! 00128 LOGICAL :: LMASKLON, LMASKLAT 00129 ! 00130 !------------------------------------------------------------------------------- 00131 !Output attribut for netcdf diag file 00132 !------------------------------------------------------------------------------- 00133 ! 00134 CHARACTER(LEN=50) :: YTITLE,YTIMEUNIT 00135 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00136 ! YTITLE = Title of each output file 00137 ! YTIMEUNIT = Time unit in each output file if present 00138 ! 00139 !------------------------------------------------------------------------------- 00140 !Initilyse TRIP 00141 !------------------------------------------------------------------------------- 00142 ! 00143 IF (LHOOK) CALL DR_HOOK('PREP_TRIP',0,ZHOOK_HANDLE) 00144 CALL INIT_TRIP_PAR 00145 ! 00146 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00147 ! 00148 WRITE(ILUOUT,*)'' 00149 WRITE(ILUOUT,*)' PREP TRIP ' 00150 WRITE(ILUOUT,*)'' 00151 ! 00152 !------------------------------------------------------------------------------- 00153 ! 00154 IF (LNAM_READ) THEN 00155 ! 00156 ! * default values for the TRIP configuration 00157 ! 00158 CALL DEFAULT_TRIP(CGROUNDW,CVIT,LFLOODT,LDIAG_CPL,LTRIP_DIAG_MISC, & 00159 LNCPRINT,LPRINT_TRIP,XTSTEP_COUPLING,XTRIP_TSTEP,& 00160 XDATA_TAUG,XCVEL,XRATMED ) 00161 ! 00162 ENDIF 00163 ! 00164 ! * TRIP general options 00165 ! 00166 CALL READ_TRIP_CONF_n(HPROGRAM) 00167 ! 00168 IF(LFLOODT)THEN 00169 IF(CGROUNDW=='DEF') & 00170 WRITE(ILUOUT,*)'! Attention, you use the flooding scheme without the groundwater scheme !!!' 00171 IF(CVIT /= 'VAR')THEN 00172 WRITE(ILUOUT,*)'! You cannot use the flooding scheme without the variable velocity scheme !!!' 00173 STOP 00174 ENDIF 00175 ENDIF 00176 ! 00177 IF(MOD(XTSTEP_COUPLING,XTRIP_TSTEP)/=0.)THEN 00178 WRITE(ILUOUT,*)'! XTSTEP_COUPLING and XTRIP_TSTEP are not good !!!' 00179 WRITE(ILUOUT,*)'! MOD(XTSTEP_COUPLING,XTRIP_TSTEP) should be 0 !!!' 00180 STOP 00181 ENDIF 00182 ! 00183 !------------------------------------------------------------------------------- 00184 ! * Read TRIP grid configuration 00185 !------------------------------------------------------------------------------- 00186 ! 00187 CALL READ_NAM_GRID_TRIP(HPROGRAM) 00188 ! 00189 CALL GET_GRID_CONF_TRIP_n(ZLONMIN,ZLONMAX,ZLATMIN,ZLATMAX,ZGRID_RES,ILON,ILAT) 00190 ! 00191 IF(ZGRID_RES==1.0)THEN 00192 ! 00193 WRITE(ILUOUT,*)'! 1° by 1° TRIP run !!!' 00194 ! 00195 ILON_G = 360 00196 ILAT_G = 180 00197 ILATF = 31 00198 YFILE_READ = YFILE_PARAM_1D 00199 YFILE_READ_INIT = YFILE_INIT_1D 00200 YFILE_FLOOD_READ = YFILE_FLOOD_1D 00201 ! 00202 ELSEIF(ZGRID_RES==0.5)THEN 00203 ! 00204 WRITE(ILUOUT,*)'! 0.5° by 0.5° TRIP run !!!' 00205 ! 00206 ILON_G = 720 00207 ILAT_G = 360 00208 ILATF = 61 00209 YFILE_READ = YFILE_PARAM_HD 00210 YFILE_READ_INIT = YFILE_INIT_HD 00211 YFILE_FLOOD_READ = YFILE_FLOOD_HD 00212 ! 00213 IF(XRATMED==1.4)THEN 00214 WRITE(ILUOUT,*)'! meandering ratio is the same than at 1° resolution !!!' 00215 WRITE(ILUOUT,*)'! if you want another value change XRATMED in namelist !!!' 00216 ENDIF 00217 ! 00218 ELSE 00219 ! 00220 WRITE(ILUOUT,*)'! The resolution of the TRIP run is not good !!!' 00221 WRITE(ILUOUT,*)' ! Should be 1° or 0.5° !!! ' 00222 STOP 00223 ! 00224 ENDIF 00225 ! 00226 LMASKLON=.FALSE. 00227 IF(ZLONMIN/=-180..OR.ZLONMAX/=180.)LMASKLON=.TRUE. 00228 ! 00229 LMASKLAT=.FALSE. 00230 IF(ZLATMIN/=-180..OR.ZLATMAX/=180.)LMASKLAT=.TRUE. 00231 ! 00232 !------------------------------------------------------------------------------- 00233 !Allocate arguments 00234 !------------------------------------------------------------------------------- 00235 ! 00236 ALLOCATE(ZREAD (ILON_G,ILAT_G)) 00237 ! 00238 ALLOCATE(ZGRCN (ILON,ILAT)) 00239 ALLOCATE(ZMASK (ILON,ILAT)) 00240 ALLOCATE(XLEN (ILON,ILAT)) 00241 ALLOCATE(XAREA (ILON,ILAT)) 00242 ALLOCATE(ZSEQ (ILON,ILAT)) 00243 ALLOCATE(XSURF_STO(ILON,ILAT)) 00244 ALLOCATE(ZNUM_BAS (ILON,ILAT)) 00245 ALLOCATE(ZDR_AREA (ILON,ILAT)) 00246 ALLOCATE(ZELEV (ILON,ILAT)) 00247 ! 00248 IF(CGROUNDW/='DEF')THEN 00249 ALLOCATE(XGROUND_STO(ILON,ILAT)) 00250 ALLOCATE(XTAUG (ILON,ILAT)) 00251 ELSE 00252 ALLOCATE(XGROUND_STO(0,0)) 00253 ALLOCATE(XTAUG (0,0)) 00254 ENDIF 00255 ! 00256 IF(LFLOODT)THEN 00257 ALLOCATE(XHC_BED (ILON,ILAT)) 00258 ALLOCATE(XN_FLOOD (ILON,ILAT)) 00259 ALLOCATE(XFLOOD_STO (ILON,ILAT)) 00260 ALLOCATE(XHFLOOD (ILON,ILAT)) 00261 ALLOCATE(XFFLOOD (ILON,ILAT)) 00262 ELSE 00263 ALLOCATE(XHC_BED (0,0)) 00264 ALLOCATE(XN_FLOOD (0,0)) 00265 ALLOCATE(XFLOOD_STO(0,0)) 00266 ALLOCATE(XHFLOOD (0,0)) 00267 ALLOCATE(XFFLOOD (0,0)) 00268 ENDIF 00269 ! 00270 IF(CVIT=='VAR')THEN 00271 ALLOCATE(XSLOPEBED(ILON,ILAT)) 00272 ALLOCATE(XWIDTH (ILON,ILAT)) 00273 ALLOCATE(XN (ILON,ILAT)) 00274 ELSE 00275 ALLOCATE(XSLOPEBED(0,0)) 00276 ALLOCATE(XWIDTH (0,0)) 00277 ALLOCATE(XN (0,0)) 00278 ENDIF 00279 ! 00280 !------------------------------------------------------------------------------- 00281 ! * Create param and init file 00282 !------------------------------------------------------------------------------- 00283 ! 00284 YTITLE = 'TRIP parameters for a run' 00285 YTIMEUNIT = '-' 00286 CALL INIT_PARAM_TRIP_n(ILUOUT,YFILE_PARAM,ILON,ILAT,YTITLE,YTIMEUNIT) 00287 ! 00288 YTITLE ='TRIP prep historical variable' 00289 YTIMEUNIT='-' 00290 CALL INIT_RESTART_TRIP_n(ILUOUT,YFILE_PREP,ILON,ILAT,YTITLE,YTIMEUNIT,.FALSE.) 00291 ! 00292 !------------------------------------------------------------------------------- 00293 ! * Compute the mask of the run 00294 !------------------------------------------------------------------------------- 00295 ! 00296 ILON_DEB = INT(ZLONMIN/ZGRID_RES) + ILON_G/2 + 1 00297 ILON_END = INT(ZLONMAX/ZGRID_RES) + ILON_G/2 00298 ILAT_DEB = INT(ZLATMIN/ZGRID_RES) + ILAT_G/2 + 1 00299 ILAT_END = INT(ZLATMAX/ZGRID_RES) + ILAT_G/2 00300 ! 00301 !------------------------------------------------------------------------------- 00302 ! * Compute and Read TRIP parameter 00303 !------------------------------------------------------------------------------- 00304 ! 00305 ALLOCATE(IGRCN (ILON_G,ILAT_G)) 00306 ALLOCATE(INEXTX(ILON_G,ILAT_G)) 00307 ALLOCATE(INEXTY(ILON_G,ILAT_G)) 00308 ! 00309 ! * Basin ID 00310 ! 00311 YVAR ='NUM_BAS' 00312 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00313 ZNUM_BAS = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00314 ! 00315 ! * Drainage Area 00316 ! 00317 YVAR ='DR_AREA' 00318 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00319 ZDR_AREA = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00320 ! 00321 ! * Elevation 00322 ! 00323 YVAR ='ELEV' 00324 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00325 ZELEV = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00326 ! 00327 ! * Flow direction 00328 ! 00329 YVAR ='FLOWDIR' 00330 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00331 ZGRCN=ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00332 WHERE(ZREAD==XTRIP_UNDEF)ZREAD=0.0 00333 IGRCN = INT(ZREAD) 00334 ! 00335 ZMASK=0.0 00336 WHERE(ZGRCN/=XTRIP_UNDEF)ZMASK=1.0 00337 ! 00338 ! * Set the distance between grids with the meandering ratio 00339 ! 00340 CALL SETNEXT(ILON_G,ILAT_G,IGRCN,INEXTX,INEXTY) 00341 ! 00342 YVAR ='RIVLEN' 00343 CALL SETLEN(ILON_G,ILAT_G,IGRCN,INEXTX,INEXTY,XRATMED,ZREAD) 00344 XLEN = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00345 ! 00346 DEALLOCATE(IGRCN ) 00347 DEALLOCATE(INEXTX) 00348 DEALLOCATE(INEXTY) 00349 ! 00350 ! * Domain test 00351 ! 00352 ALLOCATE(IGRCN (ILON,ILAT)) 00353 ALLOCATE(INEXTX(ILON,ILAT)) 00354 ALLOCATE(INEXTY(ILON,ILAT)) 00355 ! 00356 WHERE(ZGRCN(:,:)<XTRIP_UNDEF) 00357 IGRCN(:,:)=INT(ZGRCN(:,:)) 00358 ELSEWHERE 00359 IGRCN(:,:)=0 00360 ENDWHERE 00361 ! 00362 CALL SETNEXT(ILON,ILAT,IGRCN(:,:),INEXTX(:,:),INEXTY(:,:),LMASKLON,LMASKLAT) 00363 ! 00364 ! * Store some param 00365 ! 00366 YVAR ='FLOWDIR' 00367 ZGRCN(:,:)=REAL(IGRCN(:,:)) 00368 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,ZGRCN) 00369 YVAR ='RIVLEN' 00370 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,XLEN) 00371 YVAR ='NUM_BAS' 00372 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,ZNUM_BAS) 00373 YVAR ='DR_AREA' 00374 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,ZDR_AREA) 00375 YVAR ='ELEV' 00376 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,ZELEV) 00377 ! 00378 DEALLOCATE(IGRCN ) 00379 DEALLOCATE(INEXTX) 00380 DEALLOCATE(INEXTY) 00381 DEALLOCATE(ZDR_AREA) 00382 DEALLOCATE(ZELEV) 00383 DEALLOCATE(ZNUM_BAS) 00384 ! 00385 ! * River sequence values read 00386 ! 00387 YVAR ='RIVSEQ' 00388 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00389 ZSEQ = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00390 ! 00391 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,ZSEQ) 00392 ! 00393 ! * Set area size 00394 ! 00395 CALL SETAREA(ILAT,ZLATMIN,ZGRID_RES,XAREA) 00396 ! 00397 ! * Initial river storage 00398 ! 00399 YVAR ='SURF_STO' 00400 CALL READ_TRIP(ILUOUT,YFILE_READ_INIT,YVAR,ZREAD) 00401 XSURF_STO = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00402 ! 00403 CALL WRITE_TRIP(ILUOUT,YFILE_PREP,YVAR,ZMASK,XSURF_STO) 00404 ! 00405 ! * Calculate the groundwater transfert time 00406 ! 00407 IF(CGROUNDW=='VAR')THEN 00408 ! 00409 ALLOCATE(ZSAND (ILON,ILAT)) 00410 ALLOCATE(ZCLAY (ILON,ILAT)) 00411 ALLOCATE(ZSILT (ILON,ILAT)) 00412 ALLOCATE(ZPERM (ILON,ILAT)) 00413 ALLOCATE(ZTAUG (3)) 00414 ! 00415 YVAR ='CLAY' 00416 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00417 ZCLAY = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00418 ! 00419 YVAR ='SAND' 00420 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00421 ZSAND = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00422 ! 00423 ZTAUG(1)=XDATA_TAUG 00424 ZTAUG(2)=1.5*XDATA_TAUG 00425 ZTAUG(3)=2.0*XDATA_TAUG 00426 ! 00427 WHERE(ZCLAY(:,:)>=0.0.AND.ZSAND(:,:)>=0.0.AND.ZCLAY(:,:)/=XTRIP_UNDEF) 00428 ZSILT(:,:)=1.0-(ZCLAY(:,:)+ZSAND(:,:)) 00429 XTAUG(:,:)=ZTAUG(2) 00430 WHERE(ZCLAY(:,:)>ZSILT(:,:).AND.ZCLAY(:,:)>ZSAND(:,:))XTAUG(:,:)=ZTAUG(3) 00431 WHERE(ZSAND(:,:)>ZCLAY(:,:).AND.ZSAND(:,:)>ZSILT(:,:))XTAUG(:,:)=ZTAUG(1) 00432 ELSEWHERE 00433 XTAUG(:,:)=XTRIP_UNDEF 00434 ENDWHERE 00435 ! 00436 YVAR ='PERM' 00437 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00438 ZPERM = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00439 ! 00440 WHERE(ZPERM(:,:)==1)XTAUG(:,:)=0.0 00441 ! 00442 YVAR ='TAUG' 00443 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,XTAUG) 00444 ! 00445 DEALLOCATE(ZSAND) 00446 DEALLOCATE(ZCLAY) 00447 DEALLOCATE(ZSILT) 00448 DEALLOCATE(ZTAUG) 00449 DEALLOCATE(ZPERM) 00450 ! 00451 ELSEIF(CGROUNDW=='CST')THEN 00452 ! 00453 ALLOCATE(ZPERM (ILON,ILAT)) 00454 ! 00455 YVAR ='PERM' 00456 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00457 ZPERM = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00458 ! 00459 XTAUG(:,:)=XDATA_TAUG 00460 WHERE(ZPERM(:,:)==1)XTAUG(:,:)=0.0 00461 ! 00462 YVAR ='TAUG' 00463 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,XTAUG) 00464 ! 00465 DEALLOCATE(ZPERM) 00466 ! 00467 ENDIF 00468 ! 00469 ! * Groundwater water storage 00470 ! 00471 IF(CGROUNDW/='DEF')THEN 00472 ! 00473 YVAR ='GROUND_STO' 00474 CALL READ_TRIP(ILUOUT,YFILE_READ_INIT,YVAR,ZREAD) 00475 XGROUND_STO = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00476 ! 00477 CALL WRITE_TRIP(ILUOUT,YFILE_PREP,YVAR,ZMASK,XGROUND_STO) 00478 ! 00479 ENDIF 00480 ! 00481 ! * Variable velocity scheme parameters 00482 ! 00483 IF(CVIT == 'VAR')THEN 00484 ! 00485 YVAR ='N_RIV' 00486 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00487 XN = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00488 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,XN) 00489 ! 00490 YVAR ='WIDTHRIV' 00491 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00492 XWIDTH = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00493 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,XWIDTH) 00494 ! 00495 YVAR ='SLOPERIV' 00496 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00497 XSLOPEBED = MAX(ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END),1.E-5) 00498 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,XSLOPEBED) 00499 ! 00500 ENDIF 00501 ! 00502 ! * Calculate floodplains parameters 00503 ! 00504 IF(LFLOODT)THEN 00505 ! 00506 YVAR ='RIVDEPTH' 00507 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00508 XHC_BED = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00509 WHERE(XHC_BED(:,:)==0.0)XHC_BED(:,:)=XTRIP_UNDEF 00510 ! 00511 YVAR ='NFLOOD' 00512 CALL READ_TRIP(ILUOUT,YFILE_READ,YVAR,ZREAD) 00513 XN_FLOOD = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00514 ! 00515 ALLOCATE(ZREAD3D(ILON_G,ILAT_G,NTRIPTAB)) 00516 ! 00517 ALLOCATE(XTAB_F (ILON,ILAT,NTRIPTAB)) 00518 ALLOCATE(XTAB_H (ILON,ILAT,NTRIPTAB)) 00519 ALLOCATE(XTAB_VF(ILON,ILAT,NTRIPTAB)) 00520 ! 00521 XTAB_F (:,:,:)= XTRIP_UNDEF 00522 XTAB_H (:,:,:)= XTRIP_UNDEF 00523 XTAB_VF(:,:,:)= XTRIP_UNDEF 00524 ! 00525 YVAR ='TABF' 00526 CALL READ_TRIP(ILUOUT,YFILE_FLOOD_READ,YVAR,ZREAD3D(:,ILATF:ILAT_G,:)) 00527 XTAB_F = ZREAD3D(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END,:) 00528 YVAR ='TABH' 00529 CALL READ_TRIP(ILUOUT,YFILE_FLOOD_READ,YVAR,ZREAD3D(:,ILATF:ILAT_G,:)) 00530 XTAB_H = ZREAD3D(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END,:) 00531 ! 00532 CALL SET_SUBGRID_FLOOD(ILON,ILAT,XAREA,XTAB_H,XTAB_F,XTAB_VF) 00533 ! 00534 DEALLOCATE(ZREAD3D) 00535 ! 00536 IF(.NOT.ASSOCIATED(GMASK))THEN 00537 ALLOCATE(GMASK(ILON,ILAT)) 00538 GMASK(:,:)=.TRUE. 00539 WHERE(ZMASK(:,:)==0.0)GMASK(:,:)=.FALSE. 00540 ENDIF 00541 DO I=1,ILON 00542 DO J=1,ILAT 00543 IF(GMASK(I,J))THEN 00544 IF(COUNT(XTAB_H(I,J,:)<XTRIP_UNDEF-1.0)<2)THEN 00545 XTAB_F (I,J,:)= XTRIP_UNDEF 00546 XTAB_H (I,J,:)= XTRIP_UNDEF 00547 XTAB_VF(I,J,:)= XTRIP_UNDEF 00548 XHC_BED(I,J) = XTRIP_UNDEF 00549 ENDIF 00550 IF(XTAB_F (I,J,2)>=0.98)THEN 00551 XTAB_F (I,J,:)= XTRIP_UNDEF 00552 XTAB_H (I,J,:)= XTRIP_UNDEF 00553 XTAB_VF(I,J,:)= XTRIP_UNDEF 00554 XHC_BED(I,J) = XTRIP_UNDEF 00555 ENDIF 00556 ENDIF 00557 IF(XHC_BED(I,J)==XTRIP_UNDEF)THEN 00558 XTAB_F (I,J,:) = XTRIP_UNDEF 00559 XTAB_H (I,J,:) = XTRIP_UNDEF 00560 XTAB_VF (I,J,:) = XTRIP_UNDEF 00561 XN_FLOOD(I,J) = XTRIP_UNDEF 00562 ENDIF 00563 ENDDO 00564 ENDDO 00565 ! 00566 WHERE(XTAB_H(:,:,1)==XTRIP_UNDEF) 00567 XHC_BED (:,:)=XTRIP_UNDEF 00568 XN_FLOOD(:,:)=XTRIP_UNDEF 00569 ENDWHERE 00570 ! 00571 YVAR ='RIVDEPTH' 00572 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,XHC_BED) 00573 ! 00574 YVAR ='NFLOOD' 00575 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,XN_FLOOD) 00576 ! 00577 YVAR ='TABF' 00578 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,XTAB_F) 00579 YVAR ='TABH' 00580 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,XTAB_H) 00581 YVAR ='TABVF' 00582 CALL WRITE_TRIP(ILUOUT,YFILE_PARAM,YVAR,ZMASK,XTAB_VF) 00583 ! 00584 ! Floodplains initial variables 00585 ! 00586 YVAR ='FLOOD_STO' 00587 CALL READ_TRIP(ILUOUT,YFILE_READ_INIT,YVAR,ZREAD) 00588 XFLOOD_STO = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00589 CALL WRITE_TRIP(ILUOUT,YFILE_PREP,YVAR,ZMASK,XFLOOD_STO) 00590 ! 00591 YVAR ='FFLOOD_T' 00592 CALL READ_TRIP(ILUOUT,YFILE_READ_INIT,YVAR,ZREAD) 00593 XFFLOOD = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00594 CALL WRITE_TRIP(ILUOUT,YFILE_PREP,YVAR,ZMASK,XFFLOOD) 00595 ! 00596 YVAR ='HFLOOD_T' 00597 CALL READ_TRIP(ILUOUT,YFILE_READ_INIT,YVAR,ZREAD) 00598 XHFLOOD = ZREAD(ILON_DEB:ILON_END,ILAT_DEB:ILAT_END) 00599 CALL WRITE_TRIP(ILUOUT,YFILE_PREP,YVAR,ZMASK,XHFLOOD) 00600 ! 00601 ENDIF 00602 ! 00603 DEALLOCATE(ZREAD) 00604 ! 00605 !------------------------------------------------------------------------------- 00606 ! * END 00607 !------------------------------------------------------------------------------- 00608 ! 00609 WRITE(ILUOUT,*)'' 00610 WRITE(ILUOUT,*)' END PREP TRIP ' 00611 WRITE(ILUOUT,*)'' 00612 IF (LHOOK) CALL DR_HOOK('PREP_TRIP',1,ZHOOK_HANDLE) 00613 ! 00614 !------------------------------------------------------------------------------- 00615 END SUBROUTINE PREP_TRIP