7 SnowUse, qn1, qf, qs, Temp_C, VegFraction, avcp, Press_hPa, lv_J_kg, &
8 tstep_real, DRAINRT, nsh_real, &
9 Precip, RainMaxRes, RAINCOVER, sfr_surf, LAI_id_prev, LAImax, LAImin, &
11 QE_LUMPS, psyc_hPa, s_hPa, sIce_hpa, Veg_Fr_temp, VegPhenLumps)
27 INTEGER,
PARAMETER :: ndays = 366
28 INTEGER,
PARAMETER :: NSurf = 7
29 INTEGER,
PARAMETER :: NVegSurf = 3
30 INTEGER,
PARAMETER :: ivConif = 1
31 INTEGER,
PARAMETER :: ivGrass = 3
34 REAL(KIND(1D0)),
PARAMETER :: Qm = 0
36 INTEGER,
INTENT(in) :: veg_type
37 INTEGER,
INTENT(in) :: SnowUse
39 REAL(KIND(1D0)),
INTENT(in) :: qn1
40 REAL(KIND(1D0)),
INTENT(in) :: qf
41 REAL(KIND(1D0)),
INTENT(in) :: qs
42 REAL(KIND(1D0)),
INTENT(in) :: Temp_C
43 REAL(KIND(1D0)),
INTENT(in) :: VegFraction
44 REAL(KIND(1D0)),
INTENT(in) :: avcp
45 REAL(KIND(1D0)),
INTENT(in) :: Press_hPa
46 REAL(KIND(1D0)),
INTENT(in) :: lv_J_kg
47 REAL(KIND(1D0)),
INTENT(in) :: tstep_real
48 REAL(KIND(1D0)),
INTENT(in) :: DRAINRT
49 REAL(KIND(1D0)),
INTENT(in) :: nsh_real
50 REAL(KIND(1D0)),
INTENT(in) :: Precip
51 REAL(KIND(1D0)),
INTENT(in) :: RainMaxRes
52 REAL(KIND(1D0)),
INTENT(in) :: RAINCOVER
54 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: sfr_surf
55 REAL(KIND(1D0)),
DIMENSION(NVEGSURF),
INTENT(in) :: LAI_id_prev
56 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(in) :: LAImax
57 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(in) :: LAImin
59 REAL(KIND(1D0)),
INTENT(out) :: QH_LUMPS
60 REAL(KIND(1D0)),
INTENT(out) :: QE_LUMPS
61 REAL(KIND(1D0)),
INTENT(out) :: psyc_hPa
62 REAL(KIND(1D0)),
INTENT(out) :: s_hPa
63 REAL(KIND(1D0)),
INTENT(out) :: sIce_hpa
64 REAL(KIND(1D0)),
INTENT(out) :: Veg_Fr_temp
65 REAL(KIND(1D0)),
INTENT(out) :: VegPhenLumps
69 REAL(KIND(1D0)),
DIMENSION(3) :: sfrVeg
70 REAL(KIND(1D0)) :: VegPhen, VegMax, VegMin, &
74 alpha_qhqe, RAINRES, RainBucket, tlv
75 REAL(KIND(1D0)),
PARAMETER :: NAN = -999
77 tlv = lv_j_kg/tstep_real
85 sfrveg = sfr_surf(ivconif + 2:ivgrass + 2)
89 psyc_hpa =
psyc_const(avcp, press_hpa, lv_j_kg)
90 psyc_s = psyc_hpa/s_hpa
94 IF (snowuse == 1)
THEN
100 psyc_s = psyc_hpa/sice_hpa
123 vegphen = dot_product(sfrveg, lai_id_prev)
124 vegmax = dot_product(sfrveg, laimax)
125 vegmin = dot_product(sfrveg, laimin)
133 IF (vegmax <= 0.01000)
THEN
136 vegphenlumps = (vegphen)/(vegmax)
137 veg_fr_temp = vegfraction*vegphenlumps
144 IF (veg_fr_temp > 0.9000)
THEN
145 beta = (20 - 3)*veg_fr_temp + 3
146 alpha_qhqe = veg_fr_temp*0.8 + 0.2
149 IF (veg_type == 1)
THEN
152 ELSEIF (veg_type == 2)
THEN
156 alpha_qhqe = veg_fr_temp*alpha_sl + alpha_in
160 qh_lumps = ((1 - alpha_qhqe) + psyc_s)/(1 + psyc_s)*(qn1 + qf - qs - qm) - beta
162 IF (qh_lumps == nan) qh_lumps = qn1*0.2
163 qe_lumps = (alpha_qhqe/(1 + psyc_s)*(qn1 + qf - qs - qm)) + beta
167 IF (qe_lumps > 0.) rainbucket = rainbucket - qe_lumps/tlv
168 IF (temp_c > 0.) rainbucket = rainbucket - drainrt/nsh_real
169 IF (rainbucket < 0.) rainbucket = 0.
170 IF (precip > 0) rainbucket = min(rainmaxres, rainbucket + precip)
173 IF (rainres > raincover) rainres = raincover
181 SnowUse, qn1, qf, qs, Temp_C, VegFraction, avcp, Press_hPa, lv_J_kg, &
182 tstep_real, DRAINRT, nsh_real, &
183 Precip, RainMaxRes, RAINCOVER, &
184 sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water, & !input
186 LAImax_evetr, LAImax_dectr, LAImax_grass, &
187 LAImin_evetr, LAImin_dectr, LAImin_grass, &
189 QE_LUMPS, psyc_hPa, s_hPa, sIce_hpa, Veg_Fr_temp, VegPhenLumps)
205 INTEGER,
PARAMETER :: ndays = 366
206 INTEGER,
PARAMETER :: NSurf = 7
207 INTEGER,
PARAMETER :: NVegSurf = 3
208 INTEGER,
PARAMETER :: ivConif = 1
209 INTEGER,
PARAMETER :: ivGrass = 3
212 REAL(KIND(1D0)),
PARAMETER :: Qm = 0
214 INTEGER,
INTENT(in) :: veg_type
215 INTEGER,
INTENT(in) :: SnowUse
217 REAL(KIND(1D0)),
INTENT(in) :: qn1
218 REAL(KIND(1D0)),
INTENT(in) :: qf
219 REAL(KIND(1D0)),
INTENT(in) :: qs
220 REAL(KIND(1D0)),
INTENT(in) :: Temp_C
221 REAL(KIND(1D0)),
INTENT(in) :: VegFraction
222 REAL(KIND(1D0)),
INTENT(in) :: avcp
223 REAL(KIND(1D0)),
INTENT(in) :: Press_hPa
224 REAL(KIND(1D0)),
INTENT(in) :: lv_J_kg
225 REAL(KIND(1D0)),
INTENT(in) :: tstep_real
226 REAL(KIND(1D0)),
INTENT(in) :: DRAINRT
227 REAL(KIND(1D0)),
INTENT(in) :: nsh_real
228 REAL(KIND(1D0)),
INTENT(in) :: Precip
229 REAL(KIND(1D0)),
INTENT(in) :: RainMaxRes
230 REAL(KIND(1D0)),
INTENT(in) :: RAINCOVER
232 REAL(KIND(1D0)),
INTENT(IN) :: sfr_paved
233 REAL(KIND(1D0)),
INTENT(IN) :: sfr_bldg
234 REAL(KIND(1D0)),
INTENT(IN) :: sfr_evetr
235 REAL(KIND(1D0)),
INTENT(IN) :: sfr_dectr
236 REAL(KIND(1D0)),
INTENT(IN) :: sfr_grass
237 REAL(KIND(1D0)),
INTENT(IN) :: sfr_bsoil
238 REAL(KIND(1D0)),
INTENT(IN) :: sfr_water
239 REAL(KIND(1D0)),
DIMENSION(NSURF) :: sfr_surf
241 REAL(KIND(1D0)),
DIMENSION(NVEGSURF),
INTENT(in) :: LAI_id_prev
243 REAL(KIND(1D0)),
INTENT(IN) :: LAImax_evetr
244 REAL(KIND(1D0)),
INTENT(IN) :: LAImax_dectr
245 REAL(KIND(1D0)),
INTENT(IN) :: LAImax_grass
246 REAL(KIND(1D0)),
DIMENSION(3) :: LAImax
248 REAL(KIND(1D0)),
INTENT(IN) :: LAImin_evetr
249 REAL(KIND(1D0)),
INTENT(IN) :: LAImin_dectr
250 REAL(KIND(1D0)),
INTENT(IN) :: LAImin_grass
251 REAL(KIND(1D0)),
DIMENSION(3) :: LAImin
253 REAL(KIND(1D0)),
INTENT(out) :: QH_LUMPS
254 REAL(KIND(1D0)),
INTENT(out) :: QE_LUMPS
255 REAL(KIND(1D0)),
INTENT(out) :: psyc_hPa
256 REAL(KIND(1D0)),
INTENT(out) :: s_hPa
257 REAL(KIND(1D0)),
INTENT(out) :: sIce_hpa
258 REAL(KIND(1D0)),
INTENT(out) :: Veg_Fr_temp
259 REAL(KIND(1D0)),
INTENT(out) :: VegPhenLumps
263 REAL(KIND(1D0)),
DIMENSION(3) :: sfrVeg
264 REAL(KIND(1D0)) :: VegPhen, VegMax, VegMin, &
266 alpha_sl, alpha_in, &
268 alpha_qhqe, RAINRES, RainBucket, tlv
269 REAL(KIND(1D0)),
PARAMETER :: NAN = -999
271 sfr_surf = [sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water]
272 laimax = [laimax_evetr, laimax_dectr, laimax_grass]
273 laimin = [laimin_evetr, laimin_dectr, laimin_grass]
275 tlv = lv_j_kg/tstep_real
283 sfrveg = sfr_surf(ivconif + 2:ivgrass + 2)
287 psyc_hpa =
psyc_const(avcp, press_hpa, lv_j_kg)
288 psyc_s = psyc_hpa/s_hpa
292 IF (snowuse == 1)
THEN
293 IF (temp_c <= 0)
THEN
298 psyc_s = psyc_hpa/sice_hpa
321 vegphen = dot_product(sfrveg, lai_id_prev)
322 vegmax = dot_product(sfrveg, laimax)
323 vegmin = dot_product(sfrveg, laimin)
331 IF (vegmax <= 0.01000)
THEN
334 vegphenlumps = (vegphen)/(vegmax)
335 veg_fr_temp = vegfraction*vegphenlumps
342 IF (veg_fr_temp > 0.9000)
THEN
343 beta = (20 - 3)*veg_fr_temp + 3
344 alpha_qhqe = veg_fr_temp*0.8 + 0.2
347 IF (veg_type == 1)
THEN
350 ELSEIF (veg_type == 2)
THEN
354 alpha_qhqe = veg_fr_temp*alpha_sl + alpha_in
358 qh_lumps = ((1 - alpha_qhqe) + psyc_s)/(1 + psyc_s)*(qn1 + qf - qs - qm) - beta
360 IF (qh_lumps == nan) qh_lumps = qn1*0.2
361 qe_lumps = (alpha_qhqe/(1 + psyc_s)*(qn1 + qf - qs - qm)) + beta
365 IF (qe_lumps > 0.) rainbucket = rainbucket - qe_lumps/tlv
366 IF (temp_c > 0.) rainbucket = rainbucket - drainrt/nsh_real
367 IF (rainbucket < 0.) rainbucket = 0.
368 IF (precip > 0) rainbucket = min(rainmaxres, rainbucket + precip)
371 IF (rainres > raincover) rainres = raincover
subroutine lumps_cal_qhqe_dts(veg_type, snowuse, qn1, qf, qs, temp_c, vegfraction, avcp, press_hpa, lv_j_kg, tstep_real, drainrt, nsh_real, precip, rainmaxres, raincover, sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water, lai_id_prev, laimax_evetr, laimax_dectr, laimax_grass, laimin_evetr, laimin_dectr, laimin_grass, qh_lumps, qe_lumps, psyc_hpa, s_hpa, sice_hpa, veg_fr_temp, vegphenlumps)
subroutine lumps_cal_qhqe(veg_type, snowuse, qn1, qf, qs, temp_c, vegfraction, avcp, press_hpa, lv_j_kg, tstep_real, drainrt, nsh_real, precip, rainmaxres, raincover, sfr_surf, lai_id_prev, laimax, laimin, qh_lumps, qe_lumps, psyc_hpa, s_hpa, sice_hpa, veg_fr_temp, vegphenlumps)