60 USE modd_isba_par
, ONLY : xwgmin
79 REAL,
DIMENSION(:,:),
INTENT(IN) :: PWGM
80 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PWG
81 REAL,
DIMENSION(:,:),
INTENT(IN) :: PDG
82 REAL,
DIMENSION(:),
INTENT(IN) :: PMESH_SIZE
83 REAL,
INTENT(IN) :: PAVG_MESH_SIZE
84 REAL,
DIMENSION(:),
INTENT(IN) :: PWSAT
90 REAL,
DIMENSION(SIZE(PWG,1),3) :: ZWG_3L, ZWGI_3L, ZDG_3L
91 REAL :: ZSTOCK_WGM, ZSTOCK_WG
92 REAL :: ZAVG_DGALL, ZCONTROL_WATER_BUDGET_TOPD
94 INTEGER :: JMESH, JP, JJ
95 REAL,
DIMENSION(SIZE(S%XPATCH,1)) :: ZSUMPATCH
96 REAL,
DIMENSION(SIZE(S%XPATCH,1)) :: ZWG_CORR, ZAVG_WGM, ZAVG_WG, ZAVG_DG
97 REAL,
DIMENSION(SIZE(S%XPATCH,1)) :: ZTOTBV_IN_MESH
98 LOGICAL,
DIMENSION(SIZE(S%XPATCH,1)) :: LMODIF
100 REAL(KIND=JPRB) :: ZHOOK_HANDLE
103 IF (
lhook)
CALL dr_hook(
'CONTROL_WATER_BUDGET_TOPD',0,zhook_handle)
105 IF(io%NPATCH/=1)
THEN 109 DO jj=1,
SIZE(s%XPATCH,1)
110 zsumpatch(jj) = zsumpatch(jj) + s%XPATCH(jj,jp)
118 DO jj=1,
SIZE(s%XPATCH,1)
119 IF(zsumpatch(jj) > 0..AND.pwgm(jj,jp)/=
xundef.AND.pwg(jj,jp)/=
xundef.AND.pdg
THEN 121 zavg_wgm(jj) = zavg_wgm(jj) + s%XPATCH(jj,jp) * pwgm(jj,jp) * pdg
129 WHERE (zavg_dg(:)>0.0.AND.zsumpatch(:)>0.)
130 zavg_wgm(:) = zavg_wgm(:) / zavg_dg(:)
131 zavg_wg(:) = zavg_wg(:) / zavg_dg(:)
135 zavg_wgm(:) = pwgm(:,1)
136 zavg_wg(:) = pwg(:,1)
137 zavg_dg(:) = pdg(:,1)
143 zstock_wgm =
sum(zavg_wgm(:)*zavg_dg(:)*pmesh_size(:),&
145 pmesh_size(:)/=
xundef.AND.zsumpatch(:)>0.))
147 zstock_wg =
sum(zavg_wg(:)*zavg_dg(:)*pmesh_size(:),&
149 pmesh_size(:)/=
xundef.AND.zsumpatch(:)>0.))
151 IF (
count(zavg_dg(:)/=
xundef.AND.zsumpatch(:)>0.)/=0. ) &
152 zavg_dgall =
sum(zavg_dg(:),
mask=(zavg_dg(:)/=
xundef.AND.zsumpatch(:)>
155 IF (zavg_dgall/=0.)
THEN 157 zcontrol_water_budget_topd = ( zstock_wg - zstock_wgm )/ zavg_dgall / pavg_mesh_size
159 IF (zcontrol_water_budget_topd==0.0)
GOTO 66
161 ztmp =
count( zavg_wg(:)/=zavg_wgm(:).AND.zavg_wg(:)/=
xundef.AND.zavg_wgm
168 WHERE (ztotbv_in_mesh(:)/=0.0.AND.zavg_wgm(:)/=
xundef.AND.zavg_wg(:)
175 zavg_wg(:) = min(max(zavg_wg(:) - (zcontrol_water_budget_topd/ztmp
183 WHERE ((pwg(:,jp)/=
xundef).AND.(s%XPATCH(:,jp)>0.).AND.(s%XPATCH(:,jp)
189 zstock_wg =
sum(zavg_wg(:)*zavg_dg(:)*pmesh_size(:),&
191 pmesh_size(:)/=
xundef.AND.zsumpatch(:)>0.))
194 IF (zavg_dgall/=0)
THEN 195 zcontrol_water_budget_topd = ( zstock_wg - zstock_wgm )/ zavg_dgall / pavg_mesh_size
200 IF (
lhook)
CALL dr_hook(
'CONTROL_WATER_BUDGET_TOPD',1,zhook_handle)
real, dimension(:), allocatable xtotbv_in_mesh
integer, parameter nundef
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
subroutine control_water_budget_topd(IO, S, U, PWGM, PWG, PDG, PM