SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/ch_aer_emission.F90
Go to the documentation of this file.
00001 !!   ############################################################
00002      SUBROUTINE CH_AER_EMISSION(PFLUX, PRHODREF, HSV, KSV_CHSBEG,  PFCO)
00003 !!   ############################################################
00004 !!
00005 !!    PURPOSE
00006 !!    -------
00007 !!    Transforme les emissions  d'aérosol en masse kg.kg-1.m.s-1 en molecules.m-2.s-1 : flux du moment m3
00008 !!    Calcule les flux des moments m0 et m6 à partir de sigma  et Rg (um)
00009 !!
00010 !!    REFERENCE
00011 !!    ---------
00012 !!    none
00013 !!
00014 !!    AUTHOR
00015 !!    ------
00016 !!    Pierre TULET (CNRM/GMEI)
00017 !!
00018 !!    MODIFICATIONS
00019 !!    -------------
00020 !!    none
00021 !!
00022 !!    EXTERNAL
00023 !!    --------
00024 !!    None
00025 !!
00026 USE MODD_CHS_AEROSOL
00027 USE MODI_ABOR1_SFX
00028 !!
00029 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00030 USE PARKIND1  ,ONLY : JPRB
00031 !
00032 IMPLICIT NONE
00033 !!
00034 !-------------------------------------------------------------------------------
00035 !
00036 !*       0.     DECLARATIONS
00037 !               ------------
00038 !
00039 !*      0.1    declarations of arguments
00040 !
00041 REAL,   DIMENSION(:,:),      INTENT(INOUT) :: PFLUX
00042 REAL,   DIMENSION(:),        INTENT(IN) :: PRHODREF
00043 INTEGER,                     INTENT(IN) :: KSV_CHSBEG
00044  CHARACTER(LEN=*), DIMENSION(:),  INTENT(IN)  :: HSV      ! name of chemical species
00045 REAL,   DIMENSION(:),OPTIONAL, INTENT(IN)  :: PFCO   ! CO flux 
00046 
00047 !
00048 !
00049 !*      0.2    declarations local variables
00050 !
00051 REAL :: ZDEN2MOL
00052         !  ZDEN2MOL = 6.0221367E+23 * 1E-6 / 28.9644E-3
00053         !  conversion factor density to mol/cm3
00054         !  n_molec (moelc./cm3):  M = 1E-6*RHO(kg/m3) * XAVOGADRO / XMD
00055 REAL,DIMENSION(NSP+NCARB+NSOA) :: ZFAC, ZRHOI, ZMI
00056 REAL,DIMENSION(SIZE(PFLUX,1),NSP+NCARB+NSOA,JPMODE) :: ZFCTOTA
00057 REAL,DIMENSION(SIZE(PFLUX,1),JPIN) :: ZFM
00058 REAL,DIMENSION(SIZE(PFLUX,1)) :: ZFCO
00059 REAL,DIMENSION(SIZE(PFLUX,1)) :: ZCONVERSION
00060 !
00061 INTEGER :: JJ, JSV  ! loop counter
00062 REAL   :: ZEMISRADIUSI, ZEMISRADIUSJ
00063 REAL   :: ZVALBC, ZVALOC
00064 INTEGER :: I_CH_M0i, I_CH_M0j, I_CH_M6i, I_CH_M6j, I_CH_H2Oi, I_CH_H2Oj,
00065                   I_CH_SO4i,I_CH_SO4j, I_CH_NO3i, I_CH_NO3j, I_CH_NH3i, I_CH_NH3j,
00066                   I_CH_OCi, I_CH_OCj, I_CH_BCi, I_CH_BCj    
00067 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00068 
00069 !
00070 !-------------------------------------------------------------------------------
00071 !
00072 !*       1.     TRANSFER FROM GAS TO AEROSOL MODULE
00073 !               ------------------------------------
00074 !        1.1    initialisation 
00075 !
00076 
00077 IF (LHOOK) CALL DR_HOOK('CH_AER_EMISSION',0,ZHOOK_HANDLE)
00078 
00079 I_CH_M0i=-999
00080 I_CH_M0j=-999
00081 I_CH_M6i=-999
00082 I_CH_M6j=-999
00083 I_CH_H2Oi=-999
00084 I_CH_H2Oj=-999
00085 I_CH_SO4i=-999
00086 I_CH_SO4j=-999
00087 I_CH_NO3i=-999
00088 I_CH_NO3j=-999
00089 I_CH_NH3i=-999
00090 I_CH_NH3j=-999
00091 I_CH_OCi=-999
00092 I_CH_OCj=-999
00093 I_CH_BCi=-999
00094 I_CH_BCj=-999
00095 
00096 DO JSV=1, size(HSV)
00097    IF (TRIM(HSV(JSV)) == "M0I") I_CH_M0i=JSV-KSV_CHSBEG+1
00098    IF (TRIM(HSV(JSV)) == "M0J") I_CH_M0j=JSV-KSV_CHSBEG+1
00099    IF (TRIM(HSV(JSV)) == "M6I") I_CH_M6i=JSV-KSV_CHSBEG+1
00100    IF (TRIM(HSV(JSV)) == "M6J") I_CH_M6j=JSV-KSV_CHSBEG+1
00101    IF (TRIM(HSV(JSV)) == "H2OI") I_CH_H2Oi=JSV-KSV_CHSBEG+1
00102    IF (TRIM(HSV(JSV)) == "H2OJ") I_CH_H2Oj=JSV-KSV_CHSBEG+1
00103    IF (TRIM(HSV(JSV)) == "SO4I") I_CH_SO4i=JSV-KSV_CHSBEG+1
00104    IF (TRIM(HSV(JSV)) == "SO4J") I_CH_SO4j=JSV-KSV_CHSBEG+1
00105    IF (TRIM(HSV(JSV)) == "NO3I") I_CH_NO3i=JSV-KSV_CHSBEG+1
00106    IF (TRIM(HSV(JSV)) == "NO3J") I_CH_NO3j=JSV-KSV_CHSBEG+1
00107    IF (TRIM(HSV(JSV)) == "NH3I") I_CH_NH3i=JSV-KSV_CHSBEG+1
00108    IF (TRIM(HSV(JSV)) == "NH3J") I_CH_NH3j=JSV-KSV_CHSBEG+1
00109    IF (TRIM(HSV(JSV)) == "OCI") I_CH_OCi=JSV-KSV_CHSBEG+1
00110    IF (TRIM(HSV(JSV)) == "OCJ") I_CH_OCj=JSV-KSV_CHSBEG+1
00111    IF (TRIM(HSV(JSV)) == "BCI") I_CH_BCi=JSV-KSV_CHSBEG+1
00112    IF (TRIM(HSV(JSV)) == "BCJ") I_CH_BCj=JSV-KSV_CHSBEG+1
00113 END DO
00114 
00115 IF (I_CH_M0i ==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_M0i ')
00116 IF (I_CH_M0j ==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_M0j ')
00117 IF (I_CH_M6i ==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_M6i ')
00118 IF (I_CH_M6j ==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_M6j ')
00119 IF (I_CH_H2Oi==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_H2Oi')
00120 IF (I_CH_H2Oj==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_H2Oj')
00121 IF (I_CH_SO4i==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_SO4i')
00122 IF (I_CH_SO4j==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_SO4j')
00123 IF (I_CH_NO3i==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_NO3i')
00124 IF (I_CH_NO3j==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_NO3j')
00125 IF (I_CH_NH3i==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_NH3i')
00126 IF (I_CH_NH3j==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_NH3j')
00127 IF (I_CH_OCi ==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_OCi ')
00128 IF (I_CH_OCj ==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_OCj ')
00129 IF (I_CH_BCi ==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_BCi ')
00130 IF (I_CH_BCj ==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_BCj ')
00131 
00132 
00133 ZMI(:) = 250.
00134 ZMI(JP_AER_SO4)  = 98.
00135 ZMI(JP_AER_NO3)  = 63.
00136 ZMI(JP_AER_NH3)  = 17.
00137 ZMI(JP_AER_H2O)  = 18.
00138 
00139 ! Aerosol Density
00140 ! Cf Ackermann (all to black carbon except water)
00141 ZRHOI(:) = 1.8e3
00142 ZRHOI(JP_AER_H2O) = 1.0e3   ! water
00143 
00144 
00145 ZDEN2MOL = 1E-6 * XAVOGADRO / XMD
00146 
00147 IF (CRGUNIT=="MASS") THEN
00148 ZEMISRADIUSI = XEMISRADIUSI * EXP(-3.*(LOG(XEMISSIGI))**2)
00149 ZEMISRADIUSJ = XEMISRADIUSJ * EXP(-3.*(LOG(XEMISSIGJ))**2)
00150 ELSE
00151 ZEMISRADIUSI = XEMISRADIUSI
00152 ZEMISRADIUSJ = XEMISRADIUSJ
00153 END IF
00154 !
00155 DO JJ=1,NSP+NCARB+NSOA
00156   ZFAC(JJ)=(4./3.)*3.14292654*ZRHOI(JJ)*1.e-9
00157 ENDDO
00158 
00159 ZFM(:,:)=0.
00160 ZFCTOTA(:,:,:)=0.
00161 PFLUX(:,:)=MAX(PFLUX(:,:),0.)
00162 !
00163 !*       0      conversion into  kg.kg-1.m.s-1 (due to PCONVERSION)
00164 
00165 ZVALBC  = 0.
00166 ZVALOC  = 0.
00167 ZFCO(:) = 0.
00168 IF ((LCO2PM).AND.(PRESENT(PFCO))) THEN
00169 !ZVALBC=2.748549E-02  ! CO / BC conversion factor
00170 !ZVALOC=4.947248E-02  ! CO / POM conversion factor
00171 ZVALBC= 5.* 0.6E-10 / 0.4E-8  ! CO / BC conversion factor
00172 ZVALOC= 5.* 0.3E-10 / 0.4E-8  ! CO / POM conversion factor
00173 
00174 ZFCO(:) = PFCO(:)
00175 END IF
00176 
00177 ! Initial aerosols fluxes have been transformed into molecu.m-2.s-1, 
00178 ! conversion into are in kg.kg-1.m.s-1 
00179 !  conversion in kg.kg-1.m.s-1
00180 ZCONVERSION(:) =  XAVOGADRO * PRHODREF(:)
00181 
00182   PFLUX(:,I_CH_SO4i) = PFLUX(:,I_CH_SO4i) / ZCONVERSION(:) * ZMI(JP_AER_SO4)*1E-3
00183   PFLUX(:,I_CH_SO4j) = PFLUX(:,I_CH_SO4j) / ZCONVERSION(:) * ZMI(JP_AER_SO4)*1E-3
00184   PFLUX(:,I_CH_NO3i) = PFLUX(:,I_CH_NO3i) / ZCONVERSION(:) * ZMI(JP_AER_NO3)*1E-3
00185   PFLUX(:,I_CH_NO3j) = PFLUX(:,I_CH_NO3j) / ZCONVERSION(:) * ZMI(JP_AER_NO3)*1E-3
00186   PFLUX(:,I_CH_NH3i) = PFLUX(:,I_CH_NH3i) / ZCONVERSION(:) * ZMI(JP_AER_NH3)*1E-3
00187   PFLUX(:,I_CH_NH3j) = PFLUX(:,I_CH_NH3j) / ZCONVERSION(:) * ZMI(JP_AER_NH3)*1E-3
00188   PFLUX(:,I_CH_H2Oi) = PFLUX(:,I_CH_H2Oi) / ZCONVERSION(:) * ZMI(JP_AER_H2O)*1E-3
00189   PFLUX(:,I_CH_H2Oj) = PFLUX(:,I_CH_H2Oj) / ZCONVERSION(:) * ZMI(JP_AER_H2O)*1E-3
00190   PFLUX(:,I_CH_OCi)  = (PFLUX(:,I_CH_OCi) + ZFCO(:) * ZVALOC / 2.) / ZCONVERSION(:) * ZMI(JP_AER_OC)*1E-3
00191   PFLUX(:,I_CH_OCj)  = (PFLUX(:,I_CH_OCj) + ZFCO(:) * ZVALOC ) / ZCONVERSION(:) * ZMI(JP_AER_OC)*1E-3
00192   PFLUX(:,I_CH_BCi)  = (PFLUX(:,I_CH_BCi) + ZFCO(:) * ZVALBC / 2.) / ZCONVERSION(:) * ZMI(JP_AER_BC)*1E-3
00193   PFLUX(:,I_CH_BCj)  = (PFLUX(:,I_CH_BCj) + ZFCO(:) * ZVALBC ) / ZCONVERSION(:) * ZMI(JP_AER_BC)*1E-3
00194 
00195 !*       1.0    transfer aerosol mass from gas to aerosol variables
00196 !               (and conversion of kg.kg-1.m.s-1 --> microgram.m-2.s-1)
00197 
00198 ZFCTOTA(:,JP_AER_SO4,1) = PFLUX(:,I_CH_SO4i) *1E+9 * PRHODREF(:) 
00199 ZFCTOTA(:,JP_AER_SO4,2) = PFLUX(:,I_CH_SO4j) *1E+9 * PRHODREF(:)
00200 
00201 ZFCTOTA(:,JP_AER_NH3,1) = PFLUX(:,I_CH_NH3i) *1E+9 * PRHODREF(:)
00202 ZFCTOTA(:,JP_AER_NH3,2) = PFLUX(:,I_CH_NH3j) *1E+9 * PRHODREF(:)
00203 
00204 ZFCTOTA(:,JP_AER_NO3,1) = PFLUX(:,I_CH_NO3i) *1E+9 * PRHODREF(:)
00205 ZFCTOTA(:,JP_AER_NO3,2) = PFLUX(:,I_CH_NO3j) *1E+9 * PRHODREF(:)
00206 
00207 ZFCTOTA(:,JP_AER_H2O,1) = PFLUX(:,I_CH_H2Oi) *1E+9 * PRHODREF(:)
00208 ZFCTOTA(:,JP_AER_H2O,2) = PFLUX(:,I_CH_H2Oj) *1E+9 * PRHODREF(:)
00209 
00210 ZFCTOTA(:,JP_AER_OC,1)  = PFLUX(:,I_CH_OCi)  *1E+9 * PRHODREF(:)
00211 ZFCTOTA(:,JP_AER_OC,2)  = PFLUX(:,I_CH_OCj)  *1E+9 * PRHODREF(:)
00212 
00213 ZFCTOTA(:,JP_AER_BC,1)  = PFLUX(:,I_CH_BCi)  *1E+9 * PRHODREF(:)
00214 ZFCTOTA(:,JP_AER_BC,2)  = PFLUX(:,I_CH_BCj)  *1E+9 * PRHODREF(:)
00215 
00216 
00217 !*       1.1    calculate moment 3 flux from total aerosol mass
00218 
00219 !
00220 ZFM(:,2) = 0.
00221 ZFM(:,5) = 0.
00222   DO JJ = 1,NSP+NCARB+NSOA
00223     ZFM(:,2) = ZFM(:,2)+ZFCTOTA(:,JJ,1)/ZFAC(JJ)
00224     ZFM(:,5) = ZFM(:,5)+ZFCTOTA(:,JJ,2)/ZFAC(JJ)
00225   ENDDO
00226 !
00227 !*       1.2    calculate moment 0 flux from dispersion and mean radius Rg
00228 !
00229    ZFM(:,1)= ZFM(:,2) / &
00230                 ((ZEMISRADIUSI**3)*EXP(4.5 * (LOG(XEMISSIGI))**2)) 
00231 !
00232    ZFM(:,4)= ZFM(:,5) / &
00233                 ((ZEMISRADIUSJ**3)*EXP(4.5 * (LOG(XEMISSIGJ))**2)) 
00234 !
00235 !*       1.3    calculate moment 6 flux from dispersion and mean diameter
00236 !
00237    ZFM(:,3) = ZFM(:,1) * (ZEMISRADIUSI**6) *EXP(18 *(LOG(XEMISSIGI))**2)
00238 !
00239    ZFM(:,6) = ZFM(:,4) * (ZEMISRADIUSJ**6) *EXP(18 *(LOG(XEMISSIGJ))**2)
00240 
00241 !*       1.4    conversion en ppp.m.s-1
00242 
00243  ! conversion in atmospheric unit only for moments 0 and 6 
00244   PFLUX(:,I_CH_M0i) = ZFM(:,1) * 1E-6 / (ZDEN2MOL * PRHODREF(:))
00245   PFLUX(:,I_CH_M0j) = ZFM(:,4) * 1E-6 / (ZDEN2MOL * PRHODREF(:))
00246 
00247   IF (LVARSIGI) PFLUX(:,I_CH_M6i) = ZFM(:,3) / (ZDEN2MOL * PRHODREF(:))
00248   IF (LVARSIGJ) PFLUX(:,I_CH_M6j) = ZFM(:,6) / (ZDEN2MOL * PRHODREF(:))
00249 !
00250 ! aerosol phase conversion kg/kg.m.s-1 into ppp.m.s-1
00251   PFLUX(:,I_CH_SO4i) = PFLUX(:,I_CH_SO4i) * XMD / (ZMI(JP_AER_SO4)*1E-3)
00252   PFLUX(:,I_CH_SO4j) = PFLUX(:,I_CH_SO4j) * XMD / (ZMI(JP_AER_SO4)*1E-3)
00253   PFLUX(:,I_CH_NO3i) = PFLUX(:,I_CH_NO3i) * XMD / (ZMI(JP_AER_NO3)*1E-3)
00254   PFLUX(:,I_CH_NO3j) = PFLUX(:,I_CH_NO3j) * XMD / (ZMI(JP_AER_NO3)*1E-3)
00255   PFLUX(:,I_CH_NH3i) = PFLUX(:,I_CH_NH3i) * XMD / (ZMI(JP_AER_NH3)*1E-3)
00256   PFLUX(:,I_CH_NH3j) = PFLUX(:,I_CH_NH3j) * XMD / (ZMI(JP_AER_NH3)*1E-3)
00257   PFLUX(:,I_CH_H2Oi) = PFLUX(:,I_CH_H2Oi) * XMD / (ZMI(JP_AER_H2O)*1E-3)
00258   PFLUX(:,I_CH_H2Oj) = PFLUX(:,I_CH_H2Oj) * XMD / (ZMI(JP_AER_H2O)*1E-3)
00259 
00260   PFLUX(:,I_CH_OCi) = PFLUX(:,I_CH_OCi) * XMD / (ZMI(JP_AER_OC)*1E-3)
00261   PFLUX(:,I_CH_OCj) = PFLUX(:,I_CH_OCj) * XMD / (ZMI(JP_AER_OC)*1E-3)
00262   PFLUX(:,I_CH_BCi) = PFLUX(:,I_CH_BCi) * XMD / (ZMI(JP_AER_BC)*1E-3)
00263   PFLUX(:,I_CH_BCj) = PFLUX(:,I_CH_BCj) * XMD / (ZMI(JP_AER_BC)*1E-3)
00264 !
00265  ! then conversion in  molecules.m-2.s-1
00266   PFLUX(:,I_CH_M0i) = PFLUX(:,I_CH_M0i) * ZCONVERSION(:)
00267   PFLUX(:,I_CH_M0j) = PFLUX(:,I_CH_M0j) * ZCONVERSION(:)
00268 
00269   IF (LVARSIGI) PFLUX(:,I_CH_M6i) = PFLUX(:,I_CH_M6i) * ZCONVERSION(:) 
00270   IF (LVARSIGJ) PFLUX(:,I_CH_M6j) = PFLUX(:,I_CH_M6j) * ZCONVERSION(:)
00271 
00272   PFLUX(:,I_CH_SO4i) = PFLUX(:,I_CH_SO4i) * ZCONVERSION(:) / (ZMI(JP_AER_SO4)*1E-3)
00273   PFLUX(:,I_CH_SO4j) = PFLUX(:,I_CH_SO4j) * ZCONVERSION(:) / (ZMI(JP_AER_SO4)*1E-3)
00274   PFLUX(:,I_CH_NO3i) = PFLUX(:,I_CH_NO3i) * ZCONVERSION(:) / (ZMI(JP_AER_NO3)*1E-3)
00275   PFLUX(:,I_CH_NO3j) = PFLUX(:,I_CH_NO3j) * ZCONVERSION(:) / (ZMI(JP_AER_NO3)*1E-3)
00276   PFLUX(:,I_CH_NH3i) = PFLUX(:,I_CH_NH3i) * ZCONVERSION(:) / (ZMI(JP_AER_NH3)*1E-3)
00277   PFLUX(:,I_CH_NH3j) = PFLUX(:,I_CH_NH3j) * ZCONVERSION(:) / (ZMI(JP_AER_NH3)*1E-3)
00278   PFLUX(:,I_CH_H2Oi) = PFLUX(:,I_CH_H2Oi) * ZCONVERSION(:) / (ZMI(JP_AER_H2O)*1E-3)
00279   PFLUX(:,I_CH_H2Oj) = PFLUX(:,I_CH_H2Oj) * ZCONVERSION(:) / (ZMI(JP_AER_H2O)*1E-3)
00280   PFLUX(:,I_CH_OCi) = PFLUX(:,I_CH_OCi)   * ZCONVERSION(:) / (ZMI(JP_AER_OC)*1E-3)
00281   PFLUX(:,I_CH_OCj) = PFLUX(:,I_CH_OCj)   * ZCONVERSION(:) / (ZMI(JP_AER_OC)*1E-3)
00282   PFLUX(:,I_CH_BCi) = PFLUX(:,I_CH_BCi)   * ZCONVERSION(:) / (ZMI(JP_AER_BC)*1E-3)
00283   PFLUX(:,I_CH_BCj) = PFLUX(:,I_CH_BCj)   * ZCONVERSION(:) / (ZMI(JP_AER_BC)*1E-3)
00284   IF (LHOOK) CALL DR_HOOK('CH_AER_EMISSION',1,ZHOOK_HANDLE)
00285 !
00286 END SUBROUTINE CH_AER_EMISSION