SURFEX v8.1
General documentation of Surfex
coupl_topd.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 !-----------------------------------------------------------------
6 ! #####################
7  SUBROUTINE coupl_topd (DEC, DC, DMI, PMESH_SIZE, IO, S, K, NK, NP, NPE, &
8  UG, U, HPROGRAM, HSTEP, KI, KSTEP)
9 ! #####################
10 !
11 !!**** *COUPL_TOPD*
12 !!
13 !! PURPOSE
14 !! -------
15 !
16 !
17 !
18 !
19 !!** METHOD
20 !! ------
21 !
22 !! EXTERNAL
23 !! --------
24 !!
25 !! none
26 !!
27 !! IMPLICIT ARGUMENTS
28 !! ------------------
29 !!
30 !!
31 !!
32 !!
33 !!
34 !! REFERENCE
35 !! ---------
36 !!
37 !!
38 !!
39 !! AUTHOR
40 !! ------
41 !!
42 !! K. Chancibault * LTHE / Meteo-France *
43 !!
44 !! MODIFICATIONS
45 !! -------------
46 !!
47 !! Original 15/10/2003
48 !! 09/2007 : New organisation of exfiltration, computation of saturated
49 !! area, routing.
50 !! Soil ice content taken into account
51 !! 09/2013 : Modifications to be able to run with ISBA-DF and more than 1
52 !! patch
53 !! 03/2014: Modif BV : New organisation for first time step (displacement
54 !! from init_coupl_topd)
55 !! 07/2015: Modif BV : modification of recharge computation
56 !-------------------------------------------------------------------------------
57 !
58 !* 0. DECLARATIONS
59 ! ------------
60 !
61 !
62 USE modd_diag_n, ONLY : diag_t
65 !
68 !
70 USE modd_surf_atm_n, ONLY : surf_atm_t
71 !
72 USE modd_topd_par, ONLY : nunit
73 USE modd_topodyn, ONLY : nncat, nmesht, nnmc, xmpara, xdmaxt
80  !
81 
82 USE modd_csts, ONLY : xrholw, xrholi
83 USE modd_surf_par, ONLY : xundef, nundef
84 USE modd_isba_par, ONLY : xwgmin
85 
87 !
88 USE modi_get_luout
91 USE modi_isba_to_topd
92 USE modi_recharge_surf_topd
93 USE modi_topodyn_lat
94 USE modi_sat_area_frac
95 USE modi_topd_to_isba
96 USE modi_diag_isba_to_rout
97 USE modi_isba_to_topdsat
98 USE modi_routing
99 USE modi_open_file
100 USE modi_write_file_isbamap
101 USE modi_close_file
102 USE modi_dg_dfto3l
103 USE modi_avg_patch_wg
104 USE modi_dispatch_wg
105 USE modi_topd_to_df
106 USE modi_init_budget_coupl_rout
107 USE modi_control_water_budget_topd
108 !
109 USE yomhook ,ONLY : lhook, dr_hook
110 USE parkind1 ,ONLY : jprb
111 !
112 IMPLICIT NONE
113 !
114 !* 0.1 declarations of arguments
115 !
116 !
117 TYPE(diag_evap_isba_t), INTENT(INOUT) :: DEC
118 TYPE(diag_t), INTENT(INOUT) :: DC
119 TYPE(diag_misc_isba_t), INTENT(INOUT) :: DMI
120 REAL, DIMENSION(:), INTENT(IN) :: PMESH_SIZE
121 TYPE(isba_options_t), INTENT(INOUT) :: IO
122 TYPE(isba_s_t), INTENT(INOUT) :: S
123 TYPE(isba_k_t), INTENT(INOUT) :: K
124 TYPE(isba_nk_t), INTENT(INOUT) :: NK
125 TYPE(isba_np_t), INTENT(INOUT) :: NP
126 TYPE(isba_npe_t), INTENt(INOUT) :: NPE
127 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
128 TYPE(surf_atm_t), INTENT(INOUT) :: U
129 !
130 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
131 CHARACTER(LEN=*), INTENT(IN) :: HSTEP ! atmospheric loop index
132 INTEGER, INTENT(IN) :: KI ! Grid dimensions
133 INTEGER, INTENT(IN) :: KSTEP ! current time step
134 !
135 !* 0.2 declarations of local variables
136 !
137 REAL, DIMENSION(NNCAT,NMESHT) :: ZRT ! recharge on TOP-LAT grid (m)
138 REAL, DIMENSION(NNCAT,NMESHT) :: ZDEFT ! local deficits on TOPODYN grid (m)
139 REAL, DIMENSION(NNCAT,NMESHT) :: ZRI_WGIT ! water changing of phase on TOPMODEL grid
140 REAL, DIMENSION(NNCAT,NMESHT) :: ZRUNOFF_TOPD ! Runoff on the Topodyn grid (m3/s)
141 REAL, DIMENSION(NNCAT,NMESHT) :: ZDRAIN_TOPD ! Drainage from Isba on Topodyn grid (m3/s)
142 REAL, DIMENSION(NNCAT,NMESHT) :: ZKAPPA ! topographic index
143 REAL, DIMENSION(NNCAT) :: ZKAPPAC ! critical topographic index
144 REAL, DIMENSION(KI) :: ZRI ! recharge on ISBA grid (m)
145 REAL, DIMENSION(KI) :: ZRI_WGI ! water changing of phase on ISBA grid
146 REAL, DIMENSION(KI) :: ZWM,ZWIM ! Water content on SurfEx grid after the previous topodyn time step
147 REAL, DIMENSION(KI) :: Z_WSTOPI, Z_WFCTOPI
148 REAL, DIMENSION(KI) :: ZRUNOFFC_FULL ! Cumulated runoff from isba on the full domain (kg/m2)
149 REAL, DIMENSION(KI) :: ZRUNOFFC_FULLM ! Cumulated runoff from isba on the full domain (kg/m2) at t-dt
150 REAL, DIMENSION(KI) :: ZRUNOFF_ISBA ! Runoff from Isba (kg/m2)
151 REAL, DIMENSION(KI) :: ZDRAINC_FULL ! Cumulated drainage from Isba on the full domain (kg/m2)
152 REAL, DIMENSION(KI) :: ZDRAINC_FULLM ! Cumulated drainage from Isba on the full domain (kg/m2) at t-dt
153 REAL, DIMENSION(KI) :: ZDRAIN_ISBA ! Drainage from Isba (m3/s)
154 REAL, DIMENSION(KI) :: ZDG_FULL
155 REAL, DIMENSION(KI) :: ZWG2_FULL, ZWG3_FULL, ZDG2_FULL, ZDG3_FULL
156 REAL, DIMENSION(KI) :: ZWGI_FULL
157 REAL, DIMENSION(KI) :: ZAS ! Saturated area fraction for each Isba meshes
158 REAL, DIMENSION(NNCAT) :: Z_DW1,Z_DW2 ! Wsat-Wfc to actualise M in fonction of WI
159 REAL :: ZAVG_MESH_SIZE, ZWSATMAX
160 LOGICAL, DIMENSION(NNCAT) :: GTOPD ! logical variable = true if topodyn_lat runs
161 INTEGER :: JJ, JI, JL, JP ! loop control
162 INTEGER :: ILUOUT ! unit number of listing file
163 INTEGER :: IACT_GROUND_LAYER, IDEPTH, IMASK, ISUM !number of active ground layers
164 !
165 REAL, DIMENSION(U%NSIZE_NATURE,3) :: ZWG_3L,ZWGI_3L,ZDG_3L
166  REAL, DIMENSION(U%NSIZE_NATURE) :: ZMESH_SIZE, ZWSAT
167 REAL, DIMENSION(U%NSIZE_NATURE,IO%NGROUND_LAYER,IO%NPATCH) :: ZWG_TMP
168 REAL, DIMENSION(U%NSIZE_NATURE,IO%NPATCH) :: ZWG, ZDG
169 REAL, DIMENSION(KI) :: ZF_PARAM_FULL
170 REAL, DIMENSION(NNCAT,NMESHT) :: ZF_PARAMT
171 !
172 ! Taking several patches into account
173 INTEGER, DIMENSION(U%NSIZE_NATURE) :: INB_ACTIVE_PATCH
174 REAL, DIMENSION(U%NSIZE_NATURE):: ZSUMFRD2, ZSUMFRD3
175 REAL, DIMENSION(U%NSIZE_NATURE,3) :: ZWG_CTL
176  !
177 REAL(KIND=JPRB) :: ZHOOK_HANDLE
178 !-------------------------------------------------------------------------------
179 IF (lhook) CALL dr_hook('COUPL_TOPD',0,zhook_handle)
180 !
181 CALL GET_LUOUT(HPROGRAM,ILUOUT)
182 !
183 !
184 !* 0. Initialization:
185 ! ---------------
186 zwsatmax=maxval(xwstopi,mask=xwstopi/=xundef)
187 !
188 zwg_tmp(:,:,:) = 0.
189 DO jp = 1,io%NPATCH
190  DO jj = 1,np%AL(jp)%NSIZE_P
191  imask = np%AL(jp)%NR_P(jj)
192  npe%AL(jp)%XWG(jj,:) = max(npe%AL(jp)%XWG(jj,:),xwgmin)
193  zwg_tmp(imask,:,jp) = npe%AL(jp)%XWG(jj,:)
194  ENDDO
195 ENDDO
196 !
197 IF (.NOT.ALLOCATED(xwsupsat)) ALLOCATE(xwsupsat(ki))
198 !
199 DO jj=1,u%NSIZE_NATURE
200  inb_active_patch(jj) = count(s%XPATCH(jj,:)/=0.)
201 ENDDO
202 ! ---------------
203 IF (io%CISBA=='DIF') THEN
204  CALL dg_dfto3l(io, np, zdg_3l)
205  zwg_3l(:,2) = dmi%XFRD2_TWG (:)
206  zwg_3l(:,3) = dmi%XFRD3_TWG (:)
207  zwgi_3l(:,2) = dmi%XFRD2_TWGI(:)
208  zwgi_3l(:,3) = dmi%XFRD3_TWGI(:)
209 
210 ELSEIF (io%CISBA=='3-L') THEN
211  CALL avg_patch_wg(io, np, npe, zwg_3l, zwgi_3l, zdg_3l)
212 ENDIF
213 !
214 zwm(1:ki) = xwg_full(1:ki)
215 zwim(1:ki) = xwgi_full(1:ki)
216 !
217 !* 1. ISBA => TOPODYN
218 ! ---------------
219 !* 1.1 Computation of the useful depth and water for lateral transfers
220 ! -----------------------------------
221 !
222 
223 CALL UNPACK_SAME_RANK(U%NR_NATURE,ZDG_3L(:,2),ZDG2_FULL)
224 CALL UNPACK_SAME_RANK(U%NR_NATURE,ZDG_3L(:,3),ZDG3_FULL)
225 WHERE ( zdg2_full/=xundef )
226  zdg_full = xfrac_d2*zdg2_full + xfrac_d3*(zdg3_full-zdg2_full)
227 ELSEWHERE
228  zdg_full = xundef
229 END WHERE
230 !
231 CALL UNPACK_SAME_RANK(U%NR_NATURE,ZWG_3L(:,2),ZWG2_FULL)
232 CALL UNPACK_SAME_RANK(U%NR_NATURE,ZWG_3L(:,3),ZWG3_FULL)
233 !
234 WHERE ( zdg_full/=xundef .AND. zdg_full/=0. )
235  xwg_full = xfrac_d2*(zdg2_full/zdg_full)*zwg2_full + xfrac_d3*((zdg3_full-zdg2_full)/zdg_full)*zwg3_full
236 ELSEWHERE
237  xwg_full = xundef
238 END WHERE
239 !
240 IF (kstep==1) THEN
241  IF (lbudget_topd) CALL init_budget_coupl_rout(dec, dc, dmi, pmesh_size, io, np, npe, u, ki)
243  WHERE (xwtopt == xundef) xwtopt = 0.0
244 ENDIF
245 !
246 !ludo prise en compte glace (pas de glace dans 3e couche)
247 CALL UNPACK_SAME_RANK(U%NR_NATURE,ZWGI_3L(:,2),ZWGI_FULL)
248 WHERE ( zwgi_full/=xundef .AND. xfrac_d2>0 .AND. zdg_full/=0. )
249  xwgi_full = xfrac_d2*(zdg2_full/zdg_full)*zwgi_full
250 ELSEWHERE
251  xwgi_full = xundef
252 END WHERE
253 !
254 WHERE ( (xdtopi/=xundef).AND.(xwgi_full/=xundef).AND.(zwim/=xundef))
255  zri_wgi = ( (xwgi_full - zwim) ) * xdtopi!old code
256 ELSEWHERE
257  zri_wgi = 0.0
258 END WHERE
259 !CALL UNPACK_SAME_RANK(U%NR_NATURE,DE%XAVG_DWGI(:),ZRI_WGI)
260 !
261 WHERE ( xdtopi==xundef )
262  zri_wgi = 0.0
263 END WHERE
264 !
265 CALL ISBA_TO_TOPD(ZRI_WGI,ZRI_WGIT)
266 !
267 !!!!!!!!!!!!!!!!!
268 !Determination of Wsat, Wfc, Dmax
269 !!!!!!!!!!!!!!!
270 !test reservoir top=eau+glace -> pas de modif Wsat et Wfc
271  z_wstopi = xwstopi
272  z_wfctopi = xwfctopi
273 WHERE ( xwgi_full/=0. .AND.xwgi_full/=xundef .AND. xwstopi/=0. )
274  z_wstopi = xwstopi - xwgi_full
275  z_wfctopi = xwfctopi * z_wstopi / xwstopi
276 END WHERE
277 !ludo calcul en fct teneur glace
278 !
279  CALL isba_to_topd(z_wstopi,xwstopt)
280  CALL isba_to_topd(z_wfctopi,xwfctopt)
281 !
282 !ludo test empeche erreur num chgt phase
283 WHERE ( abs(xwstopt-xwtopt) < 0.0000000001 ) xwstopt = xwtopt
284 !
285 WHERE ( xwtopt>xwstopt ) xwtopt = xwstopt
286 !
287 WHERE ( xwfctopt/= xundef .AND. xwstopt/=xundef .AND. xdtopt/=xundef)&
288  xdmaxfc = (xwstopt - xwfctopt) * xdtopt ! (m)
290 !WHERE ( XDMAXT >=XUNDEF ) XDMAXT=(MAXVAL(Z_WSTOPI)-MAXVAL(Z_WFCTOPI))*MAXVAL(ZDG2_FULL)
291 
292 !
293 !actualisation M
294 IF( io%CKSAT=='EXP' .OR. io%CKSAT=='SGH' ) THEN
295  !ludo test
296  xf_param(:) = s%XF_PARAM(:)
297  CALL unpack_same_rank(u%NR_NATURE,xf_param(:),zf_param_full)
298  CALL isba_to_topd(zf_param_full,zf_paramt)
299  !
300  !passage de f a M (M=Wsat-Wfc/f)
301  !ludo test ksat exp
302  WHERE( zf_paramt/=xundef .AND. zf_paramt/=0. ) zf_paramt = (xwstopt-xwfctopt)/zf_paramt
303  !
304  DO jj=1,nncat
305  xmpara(jj) = sum(zf_paramt(jj,:),mask=zf_paramt(jj,:)/=xundef) / nnmc(jj)
306  ENDDO
307  !
308 ELSE
309  !
310  DO jj=1,nncat
311  xmpara(jj) = sum( xdmaxfc(jj,:),mask=xdmaxfc(jj,:)/=xundef ) / nnmc(jj) / 4.
312  ENDDO
313  !
314 ENDIF
315 !
316 !!!!!!!!!!!!!!!
317 !* 1.2 Water recharge
318 ! ---------------
319 ! Topodyn uses :
320 ! - a water recharge = water added since last time step to compute hydrological similarity indexes
321 ! - the total water content to compute a deficit
322 !
323 ! This recharge is computed without regarding the changing of phase of water
324 ! and the lateral transfers are performed regarding wsat et Wfc of last time step
325 !
326 WHERE ( (xdtopi/=xundef).AND.(xwg_full/=xundef).AND.(zwm/=xundef))
327  zri = ( (xwg_full - zwm) ) * xdtopi+ zri_wgi
328 ELSEWHERE
329  zri = 0.0
330 ENDWHERE
331 !
332 ! The water recharge on ISBA grid is computed on TOPMODEL grid
333 CALL RECHARGE_SURF_TOPD(ZRI,ZRT,KI)
334 !
335 !* 2. Lateral distribution
336 ! --------------------
337 !* 2.1 Computation of local deficits on TOPODYN grid
338 ! ----------------------------------------
339 !
340 CALL TOPODYN_LAT(ZRT(:,:),ZDEFT(:,:),ZKAPPA(:,:),ZKAPPAC(:),GTOPD)
341 !
342 !* 2.2 Computation of contributive area on ISBA grid
343 ! ----------------------------------------
344 !
345 CALL SAT_AREA_FRAC(ZDEFT,ZAS,GTOPD)
346 !
347 CALL PACK_SAME_RANK(U%NR_NATURE,ZAS,XAS_NATURE)
348 !
349 !* 3. Deficit (m) -> water storage (m3/m3) and changing of phase
350 ! ------------------------------------
351 !
352 DO jj=1,nncat
353  WHERE ( xdtopt(jj,:)/=xundef .AND. xdtopt(jj,:)/=0. )
354  xwtopt(jj,:) = xwstopt(jj,:) - ( zdeft(jj,:) / xdtopt(jj,:) )
355  !changing phase
356  xwtopt(jj,:) = xwtopt(jj,:) - zri_wgit(jj,:)
357  END WHERE
358 ENDDO
359 WHERE (xwtopt > xwstopt ) xwtopt = xwstopt
360 !
361 !* 4. TOPODYN => ISBA
362 ! ---------------
363 !* 4.1 Calculation of water storage on ISBA grid
364 ! -----------------------------------------
365 !
366 CALL TOPD_TO_ISBA(K, UG, U, KI,KSTEP,GTOPD)!=modif of XWG_FULL from XWTOPT
367 CALL PACK_SAME_RANK(U%NR_NATURE, (1-XFRAC_D2)*ZWG2_FULL + XFRAC_D2*XWG_FULL, ZWG_3L(:,2))
368 CALL PACK_SAME_RANK(U%NR_NATURE, (1-XFRAC_D3)*ZWG3_FULL + XFRAC_D3*XWG_FULL, ZWG_3L(:,3))
369 !
370 !* 4.2 Budget correction
371 ! -----------------------------------------
372 !
373  CALL pack_same_rank(u%NR_NATURE,ug%G%XMESH_SIZE,zmesh_size)
374  zavg_mesh_size = sum(zmesh_size(:),mask=zmesh_size(:)/=xundef) / count(zmesh_size(:)/=xundef)
375 !
376 IF (io%CISBA=='DIF') THEN
377  CALL topd_to_df(io, nk, np, npe, zwg_3l)
378 ELSEIF (io%CISBA=='3-L') THEN
379  CALL dispatch_wg(s, np, npe, zwg_3l, zwgi_3l, zdg_3l)
380 ENDIF
381 !
382 DO jp = 1,io%NPATCH
383  WHERE(npe%AL(jp)%XWG(:,:)>zwsatmax.AND.npe%AL(jp)%XWG(:,:)/=xundef)
384  npe%AL(jp)%XWG(:,:)=zwsatmax
385  ENDWHERE
386  WHERE(npe%AL(jp)%XWG(:,:)<xwgmin)
387  npe%AL(jp)%XWG(:,:)=xwgmin
388  ENDWHERE
389 ENDDO
390 !
391 iact_ground_layer=3
392 
393 IF (io%CISBA=='DIF') THEN
394 
395 DO jl=2,io%NGROUND_LAYER
396  isum = 0
397  DO jp = 1,io%NPATCH
398  IF (all(npe%AL(jp)%XWG(:,jl)==xundef)) isum = isum + 1
399  ENDDO
400  IF (isum==io%NPATCH) THEN
401  iact_ground_layer=jl-1
402  !WRITE(ILUOUT,*) 'IACT_GROUND_LAYER=',IACT_GROUND_LAYER
403  EXIT
404  ENDIF
405 ENDDO
406 !
407 ENDIF
408 !
409  CALL pack_same_rank(u%NR_NATURE,z_wstopi,zwsat)
410 
411 zwg(:,:) = 0.
412 zdg(:,:) = 0.
413 DO jp = 1,io%NPATCH
414  DO jj = 1,np%AL(jp)%NSIZE_P
415  imask = np%AL(jp)%NR_P(jj)
416  zwg(imask,jp) = npe%AL(jp)%XWG(jj,2)
417  zdg(imask,jp) = np%AL(jp)%XDG(jj,2)
418  ENDDO
419 ENDDO
420 CALL CONTROL_WATER_BUDGET_TOPD(IO, S, U, ZWG_TMP(:,2,:), ZWG, ZDG,&
421  zmesh_size,zavg_mesh_size,zwsat(:))
422 DO jp = 1,io%NPATCH
423  DO jj = 1,np%AL(jp)%NSIZE_P
424  imask = np%AL(jp)%NR_P(jj)
425  npe%AL(jp)%XWG(jj,2) = zwg(imask,jp)
426  ENDDO
427 ENDDO
428 DO jl = 3,iact_ground_layer
429  zwg(:,:) = 0.
430  zdg(:,:) = 0.
431  DO jp = 1,io%NPATCH
432  DO jj = 1,np%AL(jp)%NSIZE_P
433  imask = np%AL(jp)%NR_P(jj)
434  zwg(imask,jp) = npe%AL(jp)%XWG(jj,jl)
435  zdg(imask,jp) = np%AL(jp)%XDG(jj,jl)-np%AL(jp)%XDG(jj,jl-1)
436  ENDDO
437  ENDDO
438  CALL control_water_budget_topd(io, s, u, zwg_tmp(:,jl,:), zwg, zdg, &
439  zmesh_size,zavg_mesh_size,zwsat(:))
440  DO jp = 1,io%NPATCH
441  DO jj = 1,np%AL(jp)%NSIZE_P
442  imask = np%AL(jp)%NR_P(jj)
443  npe%AL(jp)%XWG(jj,jl) = zwg(imask,jp)
444  ENDDO
445  ENDDO
446 
447 ENDDO
448 !
449 DO jp = 1,io%NPATCH
450  WHERE(npe%AL(jp)%XWG(:,:)>zwsatmax.AND.npe%AL(jp)%XWG(:,:)/=xundef)
451  npe%AL(jp)%XWG(:,:)=zwsatmax
452  ENDWHERE
453  WHERE(npe%AL(jp)%XWG(:,:)<xwgmin)
454  npe%AL(jp)%XWG(:,:)=xwgmin
455  ENDWHERE
456 ENDDO
457 !
458 !* 5.0 Total discharge
459 ! ---------------
460 !
461 !* 5.1 Total water for runoff on TOPODYN grid
462 ! ---------------------------------------
463 !
464 !In XAVG_RUNOFFC, the paches have been averaged
465 CALL UNPACK_SAME_RANK(U%NR_NATURE,DEC%XRUNOFF,ZRUNOFFC_FULL)
466 CALL UNPACK_SAME_RANK(U%NR_NATURE,XAVG_RUNOFFCM,ZRUNOFFC_FULLM)
467 !
468 CALL DIAG_ISBA_TO_ROUT(UG%G%XMESH_SIZE,ZRUNOFFC_FULL,ZRUNOFFC_FULLM,ZRUNOFF_ISBA)
469 !
470 xavg_runoffcm(:) = dec%XRUNOFF(:)
471 !
472 WHERE (zrunoff_isba==xundef) zrunoff_isba = 0.
473 !
474 zrunoff_topd(:,:) = 0
475 !
476 CALL ISBA_TO_TOPDSAT(XKA_PRE,XKAC_PRE,KI,ZRUNOFF_ISBA,ZRUNOFF_TOPD)
477 !
478 !
479 !* 5.2 Total water for drainage on TOPODYN grid
480 ! ----------------------------------------
481 !In XAVG_DRAINC, the paches have been average
482 CALL UNPACK_SAME_RANK(U%NR_NATURE,DEC%XDRAIN*XATOP,ZDRAINC_FULL)
483 CALL UNPACK_SAME_RANK(U%NR_NATURE,XAVG_DRAINCM*XATOP,ZDRAINC_FULLM)
484 !
485 CALL DIAG_ISBA_TO_ROUT(UG%G%XMESH_SIZE,ZDRAINC_FULL,ZDRAINC_FULLM,ZDRAIN_ISBA)
486 !
487 WHERE (zdrain_isba==xundef) zdrain_isba=0.
488 !
489 xavg_draincm(:) = dec%XDRAIN(:)
490 !
491 zdrain_topd(:,:) = 0.0
492 !
493 CALL ISBA_TO_TOPD(ZDRAIN_ISBA,ZDRAIN_TOPD)
494 !
495 DO jj=1,nncat
496  DO ji=1,nnmc(jj)
497  IF (nmaskt(jj,ji)/=nundef) &
498  zdrain_topd(jj,ji) = zdrain_topd(jj,ji) / nnpix(nmaskt(jj,ji))
499  ENDDO
500 ENDDO
501 !
502 !* 6 Routing (runoff + drainage + exfiltration)
503 !
504 CALL ROUTING(ZRUNOFF_TOPD,ZDRAIN_TOPD,KSTEP)
505 !
506 xka_pre(:,:) = zkappa(:,:)
507 xkac_pre(:) = zkappac(:)
508 !
509 !* 7.0 Writing results in map files
510 ! ----------------------------
511 !
512 IF (nfreq_maps_asat/=0.AND.mod(kstep,nfreq_maps_asat)==0) THEN
513  CALL open_file('ASCII ',nunit,hfile='carte_surfcont'//hstep,hform='FORMATTED',haction='WRITE')
514  CALL write_file_isbamap(ug,nunit,zas,ki)
515  CALL close_file('ASCII ',nunit)
516 ENDIF
517 !
518 IF (lhook) CALL dr_hook('COUPL_TOPD',1,zhook_handle)
519 !
520 !
521 END SUBROUTINE coupl_topd
real, dimension(:), allocatable xf_param
subroutine coupl_topd(DEC, DC, DMI, PMESH_SIZE, IO, S, K, NK, NP,
Definition: coupl_topd.F90:8
real, dimension(:,:), allocatable xwtopt
subroutine open_file(HPROGRAM, KUNIT, HFILE, HFORM, HACTION, HACCESS, KR
Definition: open_file.F90:7
real, dimension(:), allocatable xfrac_d2
real, dimension(:), allocatable xmpara
real, dimension(:), allocatable xkac_pre
real, dimension(:,:), allocatable xdmaxt
integer, dimension(:), allocatable nnpix
subroutine write_file_isbamap(UG, KUNIT, PVAR, KI)
real, dimension(:,:), allocatable xdmaxfc
real, dimension(:), allocatable xrunoff_top
real, parameter xundef
integer nmesht
subroutine init_budget_coupl_rout(DEC, DC, DMI, PMESH_SIZE, IO, N
integer, parameter jprb
Definition: parkind1.F90:32
real, dimension(:,:), allocatable xdtopt
real, dimension(:), allocatable xwsupsat
subroutine dg_dfto3l(IO, NP, PDG)
Definition: dg_dfto3l.F90:8
real, dimension(:), allocatable xc_depth_ratio
real, dimension(:), allocatable xwg_full
real, dimension(:), allocatable xas_nature
integer, parameter nundef
subroutine close_file(HPROGRAM, KUNIT)
Definition: close_file.F90:7
real, dimension(:,:), allocatable xka_pre
real, dimension(:), allocatable xdtopi
real, dimension(:), allocatable xavg_draincm
real, dimension(:), allocatable xfrac_d3
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
logical lhook
Definition: yomhook.F90:15
real, save xrholi
Definition: modd_csts.F90:81
real, dimension(:), allocatable xwfctopi
static int mask
Definition: ifssig.c:38
real, dimension(:,:), allocatable xwfctopt
real, dimension(:), allocatable xavg_runoffcm
real, dimension(:,:), allocatable xwstopt
real, save xrholw
Definition: modd_csts.F90:64
real, dimension(:), allocatable xatop
real, dimension(:), allocatable xwgi_full
subroutine dispatch_wg(S, NP, NPE, PWG, PWGI, PDG)
Definition: dispatch_wg.F90:8
subroutine control_water_budget_topd(IO, S, U, PWGM, PWG, PDG, PM
subroutine isba_to_topd(PVARI, PVART)
Definition: isba_to_topd.F90:8
subroutine avg_patch_wg(IO, NP, NPE, PWG, PWGI, PDG)
Definition: avg_patch_wg.F90:8
subroutine topd_to_df(IO, NK, NP, NPE, PWG)
Definition: topd_to_df.F90:8
integer, dimension(:,:), allocatable nmaskt
integer, dimension(:), allocatable nnmc
static int count
Definition: memory_hook.c:21
real, dimension(:), allocatable xwstopi