25 USE yomhook
,ONLY : lhook, dr_hook
26 USE parkind1
,ONLY : jprb
37 REAL,
DIMENSION(:,:),
INTENT(IN) :: psv
38 REAL,
DIMENSION(:),
INTENT(OUT) :: pfac
39 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: pctota
41 REAL,
DIMENSION(NSP+NCARB+NSOA) :: zmi
42 REAL,
DIMENSION(NSP+NCARB+NSOA) :: zrhoi
45 REAL,
PARAMETER :: zmol = 6.0221367e+11
46 REAL(KIND=JPRB) :: zhook_handle
48 IF (lhook) CALL dr_hook(
'MODE_AER_SURF:INIT_VAR',0,zhook_handle)
51 zrhoi(jp_aer_h2o) = 1.0e3
52 zrhoi(jp_aer_dst) = xdensity_dst
73 zmi(jp_aer_dst) = 100.
74 IF (nsoa .EQ. 10)
THEN
75 zmi(jp_aer_soa1) = 88.
76 zmi(jp_aer_soa2) = 180.
77 zmi(jp_aer_soa3) = 1.5374857e3
78 zmi(jp_aer_soa4) = 1.9586780e3
79 zmi(jp_aer_soa5) = 195.
80 zmi(jp_aer_soa6) = 195.
81 zmi(jp_aer_soa7) = 165.
82 zmi(jp_aer_soa8) = 195.
83 zmi(jp_aer_soa9) = 270.
84 zmi(jp_aer_soa10) = 210.
88 DO jj=1,nsp+ncarb+nsoa
89 pfac(jj)=(4./3.)*zpi*zrhoi(jj)*1.e-9
97 pctota(:,jp_aer_so4,1) = psv(:,jp_ch_so4i)*zmi(jp_aer_so4)/zmol
98 pctota(:,jp_aer_so4,2) = psv(:,jp_ch_so4j)*zmi(jp_aer_so4)/zmol
100 pctota(:,jp_aer_no3,1) = psv(:,jp_ch_no3i)*zmi(jp_aer_no3)/zmol
101 pctota(:,jp_aer_no3,2) = psv(:,jp_ch_no3j)*zmi(jp_aer_no3)/zmol
103 pctota(:,jp_aer_nh3,1) = psv(:,jp_ch_nh3i)*zmi(jp_aer_nh3)/zmol
104 pctota(:,jp_aer_nh3,2) = psv(:,jp_ch_nh3j)*zmi(jp_aer_nh3)/zmol
107 pctota(:,jp_aer_h2o,1) = psv(:,jp_ch_h2oi)*zmi(jp_aer_h2o)/zmol
108 pctota(:,jp_aer_h2o,2) = psv(:,jp_ch_h2oj)*zmi(jp_aer_h2o)/zmol
111 pctota(:,jp_aer_oc,1) = psv(:,jp_ch_oci)*zmi(jp_aer_oc)/zmol
112 pctota(:,jp_aer_oc,2) = psv(:,jp_ch_ocj)*zmi(jp_aer_oc)/zmol
115 pctota(:,jp_aer_bc,1) = psv(:,jp_ch_bci)*zmi(jp_aer_bc)/zmol
116 pctota(:,jp_aer_bc,2) = psv(:,jp_ch_bcj)*zmi(jp_aer_bc)/zmol
119 pctota(:,jp_aer_dst,1) = psv(:,jp_ch_dsti)*zmi(jp_aer_dst)/6.0221367e+11
120 pctota(:,jp_aer_dst,2) = psv(:,jp_ch_dstj)*zmi(jp_aer_dst)/6.0221367e+11
122 IF (nsoa .EQ. 10)
THEN
123 pctota(:,jp_aer_soa1,1) = psv(:,jp_ch_soa1i)*zmi(jp_aer_soa1)/zmol
124 pctota(:,jp_aer_soa1,2) = psv(:,jp_ch_soa1j)*zmi(jp_aer_soa1)/zmol
125 pctota(:,jp_aer_soa2,1) = psv(:,jp_ch_soa2i)*zmi(jp_aer_soa2)/zmol
126 pctota(:,jp_aer_soa2,2) = psv(:,jp_ch_soa2j)*zmi(jp_aer_soa2)/zmol
127 pctota(:,jp_aer_soa3,1) = psv(:,jp_ch_soa3i)*zmi(jp_aer_soa3)/zmol
128 pctota(:,jp_aer_soa3,2) = psv(:,jp_ch_soa3j)*zmi(jp_aer_soa3)/zmol
129 pctota(:,jp_aer_soa4,1) = psv(:,jp_ch_soa4i)*zmi(jp_aer_soa4)/zmol
130 pctota(:,jp_aer_soa4,2) = psv(:,jp_ch_soa4j)*zmi(jp_aer_soa4)/zmol
131 pctota(:,jp_aer_soa5,1) = psv(:,jp_ch_soa5i)*zmi(jp_aer_soa5)/zmol
132 pctota(:,jp_aer_soa5,2) = psv(:,jp_ch_soa5j)*zmi(jp_aer_soa5)/zmol
134 pctota(:,jp_aer_soa6,1) = psv(:,jp_ch_soa6i)*zmi(jp_aer_soa6)/zmol
135 pctota(:,jp_aer_soa6,2) = psv(:,jp_ch_soa6j)*zmi(jp_aer_soa6)/zmol
136 pctota(:,jp_aer_soa7,1) = psv(:,jp_ch_soa7i)*zmi(jp_aer_soa7)/zmol
137 pctota(:,jp_aer_soa7,2) = psv(:,jp_ch_soa7j)*zmi(jp_aer_soa7)/zmol
138 pctota(:,jp_aer_soa8,1) = psv(:,jp_ch_soa8i)*zmi(jp_aer_soa8)/zmol
139 pctota(:,jp_aer_soa8,2) = psv(:,jp_ch_soa8j)*zmi(jp_aer_soa8)/zmol
140 pctota(:,jp_aer_soa9,1) = psv(:,jp_ch_soa9i)*zmi(jp_aer_soa9)/zmol
141 pctota(:,jp_aer_soa9,2) = psv(:,jp_ch_soa9j)*zmi(jp_aer_soa9)/zmol
142 pctota(:,jp_aer_soa10,1) = psv(:,jp_ch_soa10i)*zmi(jp_aer_soa10)/zmol
143 pctota(:,jp_aer_soa10,2) = psv(:,jp_ch_soa10j)*zmi(jp_aer_soa10)/zmol
146 IF (lhook) CALL dr_hook(
'MODE_AER_SURF:INIT_VAR',1,zhook_handle)
198 REAL,
DIMENSION(:,:),
INTENT(IN) :: psvt
201 REAL,
DIMENSION(:),
INTENT(IN) :: prhodref
204 REAL,
DIMENSION(:,:),
OPTIONAL,
INTENT(OUT) :: psig1d
205 REAL,
DIMENSION(:,:),
OPTIONAL,
INTENT(OUT) :: prg1d
206 REAL,
DIMENSION(:,:),
OPTIONAL,
INTENT(OUT) :: pn1d
207 REAL,
DIMENSION(:,:,:),
OPTIONAL,
INTENT(OUT) :: pctota
208 REAL,
DIMENSION(:,:),
OPTIONAL,
INTENT(OUT) :: pm1d
212 REAL,
DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2)) :: zsv
213 REAL,
DIMENSION(SIZE(PSVT,1)) :: zsigma
214 REAL,
DIMENSION(SIZE(PSVT,1),NSP+NCARB+NSOA,JPMODE) :: zctota
215 REAL,
DIMENSION(SIZE(PSVT,1),JPMODE*3) :: zm
216 REAL,
DIMENSION(JPMODE*3) :: zmmin
218 REAL,
DIMENSION(NSP+NCARB+NSOA) :: zfac
219 REAL,
PARAMETER :: zden2mol = 1e-6 * 6.0221367e+23 / 28.9644e-3
221 REAL(KIND=JPRB) :: zhook_handle
224 IF (lhook) CALL dr_hook(
'MODE_AER_SURF:PPP2AERO_SURF',0,zhook_handle)
228 DO jj=1,
SIZE(psvt,2)
229 zsv(:,jj) = psvt(:,jj) * zden2mol * prhodref(:)
230 zsv(:,jj) = max(zsv(:,jj),1e-40 * zden2mol * prhodref(:))
239 DO jj = 1,nsp+ncarb+nsoa
240 zm(:,2) = zm(:,2)+zctota(:,jj,1)/zfac(jj)
241 zm(:,5) = zm(:,5)+zctota(:,jj,2)/zfac(jj)
247 zm(:,1)= max(zsv(:,jp_ch_m0i) * 1e+6, xsurf_tiny)
248 zm(:,4)= max(zsv(:,jp_ch_m0j) * 1e+6, xsurf_tiny)
249 WHERE ((zm(:,1) .LT. zmmin(1)))
261 WHERE ((zm(:,4) .LT. zmmin(4)))
276 zm(:,3) = max(zsv(:,jp_ch_m6i), xsurf_tiny)
278 zsigma(:)=zm(:,2)**2/(zm(:,1)*zm(:,3))
279 zsigma(:)=min(1-1e-10,zsigma(:))
280 zsigma(:)=max(1e-10,zsigma(:))
281 zsigma(:)= log(zsigma(:))
282 zsigma(:)= exp(1./3.*sqrt(-zsigma(:)))
284 * ( (zm(:,2)/zm(:,1))**(1./3.) &
285 * exp(-(3./2.)*log(zsigma(:))**2))**6 &
286 * exp(18.*log(zsigma(:))**2)
288 IF(present(psig1d)) psig1d(:,1) = zsigma(:)
292 * ( (zm(:,2)/zm(:,1))**(1./3.) &
293 * exp(-(3./2.)*log(xemissigi)**2))**6 &
294 * exp(18.*log(xemissigi)**2)
296 IF(present(psig1d)) psig1d(:,1) = xemissigi
300 zm(:,6) = max(zsv(:,jp_ch_m6j), xsurf_tiny)
302 zsigma(:)=zm(:,5)**2/(zm(:,4)*zm(:,6))
303 zsigma(:)=min(1-1e-10,zsigma(:))
304 zsigma(:)=max(1e-10,zsigma(:))
305 zsigma(:)= log(zsigma(:))
306 zsigma(:)= exp(1./3.*sqrt(-zsigma(:)))
309 * ( (zm(:,5)/zm(:,4))**(1./3.) &
310 * exp(-(3./2.)*log(zsigma(:))**2))**6 &
311 * exp(18.*log(zsigma(:))**2)
313 IF(present(psig1d)) psig1d(:,2) = zsigma(:)
317 * ( (zm(:,5)/zm(:,4))**(1./3.) &
318 * exp(-(3./2.)*log(xemissigj)**2))**6 &
319 * exp(18.*log(xemissigj)**2)
321 IF(present(psig1d)) psig1d(:,2) = xemissigj
327 IF(present(pn1d)) pn1d(:,jn) = zm(:,nm0(jn))
329 IF(present(prg1d)) prg1d(:,jn)=(zm(:,nm3(jn))**4. &
330 / (zm(:,nm6(jn))*zm(:,nm0(jn))**3.))**(1./6.)
333 IF(present(pctota)) pctota(:,:,:) = zctota(:,:,:)
334 IF(present(pm1d)) pm1d(:,:) = zm(:,:)
335 IF (lhook) CALL dr_hook(
'MODE_AER_SURF:PPP2AERO_SURF',1,zhook_handle)
377 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: psvt
380 REAL,
DIMENSION(:),
INTENT(IN) :: prhodref
383 REAL,
DIMENSION(:,:),
INTENT(IN) :: psig1d
384 REAL,
DIMENSION(:,:),
INTENT(IN) :: prg1d
388 REAL,
DIMENSION(SIZE(PSVT,1),NSP+NCARB+NSOA,JPMODE):: zctota
389 REAL,
DIMENSION(SIZE(PSVT,1), JPMODE*3) :: zm
391 REAL,
DIMENSION(NSP+NCARB+NSOA) :: zfac
392 REAL,
PARAMETER :: zden2mol = 1e-6 * 6.0221367e+23 / 28.9644e-3
394 REAL(KIND=JPRB) :: zhook_handle
397 IF (lhook) CALL dr_hook(
'MODE_AER_SURF:AERO2PPP_SURF',0,zhook_handle)
401 DO jj=1,
SIZE(psvt, 2)
402 psvt(:,jj) = psvt(:,jj) * zden2mol * prhodref(:)
411 DO jj = 1,nsp+ncarb+nsoa
412 zm(:,2) = zm(:,2)+zctota(:,jj,1)/zfac(jj)
413 zm(:,5) = zm(:,5)+zctota(:,jj,2)/zfac(jj)
419 zm(:,1)= zm(:,2)/ ( (prg1d(:,1)**3)*exp(4.5 * log(psig1d(:,1))**2) )
420 zm(:,4)= zm(:,5)/ ( (prg1d(:,2)**3)*exp(4.5 * log(psig1d(:,2))**2) )
424 zm(:,3) = zm(:,1)*(prg1d(:,1)**6) * exp(18 *(log(psig1d(:,1)))**2)
425 zm(:,6) = zm(:,4)*(prg1d(:,2)**6) * exp(18 *(log(psig1d(:,2)))**2)
429 psvt(:,jp_ch_m0i) = zm(:,1) * 1e-6
430 psvt(:,jp_ch_m0j) = zm(:,4) * 1e-6
432 IF (lvarsigi) psvt(:,jp_ch_m6i) = zm(:,3)
433 IF (lvarsigj) psvt(:,jp_ch_m6j) = zm(:,6)
436 psvt(:,jj) = psvt(:,jj) / (zden2mol * prhodref(:))
439 IF (lhook) CALL dr_hook(
'MODE_AER_SURF:AERO2PPP_SURF',1,zhook_handle)
subroutine ppp2aero_surf(PSVT, PRHODREF, PSIG1D, PRG1D, PN1D, PCTOTA, PM1D)
subroutine aero2ppp_surf(PSVT, PRHODREF, PSIG1D, PRG1D)
subroutine init_var(PSV, PFAC, PCTOTA)