52 USE modd_topodyn, ONLY : nncat, xqtot, xtopd_step, xqb_dr, xqb_run
68 USE yomhook
,ONLY : lhook, dr_hook
69 USE parkind1
,ONLY : jprb
77 TYPE(isba_t
),
INTENT(INOUT) :: i
80 INTEGER,
INTENT(IN) :: kni
81 INTEGER,
INTENT(IN) :: kforc_step
84 REAL :: zfact0, zfact1, zfact2
86 REAL,
DIMENSION(SIZE(I%XWG,1),3) :: zwg_3l,zwgi_3l,zdg_3l
87 REAL,
DIMENSION(KNI) :: zb_dwgtot,zb_dwgitot,zb_dswetot,zb_dwr,zb_watbud
89 REAL(KIND=JPRB) :: zhook_handle
91 IF (lhook) CALL dr_hook(
'BUDGET_COUPL_ROUT',0,zhook_handle)
95 IF (i%CISBA==
'DIF')
THEN
98 zwg_3l(:,2)=dgmi%XFRD2_TWG(:)
99 zwg_3l(:,3)=dgmi%XFRD3_TWG(:)
100 zwgi_3l(:,2)=dgmi%XFRD2_TWGI(:)
101 zwgi_3l(:,3)=dgmi%XFRD3_TWGI(:)
103 ELSEIF (i%CISBA==
'3-L')
THEN
105 SIZE(i%XWG,1),zwg_3l,zwgi_3l,zdg_3l)
117 xb_runoff_topd = xb_runoff_isba
122 WHERE ( xb_wg2/=xundef .AND. xb_dg2/=xundef .AND. xb_wg3/=xundef .AND. xb_dg3/=xundef )
123 xb_wgtot(:) = xb_wg2(:)*xb_dg2(:) + xb_wg3(:)*(xb_dg3(:)-xb_dg2(:))
130 WHERE ( xb_wgi2/=xundef .AND. xb_dg2/=xundef .AND. xb_wgi3/=xundef .AND. xb_dg3/=xundef )
131 xb_wgitot(:) = xb_wgi2(:)*xb_dg2(:) + xb_wgi3(:)*(xb_dg3(:)-xb_dg2(:))
133 xb_wgitot(:) = xundef
139 xb_swetot(:) = xb_swe1(:)+xb_swe2(:)+xb_swe3(:)
142 xb_qtot(jcat) = sum(xqtot(jcat,1:kforc_step))
143 xb_qrun(jcat) = sum(xqb_run(jcat,1:kforc_step))
144 xb_qdr(jcat) = sum(xqb_dr(jcat,1:kforc_step))
151 IF ( xb_dg2(jmesh)/=xundef )
THEN
153 zfact0 = xb_abv_bymesh(jmesh,jcat) * xb_mesh_size(jmesh)
154 zfact1 = zfact0 / xrholw
155 zfact2 = nnb_topd * zfact1
159 xb_var_bv(kforc_step,jcat,1) = xb_var_bv(kforc_step,jcat,1) + xb_rain(jmesh) * zfact2
161 xb_var_bv(kforc_step,jcat,2) = xb_var_bv(kforc_step,jcat,2) + xb_snow(jmesh) * zfact2
164 xb_var_bv(kforc_step,jcat,3) = xb_var_bv(kforc_step,jcat,3) + zb_dwr(jmesh) * zfact2
166 xb_var_bv(kforc_step,jcat,4) = xb_var_bv(kforc_step,jcat,4) + (xb_evap(jmesh)-xb_evapm(jmesh)) * zfact1
168 xb_var_bv(kforc_step,jcat,5) = xb_var_bv(kforc_step,jcat,5) + (xb_runoff_topd(jmesh)-xb_runoff_topdm(jmesh)) * zfact1
170 xb_var_bv(kforc_step,jcat,6) = xb_var_bv(kforc_step,jcat,6) + (xb_drain(jmesh)-xb_drainm(jmesh)) * zfact1
172 xb_var_bv(kforc_step,jcat,7) = xb_var_bv(kforc_step,jcat,7) + (xb_wgtot(jmesh)-xb_wgtotm(jmesh)) * zfact0
174 xb_var_bv(kforc_step,jcat,8) = xb_var_bv(kforc_step,jcat,8) + (xb_wgitot(jmesh)-xb_wgitotm(jmesh)) * zfact0
176 xb_var_bv(kforc_step,jcat,9) = xb_var_bv(kforc_step,jcat,9) + (xb_swetot(jmesh)-xb_swetotm(jmesh)) * zfact0
178 xb_var_bv(kforc_step,jcat,11) = xb_var_bv(kforc_step,jcat,11) + (xb_horton(jmesh)-xb_hortonm(jmesh)) * zfact1
180 xb_var_bv(kforc_step,jcat,12) = xb_var_bv(kforc_step,jcat,12) + zb_watbud(jmesh) * zfact2
183 zfact0 = (1.-xb_abv_bymesh(jmesh,jcat)) * xb_mesh_size(jmesh)
184 zfact1 = zfact0 / xrholw
185 zfact2 = nnb_topd * zfact1
188 xb_var_nobv(kforc_step,jcat,1) = xb_var_nobv(kforc_step,jcat,1) + xb_rain(jmesh) * zfact2
189 xb_var_nobv(kforc_step,jcat,2) = xb_var_nobv(kforc_step,jcat,2) + xb_snow(jmesh) * zfact2
190 xb_var_nobv(kforc_step,jcat,3) = xb_var_nobv(kforc_step,jcat,3) + zb_dwr(jmesh) * zfact2
191 xb_var_nobv(kforc_step,jcat,4) = xb_var_nobv(kforc_step,jcat,4) + (xb_evap(jmesh)-xb_evapm(jmesh)) * zfact1
192 xb_var_nobv(kforc_step,jcat,5) = xb_var_nobv(kforc_step,jcat,5) + (xb_runoff_isba(jmesh)-xb_runoff_isbam(jmesh)) * zfact1
193 xb_var_nobv(kforc_step,jcat,6) = xb_var_nobv(kforc_step,jcat,6) + (xb_drain(jmesh)-xb_drainm(jmesh)) * zfact1
194 xb_var_nobv(kforc_step,jcat,7) = xb_var_nobv(kforc_step,jcat,7) + (xb_wgtot(jmesh)-xb_wgtotm(jmesh)) * zfact0
195 xb_var_nobv(kforc_step,jcat,8) = xb_var_nobv(kforc_step,jcat,8) + (xb_wgitot(jmesh)-xb_wgitotm(jmesh)) * zfact0
196 xb_var_nobv(kforc_step,jcat,9) = xb_var_nobv(kforc_step,jcat,9) + (xb_swetot(jmesh)-xb_swetotm(jmesh)) * zfact0
197 xb_var_nobv(kforc_step,jcat,11) = xb_var_nobv(kforc_step,jcat,11) + (xb_horton(jmesh)-xb_hortonm(jmesh)) * zfact1
198 xb_var_nobv(kforc_step,jcat,12) = xb_var_nobv(kforc_step,jcat,12) + zb_watbud(jmesh) * zfact2
204 xb_var_bv(kforc_step,jcat,10) = sum(xb_var_bv(kforc_step,jcat,1:2)) - sum(xb_var_bv(kforc_step,jcat,3:9))
206 xb_var_nobv(kforc_step,jcat,10) = sum(xb_var_nobv(kforc_step,jcat,1:2)) - sum(xb_var_nobv(kforc_step,jcat,3:9))
208 xb_var_q(kforc_step,jcat,1) = (xb_qtot(jcat)-xb_qtotm(jcat)) * xtopd_step
209 xb_var_q(kforc_step,jcat,2) = (xb_qrun(jcat)-xb_qrunm(jcat)) * xtopd_step
210 xb_var_q(kforc_step,jcat,3) = (xb_qdr(jcat)- xb_qdrm(jcat)) * xtopd_step
211 xb_var_q(kforc_step,jcat,4) = sum(xrun_torout(jcat,:)) * xtopd_step
212 xb_var_q(kforc_step,jcat,5) = sum(xdr_torout(jcat,:)) * xtopd_step
219 IF (xb_dg2(jmesh)/=xundef)
THEN
221 zfact0 = xb_mesh_size(jmesh)
222 zfact1 = zfact0 / xrholw
223 zfact2 = nnb_topd * zfact1
228 xb_var_tot(kforc_step,1) = xb_var_tot(kforc_step,1) + xb_rain(jmesh) * zfact2
230 xb_var_tot(kforc_step,2) = xb_var_tot(kforc_step,2) + xb_snow(jmesh) * zfact2
233 xb_var_tot(kforc_step,3) = xb_var_tot(kforc_step,3) + zb_dwr(jmesh) * zfact2
235 xb_var_tot(kforc_step,4) = xb_var_tot(kforc_step,4) + (xb_evap(jmesh)-xb_evapm(jmesh)) * zfact1
237 xb_var_tot(kforc_step,5) = xb_var_tot(kforc_step,5) + (xb_runoff_isba(jmesh)-xb_runoff_isbam(jmesh)) * zfact1
239 xb_var_tot(kforc_step,6) = xb_var_tot(kforc_step,6) + (xb_drain(jmesh)-xb_drainm(jmesh)) * zfact1
241 xb_var_tot(kforc_step,7) = xb_var_tot(kforc_step,7) + (xb_wgtot(jmesh)-xb_wgtotm(jmesh)) * zfact0
243 xb_var_tot(kforc_step,8) = xb_var_tot(kforc_step,8) + (xb_wgitot(jmesh)-xb_wgitotm(jmesh)) * zfact0
245 xb_var_tot(kforc_step,9) = xb_var_tot(kforc_step,9) + (xb_swetot(jmesh)-xb_swetotm(jmesh)) * zfact0
247 xb_var_tot(kforc_step,11) = xb_var_tot(kforc_step,11) + (xb_horton(jmesh)-xb_hortonm(jmesh)) * zfact1
249 xb_var_tot(kforc_step,12) = xb_var_tot(kforc_step,12) + zb_watbud(jmesh) * zfact2
255 xb_var_tot(kforc_step,10) = sum(xb_var_tot(kforc_step,1:2)) - sum(xb_var_tot(kforc_step,3:9))
259 xb_evapm(:) = xb_evap(:)
261 xb_runoff_topdm(:) = xb_runoff_topd(:)
262 xb_runoff_isbam(:) = xb_runoff_isba(:)
263 xb_hortonm(:) = xb_horton(:)
264 xb_drainm(:) = xb_drain(:)
266 xb_wg2m(:) = xb_wg2(:)
267 xb_wg3m(:) = xb_wg3(:)
268 xb_wgtotm(:) = xb_wgtot(:)
269 xb_wgi2m(:) = xb_wgi2(:)
270 xb_wgi3m(:) = xb_wgi3(:)
271 xb_wgitotm(:) = xb_wgitot(:)
272 xb_swe1m(:) = xb_swe1(:)
273 xb_swe2m(:) = xb_swe2(:)
274 xb_swe3m(:) = xb_swe3(:)
275 xb_swetotm(:) = xb_swetot(:)
277 xb_qtotm(:) = xb_qtot(:)
278 xb_qrunm(:) = xb_qrun(:)
279 xb_qdrm(:) = xb_qdr(:)
281 IF (lhook) CALL dr_hook(
'BUDGET_COUPL_ROUT',1,zhook_handle)
subroutine dg_dfto3l(I, KI, PDG)
subroutine budget_coupl_rout(DGEI, DGMI, I, U, KNI, KFORC_STEP)
subroutine avg_patch_wg(I, KI, PWG, PWGI, PDG)