SURFEX v7.3
General documentation of Surfex
|
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