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
52 USE modi_dustflux_get_mb
61 TYPE(
dst_t),
INTENT(INOUT) :: DSTK
65 TYPE(
diag_t),
INTENT(INOUT) :: DK
67 CHARACTER(LEN=*),
INTENT(IN) :: HPROGRAM
68 INTEGER,
INTENT(IN) :: KI
69 INTEGER,
INTENT(IN) :: KDST
70 REAL,
DIMENSION(KI),
INTENT(IN) :: PPS
71 REAL,
DIMENSION(KI),
INTENT(IN) :: PQA
72 REAL,
DIMENSION(KI),
INTENT(IN) :: PRHOA
73 REAL,
DIMENSION(KI),
INTENT(IN) :: PPA
74 REAL,
DIMENSION(KI),
INTENT(IN) :: PTA
75 REAL,
DIMENSION(KI),
INTENT(IN) :: PU
76 REAL,
DIMENSION(KI),
INTENT(IN) :: PUREF
77 REAL,
DIMENSION(KI),
INTENT(IN) :: PV
78 REAL,
DIMENSION(KI),
INTENT(IN) :: PZREF
79 REAL,
DIMENSION(KI,KDST),
INTENT(OUT) :: PSFDST
82 REAL,
DIMENSION(KI,NVEGNO_DST,NDSTMDE) :: ZSFDST_TILE
84 REAL(KIND=JPRB) :: ZHOOK_HANDLE
93 zsfdst_tile(:,:,:)=0.d0
98 IF (dstk%NSIZE_PATCH_DST(jveg)==0) cycle
101 dstk%NSIZE_PATCH_DST(jveg), &
102 dstk%NR_PATCH_DST (:,jveg) &
114 IF (
lhook)
CALL dr_hook(
'COUPLING_DST_N',1,zhook_handle)
124 INTEGER,
INTENT(IN) :: KSIZE
125 INTEGER,
DIMENSION(:),
INTENT(IN) :: KMASK
128 REAL,
DIMENSION(KSIZE) :: ZP_CLAY
129 REAL,
DIMENSION(KSIZE) :: ZP_SAND
131 REAL,
DIMENSION(KSIZE) :: ZP_PA
132 REAL,
DIMENSION(KSIZE) :: ZP_TA
133 REAL,
DIMENSION(KSIZE) :: ZP_QA
134 REAL,
DIMENSION(KSIZE) :: ZP_RHOA_2M
135 REAL,
DIMENSION(KSIZE) :: ZP_SFMER
136 REAL,
DIMENSION(KSIZE) :: ZP_SFZON
137 REAL,
DIMENSION(KSIZE) :: ZP_U
138 REAL,
DIMENSION(KSIZE) :: ZP_V
139 REAL,
DIMENSION(KSIZE) :: ZP_VMOD
141 REAL,
DIMENSION(KSIZE) :: ZP_SFDST
142 REAL,
DIMENSION(KSIZE,NDSTMDE) :: ZP_SFDST_MDE
144 REAL,
DIMENSION(KSIZE) :: ZP_TG
145 REAL,
DIMENSION(KSIZE) :: ZP_WG
146 REAL,
DIMENSION(KSIZE) :: ZP_WSAT
147 REAL,
DIMENSION(KSIZE) :: ZP_USTAR
149 REAL,
DIMENSION(KSIZE) :: ZP_Z0_EROD
150 REAL,
DIMENSION(KSIZE) :: ZP_DST_EROD
151 REAL,
DIMENSION(KSIZE,3) :: ZP_MSS_FRC_SRC
152 REAL,
DIMENSION(KSIZE) :: ZP_INTER
153 REAL,
DIMENSION(KSIZE) :: ZP_CD_DST
154 REAL,
DIMENSION(KSIZE) :: ZH
156 REAL,
DIMENSION(KSIZE) :: ZP_MER10M
157 REAL,
DIMENSION(KSIZE) :: ZP_WIND10M
158 REAL,
DIMENSION(KSIZE) :: ZP_ZON10M
159 REAL,
DIMENSION(KSIZE) :: ZP_PS
160 REAL,
DIMENSION(KSIZE) :: ZP_TS
161 REAL,
DIMENSION(KSIZE) :: ZP_Q2M
162 REAL,
DIMENSION(KSIZE) :: ZP_HU2M
163 REAL,
DIMENSION(KSIZE) :: ZP_RHOA
164 REAL,
DIMENSION(KSIZE) :: ZP_T2M
165 REAL,
DIMENSION(KSIZE) :: ZP_UREF
166 REAL,
DIMENSION(KSIZE) :: ZP_ZREF
167 REAL,
DIMENSION(KSIZE) :: ZP_CD
168 REAL,
DIMENSION(KSIZE) :: ZP_CH
169 REAL,
DIMENSION(KSIZE) :: ZP_CDN
170 REAL,
DIMENSION(KSIZE) :: ZP_RI
171 REAL,
DIMENSION(KSIZE) :: ZP_Z0H
173 REAL,
DIMENSION(5) :: ZSEUIL
174 REAL,
DIMENSION(6,2) :: ZPCEN
177 REAL(KIND=JPRB) :: ZHOOK_HANDLE
179 IF (
lhook)
CALL dr_hook(
'COUPLING_DST_n:TREAT_SURF',0,zhook_handle)
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))
207 zp_z0_erod(:) = dstk%Z0_EROD_DST(jveg)
212 zp_dst_erod(:) = 0.01
215 zp_cd_dst(:) = zp_cd(:)
221 CALL surface_cd(zp_ri, zp_zref, zp_uref, zp_z0_erod, zp_z0h, zp_cd_dst, zp_cdn)
225 zp_vmod(:) = sqrt(zp_u(:)**2 + zp_v(:)**2)
227 zp_ustar(:) = sqrt(zp_cd_dst(:))*zp_vmod
229 zp_sfzon(:) = - sqrt(zp_cd_dst(:))*zp_u(:)
231 zp_sfmer(:) = - sqrt(zp_cd_dst(:))*zp_v(:)
236 CALL cls_wind(zp_u, zp_v, zp_uref, zp_cd_dst, zp_cdn, zp_ri, zh, &
237 zp_zon10m, zp_mer10m )
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 )
243 zp_rhoa_2m(:) = zp_ps(:)/(zp_t2m(:)*
xrd)
246 zp_wind10m(:) = sqrt(zp_zon10m(:)**2 + zp_mer10m(:)**2)
249 zp_wind10m(:) = max(zp_wind10m(:), 1e-2)
283 zp_mss_frc_src(:,:) = 0.
288 zp_ustar(:) = sqrt(zp_cd_dst(:))*zp_vmod(:)
290 zseuil = (/0., 0.35, 0.42, 0.50 ,0.66/)
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/)
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/)
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(:)
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)
359 zp_mss_frc_src(:,3) = 1. - zp_mss_frc_src(:,1) - zp_mss_frc_src(:,2)
363 zp_mss_frc_src(:,
jorder_dst(jmode)) = dstk%XMSS_FRC_SRC(jmode)
369 zp_sfdst_mde(:,jmode) = zp_sfdst(:) &
377 zsfdst_tile(kmask(jj),jveg,jmode) = zp_sfdst_mde(jj,jmode)
381 IF (
lhook)
CALL dr_hook(
'COUPLING_DST_n:TREAT_SURF',1,zhook_handle)
387 KTILE & ! Number of different dust emitter vegetations
395 INTEGER,
INTENT(IN) :: KTILE
403 REAL :: VEGFRAC_IN_PATCH
404 REAL(KIND=JPRB) :: ZHOOK_HANDLE
412 nmoment = int(
SIZE(psfdst,2) /
ndstmde)
417 IF (nmoment == 1)
THEN 418 jsv_idx = (jmode-1)*nmoment + 1
420 jsv_idx = (jmode-1)*nmoment + 2
430 vegfrac_in_patch =
sum(pk%XVEGTYPE_PATCH(ii,:))
434 psfdst(ii,jsv_idx) = psfdst(ii,jsv_idx) &
435 + (zsfdst_tile(ii,jj,jmode) &
436 * pk%XVEGTYPE_PATCH(ii,dstk%NVT_DST(jj)) &
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)
subroutine cls_t(PTA, PQA, PPA, PPS, PHT, PCD, PCH, PRI, PTS, PZ0H, PH, PTNM)
subroutine dustflux_get_mb(PUSTAR, PRHOA, PWG, PZ0, PWSAT, PCLAY, PSAND, PDST_EROD, PWIND10M, PSFDST, KSIZE)
subroutine dustflux_get(PUSTAR, PRHOA, PWG, PZ0, PWSAT, PCLAY, PSAND, PWIND10M, PSFDST, KSIZE)
subroutine surface_cd(PRI, PZREF, PUREF, PZ0EFF, PZ0H, PCD, PCDN)
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
subroutine treat_surf(KMASK, YTYPE)
subroutine avg_flux_dst(KTILE)
integer, dimension(nemismodes_max), parameter jorder_dst
character(len=5) cemisparam_dst