10 USE yomhook
,ONLY : lhook, dr_hook
11 USE parkind1
,ONLY : jprb
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)
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)
263 zsv(:,:) = max(psvt(:,:), xsurf_tiny)
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)
subroutine dsltmoment2size(PSVT, PRHODREF, PEMISRADIUS, PEMISSIG, KM0, KM3, KM6, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX, PSIG1D, PRG1D, PN1D, PMASS1D, PM1D)