SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/mode_aer_surf.F90
Go to the documentation of this file.
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