SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE TRIP (KLUOUT,HGROUNDW,HVIT,OFLOOD,OPRINT,PTSTEP, & 00003 KGRCN,KSEQ,KNEXTX,KNEXTY,KSEQMAX,PTAUG,PAREA, & 00004 PLEN,PFLOOD_LEN,PSLOPEBED,PWIDTH,PN,PN_FLOOD, & 00005 PHC_BED,PWFLOOD,PTAB_F,PTAB_H,PTAB_VF,PDRAIN, & 00006 PRUNOFF,PSOURCE,PGROUND_STO,PSURF_STO, & 00007 PFLOOD_STO,PSOUT,PGOUT,PHS,PHFLOOD,PVEL, & 00008 PFFLOOD,PQFR,PQRF,PVFIN,PVFOUT, & 00009 PHSF,PSIN,KTRIP,KTSEPT,KTSTEP_END,KTABMAX ) 00010 ! ################################################################### 00011 ! 00012 !!**** *TRIP* 00013 !! 00014 !! PURPOSE 00015 !! ------- 00016 ! 00017 ! TRIP river routing and Floodplains schemes. 00018 ! 00019 !! 00020 !! REFERENCE 00021 !! --------- 00022 !! 00023 !! AUTHOR 00024 !! ------ 00025 !! B. Decharme 00026 !! 00027 !! MODIFICATIONS 00028 !! ------------- 00029 !! Original 01/02/05 00030 !! Modif. 28/05/08 00031 !------------------------------------------------------------------------------- 00032 ! 00033 !* 0. DECLARATIONS 00034 ! ------------ 00035 ! 00036 USE MODD_TRIP_PAR, ONLY : XRHOLW_T,XSEA_T,XYEAR_T 00037 ! 00038 USE MODI_TRIP_GROUND_WATER 00039 ! 00040 USE MODI_TRIP_SURFACE_WATER 00041 USE MODI_TRIP_SURFACE_WATER_VELVAR 00042 USE MODI_TRIP_SURFACE_WATER_FLOOD 00043 ! 00044 ! 00045 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00046 USE PARKIND1 ,ONLY : JPRB 00047 ! 00048 IMPLICIT NONE 00049 ! 00050 !* 0.1 declarations of arguments 00051 ! 00052 INTEGER, INTENT(IN) :: KLUOUT 00053 INTEGER, INTENT(IN) :: KTRIP 00054 INTEGER, INTENT(IN) :: KTSEPT 00055 INTEGER, INTENT(IN) :: KTSTEP_END 00056 ! 00057 CHARACTER(LEN=3), INTENT(IN) :: HGROUNDW !Groundwater scheme key 00058 CHARACTER(LEN=3), INTENT(IN) :: HVIT !Variable velocity scheme key 00059 ! 00060 LOGICAL, INTENT(IN) :: OFLOOD !Flood scheme key 00061 LOGICAL, INTENT(IN) :: OPRINT !Printable budget key 00062 ! 00063 REAL, INTENT(IN) :: PTSTEP !Trip timestep 00064 ! 00065 INTEGER, INTENT(IN) :: KSEQMAX !maximum down flow 00066 INTEGER, DIMENSION(:,:),INTENT(IN) :: KGRCN !Flow direction (1->8) 00067 INTEGER, DIMENSION(:,:),INTENT(IN) :: KSEQ !River sequence 00068 INTEGER, DIMENSION(:,:),INTENT(IN) :: KNEXTX !returns x and y point 00069 INTEGER, DIMENSION(:,:),INTENT(IN) :: KNEXTY !of destination grid 00070 ! 00071 REAL, DIMENSION(:,:), INTENT(IN) :: PTAUG !ground water transfer time [s] 00072 ! 00073 REAL,DIMENSION(:,:), INTENT(IN) :: PLEN ! river length [m] 00074 REAL,DIMENSION(:,:), INTENT(IN) :: PSLOPEBED ! river bed slopes [m/m] 00075 REAL,DIMENSION(:,:), INTENT(IN) :: PWIDTH ! river widths [m] 00076 REAL,DIMENSION(:,:), INTENT(IN) :: PN ! Manning roughness coeficient [-] (0.03 to 0.065) 00077 REAL,DIMENSION(:,:), INTENT(IN) :: PN_FLOOD ! Manning coeficient over floodplains [-] (0.1) 00078 REAL,DIMENSION(:,:), INTENT(IN) :: PHC_BED ! River bed depth [m] 00079 REAL,DIMENSION(:,:), INTENT(IN) :: PSOURCE ! precip-infiltration-evaporation [kg/s] 00080 REAL,DIMENSION(:,:), INTENT(IN) :: PAREA ! Grid-cell area [mē] 00081 REAL,DIMENSION(:,:), INTENT(IN) :: PDRAIN ! Subsurface runoff from ISBA [kg/s] 00082 REAL,DIMENSION(:,:), INTENT(INOUT) :: PRUNOFF ! Surface runoff from ISBA [kg/s] 00083 ! 00084 REAL,DIMENSION(:,:), INTENT(INOUT) :: PHFLOOD ! Floodplain water depth [m] 00085 REAL,DIMENSION(:,:), INTENT(INOUT) :: PWFLOOD ! Floodplain width [m] 00086 REAL,DIMENSION(:,:), INTENT(INOUT) :: PFLOOD_LEN ! Floodplain length along the river [m] 00087 REAL,DIMENSION(:,:), INTENT(INOUT) :: PFFLOOD ! Fraction of flood [-] 00088 REAL,DIMENSION(:,:), INTENT(INOUT) :: PSURF_STO ! river channel storage at t [kg] 00089 REAL,DIMENSION(:,:), INTENT(INOUT) :: PGROUND_STO! groundwater storage at t [kg] 00090 REAL,DIMENSION(:,:), INTENT(INOUT) :: PFLOOD_STO ! Floodplain water storage at t [kg] 00091 ! 00092 REAL,DIMENSION(:,:), INTENT(OUT) :: PSOUT ! Outflow from the surface river reservoir [kg/s] 00093 REAL,DIMENSION(:,:), INTENT(OUT) :: PSIN ! Inflow to the surface river reservoir [kg/s] 00094 REAL,DIMENSION(:,:), INTENT(OUT) :: PGOUT ! ground water outflow [kg/s] 00095 REAL,DIMENSION(:,:), INTENT(OUT) :: PHS ! River height [m] 00096 REAL,DIMENSION(:,:), INTENT(OUT) :: PVEL ! River channel velocity [m/s] 00097 REAL,DIMENSION(:,:), INTENT(OUT) :: PQFR ! Flood flow to river 00098 REAL,DIMENSION(:,:), INTENT(OUT) :: PQRF ! River flow to floodplain 00099 ! 00100 REAL,DIMENSION(:,:), INTENT(OUT) :: PVFIN ! River flow to flood velocity [m/s] 00101 REAL,DIMENSION(:,:), INTENT(OUT) :: PVFOUT! Flood flow to river velocity [m/s] 00102 REAL,DIMENSION(:,:), INTENT(OUT) :: PHSF ! River-Floodplain depth comparison [m] 00103 ! 00104 REAL,DIMENSION(:,:,:), INTENT(IN) :: PTAB_F ! Flood fraction array 00105 REAL,DIMENSION(:,:,:), INTENT(IN) :: PTAB_H ! Topo height array 00106 REAL,DIMENSION(:,:,:), INTENT(IN) :: PTAB_VF ! Flood volume array 00107 INTEGER, DIMENSION(:,:),INTENT(IN) :: KTABMAX 00108 ! 00109 !* 0.2 declarations of local variables 00110 ! 00111 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZSURF_STO2 ! river channel storage at t+1 [kg] 00112 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZGROUND_STO2! Groundwater storage at t+1 [kg] 00113 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZFLOOD_STO2 ! Floodplain water storage at t+1 [kg] 00114 ! 00115 REAL :: ZGSTO_ALL, ZGSTO2_ALL, ZGIN_ALL, ZGOUT_ALL, ZFSTO_ALL, 00116 ZFSTO2_ALL, ZSOURCE_ALL, ZSSTO_ALL, ZSSTO2_ALL, ZSIN_ALL, 00117 ZDRUN_ALL, ZSOUT_ALL, ZVEL_ALL, ZFIN_ALL, ZFOUT_ALL, 00118 ZSFLOOD_ALL,ZHS_ALL,ZHF_ALL,ZFF_ALL 00119 ! 00120 INTEGER :: ILON, ILAT 00121 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00122 ! 00123 !------------------------------------------------------------------------------- 00124 !-------------------------------------------------------------------------------! 00125 ! 00126 IF (LHOOK) CALL DR_HOOK('TRIP',0,ZHOOK_HANDLE) 00127 ILON = SIZE(PLEN,1) 00128 ILAT = SIZE(PLEN,2) 00129 ! 00130 ZGSTO_ALL = 0.0 00131 ZGSTO2_ALL = 0.0 00132 ZGIN_ALL = 0.0 00133 ZGOUT_ALL = 0.0 00134 ZFSTO_ALL = 0.0 00135 ZFSTO2_ALL = 0.0 00136 ZSOURCE_ALL = 0.0 00137 ZSSTO_ALL = 0.0 00138 ZSSTO2_ALL = 0.0 00139 ZSIN_ALL = 0.0 00140 ZDRUN_ALL = 0.0 00141 ZSOUT_ALL = 0.0 00142 ZVEL_ALL = 0.0 00143 ZFIN_ALL = 0.0 00144 ZFOUT_ALL = 0.0 00145 ZSFLOOD_ALL = 0.0 00146 ZHS_ALL = 0.0 00147 ZHF_ALL = 0.0 00148 ZFF_ALL = 0.0 00149 ! 00150 ZSURF_STO2 = 0.0 00151 ZGROUND_STO2 = 0.0 00152 ZFLOOD_STO2 = 0.0 00153 ! 00154 ! * Ground water storage 00155 ! 00156 IF(HGROUNDW/='DEF')THEN 00157 ! 00158 CALL TRIP_GROUND_WATER(PTSTEP,PGROUND_STO,ZGROUND_STO2,PDRAIN,PTAUG, & 00159 PGOUT,ZGSTO_ALL,ZGSTO2_ALL,ZGIN_ALL,ZGOUT_ALL ) 00160 ! 00161 PGROUND_STO = ZGROUND_STO2 00162 ! 00163 ELSE 00164 ! 00165 PGOUT=PDRAIN 00166 ! 00167 ENDIF 00168 ! 00169 ! * Surface water storage with or without Floodplains 00170 ! 00171 IF(OFLOOD)THEN 00172 ! 00173 CALL TRIP_SURFACE_WATER_FLOOD(KLUOUT,PTSTEP,KGRCN,KSEQ,KNEXTX,KNEXTY, & 00174 KSEQMAX,PLEN,PFLOOD_LEN,PSLOPEBED,PWIDTH, & 00175 PN,PN_FLOOD,PHC_BED,PHFLOOD,PRUNOFF, & 00176 PSURF_STO,ZSURF_STO2,PGOUT,PSOURCE, & 00177 PFLOOD_STO,ZFLOOD_STO2,PSOUT,PVEL,PHS, & 00178 PFFLOOD,PAREA,PQFR,PQRF, & 00179 PVFIN,PVFOUT,PHSF,PSIN, & 00180 ZSSTO_ALL,ZSSTO2_ALL,ZSIN_ALL,ZDRUN_ALL, & 00181 ZSOUT_ALL,ZVEL_ALL,ZFSTO_ALL,ZFSTO2_ALL, & 00182 ZSOURCE_ALL,ZFIN_ALL,ZFOUT_ALL,PWFLOOD, & 00183 ZSFLOOD_ALL,ZHS_ALL,PTAB_F,PTAB_H,PTAB_VF, & 00184 KTABMAX ) 00185 ! 00186 PFLOOD_STO(:,:) = ZFLOOD_STO2(:,:) 00187 ! 00188 IF(OPRINT)THEN 00189 ZHF_ALL = SUM(PHFLOOD(:,:)*PAREA(:,:),PWIDTH(:,:)>0.0)/SUM(PAREA(:,:),PWIDTH(:,:)>0.0) 00190 ZFF_ALL = SUM(PFFLOOD(:,:)*PAREA(:,:),PWIDTH(:,:)>0.0)/SUM(PAREA(:,:),PWIDTH(:,:)>0.0) 00191 ENDIF 00192 ! 00193 ELSEIF(HVIT=='VAR')THEN 00194 ! 00195 CALL TRIP_SURFACE_WATER_VELVAR(PTSTEP,KGRCN,KSEQ,KNEXTX,KNEXTY,KSEQMAX, & 00196 PLEN,PSLOPEBED,PWIDTH,PN,PRUNOFF,PSURF_STO, & 00197 ZSURF_STO2,PGOUT,PSIN,PSOUT,PVEL,PHS,PAREA, & 00198 ZSSTO_ALL,ZSSTO2_ALL,ZSIN_ALL,ZDRUN_ALL, & 00199 ZSOUT_ALL,ZVEL_ALL,ZHS_ALL ) 00200 ! 00201 ELSE 00202 ! 00203 CALL TRIP_SURFACE_WATER(PTSTEP,KGRCN,KSEQ,KNEXTX,KNEXTY,KSEQMAX, & 00204 PLEN,PRUNOFF,PGOUT,PSURF_STO,ZSURF_STO2, & 00205 PSIN,PSOUT,ZSSTO_ALL,ZSSTO2_ALL,ZSIN_ALL,& 00206 ZDRUN_ALL,ZSOUT_ALL) 00207 ! 00208 ENDIF 00209 ! 00210 PSURF_STO(:,:) = ZSURF_STO2(:,:) 00211 ! 00212 ! * Writting the budget 00213 ! 00214 IF(OPRINT.AND.KTRIP==1.AND.KTSEPT==1)THEN 00215 ! 00216 WRITE(KLUOUT,*)'' 00217 WRITE(KLUOUT,*)' START RUN ISBA-TRIP-FP ' 00218 WRITE(KLUOUT,*)' Budget en 10^12 kg ' 00219 WRITE(KLUOUT,*)'' 00220 WRITE(KLUOUT,'(a81)')'RUN TSTEP S_err F_err G_err MR(mm/y) Vel(m/s) Hs Hf Ff' 00221 WRITE(KLUOUT,*)'' 00222 ! 00223 ENDIF 00224 ! 00225 IF(OPRINT) & 00226 WRITE(KLUOUT,'(i3,1x,i3,3(2x,g8.2),f8.2,f8.2,7(2x,g8.2))') & 00227 KTRIP,KTSEPT, & 00228 ! surface budget S_err 00229 (ZSSTO_ALL-ZSSTO2_ALL)+PTSTEP*(ZSIN_ALL-ZSOUT_ALL+ZSFLOOD_ALL), & 00230 ! floodplains budget F_err 00231 (ZFSTO_ALL-ZFSTO2_ALL)+PTSTEP*(ZSOURCE_ALL+ZFIN_ALL-ZFOUT_ALL), & 00232 ! ground budget G_err 00233 (ZGSTO_ALL-ZGSTO2_ALL)+PTSTEP*(ZGIN_ALL-ZGOUT_ALL), & 00234 ! output flow to the sea, MR(mm/y) 00235 (ZSSTO_ALL-ZSSTO2_ALL +PTSTEP*ZDRUN_ALL)/XSEA_T*XYEAR_T*REAL(KTSTEP_END), 00236 ! mean flow velocity, Vel(m/s), and mean stream depth, Hs (m) 00237 ! mean floddplains depth, Hf (m), and mean flood fraction, Ff (%) 00238 ZVEL_ALL,ZHS_ALL,ZHF_ALL,100.*ZFF_ALL 00239 IF (LHOOK) CALL DR_HOOK('TRIP',1,ZHOOK_HANDLE) 00240 ! 00241 !------------------------------------------------------------------------------- 00242 !------------------------------------------------------------------------------- 00243 END SUBROUTINE TRIP