SURFEX v8.1
General documentation of Surfex
trip.F90
Go to the documentation of this file.
1 ! #########
2  SUBROUTINE trip (KLISTING,HGROUNDW,OFLOOD,OPRINT,PTSTEP, &
3  KGRCN,KSEQ,KNEXTX,KNEXTY,KSEQMAX,PAREA,PLEN, &
4  OMASK_GW,OMASK_VEL,OMASK_FLD, &
5  PTAUG,PFLOOD_LEN,PSLOPEBED,PWIDTH,PN, &
6  PN_FLOOD,PHC_BED,PWFLOOD,PTAB_F,PTAB_H,PTAB_VF, &
7  PDRAIN,PRUNOFF,PSOURCE,PHS,PVEL, &
8  PGROUND_STO,PSURF_STO, &
9  PFLOOD_STO,PSOUT,PGOUT,PHFLOOD, &
10  PFFLOOD,PQFR,PQRF,PVFIN,PVFOUT, &
11  PHSF,PSIN,KTRIP,KTSEPT,KTSTEP_END, &
12  PGSTO_ALL,PGSTO2_ALL,PGIN_ALL,PGOUT_ALL, &
13  PHGROUND,PWEFF )
14 ! ###################################################################
15 !
16 !!**** *TRIP*
17 !!
18 !! PURPOSE
19 !! -------
20 !
21 ! TRIP river routing and Floodplains schemes.
22 !
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !! AUTHOR
28 !! ------
29 !! B. Decharme
30 !!
31 !! MODIFICATIONS
32 !! -------------
33 !! Original 01/02/05
34 !! Modif. 28/05/08
35 !-------------------------------------------------------------------------------
36 !
37 !* 0. DECLARATIONS
38 ! ------------
39 !
40 USE modd_trip_par, ONLY : xrholw,xsea,xyear
41 !
42 USE modi_trip_gw_buffer_tank
43 USE modi_trip_surface_water
44 USE modi_trip_surface_flood
45 !
46 USE modi_trip_update_and_conserv
47 !
48 USE yomhook ,ONLY : lhook, dr_hook
49 USE parkind1 ,ONLY : jprb
50 !
51 IMPLICIT NONE
52 !
53 !* 0.1 declarations of arguments
54 !
55 INTEGER, INTENT(IN) :: KLISTING
56 INTEGER, INTENT(IN) :: KTRIP
57 INTEGER, INTENT(IN) :: KTSEPT
58 INTEGER, INTENT(IN) :: KTSTEP_END
59 !
60  CHARACTER(LEN=3), INTENT(IN) :: HGROUNDW !Groundwater scheme key
61 !
62 LOGICAL, INTENT(IN) :: OFLOOD !Flood scheme key
63 LOGICAL, INTENT(IN) :: OPRINT !Printable budget key
64 !
65 REAL, INTENT(IN) :: PTSTEP !Trip timestep
66 !
67 INTEGER, INTENT(IN) :: KSEQMAX !maximum down flow
68 INTEGER, DIMENSION(:,:),INTENT(IN) :: KGRCN !Flow direction (1->8)
69 INTEGER, DIMENSION(:,:),INTENT(IN) :: KSEQ !River sequence
70 INTEGER, DIMENSION(:,:),INTENT(IN) :: KNEXTX !returns x and y point
71 INTEGER, DIMENSION(:,:),INTENT(IN) :: KNEXTY !of destination grid
72 !
73 LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASK_GW !Groundwater mask
74 LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASK_VEL !Variable velocity mask
75 LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASK_FLD !Floodplain mask
76 !
77 REAL,DIMENSION(:,:), INTENT(IN) :: PTAUG ! ground water transfer time [s]
78 REAL,DIMENSION(:,:), INTENT(IN) :: PLEN ! river length [m]
79 REAL,DIMENSION(:,:), INTENT(IN) :: PSLOPEBED ! river bed slopes [m/m]
80 REAL,DIMENSION(:,:), INTENT(IN) :: PWIDTH ! river widths [m]
81 REAL,DIMENSION(:,:), INTENT(IN) :: PN ! Manning roughness coeficient [-] (0.03 to 0.065)
82 REAL,DIMENSION(:,:), INTENT(IN) :: PN_FLOOD ! Manning coeficient over floodplains [-] (0.1)
83 REAL,DIMENSION(:,:), INTENT(IN) :: PHC_BED ! River bed depth [m]
84 REAL,DIMENSION(:,:), INTENT(IN) :: PSOURCE ! precip-infiltration-evaporation [kg/s]
85 REAL,DIMENSION(:,:), INTENT(IN) :: PAREA ! Grid-cell area [m2]
86 REAL,DIMENSION(:,:), INTENT(IN) :: PDRAIN ! Subsurface runoff from ISBA [kg/s]
87 REAL,DIMENSION(:,:), INTENT(INOUT) :: PRUNOFF ! Surface runoff from ISBA [kg/s]
88 !
89 REAL,DIMENSION(:,:), INTENT(IN) :: PHS ! River height [m]
90 REAL,DIMENSION(:,:), INTENT(IN) :: PVEL ! River channel velocity [m/s]
91 !
92 REAL,DIMENSION(:,:), INTENT(INOUT) :: PHFLOOD ! Floodplain water depth [m]
93 REAL,DIMENSION(:,:), INTENT(INOUT) :: PWFLOOD ! Floodplain width [m]
94 REAL,DIMENSION(:,:), INTENT(INOUT) :: PFLOOD_LEN ! Floodplain length along the river [m]
95 REAL,DIMENSION(:,:), INTENT(INOUT) :: PFFLOOD ! Fraction of flood [-]
96 REAL,DIMENSION(:,:), INTENT(INOUT) :: PSURF_STO ! river channel storage at t [kg]
97 REAL,DIMENSION(:,:), INTENT(INOUT) :: PGROUND_STO! groundwater storage at t [kg]
98 REAL,DIMENSION(:,:), INTENT(INOUT) :: PFLOOD_STO ! Floodplain water storage at t [kg]
99 !
100 REAL,DIMENSION(:,:), INTENT(OUT) :: PSOUT ! Outflow from the surface river reservoir [kg/s]
101 REAL,DIMENSION(:,:), INTENT(OUT) :: PSIN ! Inflow to the surface river reservoir [kg/s]
102 REAL,DIMENSION(:,:), INTENT(INOUT) :: PGOUT ! ground water outflow [kg/s]
103 REAL,DIMENSION(:,:), INTENT(OUT) :: PQFR ! Flood flow to river
104 REAL,DIMENSION(:,:), INTENT(OUT) :: PQRF ! River flow to floodplain
105 !
106 REAL,DIMENSION(:,:), INTENT(OUT) :: PVFIN ! River flow to flood velocity [m/s]
107 REAL,DIMENSION(:,:), INTENT(OUT) :: PVFOUT! Flood flow to river velocity [m/s]
108 REAL,DIMENSION(:,:), INTENT(OUT) :: PHSF ! River-Floodplain depth comparison [m]
109 !
110 REAL,DIMENSION(:,:,:), INTENT(IN) :: PTAB_F ! Flood fraction array
111 REAL,DIMENSION(:,:,:), INTENT(IN) :: PTAB_H ! Topo height array
112 REAL,DIMENSION(:,:,:), INTENT(IN) :: PTAB_VF ! Flood volume array
113 !
114 REAL, INTENT(INOUT) :: PGSTO_ALL !Global groundwater storage at t [kg]
115 REAL, INTENT(INOUT) :: PGSTO2_ALL !Global groundwater storage at t-1 [kg]
116 REAL, INTENT(INOUT) :: PGIN_ALL !Global gw recharge + lateral input [kg/m2/s]
117 REAL, INTENT(INOUT) :: PGOUT_ALL !Global gw outflow [kg/m2/s]
118 !
119 REAL,DIMENSION(:,:), INTENT(INOUT) :: PHGROUND ! water table elevation [m]
120 REAL,DIMENSION(:,:), INTENT(IN) :: PWEFF ! Effective porosity [-]
121 !
122 !* 0.2 declarations of local variables
123 !
124 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZSURF_STO2 ! river channel storage at t+1 [kg]
125 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZGROUND_STO2! Groundwater storage at t+1 [kg]
126 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZFLOOD_STO2 ! Floodplain water storage at t+1 [kg]
127 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZQFR
128 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZQRF
129 !
130 REAL :: ZFSTO_ALL, ZFSTO2_ALL, ZSOURCE_ALL, ZSSTO_ALL, ZSSTO2_ALL, &
131  ZSIN_ALL, ZDRUN_ALL, ZSOUT_ALL, ZVEL_ALL, ZFIN_ALL, &
132  ZFOUT_ALL, ZHS_ALL,ZHF_ALL,ZFF_ALL, ZRECUP_ALL
133 !
134 REAL(KIND=JPRB) :: ZHOOK_HANDLE
135 !
136 !-------------------------------------------------------------------------------
137 ! * Init
138 !-------------------------------------------------------------------------------
139 !
140 IF (lhook) CALL dr_hook('TRIP',0,zhook_handle)
141 !
142 zfsto_all = 0.0
143 zfsto2_all = 0.0
144 zsource_all = 0.0
145 zssto_all = 0.0
146 zssto2_all = 0.0
147 zsin_all = 0.0
148 zdrun_all = 0.0
149 zsout_all = 0.0
150 zvel_all = 0.0
151 zfin_all = 0.0
152 zfout_all = 0.0
153 zhs_all = 0.0
154 zhf_all = 0.0
155 zff_all = 0.0
156 zrecup_all = 0.0
157 !
158 zsurf_sto2(:,:) = 0.0
159 zground_sto2(:,:) = 0.0
160 zflood_sto2(:,:) = 0.0
161 !
162 zqfr(:,:) = 0.0
163 zqrf(:,:) = 0.0
164 !
165 !-------------------------------------------------------------------------------
166 ! * Ground water storage
167 !-------------------------------------------------------------------------------
168 !
169 IF(hgroundw=='DEF')THEN
170 !
171  pgout(:,:)=max(pdrain(:,:),0.0)
172 !
173 ELSEIF(hgroundw=='CST')THEN
174 !
175  CALL trip_gw_buffer_tank(ptstep,oprint,parea,omask_gw,pground_sto,zground_sto2, &
176  pdrain,ptaug,pgout,pgsto_all,pgsto2_all,pgin_all,pgout_all)
177 !
178 ENDIF
179 !
180 !-------------------------------------------------------------------------------
181 ! * Floodplains storage
182 !-------------------------------------------------------------------------------
183 !
184 IF(oflood)THEN
185 !
186  CALL trip_surface_flood(klisting,ptstep,oprint,omask_fld, &
187  ptab_f,ptab_h,ptab_vf,parea,pvel, &
188  plen,pwidth,pn_flood,phc_bed, &
189  phs,psurf_sto,pflood_sto,psource, &
190  zflood_sto2,phflood,pfflood,pflood_len, &
191  pwflood,pqfr,pqrf,pvfin,pvfout,phsf, &
192  zfsto_all,zfsto2_all,zsource_all, &
193  zfin_all,zfout_all,zhf_all,zff_all )
194 !
195  zqfr(:,:) = pqfr(:,:)
196  zqrf(:,:) = pqrf(:,:)
197 !
198 ENDIF
199 !
200 !-------------------------------------------------------------------------------
201 ! * Surface water storage
202 !-------------------------------------------------------------------------------
203 !
204  CALL trip_surface_water(klisting,ptstep,kgrcn,kseq,knextx,knexty,kseqmax, &
205  oprint,omask_vel,plen,prunoff, &
206  pvel,phs,psurf_sto,zsurf_sto2,pgout,psin,psout, &
207  parea,zqfr,zqrf, &
208  zssto_all,zssto2_all,zsin_all,zdrun_all, &
209  zsout_all,zvel_all,zhs_all )
210 !
211 !-------------------------------------------------------------------------------
212 ! * Update all reservoir and conserve water mass as possible
213 !-------------------------------------------------------------------------------
214 !
215  CALL trip_update_and_conserv(oprint,oflood,hgroundw,parea,pweff, &
216  zsurf_sto2,zflood_sto2,zground_sto2, &
217  psurf_sto,pflood_sto,pground_sto, &
218  omask_gw,phground,zrecup_all )
219 !
220 !-------------------------------------------------------------------------------
221 ! * Writting the budget
222 !-------------------------------------------------------------------------------
223 !
224 IF(oprint.AND.ktrip==1.AND.ktsept==1)THEN
225 !
226  WRITE(klisting,*)''
227  WRITE(klisting,*)' START RUN ISBA-TRIP-FP '
228  WRITE(klisting,*)' Budget en kg/m2 '
229  WRITE(klisting,*)''
230  WRITE(klisting,'(a90)')'RUN TSTEP S_err F_err G_err MR(mm/y) Vel(m/s) Hs Hf Ff UNCSV'
231  WRITE(klisting,*)''
232 !
233 ENDIF
234 !
235 IF(oprint) THEN
236 !
237  WRITE(klisting,'(i3,1x,i3,3(2x,g8.2),f8.2,f8.2,8(2x,f8.3))') &
238  ktrip,ktsept, &
239 ! surface budget S_err
240  (zssto_all-zssto2_all)+ptstep*(zsin_all-zsout_all), &
241 ! floodplains budget F_err
242  (zfsto_all-zfsto2_all)+ptstep*(zsource_all+zfin_all-zfout_all), &
243 ! ground budget G_err
244  (pgsto_all-pgsto2_all)+ptstep*(pgin_all-pgout_all), &
245 ! output flow to the sea, MR(mm/y)
246  (zssto_all-zssto2_all +ptstep*zdrun_all)/xsea*xyear*REAL(KTSTEP_END),&
247 ! mean flow velocity, Vel(m/s), and mean stream depth, Hs (m)
248 ! mean floddplains depth, Hf (m), and mean flood fraction, Ff (%)
249  zvel_all,zhs_all,zhf_all,100.*zff_all,zrecup_all
250 !
251 ENDIF
252 !
253 IF (lhook) CALL dr_hook('TRIP',1,zhook_handle)
254 !
255 !-------------------------------------------------------------------------------
256 !-------------------------------------------------------------------------------
257 END SUBROUTINE trip
subroutine trip_surface_water(KLISTING, PTSTEP, KGRCN, KSEQ, KNEXTX, KNEXTY, KSEQMAX, OPRINT, OMASK_VEL, PLEN, PRUNOFF, PVEL, PHS, PSURF_STO, PSURF_STO2, PGOUT, PSIN, PSOUT, PAREA, PQFR, PQRF, PSSTO_ALL, PSSTO2_ALL, PSIN_ALL, PDRUN_ALL, PSOUT_ALL, PVEL_ALL, PHS_ALL)
subroutine trip_update_and_conserv(OPRINT, OFLOOD, HGROUNDW, PAREA, PW
real, save xrholw
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine trip(KLISTING, HGROUNDW, OFLOOD, OPRINT, PTSTEP,
Definition: trip.F90:3
real, save xsea
real, save xyear
subroutine trip_surface_flood(KLISTING, PTSTEP, OPRINT, OMASK_FLD, PTAB_F, PTAB_H, PTAB_VF, PAREA, PVEL, PLEN, PWIDTH, PN_FLOOD, PHC, PHS, PSURF_STO, PFLOOD_STO, PSOURCE, PFLOOD_STO2, PHFLOOD, PFFLOOD, PFLOOD_LEN, PWFLOOD, PQFR, PQRF, PVFIN, PVFOUT, PHSF, PFSTO_ALL, PFSTO2_ALL, PSOURCE_ALL, PFIN_ALL, PFOUT_ALL, PHF_ALL, PFF_ALL)
subroutine trip_gw_buffer_tank(PTSTEP, OPRINT, PAREA, OMASK_GW, PGROUN