@@ -5986,7 +5986,7 @@ end subroutine carbonChemLoss
59865986! !IROUTINE: NIheterogenousChemOpt
59875987!
59885988! !INTERFACE:
5989- subroutine NIheterogenousChem (NI_phet , xhno3 , UNDEF , AVOGAD , AIRMW , PI , RUNIV , rhoa , tmpu , relhum , delp , &
5989+ subroutine NIheterogenousChem (NI_phet , NI_phetv , xhno3 , UNDEF , AVOGAD , AIRMW , PI , RUNIV , rhoa , tmpu , relhum , delp , &
59905990 DU , SS , rmedDU , rmedSS , fnumDU , fnumSS , &
59915991 km , klid , cdt , grav , fMassHNO3 , fMassNO3 , nNO3an1 , nNO3an2 , &
59925992 nNO3an3 , HNO3_conc , HNO3_sfcmass , HNO3_colmass , rc )
@@ -6009,8 +6009,8 @@ subroutine NIheterogenousChem (NI_phet, xhno3, UNDEF, AVOGAD, AIRMW, PI, RUNIV,
60096009 real , dimension (:,:,:), intent (in ) :: delp ! pressure thickness [Pa]
60106010 real , pointer , dimension (:,:,:,:), intent (in ) :: DU ! dust aerosol [kg/kg]
60116011 real , pointer , dimension (:,:,:,:), intent (in ) :: SS ! sea salt aerosol [kg/kg]
6012- real , dimension (:) ,intent (in ) :: rmedDU ! dust aerosol radius [um ]
6013- real , dimension (:) ,intent (in ) :: rmedSS ! sea salt aerosol radius [um ]
6012+ real , dimension (:) ,intent (in ) :: rmedDU ! dust aerosol radius [m ]
6013+ real , dimension (:) ,intent (in ) :: rmedSS ! sea salt aerosol radius [m ]
60146014 real , dimension (:) ,intent (in ) :: fnumDU ! number of dust particles per kg mass
60156015 real , dimension (:) ,intent (in ) :: fnumSS ! number of sea salt particles per kg mass
60166016 integer , intent (in ) :: km ! number of model levels
@@ -6022,10 +6022,11 @@ subroutine NIheterogenousChem (NI_phet, xhno3, UNDEF, AVOGAD, AIRMW, PI, RUNIV,
60226022
60236023! !INOUTPUT PARAMETERS:
60246024 real , pointer , dimension (:,:,:), intent (inout ) :: NI_phet ! Nitrate Production from Het Chem [kg/(m^2 sec)]
6025- real , dimension (:,:,:), intent (inout ) :: xhno3 ! buffer for NITRATE_HNO3 [kg/(m^2 sec)]
6025+ real , pointer , dimension (:,:,:,:), intent (inout ) :: NI_phetv ! 3D Nitrate Production from Het Chem [kg/(m^2 sec)]
6026+ real , dimension (:,:,:), intent (inout ) :: xhno3 ! buffer for NITRATE_HNO3 [mol mol-1]
60266027 real , pointer , dimension (:,:,:), intent (inout ) :: HNO3_conc ! Nitric Acid Mass Concentration [kg/m^3]
60276028 real , pointer , dimension (:,:), intent (inout ) :: HNO3_sfcmass ! Nitric Acid Surface Mass Concentration [kg/m^3]
6028- real , pointer , dimension (:,:), intent (inout ) :: HNO3_colmass ! Nitric Acid Column Mass Density [kg/m^3 ]
6029+ real , pointer , dimension (:,:), intent (inout ) :: HNO3_colmass ! Nitric Acid Column Mass Density [kg/m^2 ]
60296030 real , pointer , dimension (:,:,:), intent (inout ) :: nNO3an1 ! Nitrate bin 1 [kg/kg]
60306031 real , pointer , dimension (:,:,:), intent (inout ) :: nNO3an2 ! Nitrate bin 2 [kg/kg]
60316032 real , pointer , dimension (:,:,:), intent (inout ) :: nNO3an3 ! Nitrate bin 3 [kg/kg]
@@ -6144,11 +6145,18 @@ subroutine NIheterogenousChem (NI_phet, xhno3, UNDEF, AVOGAD, AIRMW, PI, RUNIV,
61446145 nNO3an3 = nNO3an3 + kan3 * deltahno3 * fMassNO3 / fMassHNO3
61456146
61466147 if (associated (NI_phet)) then
6147- NI_phet(:,:,1 ) = (1.0 / (grav* cdt)) * sum (kan1* deltahno3* delp, dim= 3 )
6148- NI_phet(:,:,2 ) = (1.0 / (grav* cdt)) * sum (kan2* deltahno3* delp, dim= 3 )
6149- NI_phet(:,:,3 ) = (1.0 / (grav* cdt)) * sum (kan3* deltahno3* delp, dim= 3 )
6148+ NI_phet(:,:,1 ) = (1.0 / (grav* cdt)) * sum (kan1* deltahno3* (fMassNO3 / fMassHNO3) * delp, dim= 3 )
6149+ NI_phet(:,:,2 ) = (1.0 / (grav* cdt)) * sum (kan2* deltahno3* (fMassNO3 / fMassHNO3) * delp, dim= 3 )
6150+ NI_phet(:,:,3 ) = (1.0 / (grav* cdt)) * sum (kan3* deltahno3* (fMassNO3 / fMassHNO3) * delp, dim= 3 )
61506151 end if
61516152
6153+ if (associated (NI_phetv)) then
6154+ NI_phetv(:,:,:,1 ) = (1.0 / (grav* cdt)) * kan1* deltahno3* (fMassNO3/ fMassHNO3)* delp
6155+ NI_phetv(:,:,:,2 ) = (1.0 / (grav* cdt)) * kan2* deltahno3* (fMassNO3/ fMassHNO3)* delp
6156+ NI_phetv(:,:,:,3 ) = (1.0 / (grav* cdt)) * kan3* deltahno3* (fMassNO3/ fMassHNO3)* delp
6157+ end if
6158+
6159+
61526160! Output diagnostic HNO3
61536161! ----------------------
61546162! Calculate the HNO3 mass concentration
@@ -6164,7 +6172,7 @@ subroutine NIheterogenousChem (NI_phet, xhno3, UNDEF, AVOGAD, AIRMW, PI, RUNIV,
61646172 HNO3_colmass(i1:i2,j1:j2) = 0 .
61656173 do k = klid, km
61666174 HNO3_colmass(i1:i2,j1:j2) &
6167- = HNO3_colmass(i1:i2,j1:j2) + xhno3(i1:i2,j1:j2,k)* delp(i1:i2,j1:j2,k)/ grav
6175+ = HNO3_colmass(i1:i2,j1:j2) + xhno3(i1:i2,j1:j2,k) * fMassHNO3 / AIRMW * delp(i1:i2,j1:j2,k)/ grav
61686176 end do
61696177 endif
61706178
@@ -6411,7 +6419,12 @@ function sktrs_hno3 ( tk, rh, sad, ad, radA, pi, rgas, fMassHNO3 )
64116419 p_dfkg = sqrt (3.472e-2 + 1.0 / fmassHNO3)
64126420 p_avgvel = sqrt (8.0 * rgas_dp * 1000.0 / (pi_dp * fmassHNO3))
64136421
6414- ! RH factor - Figure 1 in Duncan et al. (2010)
6422+ ! RH factor: rh dependent gamma for dust - references:
6423+ ! Table 1 in Liu et al. J. Phys. Chem. A 2008
6424+ ! doi:10.1021/jp076169h
6425+ ! Figure 1 in Fairlie et al. ACP 2010
6426+ ! doi:10.5194/acp-10-3999-2010
6427+
64156428 f_rh = 0.03
64166429
64176430 if (rh >= 0.1 .and. rh < 0.3 ) then
@@ -6428,7 +6441,6 @@ function sktrs_hno3 ( tk, rh, sad, ad, radA, pi, rgas, fMassHNO3 )
64286441 f_rh = 2.0
64296442 end if
64306443
6431- ! Following uptake coefficients of Liu et al.(2007)
64326444 gamma = gamma_hno3 * f_rh
64336445
64346446 sqrt_tk = sqrt (tk)
@@ -9546,7 +9558,8 @@ end subroutine get_HenrysLawCts
95469558
95479559 subroutine NIthermo (km , klid , cdt , grav , delp , rhoa , tmpu , rh , fMassHNO3 , fMassAir , &
95489560 SO4 , NH3 , NO3an1 , NH4a , xhno3 , &
9549- NI_pno3aq , NI_pnh4aq , NI_pnh3aq , rc )
9561+ NI_pno3aq , NI_pnh4aq , NI_pnh3aq , NI_phno3aq , &
9562+ NI_pno3aqv ,NI_pnh4aqv , NI_pnh3aqv , NI_phno3aqv , rc )
95509563
95519564
95529565! !USES:
@@ -9569,10 +9582,15 @@ subroutine NIthermo (km, klid, cdt, grav, delp, rhoa, tmpu, rh, fMassHNO3, fMass
95699582 real , dimension (:,:,:), intent (inout ) :: NH3 ! Ammonia (NH3, gas phase) [kg kg-1]
95709583 real , dimension (:,:,:), intent (inout ) :: NO3an1 ! Nitrate size bin 001 [kg kg-1]
95719584 real , dimension (:,:,:), intent (inout ) :: NH4a ! Ammonium ion (NH4+, aerosol phase) [kg kg-1]
9572- real , dimension (:,:,:), intent (inout ) :: xhno3 ! buffer for NITRATE_HNO3 [kg m-2 sec -1]
9585+ real , dimension (:,:,:), intent (inout ) :: xhno3 ! buffer for NITRATE_HNO3 [mol mol -1]
95739586 real , pointer , dimension (:,:), intent (inout ) :: NI_pno3aq ! Nitrate Production from Aqueous Chemistry [kg m-2 s-1]
95749587 real , pointer , dimension (:,:), intent (inout ) :: NI_pnh4aq ! Ammonium Production from Aqueous Chemistry [kg m-2 s-1]
95759588 real , pointer , dimension (:,:), intent (inout ) :: NI_pnh3aq ! Ammonia Change from Aqueous Chemistry [kg m-2 s-1]
9589+ real , pointer , dimension (:,:), intent (inout ) :: NI_phno3aq ! Nitric Acid Change from Aqueous Chemistry [kg m-2 s-1]
9590+ real , pointer , dimension (:,:,:), intent (inout ) :: NI_pno3aqv ! 3D Nitrate Production from Aqueous Chemistry [kg m-2 s-1]
9591+ real , pointer , dimension (:,:,:), intent (inout ) :: NI_pnh4aqv ! 3D Ammonium Production from Aqueous Chemistry [kg m-2 s-1]
9592+ real , pointer , dimension (:,:,:), intent (inout ) :: NI_pnh3aqv ! 3D Ammonia Change from Aqueous Chemistry [kg m-2 s-1]
9593+ real , pointer , dimension (:,:,:), intent (inout ) :: NI_phno3aqv ! 3D Nitric Acid Change from Aqueous Chemistry [kg m-2 s-1]
95769594
95779595! !OUTPUT PARAMETERS:
95789596 integer , optional , intent (out ) :: rc ! Error return code:
@@ -9638,6 +9656,29 @@ subroutine NIthermo (km, klid, cdt, grav, delp, rhoa, tmpu, rh, fMassHNO3, fMass
96389656 NI_pnh3aq(i,j) = NI_pnh3aq(i,j) &
96399657 + (GNH3 / fmmr_to_conc - NH3(i,j,k)) &
96409658 * delp(i,j,k)/ grav/ cdt
9659+ if (associated (NI_phno3aq)) &
9660+ NI_phno3aq(i,j) = NI_phno3aq(i,j) &
9661+ + (GNO3 / fmmr_to_conc - (xhno3(i,j,k)* fMassHNO3/ fMassAir)) &
9662+ * delp(i,j,k)/ grav/ cdt
9663+
9664+ if (associated (NI_pno3aqv)) &
9665+ NI_pno3aqv(i,j,k) = NI_pno3aqv(i,j,k) &
9666+ + (ANO3 / fmmr_to_conc - NO3an1(i,j,k)) &
9667+ * delp(i,j,k)/ grav/ cdt
9668+ if (associated (NI_pnh4aqv)) &
9669+ NI_pnh4aqv(i,j,k) = NI_pnh4aqv(i,j,k) &
9670+ + (ANH4 / fmmr_to_conc - NH4a(i,j,k)) &
9671+ * delp(i,j,k)/ grav/ cdt
9672+ if (associated (NI_pnh3aqv)) &
9673+ NI_pnh3aqv(i,j,k) = NI_pnh3aqv(i,j,k) &
9674+ + (GNH3 / fmmr_to_conc - NH3(i,j,k)) &
9675+ * delp(i,j,k)/ grav/ cdt
9676+ if (associated (NI_phno3aqv)) &
9677+ NI_phno3aqv(i,j,k) = NI_phno3aqv(i,j,k) &
9678+ + (GNO3 / fmmr_to_conc - (xhno3(i,j,k)* fMassHNO3/ fMassAir)) &
9679+ * delp(i,j,k)/ grav/ cdt
9680+
9681+
96419682
96429683! Unit conversion back on return from thermodynamic module
96439684 NH3(i,j,k) = GNH3 / fmmr_to_conc
0 commit comments