SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/TRIP/prep_trip.F90
Go to the documentation of this file.
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