SURFEX v7.3
General documentation of Surfex
|
00001 !! ######################## 00002 MODULE MODE_AER_SURF 00003 !! ######################## 00004 !! 00005 !! MODULE DUST PSD (Particle Size Distribution) 00006 !! Purpose: Contains subroutines to convert from transported variables (ppp) 00007 !! to understandable aerosol variables, e.g. #/m3, kg/m3, sigma, R_{n} 00008 00009 USE MODD_CHS_AEROSOL 00010 00011 ! 00012 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00013 USE PARKIND1 ,ONLY : JPRB 00014 ! 00015 IMPLICIT NONE 00016 !! 00017 CONTAINS 00018 !! 00019 SUBROUTINE INIT_VAR(PSV,PFAC,PCTOTA) 00020 ! 00021 IMPLICIT NONE 00022 ! 00023 REAL,DIMENSION(:,:), INTENT(IN) :: PSV ! [aerosol concentration] 00024 REAL,DIMENSION(:), INTENT(OUT) :: PFAC ! M3 / mass conversion factor 00025 REAL,DIMENSION(:,:,:), INTENT(OUT) :: PCTOTA 00026 ! 00027 REAL,DIMENSION(NSP+NCARB+NSOA) :: ZMI ! [kg/mol] molar weight of aerosol 00028 REAL,DIMENSION(NSP+NCARB+NSOA) :: ZRHOI ! aerosol density 00029 REAL :: ZPI 00030 INTEGER :: JJ 00031 REAL, PARAMETER :: ZMOL = 6.0221367E+11 00032 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00033 ! 00034 IF (LHOOK) CALL DR_HOOK('MODE_AER_SURF:INIT_VAR',0,ZHOOK_HANDLE) 00035 ! 00036 ZRHOI(:) = 1.8e3 00037 ZRHOI(JP_AER_H2O) = 1.0e3 ! water 00038 ! 00039 ! Moments index 00040 NM0(1) = 1 00041 NM3(1) = 2 00042 NM6(1) = 3 00043 NM0(2) = 4 00044 NM3(2) = 5 00045 NM6(2) = 6 00046 ! 00047 !Set density of aerosol, here (kg/m3) 00048 ! Aerosol Density 00049 ! Cf Ackermann (all to black carbon except water) 00050 ! 00051 !Set molecular weightn g/mol 00052 ZMI(:) = 250. 00053 ZMI(JP_AER_SO4) = 98. 00054 ZMI(JP_AER_NO3) = 63. 00055 ZMI(JP_AER_NH3) = 17. 00056 ZMI(JP_AER_H2O) = 18. 00057 IF (NSOA .EQ. 10) THEN 00058 ZMI(JP_AER_SOA1) = 88. 00059 ZMI(JP_AER_SOA2) = 180. 00060 ZMI(JP_AER_SOA3) = 1.5374857E3 00061 ZMI(JP_AER_SOA4) = 1.9586780E3 00062 ZMI(JP_AER_SOA5) = 195. 00063 ZMI(JP_AER_SOA6) = 195. 00064 ZMI(JP_AER_SOA7) = 165. 00065 ZMI(JP_AER_SOA8) = 195. 00066 ZMI(JP_AER_SOA9) = 270. 00067 ZMI(JP_AER_SOA10) = 210. 00068 END IF 00069 ! 00070 ZPI = 2.*ASIN(1.) 00071 DO JJ=1,NSP+NCARB+NSOA 00072 PFAC(JJ)=(4./3.)*ZPI*ZRHOI(JJ)*1.e-9 00073 ENDDO 00074 ! 00075 !* 2 transfer aerosol mass from gas to aerosol variables 00076 ! (and conversion of mol.cm-3 --> microgram/m3) 00077 ! 00078 PCTOTA(:,:,:) = 0. 00079 ! aerosol phase 00080 PCTOTA(:,JP_AER_SO4,1) = PSV(:,JP_CH_SO4i)*ZMI(JP_AER_SO4)/ZMOL 00081 PCTOTA(:,JP_AER_SO4,2) = PSV(:,JP_CH_SO4j)*ZMI(JP_AER_SO4)/ZMOL 00082 00083 PCTOTA(:,JP_AER_NO3,1) = PSV(:,JP_CH_NO3i)*ZMI(JP_AER_NO3)/ZMOL 00084 PCTOTA(:,JP_AER_NO3,2) = PSV(:,JP_CH_NO3j)*ZMI(JP_AER_NO3)/ZMOL 00085 00086 PCTOTA(:,JP_AER_NH3,1) = PSV(:,JP_CH_NH3i)*ZMI(JP_AER_NH3)/ZMOL 00087 PCTOTA(:,JP_AER_NH3,2) = PSV(:,JP_CH_NH3j)*ZMI(JP_AER_NH3)/ZMOL 00088 ! 00089 ! water 00090 PCTOTA(:,JP_AER_H2O,1) = PSV(:,JP_CH_H2Oi)*ZMI(JP_AER_H2O)/ZMOL 00091 PCTOTA(:,JP_AER_H2O,2) = PSV(:,JP_CH_H2Oj)*ZMI(JP_AER_H2O)/ZMOL 00092 ! 00093 ! primary organic carbon 00094 PCTOTA(:,JP_AER_OC,1) = PSV(:,JP_CH_OCi)*ZMI(JP_AER_OC)/ZMOL 00095 PCTOTA(:,JP_AER_OC,2) = PSV(:,JP_CH_OCj)*ZMI(JP_AER_OC)/ZMOL 00096 ! 00097 ! primary black carbon 00098 PCTOTA(:,JP_AER_BC,1) = PSV(:,JP_CH_BCi)*ZMI(JP_AER_BC)/ZMOL 00099 PCTOTA(:,JP_AER_BC,2) = PSV(:,JP_CH_BCj)*ZMI(JP_AER_BC)/ZMOL 00100 ! 00101 IF (NSOA .EQ. 10) THEN 00102 PCTOTA(:,JP_AER_SOA1,1) = PSV(:,JP_CH_SOA1i)*ZMI(JP_AER_SOA1)/ZMOL 00103 PCTOTA(:,JP_AER_SOA1,2) = PSV(:,JP_CH_SOA1j)*ZMI(JP_AER_SOA1)/ZMOL 00104 PCTOTA(:,JP_AER_SOA2,1) = PSV(:,JP_CH_SOA2i)*ZMI(JP_AER_SOA2)/ZMOL 00105 PCTOTA(:,JP_AER_SOA2,2) = PSV(:,JP_CH_SOA2j)*ZMI(JP_AER_SOA2)/ZMOL 00106 PCTOTA(:,JP_AER_SOA3,1) = PSV(:,JP_CH_SOA3i)*ZMI(JP_AER_SOA3)/ZMOL 00107 PCTOTA(:,JP_AER_SOA3,2) = PSV(:,JP_CH_SOA3j)*ZMI(JP_AER_SOA3)/ZMOL 00108 PCTOTA(:,JP_AER_SOA4,1) = PSV(:,JP_CH_SOA4i)*ZMI(JP_AER_SOA4)/ZMOL 00109 PCTOTA(:,JP_AER_SOA4,2) = PSV(:,JP_CH_SOA4j)*ZMI(JP_AER_SOA4)/ZMOL 00110 PCTOTA(:,JP_AER_SOA5,1) = PSV(:,JP_CH_SOA5i)*ZMI(JP_AER_SOA5)/ZMOL 00111 PCTOTA(:,JP_AER_SOA5,2) = PSV(:,JP_CH_SOA5j)*ZMI(JP_AER_SOA5)/ZMOL 00112 00113 PCTOTA(:,JP_AER_SOA6,1) = PSV(:,JP_CH_SOA6i)*ZMI(JP_AER_SOA6)/ZMOL 00114 PCTOTA(:,JP_AER_SOA6,2) = PSV(:,JP_CH_SOA6j)*ZMI(JP_AER_SOA6)/ZMOL 00115 PCTOTA(:,JP_AER_SOA7,1) = PSV(:,JP_CH_SOA7i)*ZMI(JP_AER_SOA7)/ZMOL 00116 PCTOTA(:,JP_AER_SOA7,2) = PSV(:,JP_CH_SOA7j)*ZMI(JP_AER_SOA7)/ZMOL 00117 PCTOTA(:,JP_AER_SOA8,1) = PSV(:,JP_CH_SOA8i)*ZMI(JP_AER_SOA8)/ZMOL 00118 PCTOTA(:,JP_AER_SOA8,2) = PSV(:,JP_CH_SOA8j)*ZMI(JP_AER_SOA8)/ZMOL 00119 PCTOTA(:,JP_AER_SOA9,1) = PSV(:,JP_CH_SOA9i)*ZMI(JP_AER_SOA9)/ZMOL 00120 PCTOTA(:,JP_AER_SOA9,2) = PSV(:,JP_CH_SOA9j)*ZMI(JP_AER_SOA9)/ZMOL 00121 PCTOTA(:,JP_AER_SOA10,1) = PSV(:,JP_CH_SOA10i)*ZMI(JP_AER_SOA10)/ZMOL 00122 PCTOTA(:,JP_AER_SOA10,2) = PSV(:,JP_CH_SOA10j)*ZMI(JP_AER_SOA10)/ZMOL 00123 END IF 00124 ! 00125 IF (LHOOK) CALL DR_HOOK('MODE_AER_SURF:INIT_VAR',1,ZHOOK_HANDLE) 00126 ! 00127 END SUBROUTINE INIT_VAR 00128 ! 00129 !! ############################################################ 00130 SUBROUTINE PPP2AERO_SURF( & 00131 PSVT, &!I [ppp] input scalar variables (moment of distribution) 00132 PRHODREF, &!I [kg/m3] density of air 00133 PSIG1D, &!O [-] standard deviation of aerosol distribution 00134 PRG1D, &!O [um] number median diameter of aerosol distribution 00135 PN1D, &!O [#/m3] number concentration of aerosols 00136 PCTOTA, &!O [ug/m3] mass of each aerosol compounds 00137 PM1D &!moments 0, 3 and 6 00138 ) 00139 !! ############################################################ 00140 ! 00141 !! 00142 !! PURPOSE 00143 !! ------- 00144 !! Translate the three moments M0, M3 and M6 given in ppp into 00145 !! Values which can be understood more easily (R, sigma, N, M) 00146 !! 00147 !! CALLING STRUCTURE NOTE: OPTIONAL VARIABLES 00148 !! ------- 00149 !! CALL PPP2AERO_SURFS(PSVT, PRHODREF, PSIG1D=SIGVAR, & 00150 !! PRG1D=RVAR, PN1D=NVAR, PM1D=ZM) 00151 !! 00152 !! REFERENCE 00153 !! --------- 00154 !! none 00155 !! 00156 !! AUTHOR 00157 !! ------ 00158 !! Pierre TULET (LA) 00159 !! 00160 !! MODIFICATIONS 00161 !! ------------- 00162 !! Alf Grini (CNRM) 00163 !! 00164 !! EXTERNAL 00165 !! -------- 00166 !! 00167 IMPLICIT NONE 00168 !! 00169 !------------------------------------------------------------------------------- 00170 ! 00171 !* 0. DECLARATIONS 00172 ! ------------ 00173 ! 00174 !* 0.1 declarations of arguments 00175 ! 00176 !INPUT 00177 REAL, DIMENSION(:,:), INTENT(IN) :: PSVT !I [#/molec_{air}] first moment 00178 !I [molec_{aer}/molec_{air} 3rd moment 00179 !I [um6/molec_{air}*(cm3/m3)] 6th moment 00180 REAL, DIMENSION(:), INTENT(IN) :: PRHODREF !I [kg/m3] density of air 00181 00182 !OUTPUT 00183 REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PSIG1D !O [-] standard deviation 00184 REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PRG1D !O [um] number median diameter 00185 REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PN1D !O [#/m3] number concentration 00186 REAL, DIMENSION(:,:,:),OPTIONAL, INTENT(OUT) :: PCTOTA !O [ug/m3] mass of each component 00187 REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PM1D !O moments 0,3 and 6 00188 ! 00189 !* 0.2 declarations local variables 00190 ! 00191 REAL,DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2)) :: ZSV ! [aerosol concentration] 00192 REAL,DIMENSION(SIZE(PSVT,1)) :: ZSIGMA ! [-] standard deviation 00193 REAL,DIMENSION(SIZE(PSVT,1),NSP+NCARB+NSOA,JPMODE) :: ZCTOTA 00194 REAL,DIMENSION(SIZE(PSVT,1),JPMODE*3) :: ZM 00195 REAL,DIMENSION(JPMODE*3) :: ZMMIN 00196 ! 00197 REAL,DIMENSION(NSP+NCARB+NSOA) :: ZFAC ! M3 / mass conversion factor 00198 REAL, PARAMETER :: ZDEN2MOL = 1E-6 * 6.0221367E+23 / 28.9644E-3 00199 INTEGER :: JJ, JN ! [idx] loop counters 00200 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00201 ! 00202 !------------------------------------------------------------------------------- 00203 IF (LHOOK) CALL DR_HOOK('MODE_AER_SURF:PPP2AERO_SURF',0,ZHOOK_HANDLE) 00204 ! 00205 ! 1. initialisation 00206 ! 00207 DO JJ=1, SIZE(PSVT,2) 00208 ZSV(:,JJ) = PSVT(:,JJ) * ZDEN2MOL * PRHODREF(:) 00209 ZSV(:,JJ) = MAX(ZSV(:,JJ),1E-40 * ZDEN2MOL * PRHODREF(:)) 00210 ENDDO 00211 ! 00212 CALL INIT_VAR(ZSV,ZFAC,ZCTOTA) 00213 ! 00214 !* 2 calculate moment 3 from total aerosol mass 00215 ! 00216 ZM(:,2) = 0. 00217 ZM(:,5) = 0. 00218 DO JJ = 1,NSP+NCARB+NSOA 00219 ZM(:,2) = ZM(:,2)+ZCTOTA(:,JJ,1)/ZFAC(JJ) !==>um3_{aer}/m3_{air} (volume ==> 3rd moment) 00220 ZM(:,5) = ZM(:,5)+ZCTOTA(:,JJ,2)/ZFAC(JJ) !==>um3_{aer}/m3_{air} (volume ==> 3rd moment) 00221 ENDDO 00222 ! 00223 ! 00224 !* 3 set moment 0 00225 ! 00226 ZM(:,1)= MAX(ZSV(:,JP_CH_M0i) * 1E+6, 1.E-10) ! molec_{aer}/m3_{air} 00227 ZM(:,4)= MAX(ZSV(:,JP_CH_M0j) * 1E+6, 1.E-10) ! molec_{aer}/m3_{air} 00228 WHERE ((ZM(:,1) .LT. ZMMIN(1)).OR.(ZM(:,2) .LT. ZMMIN(2))) 00229 ZM(:,1)= ZMMIN(1) 00230 ZM(:,2)= ZMMIN(2) 00231 00232 ZCTOTA(:,JP_AER_H2O,1) = 0. 00233 ZCTOTA(:,JP_AER_NH3,1) = 0. 00234 ZCTOTA(:,JP_AER_SO4,1) = 0. 00235 ZCTOTA(:,JP_AER_NO3,1) = 0. 00236 ZCTOTA(:,JP_AER_BC,1) = 0.5 * ZM(:,2) * ZFAC(JP_AER_BC) 00237 ZCTOTA(:,JP_AER_OC,1) = 0.5 * ZM(:,2) * ZFAC(JP_AER_OC) 00238 END WHERE 00239 ! 00240 WHERE ((ZM(:,4) .LT. ZMMIN(4)).OR.(ZM(:,5) .LT. ZMMIN(5))) 00241 ZM(:,4)= ZMMIN(4) 00242 ZM(:,5)= ZMMIN(5) 00243 00244 ZCTOTA(:,JP_AER_H2O,2) = 0. 00245 ZCTOTA(:,JP_AER_NH3,2) = 0. 00246 ZCTOTA(:,JP_AER_SO4,2) = 0. 00247 ZCTOTA(:,JP_AER_NO3,2) = 0. 00248 ZCTOTA(:,JP_AER_BC,2) = 0.5 * ZM(:,5) * ZFAC(JP_AER_BC) 00249 ZCTOTA(:,JP_AER_OC,2) = 0.5 * ZM(:,5) * ZFAC(JP_AER_OC) 00250 END WHERE 00251 ! 00252 !* 4 set moment 6 ==> um6_{aer}/m3_{air} 00253 ! 00254 IF (LVARSIGI) THEN ! set M6 variable standard deviation 00255 ZM(:,3) = MAX(ZSV(:,JP_CH_M6i), 1E-80) 00256 00257 ZSIGMA(:)=ZM(:,2)**2/(ZM(:,1)*ZM(:,3)) 00258 ZSIGMA(:)=MIN(1-1E-10,ZSIGMA(:)) 00259 ZSIGMA(:)=MAX(1E-10,ZSIGMA(:)) 00260 ZSIGMA(:)= LOG(ZSIGMA(:)) 00261 ZSIGMA(:)= EXP(1./3.*SQRT(-ZSIGMA(:))) 00262 ZM(:,3) = ZM(:,1) & 00263 * ( (ZM(:,2)/ZM(:,1))**(1./3.) & 00264 * exp(-(3./2.)*log(ZSIGMA(:))**2))**6 & 00265 * exp(18.*log(ZSIGMA(:))**2) 00266 00267 IF(PRESENT(PSIG1D)) PSIG1D(:,1) = ZSIGMA(:) 00268 00269 ELSE ! fixed standard deviation 00270 ZM(:,3) = ZM(:,1) & 00271 * ( (ZM(:,2)/ZM(:,1))**(1./3.) & 00272 * exp(-(3./2.)*log(XEMISSIGI)**2))**6 & 00273 * exp(18.*log(XEMISSIGI)**2) 00274 00275 IF(PRESENT(PSIG1D)) PSIG1D(:,1) = XEMISSIGI 00276 END IF 00277 00278 IF (LVARSIGJ) THEN ! set M6 variable standard deviation 00279 ZM(:,6) = MAX(ZSV(:,JP_CH_M6j), 1E-80) 00280 00281 ZSIGMA(:)=ZM(:,5)**2/(ZM(:,4)*ZM(:,6)) 00282 ZSIGMA(:)=MIN(1-1E-10,ZSIGMA(:)) 00283 ZSIGMA(:)=MAX(1E-10,ZSIGMA(:)) 00284 ZSIGMA(:)= LOG(ZSIGMA(:)) 00285 ZSIGMA(:)= EXP(1./3.*SQRT(-ZSIGMA(:))) 00286 00287 ZM(:,6) = ZM(:,4) & 00288 * ( (ZM(:,5)/ZM(:,4))**(1./3.) & 00289 * exp(-(3./2.)*log(ZSIGMA(:))**2))**6 & 00290 * exp(18.*log(ZSIGMA(:))**2) 00291 00292 IF(PRESENT(PSIG1D)) PSIG1D(:,2) = ZSIGMA(:) 00293 00294 ELSE ! fixed standard deviation 00295 ZM(:,6) = ZM(:,4) & 00296 * ( (ZM(:,5)/ZM(:,4))**(1./3.) & 00297 * exp(-(3./2.)*log(XEMISSIGJ)**2))**6 & 00298 * exp(18.*log(XEMISSIGJ)**2) 00299 00300 IF(PRESENT(PSIG1D)) PSIG1D(:,2) = XEMISSIGJ 00301 END IF 00302 00303 00304 !* 6 calculate modal parameters from moments 00305 DO JN=1,JPMODE 00306 IF(PRESENT(PN1D)) PN1D(:,JN) = ZM(:,NM0(JN)) 00307 00308 IF(PRESENT(PRG1D)) PRG1D(:,JN)=(ZM(:,NM3(JN))**4. & 00309 / (ZM(:,NM6(JN))*ZM(:,NM0(JN))**3.))**(1./6.) 00310 ENDDO 00311 00312 IF(PRESENT(PCTOTA)) PCTOTA(:,:,:) = ZCTOTA(:,:,:) 00313 IF(PRESENT(PM1D)) PM1D(:,:) = ZM(:,:) 00314 IF (LHOOK) CALL DR_HOOK('MODE_AER_SURF:PPP2AERO_SURF',1,ZHOOK_HANDLE) 00315 ! 00316 END SUBROUTINE PPP2AERO_SURF 00317 !! ############################################################ 00318 SUBROUTINE AERO2PPP_SURF( & 00319 PSVT, &!IO [ppp] input scalar variables (moment of distribution) 00320 PRHODREF, &!I [kg/m3] density of air 00321 PSIG1D, &!I [-] standard deviation of aerosol distribution 00322 PRG1D &!I [um] number median diameter of aerosol distribution 00323 ) 00324 !! ############################################################ 00325 ! 00326 !! 00327 !! PURPOSE 00328 !! ------- 00329 !! Translate the aerosol Mass, RG and SIGMA in the three moments M0, M3 and M6 given in ppp 00330 !! 00331 !! REFERENCE 00332 !! --------- 00333 !! none 00334 !! 00335 !! AUTHOR 00336 !! ------ 00337 !! Pierre TULET (LA) 00338 !! 00339 !! MODIFICATIONS 00340 !! ------------- 00341 !! Alf Grini (CNRM) 00342 !! 00343 !! EXTERNAL 00344 !! -------- 00345 !! 00346 IMPLICIT NONE 00347 !! 00348 !------------------------------------------------------------------------------- 00349 ! 00350 !* 0. DECLARATIONS 00351 ! ------------ 00352 ! 00353 !* 0.1 declarations of arguments 00354 ! 00355 !INPUT 00356 REAL, DIMENSION(:,:), INTENT(INOUT) :: PSVT !I [#/molec_{air}] first moment 00357 !I [molec_{aer}/molec_{air} 3rd moment 00358 !I [um6/molec_{air}*(cm3/m3)] 6th moment 00359 REAL, DIMENSION(:), INTENT(IN) :: PRHODREF !I [kg/m3] density of air 00360 00361 !OUTPUT 00362 REAL, DIMENSION(:,:), INTENT(IN) :: PSIG1D !O [-] standard deviation 00363 REAL, DIMENSION(:,:), INTENT(IN) :: PRG1D !O [um] number median diameter 00364 ! 00365 !* 0.2 declarations local variables 00366 ! 00367 REAL,DIMENSION(SIZE(PSVT,1),NSP+NCARB+NSOA,JPMODE):: ZCTOTA 00368 REAL,DIMENSION(SIZE(PSVT,1), JPMODE*3) :: ZM ! [aerosol units] local array which goes to output later 00369 ! 00370 REAL,DIMENSION(NSP+NCARB+NSOA) :: ZFAC ! M3 / mass conversion factor 00371 REAL, PARAMETER :: ZDEN2MOL = 1E-6 * 6.0221367E+23 / 28.9644E-3 00372 INTEGER :: JJ ! [idx] loop counters 00373 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00374 ! 00375 !------------------------------------------------------------------------------- 00376 IF (LHOOK) CALL DR_HOOK('MODE_AER_SURF:AERO2PPP_SURF',0,ZHOOK_HANDLE) 00377 ! 00378 ! 1. initialisation 00379 ! 00380 DO JJ=1, SIZE(PSVT, 2) 00381 PSVT(:,JJ) = PSVT(:,JJ) * ZDEN2MOL * PRHODREF(:) 00382 ENDDO 00383 ! 00384 CALL INIT_VAR(PSVT,ZFAC,ZCTOTA) 00385 ! 00386 !* 3 calculate moment 3 from total aerosol mass 00387 ! 00388 ZM(:,2) = 0. 00389 ZM(:,5) = 0. 00390 DO JJ = 1,NSP+NCARB+NSOA 00391 ZM(:,2) = ZM(:,2)+ZCTOTA(:,JJ,1)/ZFAC(JJ) 00392 ZM(:,5) = ZM(:,5)+ZCTOTA(:,JJ,2)/ZFAC(JJ) 00393 ENDDO 00394 ! 00395 ! 00396 !* 4 calculate moment 0 from dispersion and mean radius 00397 ! 00398 ZM(:,1)= ZM(:,2)/ ( (PRG1D(:,1)**3)*EXP(4.5 * LOG(PSIG1D(:,1))**2) ) 00399 ZM(:,4)= ZM(:,5)/ ( (PRG1D(:,2)**3)*EXP(4.5 * LOG(PSIG1D(:,2))**2) ) 00400 ! 00401 !* 5 calculate moment 6 from dispersion and mean radius 00402 ! 00403 ZM(:,3) = ZM(:,1)*(PRG1D(:,1)**6) * EXP(18 *(LOG(PSIG1D(:,1)))**2) 00404 ZM(:,6) = ZM(:,4)*(PRG1D(:,2)**6) * EXP(18 *(LOG(PSIG1D(:,2)))**2) 00405 ! 00406 !* 6 return to ppp 00407 ! 00408 PSVT(:,JP_CH_M0i) = ZM(:,1) * 1E-6 00409 PSVT(:,JP_CH_M0j) = ZM(:,4) * 1E-6 00410 ! 00411 IF (LVARSIGI) PSVT(:,JP_CH_M6i) = ZM(:,3) 00412 IF (LVARSIGJ) PSVT(:,JP_CH_M6j) = ZM(:,6) 00413 ! 00414 DO JJ=1,SIZE(PSVT,2) 00415 PSVT(:,JJ) = PSVT(:,JJ) / (ZDEN2MOL * PRHODREF(:)) 00416 ENDDO 00417 ! 00418 IF (LHOOK) CALL DR_HOOK('MODE_AER_SURF:AERO2PPP_SURF',1,ZHOOK_HANDLE) 00419 ! 00420 END SUBROUTINE AERO2PPP_SURF 00421 00422 END MODULE MODE_AER_SURF