8 hprogram,hstep,ki,kstep)
71 USE modd_topodyn, ONLY : nncat, nmesht, nnmc, xmpara, xdmaxt
72 USE modd_coupling_topd, ONLY : xwg_full, xdtopi, xkac_pre, xdtopt, xwtopt, xwstopt, xas_nature,&
73 xka_pre, nmaskt, xwsupsat,&
74 xrunoff_top, xatop, xwfctopi, nnpix,&
75 xfrac_d2, xfrac_d3, xwstopi, xdmaxfc, xwfctopt, xwgi_full,&
76 nfreq_maps_asat, xavg_runoffcm,&
77 xavg_draincm, lbudget_topd
90 USE modi_recharge_surf_topd
92 USE modi_sat_area_frac
94 USE modi_diag_isba_to_rout
95 USE modi_isba_to_topdsat
98 USE modi_write_file_isbamap
101 USE modi_avg_patch_wg
104 USE modi_init_budget_coupl_rout
105 USE modi_control_water_budget_topd
107 USE yomhook
,ONLY : lhook, dr_hook
108 USE parkind1
,ONLY : jprb
117 TYPE(isba_grid_t
),
INTENT(INOUT) :: ig
118 TYPE(isba_t
),
INTENT(INOUT) :: i
122 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
123 CHARACTER(LEN=*),
INTENT(IN) :: hstep
124 INTEGER,
INTENT(IN) :: ki
125 INTEGER,
INTENT(IN) :: kstep
129 REAL,
DIMENSION(NNCAT,NMESHT) :: zrt
130 REAL,
DIMENSION(NNCAT,NMESHT) :: zdeft
131 REAL,
DIMENSION(NNCAT,NMESHT) :: zri_wgit
132 REAL,
DIMENSION(NNCAT,NMESHT) :: zrunoff_topd
133 REAL,
DIMENSION(NNCAT,NMESHT) :: zdrain_topd
134 REAL,
DIMENSION(NNCAT,NMESHT) :: zkappa
135 REAL,
DIMENSION(NNCAT) :: zkappac
136 REAL,
DIMENSION(KI) :: zri
137 REAL,
DIMENSION(KI) :: zri_wgi
138 REAL,
DIMENSION(KI) :: zwm,zwim
139 REAL,
DIMENSION(KI) :: z_wstopi, z_wfctopi
140 REAL,
DIMENSION(KI) :: zrunoffc_full
141 REAL,
DIMENSION(KI) :: zrunoffc_fullm
142 REAL,
DIMENSION(KI) :: zrunoff_isba
143 REAL,
DIMENSION(KI) :: zdrainc_full
144 REAL,
DIMENSION(KI) :: zdrainc_fullm
145 REAL,
DIMENSION(KI) :: zdrain_isba
146 REAL,
DIMENSION(KI) :: zdg_full
147 REAL,
DIMENSION(KI) :: zwg2_full, zwg3_full, zdg2_full, zdg3_full
148 REAL,
DIMENSION(KI) :: zwgi_full
149 REAL,
DIMENSION(KI) :: zas
150 REAL,
DIMENSION(NNCAT) :: z_dw1,z_dw2
151 REAL :: zavg_mesh_size, zwsatmax
152 LOGICAL,
DIMENSION(NNCAT) :: gtopd
153 INTEGER :: jj, ji, jlayer, jpatch
155 INTEGER :: iact_ground_layer, idepth
157 REAL,
DIMENSION(U%NSIZE_NATURE,3) :: zwg_3l,zwgi_3l,zdg_3l
158 REAL,
DIMENSION(U%NSIZE_NATURE) :: zmesh_size, zwsat
159 REAL,
DIMENSION(U%NSIZE_NATURE,I%NGROUND_LAYER,I%NPATCH) :: zwg_tmp
160 REAL,
DIMENSION(KI) :: zf_param_full
161 REAL,
DIMENSION(NNCAT,NMESHT) :: zf_paramt
164 INTEGER,
DIMENSION(U%NSIZE_NATURE) :: inb_active_patch
165 REAL,
DIMENSION(U%NSIZE_NATURE):: zsumfrd2, zsumfrd3
166 REAL,
DIMENSION(U%NSIZE_NATURE,3) :: zwg_ctl
168 REAL(KIND=JPRB) :: zhook_handle
170 IF (lhook) CALL dr_hook(
'COUPL_TOPD',0,zhook_handle)
177 zwsatmax=maxval(xwstopi,mask=xwstopi/=xundef)
178 i%XWG(:,:,:) = max(i%XWG(:,:,:),xwgmin)
179 zwg_tmp(:,:,:) = i%XWG(:,:,:)
180 IF (.NOT.
ALLOCATED(xwsupsat))
ALLOCATE(xwsupsat(ki))
182 DO jj=1,u%NSIZE_NATURE
183 inb_active_patch(jj)=count(i%XPATCH(jj,:)/=0.)
186 IF (i%CISBA==
'DIF')
THEN
188 SIZE(i%XWG,1),zdg_3l)
189 zwg_3l(:,2)=dgmi%XFRD2_TWG(:)
190 zwg_3l(:,3)=dgmi%XFRD3_TWG(:)
191 zwgi_3l(:,2)=dgmi%XFRD2_TWGI(:)
192 zwgi_3l(:,3)=dgmi%XFRD3_TWGI(:)
194 ELSEIF (i%CISBA==
'3-L')
THEN
196 SIZE(i%XWG,1),zwg_3l,zwgi_3l,zdg_3l)
199 zwm(1:ki) = xwg_full(1:ki)
200 zwim(1:ki) = xwgi_full(1:ki)
210 WHERE ( zdg2_full/=xundef )
211 zdg_full = xfrac_d2*zdg2_full + xfrac_d3*(zdg3_full-zdg2_full)
219 WHERE ( zdg_full/=xundef .AND. zdg_full/=0. )
220 xwg_full = xfrac_d2*(zdg2_full/zdg_full)*zwg2_full + xfrac_d3*((zdg3_full-zdg2_full)/zdg_full)*zwg3_full
229 WHERE (xwtopt == xundef) xwtopt = 0.0
234 WHERE ( zwgi_full/=xundef .AND. xfrac_d2>0 .AND. zdg_full/=0. )
235 xwgi_full = xfrac_d2*(zdg2_full/zdg_full)*zwgi_full
240 WHERE ( (xdtopi/=xundef).AND.(xwgi_full/=xundef).AND.(zwim/=xundef))
241 zri_wgi = ( (xwgi_full - zwim) ) * xdtopi
247 WHERE ( xdtopi==xundef )
259 WHERE ( xwgi_full/=0. .AND.xwgi_full/=xundef .AND. xwstopi/=0. )
260 z_wstopi = xwstopi - xwgi_full
261 z_wfctopi = xwfctopi * z_wstopi / xwstopi
269 WHERE ( abs(xwstopt-xwtopt) < 0.0000000001 ) xwstopt = xwtopt
271 WHERE ( xwtopt>xwstopt ) xwtopt = xwstopt
273 WHERE ( xwfctopt/= xundef .AND. xwstopt/=xundef .AND. xdtopt/=xundef)&
274 xdmaxfc = (xwstopt - xwfctopt) * xdtopt
280 IF( i%CKSAT==
'EXP' .OR. i%CKSAT==
'SGH' )
THEN
282 xf_param(:) = i%XF_PARAM(:)
288 WHERE( zf_paramt/=xundef .AND. zf_paramt/=0. ) zf_paramt = (xwstopt-xwfctopt)/zf_paramt
291 xmpara(jj) = sum(zf_paramt(jj,:),mask=zf_paramt(jj,:)/=xundef) / nnmc(jj)
297 xmpara(jj) = sum( xdmaxfc(jj,:),mask=xdmaxfc(jj,:)/=xundef ) / nnmc(jj) / 4.
312 WHERE ( (xdtopi/=xundef).AND.(xwg_full/=xundef).AND.(zwm/=xundef))
313 zri = ( (xwg_full - zwm) ) * xdtopi+ zri_wgi
326 CALL
topodyn_lat(zrt(:,:),zdeft(:,:),zkappa(:,:),zkappac(:),gtopd)
339 WHERE ( xdtopt(jj,:)/=xundef .AND. xdtopt(jj,:)/=0. )
340 xwtopt(jj,:) = xwstopt(jj,:) - ( zdeft(jj,:) / xdtopt(jj,:) )
342 xwtopt(jj,:) = xwtopt(jj,:) - zri_wgit(jj,:)
345 WHERE (xwtopt > xwstopt ) xwtopt = xwstopt
354 CALL
pack_same_rank(u%NR_NATURE, (1-xfrac_d2)*zwg2_full + xfrac_d2*xwg_full, zwg_3l(:,2))
355 CALL
pack_same_rank(u%NR_NATURE, (1-xfrac_d3)*zwg3_full + xfrac_d3*xwg_full, zwg_3l(:,3))
361 zavg_mesh_size = sum(zmesh_size(:),mask=zmesh_size(:)/=xundef) / count(zmesh_size(:)/=xundef)
363 IF (i%CISBA==
'DIF')
THEN
365 SIZE(zwg_3l,1),zwg_3l)
366 ELSEIF (i%CISBA==
'3-L')
THEN
368 SIZE(zwg_3l,1),zwg_3l,zwgi_3l,zdg_3l)
371 WHERE(i%XWG(:,:,:)>zwsatmax.AND.i%XWG(:,:,:)/=xundef)
372 i%XWG(:,:,:)=zwsatmax
374 WHERE(i%XWG(:,:,:)<xwgmin)
380 IF (i%CISBA==
'DIF')
THEN
382 DO jlayer=2,i%NGROUND_LAYER
383 IF (all(i%XWG(:,jlayer,:)==xundef))
THEN
384 iact_ground_layer=jlayer-1
394 zwg_tmp(:,2,:), i%XWG(:,2,:),i%XDG(:,2,:),&
395 zmesh_size,zavg_mesh_size,zwsat(:))
396 DO jlayer = 3,iact_ground_layer
398 zwg_tmp(:,jlayer,:), i%XWG(:,jlayer,:),&
399 i%XDG(:,jlayer,:)-i%XDG(:,jlayer-1,:),&
400 zmesh_size,zavg_mesh_size,zwsat(:))
403 WHERE(i%XWG(:,:,:)>zwsatmax.AND.i%XWG(:,:,:)/=xundef)
404 i%XWG(:,:,:)=zwsatmax
406 WHERE(i%XWG(:,:,:)<xwgmin)
421 zrunoffc_full,zrunoffc_fullm,zrunoff_isba)
423 xavg_runoffcm(:) = dgei%XAVG_RUNOFFC(:)
425 WHERE (zrunoff_isba==xundef) zrunoff_isba = 0.
427 zrunoff_topd(:,:) = 0
439 zdrainc_full,zdrainc_fullm,zdrain_isba)
441 WHERE (zdrain_isba==xundef) zdrain_isba=0.
443 xavg_draincm(:) = dgei%XAVG_DRAINC(:)
445 zdrain_topd(:,:) = 0.0
451 IF (nmaskt(jj,ji)/=nundef) &
452 zdrain_topd(jj,ji) = zdrain_topd(jj,ji) / nnpix(nmaskt(jj,ji))
458 CALL
routing(zrunoff_topd,zdrain_topd,kstep)
460 xka_pre(:,:) = zkappa(:,:)
461 xkac_pre(:) = zkappac(:)
466 IF (nfreq_maps_asat/=0.AND.mod(kstep,nfreq_maps_asat)==0)
THEN
467 CALL
open_file(
'ASCII ',nunit,hfile=
'carte_surfcont'//hstep,hform=
'FORMATTED',haction=
'WRITE')
473 IF (lhook) CALL dr_hook(
'COUPL_TOPD',1,zhook_handle)
subroutine dg_dfto3l(I, KI, PDG)
subroutine topd_to_isba(I, UG, U, KI, KSTEP, GTOPD)
subroutine routing(PRO, PDR, KSTEP)
subroutine recharge_surf_topd(PHI, PHT, KI)
subroutine dispatch_wg(I, KI, PWG, PWGI, PDG)
subroutine write_file_isbamap(UG, KUNIT, PVAR, KI)
subroutine sat_area_frac(PDEF, PAS, GTOPD)
subroutine coupl_topd(DGEI, DGMI, IG, I, UG, U, HPROGRAM, HSTEP, KI, KSTEP)
subroutine avg_patch_wg(I, KI, PWG, PWGI, PDG)
subroutine topd_to_df(I, KI, PWG)
subroutine topodyn_lat(PRW, PDEF, PKAPPA, PKAPPAC, GTOPD)
subroutine close_file(HPROGRAM, KUNIT)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine control_water_budget_topd(I, U, PWGM, PWG, PDG, PMESH_SIZE, PAVG_MESH_SIZE, PWSAT)
subroutine isba_to_topdsat(PKAPPA, PKAPPAC, KI, PRO_I, PRO_T)
subroutine diag_isba_to_rout(UG, PVARC, PVARCP, PVARROUT)
subroutine isba_to_topd(PVARI, PVART)
subroutine init_budget_coupl_rout(DGEI, DGMI, IG, I, U, KNI)
subroutine open_file(HPROGRAM, KUNIT, HFILE, HFORM, HACTION, HACCESS, KRECL)