SURFEX v8.1
General documentation of Surfex
coupling_dstn.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 SUBROUTINE coupling_dst_n (DSTK, KK, PK, PEK, DK, &
6  HPROGRAM, &!I [char] Type of ISBA version
7  KI, &!I [nbr] number of points in patch
8  KDST, &!I Number of dust emission variables
9  PPS, &!I [Pa] surface pressure
10  PQA, &!I [kg/kg] atmospheric specific humidity
11  PRHOA, &!I [kg/m3] atmospheric density
12  PPA, &!I [K] Atmospheric pressure
13  PTA, &!I [K] Atmospheric temperature
14  PU, &!I [m/s] zonal wind at atmospheric height
15  PUREF, &!I [m] reference height of wind
16  PV, &!I [m/s] meridional wind at atmospheric height
17  PZREF, &!I [m] reference height of wind
18  PSFDST &!O [kg/m2/sec] flux of dust
19  )
20 
21 !PURPOSE
22 !-------
23 !Recieve a full vector for a given patch containing dust emitter surface points
24 !Pack it to vectors for which are purely dust emitter surfaces
25 !Send back the vector PSFDST (kg/m2/s) coming from this patch.
26 !In COUPLING_ISBA this will again be weighted by fraction_of_patch_in_nature_point
27 
28 !AUTHOR
29 !-------
30 !ALF GRINI <alf.grini@cnrm.meteo.fr> 2005
31 ! Modification P. Tulet introduce friction velocity for mode repartition upon
32 ! Alfaro et al, 1998 (Geo. Res. Lett.)
33 !
34 !! Modified 09/2012 : J. Escobar , SIZE(PTA) not allowed without-interface , replace by KI
35 !
36 !
38 USE modd_diag_n, ONLY : diag_t
39 !
40 USE modd_dst_n, ONLY : dst_t
41 !
42 USE modd_csts, ONLY : xrd ! [J/K/kg] The universal gas constant
43 
44 
45 USE modd_dst_surf
46 
47 USE modi_surface_cd
48 USE modi_cls_wind
49 USE modi_cls_t
50 
51 USE modi_dustflux_get ! Dust mobilization routines
52 USE modi_dustflux_get_mb ! Dust mobilization routines (M. Mokhtari)
53 !
54 USE yomhook ,ONLY : lhook, dr_hook
55 USE parkind1 ,ONLY : jprb
56 !
57 IMPLICIT NONE
58 
59 !INPUT
60 !
61 TYPE(dst_t), INTENT(INOUT) :: DSTK
62 TYPE(isba_k_t), INTENT(INOUT) :: KK
63 TYPE(isba_p_t), INTENT(INOUT) :: PK
64 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
65 TYPE(diag_t), INTENT(INOUT) :: DK
66 !
67  CHARACTER(LEN=*), INTENT(IN) :: HPROGRAM !I Name of program
68 INTEGER, INTENT(IN) :: KI !I Number of points in patch
69 INTEGER, INTENT(IN) :: KDST !I Number of dust emission variables
70 REAL, DIMENSION(KI), INTENT(IN) :: PPS !I [Pa] surface pressure
71 REAL, DIMENSION(KI), INTENT(IN) :: PQA !I [kg/kg] atmospheric specific humidity
72 REAL, DIMENSION(KI), INTENT(IN) :: PRHOA !I [kg/m3] atmospheric density
73 REAL, DIMENSION(KI), INTENT(IN) :: PPA !I [K] Atmospheric pressure
74 REAL, DIMENSION(KI), INTENT(IN) :: PTA !I [K] Atmospheric temperature
75 REAL, DIMENSION(KI), INTENT(IN) :: PU !I [m/s] zonal wind at atmospheric height
76 REAL, DIMENSION(KI), INTENT(IN) :: PUREF !I [m] reference height of wind
77 REAL, DIMENSION(KI), INTENT(IN) :: PV !I [m/s] meridional wind at atmospheric height
78 REAL, DIMENSION(KI), INTENT(IN) :: PZREF !I [m] reference height of wind
79 REAL, DIMENSION(KI,KDST), INTENT(OUT) :: PSFDST !O [kg/m2/sec] flux of dust for a patch
80 
81 !LOCAL VARIABLES
82 REAL, DIMENSION(KI,NVEGNO_DST,NDSTMDE) :: ZSFDST_TILE ![kg/m2] flux of dust for each vegetation types and each mode
83 INTEGER :: JVEG ![idx] counter for vegetation types
84 REAL(KIND=JPRB) :: ZHOOK_HANDLE
85 
86 
87 !Initialize output which is total flux of dust (kg/m2/sec) from this patch
88 !This number will get weighted by fraction of patch later on (in coupling_isban)
89 IF (lhook) CALL dr_hook('COUPLING_DST_N',0,zhook_handle)
90 psfdst(:,:)=0.d0
91 
92 !Initiate dust emissions for all points in patch
93 zsfdst_tile(:,:,:)=0.d0
94 
95 DO jveg=1,nvegno_dst
96 
97  !Jump out of loop if no dust emitter points
98  IF (dstk%NSIZE_PATCH_DST(jveg)==0) cycle
99 
100  CALL treat_surf( &
101  dstk%NSIZE_PATCH_DST(jveg), &!I[idx] number of dust emitter points in patch
102  dstk%NR_PATCH_DST (:,jveg) &!I[idx] index translator from patch to dustemitter
103  )
104 
105 ENDDO !Loop on dust emitter vegetation
106 
107 !Average dust flux from the two vegetation "tiles"
108 !Make sure you do this correctly so that area is OK.
109 !Need to have this as kg/m2/sec from PATCH because
110 !afterwards this is weighted by fraction of patch
112 
113 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
114 IF (lhook) CALL dr_hook('COUPLING_DST_N',1,zhook_handle)
115 !
116 CONTAINS
117 
118 SUBROUTINE treat_surf(KSIZE,KMASK)
119 !
120 USE modd_diag_n, ONLY : diag_t
121 !
122 IMPLICIT NONE
123 
124 INTEGER, INTENT(IN) :: KSIZE !Size of dust emitter vector
125 INTEGER, DIMENSION(:), INTENT(IN) :: KMASK !mask from patch vector to dust emitter vector
126 
127 !ALLOCATABLE VARIABLES FOR ALL VEGETATION TYPES
128 REAL, DIMENSION(KSIZE) :: ZP_CLAY ![frc] fraction of clay
129 REAL, DIMENSION(KSIZE) :: ZP_SAND ![frc] fraction of sand
130 !
131 REAL, DIMENSION(KSIZE) :: ZP_PA ![K] Atmospheric pressure
132 REAL, DIMENSION(KSIZE) :: ZP_TA ![K] Atmospheric temperature
133 REAL, DIMENSION(KSIZE) :: ZP_QA ![kg_{H2O}/kg_{air}] specific humidity
134 REAL, DIMENSION(KSIZE) :: ZP_RHOA_2M ![kg/m3] atmospheric density close to surface
135 REAL, DIMENSION(KSIZE) :: ZP_SFMER ![m/s] wind friction in meridional direction
136 REAL, DIMENSION(KSIZE) :: ZP_SFZON ![m/s] wind friction in zonal direction
137 REAL, DIMENSION(KSIZE) :: ZP_U ![m/s] zonal wind at atmospheric height
138 REAL, DIMENSION(KSIZE) :: ZP_V ![m/s] meridional wind at atmospheric height
139 REAL, DIMENSION(KSIZE) :: ZP_VMOD ![m/s] Wind at atmospheric height
140 !
141 REAL, DIMENSION(KSIZE) :: ZP_SFDST ![kg/m2/s] dust flux (kg/m2/s)
142 REAL, DIMENSION(KSIZE,NDSTMDE) :: ZP_SFDST_MDE ![kg/m2/s] dust flux from modes
143 !
144 REAL, DIMENSION(KSIZE) :: ZP_TG ![K] ground temperature
145 REAL, DIMENSION(KSIZE) :: ZP_WG ![m3/m3] ground volumetric water content
146 REAL, DIMENSION(KSIZE) :: ZP_WSAT ![m3/m3] saturation volumetric water content
147 REAL, DIMENSION(KSIZE) :: ZP_USTAR ![m/s] wind friction speed
148 !
149 REAL, DIMENSION(KSIZE) :: ZP_Z0_EROD ![m] roughness length for erodible surface
150 REAL, DIMENSION(KSIZE) :: ZP_DST_EROD !Erodable Surface (COVER004=1 and COVER005=0.01)
151 REAL, DIMENSION(KSIZE,3) :: ZP_MSS_FRC_SRC ![%] dust mode fraction of emitted mass
152 REAL, DIMENSION(KSIZE) :: ZP_INTER ![%] dust mode fraction of emitted mass
153 REAL, DIMENSION(KSIZE) :: ZP_CD_DST ! drag coefficient uses by DEAD
154 REAL, DIMENSION(KSIZE) :: ZH ! 10m (wind altitude)
155 !
156 REAL, DIMENSION(KSIZE) :: ZP_MER10M ![m/s] meridional wind at 10m
157 REAL, DIMENSION(KSIZE) :: ZP_WIND10M ![m/s] wind at 10m
158 REAL, DIMENSION(KSIZE) :: ZP_ZON10M ![m/s] zonal wind at 10m
159 REAL, DIMENSION(KSIZE) :: ZP_PS ![Pa] surface pressure
160 REAL, DIMENSION(KSIZE) :: ZP_TS ![K] surface temperature
161 REAL, DIMENSION(KSIZE) :: ZP_Q2M ![kg_{H2O}/kg_{air}] speficic humidity
162 REAL, DIMENSION(KSIZE) :: ZP_HU2M ![-] relative humidity
163 REAL, DIMENSION(KSIZE) :: ZP_RHOA ![kg/m3] atmospheric density
164 REAL, DIMENSION(KSIZE) :: ZP_T2M ![K] 2M temperature
165 REAL, DIMENSION(KSIZE) :: ZP_UREF ![m] reference height for wind
166 REAL, DIMENSION(KSIZE) :: ZP_ZREF ![m] reference height for wind
167 REAL, DIMENSION(KSIZE) :: ZP_CD !I [] drag coefficient for momentum from isba
168 REAL, DIMENSION(KSIZE) :: ZP_CH !I [] drag coefficient for heat
169 REAL, DIMENSION(KSIZE) :: ZP_CDN ![-] drag coefficient neutral atm
170 REAL, DIMENSION(KSIZE) :: ZP_RI !I [-] Richardson number
171 REAL, DIMENSION(KSIZE) :: ZP_Z0H ![frc] Z0 heat with snow
172 !
173 REAL, DIMENSION(5) :: ZSEUIL
174 REAL, DIMENSION(6,2) :: ZPCEN
175 INTEGER :: JJ, JS !Counter for vector points
176 INTEGER :: JMODE
177 REAL(KIND=JPRB) :: ZHOOK_HANDLE
178 
179 IF (lhook) CALL dr_hook('COUPLING_DST_n:TREAT_SURF',0,zhook_handle)
180 
181 !Pack patch-vectors to dust emitter vectors
182 !i.e. allocate memory for the packed (dust emitter) vectors
183 DO jj=1,ksize
184  zp_clay(jj) = kk%XCLAY(kmask(jj),1)
185  zp_ps(jj) = pps(kmask(jj))
186  zp_ts(jj) = dk%XTS (kmask(jj))
187  zp_qa(jj) = pqa(kmask(jj))
188  zp_rhoa(jj) = prhoa(kmask(jj))
189  zp_sand(jj) = kk%XSAND(kmask(jj),1)
190  zp_pa(jj) = ppa(kmask(jj))
191  zp_ta(jj) = pta(kmask(jj))
192  zp_tg(jj) = pek%XTG (kmask(jj),1)
193  zp_u(jj) = pu(kmask(jj))
194  zp_uref(jj) = puref(kmask(jj))
195  zp_v(jj) = pv(kmask(jj))
196  zp_wg(jj) = pek%XWG (kmask(jj),1)
197  zp_wsat(jj) = kk%XWSAT(kmask(jj),1)
198  zp_zref(jj) = pzref(kmask(jj))
199  zp_cd(jj) = dk%XCD (kmask(jj))
200  zp_cdn(jj) = dk%XCDN (kmask(jj))
201  zp_ch(jj) = dk%XCH (kmask(jj))
202  zp_ri(jj) = dk%XRI (kmask(jj))
203  zp_z0h(jj) = dk%XZ0H (kmask(jj))
204 ENDDO
205 !
206 !Manipulate some variables since we assume dust emission occurs over flat surface
207 zp_z0_erod(:) = dstk%Z0_EROD_DST(jveg) !Set z0 to roughness of erodible surface
208 !
209 IF (jveg ==1) THEN
210  zp_dst_erod(:) = 1.
211 ELSE
212  zp_dst_erod(:) = 0.01
213 ENDIF
214 !
215 zp_cd_dst(:) = zp_cd(:)
216 !
217 IF (cvermod/='CMDVER') THEN
218  !Re-calculate the drag over the dust emitter (erodable) surface. Since we
219  !don't use the roughness length of the patch, but rather use specific roughness
220  !lengths of dust emitter surfaces, the drag changes.
221  CALL surface_cd(zp_ri, zp_zref, zp_uref, zp_z0_erod, zp_z0h, zp_cd_dst, zp_cdn)
222 ENDIF
223 !
224 !Get total wind speed
225 zp_vmod(:) = sqrt(zp_u(:)**2 + zp_v(:)**2)
226 !
227 zp_ustar(:) = sqrt(zp_cd_dst(:))*zp_vmod
228 !Get zonal friction speed (m/s)
229 zp_sfzon(:) = - sqrt(zp_cd_dst(:))*zp_u(:)
230 !Get meridional surface stress
231 zp_sfmer(:) = - sqrt(zp_cd_dst(:))*zp_v(:)
232 !
233 !Get the 10m wind speed (needed for one operation in dust model)
234 !And get the density at 2m to feed into erosion model
235 zh(:)=10.
236  CALL cls_wind(zp_u, zp_v, zp_uref, zp_cd_dst, zp_cdn, zp_ri, zh, &
237  zp_zon10m, zp_mer10m )
238 zh(:)=2.
239  CALL cls_t(zp_ta, zp_qa, zp_pa, zp_ps, zp_zref, zp_cd_dst, zp_ch, zp_ri, &
240  zp_ts, zp_z0h, zh, zp_t2m )
241 
242 !Get density at 2 meters rho=P/(RT)
243 zp_rhoa_2m(:) = zp_ps(:)/(zp_t2m(:)*xrd)
244 !
245 !Get wind speed at 10m heigh
246 zp_wind10m(:) = sqrt(zp_zon10m(:)**2 + zp_mer10m(:)**2)
247 !
248 !the erodible surface
249 zp_wind10m(:) = max(zp_wind10m(:), 1e-2)
250 !
251 IF (cvermod=='CMDVER') THEN
252  !
253  CALL dustflux_get_mb( &
254  zp_ustar, & !I [m/s] wind friction speed over erodible surface
255  zp_rhoa_2m, & !I [kg/m3] air density at surface
256  zp_wg, & !I [m3/m3] volumetric water content of ground
257  zp_z0_erod, & !I [m] roughness length of erodible surface
258  zp_wsat, & !I [m3/m3] saturation water volumetric content
259  zp_clay, & !I [frc] mass fraction of clay
260  zp_sand, & !I [frc] mass fraction of sand
261  zp_dst_erod, & !I [frc] erodabilitC) de la surface (cover004 = 1 et cocer005=0.5)
262  zp_wind10m, & !I [m/s] wind at 10m
263  zp_sfdst, & !O [kg/m2/sec] flux of dust
264  ksize & !I [nbr] number of points for which we do calculation
265  )
266  !
267 ELSE
268  !
269  CALL dustflux_get( &
270  zp_ustar, &!I [m/s] wind friction speed over erodible surface
271  zp_rhoa_2m, &!I [kg/m3] air density at surface
272  zp_wg, &!I [m3/m3] volumetric water content of ground
273  zp_z0_erod, &!I [m] roughness length of erodible surface
274  zp_wsat, &!I [m3/m3] saturation water volumetric content
275  zp_clay, &!I [frc] mass fraction of clay
276  zp_sand, &!I [frc] mass fraction of sand
277  zp_wind10m, &!I [m/s] wind at 10m
278  zp_sfdst, &!O [kg/m2/sec] flux of dust
279  ksize &!I [nbr] number of points for which we do calculation
280  )
281 ENDIF
282 
283 zp_mss_frc_src(:,:) = 0.
284 
285 IF (cemisparam_dst == "EXPLI" .OR. cemisparam_dst == "AMMA ") THEN
286 
287  ! For the repartition of mass fraction we uses the real USTAR
288  zp_ustar(:) = sqrt(zp_cd_dst(:))*zp_vmod(:)
289 
290  zseuil = (/0., 0.35, 0.42, 0.50 ,0.66/)
291 
292  IF (cemisparam_dst == "EXPLI") THEN
293  ! Compute modes mass fraction of emitted dust upon Alfaro et al. 1998
294  zpcen(:,1) = (/0., 0., 0.01, 0.08, 0.15, 0.15/)
295  zpcen(:,2) = (/0., 0., 0.36, 0.43, 0.76, 0.76/)
296  ! Case of u* < 35E-2 m/s
297  ! only coarse mode is activated
298  ! mode 1 = 0
299  ! mode 2 = 0
300  ! mode 3 = 100
301  ! Case of 35E-2 m/s < u* < 42E-2 m/s
302  ! 0 % < mode 1 < 1 %
303  ! 0 % < mode 2 < 36 %
304  ! 63 % < mode 3 < 100 %
305  ! Case of 42E-2 m/s < u* < 50E-2 m/s
306  ! 1 % < mode 1 < 8 %
307  ! 36 % < mode 2 < 43 %
308  ! 49 % < mode 3 < 63 %
309  ! Case of 50E-2 m/s < u* < 66E-2 m/s
310  ! 8 % < mode 1 < 15 %
311  ! 43 % < mode 2 < 76 %
312  ! 9 % < mode 3 < 49 %
313  ! Case of u* > 66E-2 m/s
314  ! mode 1 = 15 %
315  ! mode 2 = 76 %
316  ! mode 3 = 9 %
317  ELSEIF (cemisparam_dst == "AMMA ") THEN
318  ! For the repartition of mass fraction we uses the real USTAR upon
319  ! Alfaro/Gomes 2001, jgr, table 5, soil type Salty sand.
320  ! Percentage of mass considered between the fin and accumulation modes
321  zpcen(:,1) = (/0., 0., 0.0023, 0.0185, 0.0345, 0.0345/)
322  zpcen(:,2) = (/0., 0., 0.0077, 0.0615, 0.1155, 0.1155/)
323  ! Case of u* < 35E-2 m/s
324  ! only coarse mode is activated
325  ! mode 1 = 0
326  ! mode 2 = 0
327  ! mode 3 = 100
328  ! Case of 35E-2 m/s < u* < 42E-2 m/s
329  ! 0 % < mode 1 < 0.23 %
330  ! 0 % < mode 2 < 0.77 %
331  ! 99 % < mode 3 < 100 %
332  ! Case of 42E-2 m/s < u* < 50E-2 m/s
333  ! 0.23 % < mode 1 < 1.85 %
334  ! 0.77 % < mode 2 < 6.15 %
335  ! 92 % < mode 3 < 99 %
336  ! Case of 50E-2 m/s < u* < 66E-2 m/s
337  ! 1.85 % < mode 1 < 3.45 %
338  ! 6.15 % < mode 2 < 11.55 %
339  ! 85 % < mode 3 < 92 %
340  ! Case of u* > 66E-2 m/s
341  ! mode 1 = 15 %
342  ! mode 2 = 76 %
343  ! mode 3 = 9 %
344  ENDIF
345 
346  DO js = 1, SIZE(zseuil) - 1
347  WHERE (zp_ustar(:) >= zseuil(js) .AND. zp_ustar(:) < zseuil(js+1))
348  zp_inter(:) = (zp_ustar(:) - zseuil(js)) / (zseuil(js+1) - zseuil(js))
349  zp_mss_frc_src(:,1) = zpcen(js,1) + (zpcen(js+1,1) - zpcen(js,1)) * zp_inter(:)
350  zp_mss_frc_src(:,2) = zpcen(js,2) + (zpcen(js+1,2) - zpcen(js,2)) * zp_inter(:)
351  END WHERE
352  ENDDO
353 
354  WHERE (zp_ustar(:) >= zseuil(SIZE(zseuil)))
355  zp_mss_frc_src(:,1) = zpcen(SIZE(zseuil)+1,1)
356  zp_mss_frc_src(:,2) = zpcen(SIZE(zseuil)+1,2)
357  END WHERE
358 
359  zp_mss_frc_src(:,3) = 1. - zp_mss_frc_src(:,1) - zp_mss_frc_src(:,2)
360 
361 ELSE
362  DO jmode = 1,ndstmde
363  zp_mss_frc_src(:,jorder_dst(jmode)) = dstk%XMSS_FRC_SRC(jmode)
364  ENDDO
365 END IF
366 
367 DO jmode=1,ndstmde
368  ! Explicit mass fraction from u*
369  zp_sfdst_mde(:,jmode) = zp_sfdst(:) & !Total mass flux of dust
370  * zp_mss_frc_src(:,jorder_dst(jmode)) !Fraction of dust going to each mode
371 ENDDO
372 
373 
374 !Transfer the fluxes to each tile
375 DO jmode=1,ndstmde
376  DO jj=1,ksize
377  zsfdst_tile(kmask(jj),jveg,jmode) = zp_sfdst_mde(jj,jmode)
378  ENDDO
379 ENDDO
380 
381 IF (lhook) CALL dr_hook('COUPLING_DST_n:TREAT_SURF',1,zhook_handle)
382 
383 END SUBROUTINE treat_surf
384 
385 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
386 SUBROUTINE avg_flux_dst( &
387  KTILE & ! Number of different dust emitter vegetations
388  )
390 ! Purpose: Average all fluxes from independent dust emitter surfaces (KTILE)
391 ! Remember: XP_VEGTYPE_PATCH is m^2_{emittersurface}/m^{nature}
392 ! The goal is to obtain PSFDST in kg_{dust}/m^2_{patch}
393 
394 !INPUT
395 INTEGER, INTENT(IN) :: KTILE ! Number of different dust emitter vegetation types
396 
397 !LOCAL
398 INTEGER :: II ! Counter for points in patch-vector
399 INTEGER :: JJ ! Counter for vegetation types
400 INTEGER :: JMODE ! Counter for modes
401 INTEGER :: JSV_IDX ! Index for scalar variable
402 INTEGER :: NMOMENT ! Number of moments
403 REAL :: VEGFRAC_IN_PATCH ! fraction of total vegetation in this patch (m^2_{patch}/m^2_{nature})
404 REAL(KIND=JPRB) :: ZHOOK_HANDLE
405 !
406 !Remember: XP_VEGTYPE_PATCH is m^2_{emittersurface}/m^{nature}
407 !The goal is to obtain PSFDST in kg_{dust}/m^2_{patch}
408 !
409 !Start loop on modes
410 IF (lhook) CALL dr_hook('AVG_FLUX_DST',0,zhook_handle)
411 !
412 nmoment = int(SIZE(psfdst,2) / ndstmde)
413 !
414 DO jmode=1,ndstmde
415  !Make sure dust mass emission is put in index 2, 5, 8 etc if 3 moments per mode
416  !Make sure dust mass emission is put in index 2, 4, 6 etc if 2 moments per mode
417  IF (nmoment == 1) THEN
418  jsv_idx = (jmode-1)*nmoment + 1 !Counter for scalar variable
419  ELSE
420  jsv_idx = (jmode-1)*nmoment + 2 !Counter for scalar variable
421  END IF
422 
423  !Start loop on number of dust emitter surfaces
424  DO jj=1,ktile
425  !Loop on points inside patch
426  DO ii=1,ki
427 
428  !Get sum of vegetation fraction in this patch
429  !fxm: VERY BAD LOOP ORDER
430  vegfrac_in_patch = sum(pk%XVEGTYPE_PATCH(ii,:))
431 
432  !Get production of flux by adding up the contribution
433  !from the different tiles (here, "tiles" are dust emitter surfaces)
434  psfdst(ii,jsv_idx) = psfdst(ii,jsv_idx) & ![kg/m^2_{patch}/sec] dust flux per patch
435  + (zsfdst_tile(ii,jj,jmode) & ![kg/m^2_{emittersurface}/sec] Dust flux per surface area of dust emitter surface
436  * pk%XVEGTYPE_PATCH(ii,dstk%NVT_DST(jj)) & ![frc] m^2_{emittersurface}/m^2_{nature}
437  / vegfrac_in_patch ) ![frc] m^2_{patch}/m^2_{nature}
438  ENDDO !loop on point in patch
439  ENDDO !loop on different dust emitter surfaces
440 
441 ENDDO !Loop on modes
442 
443 IF (lhook) CALL dr_hook('AVG_FLUX_DST',1,zhook_handle)
444 
445 END SUBROUTINE avg_flux_dst
446 
447 END SUBROUTINE coupling_dst_n
448 
subroutine coupling_dst_n(DSTK, KK, PK, PEK, DK, HPROGRAM, KI, KDST, PPS, PQA, PRHOA, PPA, PTA, PU, PUREF, PV, PZREF, PSFDST)
subroutine cls_wind(PZONA, PMERA, PHW, PCD, PCDN, PRI, PHV, PZON10M, PMER10M)
Definition: cls_wind.F90:7
subroutine cls_t(PTA, PQA, PPA, PPS, PHT, PCD, PCH, PRI, PTS, PZ0H, PH, PTNM)
Definition: cls_t.F90:10
subroutine dustflux_get_mb(PUSTAR, PRHOA, PWG, PZ0, PWSAT, PCLAY, PSAND, PDST_EROD, PWIND10M, PSFDST, KSIZE)
real, save xrd
Definition: modd_csts.F90:62
integer, parameter jprb
Definition: parkind1.F90:32
subroutine dustflux_get(PUSTAR, PRHOA, PWG, PZ0, PWSAT, PCLAY, PSAND, PWIND10M, PSFDST, KSIZE)
subroutine surface_cd(PRI, PZREF, PUREF, PZ0EFF, PZ0H, PCD, PCDN)
Definition: surface_cd.F90:8
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
logical lhook
Definition: yomhook.F90:15
subroutine treat_surf(KMASK, YTYPE)
character(len=6) cvermod
subroutine avg_flux_dst(KTILE)
integer, dimension(nemismodes_max), parameter jorder_dst
character(len=5) cemisparam_dst
integer nvegno_dst