19 PFLUX, & ! [kg/m2/s] for M3, zero for other]
20 PRHODREF, & ! [kg/m3] air density
21 PEMISRADIUS, & ! [um] emitted radius for the different modes
22 PEMISSIG, & ! [-] emitted sigma for the different modes
72 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PFLUX
76 REAL,
DIMENSION(:),
INTENT(IN) :: PRHODREF
77 REAL,
DIMENSION(:),
INTENT(IN) :: PEMISRADIUS
78 REAL,
DIMENSION(:),
INTENT(IN) :: PEMISSIG
79 INTEGER,
INTENT(IN) :: KMDE
80 REAL,
INTENT(IN) :: PCONVERTFACM0
81 REAL,
INTENT(IN) :: PCONVERTFACM6
82 REAL,
INTENT(IN) :: PCONVERTFACM3
83 LOGICAL,
INTENT(IN) :: OVARSIG
84 LOGICAL,
INTENT(IN) :: ORGFIX
88 REAL,
DIMENSION(SIZE(PFLUX,1),3) :: ZFM
92 REAL(KIND=JPRB) :: ZHOOK_HANDLE
109 IF (
lhook)
CALL dr_hook(
'MODE_DSLT_SURF:MASSFLUX2MOMENTFLUX',0,zhook_handle)
118 jsv_idx = (jmode-1)*3
119 ELSE IF (orgfix)
THEN 122 jsv_idx = (jmode-1)*2
129 zfm(:,1) = pflux(:,jsv_idx+2) &
130 / pemisradius(jmode)**3 &
131 * exp(-4.5*(log(pemissig(jmode)))**2) &
136 zfm(:,3) = zfm(:,1) &
137 * (pemisradius(jmode)**6) &
138 * exp(18. *(log(pemissig(jmode)))**2)
141 IF (.NOT.orgfix)
THEN 142 pflux(:,jsv_idx+1) = zfm(:,1) &
148 pflux(:,jsv_idx+3) = zfm(:,3) &
160 IF (
lhook)
CALL dr_hook(
'MODE_DSLT_SURF:MASSFLUX2MOMENTFLUX',1,zhook_handle)
169 PSVT, & !I [XX/m3] input scalar variables (moment of distribution)
228 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSVT
229 REAL,
DIMENSION(:),
INTENT(IN) :: PRHODREF
230 REAL,
DIMENSION(:),
INTENT(IN) :: PEMISSIG
231 REAL,
DIMENSION(:),
INTENT(IN) :: PEMISRADIUS
232 INTEGER,
DIMENSION(:),
INTENT(IN) :: KM0
233 INTEGER,
DIMENSION(:),
INTENT(IN) :: KM3
234 INTEGER,
DIMENSION(:),
INTENT(IN) :: KM6
235 REAL,
INTENT(IN) :: PCONVERTFACM0
236 REAL,
INTENT(IN) :: PCONVERTFACM6
237 REAL,
INTENT(IN) :: PCONVERTFACM3
238 LOGICAL,
INTENT(IN) :: OVARSIG
239 LOGICAL,
INTENT(IN) :: ORGFIX
240 REAL,
DIMENSION(:,:),
OPTIONAL,
INTENT(OUT) :: PSIG1D
241 REAL,
DIMENSION(:,:),
OPTIONAL,
INTENT(OUT) :: PRG1D
242 REAL,
DIMENSION(:,:),
OPTIONAL,
INTENT(OUT) :: PN1D
243 REAL,
DIMENSION(:,:),
OPTIONAL,
INTENT(OUT) :: PMASS1D
244 REAL,
DIMENSION(:,:),
OPTIONAL,
INTENT(OUT) :: PM1D
248 REAL,
DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2)) :: ZSV
249 REAL,
DIMENSION(SIZE(PSVT,1), SIZE(KM0)*3) :: ZM
250 REAL,
DIMENSION(SIZE(PSVT,1)) :: ZSIGMA
251 REAL,
DIMENSION(SIZE(PSVT,1)) :: ZRG
252 INTEGER :: JN, J0, J3, J6
253 REAL(KIND=JPRB) :: ZHOOK_HANDLE
258 IF (
lhook)
CALL dr_hook(
'MODE_DSLT_SURF:DSLTMOMENT2SIZE',0,zhook_handle)
272 zm(:,j3) = zsv(:,km3(jn)) &
278 zm(:,j0) = zsv(:,km0(jn)) &
282 zm(:,j6) = zsv(:,km6(jn)) &
287 zsigma(:) = zm(:,j3)**2 / (zm(:,j0)*zm(:,j6))
289 zsigma(:) = min(1-1e-10,zsigma(:))
291 zsigma(:) = max(1e-10,zsigma(:))
293 zsigma(:) = log(zsigma(:))
296 zsigma(:) = exp(1./3.*sqrt(-zsigma(:)))
298 ELSE IF (orgfix)
THEN 301 zsigma(:) = pemissig(jn)
303 zm(:,j0) = zm(:,j3) / &
304 ((pemisradius(km3(jn))**3)*exp(4.5 * log(zsigma(:))**2))
309 zsigma(:) = pemissig(jn)
312 zm(:,j0) = zsv(:,km0(jn)) &
318 zm(:,j6) = zm(:,j0) * ((zm(:,j3)/zm(:,j0))**(1./3.) &
319 * exp(-(3./2.)*log(zsigma(:))**2))**6 &
320 * exp(18.*log(zsigma(:))**2)
323 zrg(:) = ((zm(:,j3)**4) / (zm(:,j6)*zm(:,j0)**3)) ** (1./6.)
326 IF(
PRESENT(psig1d)) psig1d(:,jn) = zsigma(:)
329 IF(
PRESENT(pn1d)) pn1d(:,jn) = zm(:,j0)
332 IF(
PRESENT(prg1d)) prg1d(:,jn)= zrg(:)
334 IF(
PRESENT(pmass1d))
THEN 335 pmass1d(:,jn)= zm(:,j0) &
337 * zrg(:)**3 * exp(4.5*(log(zsigma(:)))**2)
342 IF(
PRESENT(pm1d)) pm1d(:,:) = zm(:,:)
344 IF (
lhook)
CALL dr_hook(
'MODE_DST_SURF:DUSTMOMENT2SIZE',1,zhook_handle)
subroutine massflux2momentflux(PFLUX, PRHODREF, PEMISRADIUS, PEMISSIG, KMDE, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX)
real, parameter xsurf_tiny
subroutine dsltmoment2size(PSVT, PRHODREF, PEMISRADIUS, PEMISSIG, KM0, KM3, KM6, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX, PSIG1D, PRG1D, PN1D, PMASS1D, PM1D)