geoschem / geos-chem

GEOS-Chem "Science Codebase" repository. Contains GEOS-Chem science routines, run directory generation scripts, and interface code. This repository is used as a submodule within the GCClassic and GCHP wrappers, as well as in other modeling contexts (external ESMs).
http://geos-chem.org
Other
168 stars 162 forks source link

Clarification on PM2.5 speciation in simple SOA vs complex SOA with SVPOA schemes #2511

Open tessac2 opened 1 week ago

tessac2 commented 1 week ago

Your name

Tessa Clarizio

Your affiliation

University of Illinois Urbana-Champaign

Please provide a clear and concise description of your question or discussion topic.

Model details

GCClassic v14.3.1 MERRA-2 Nested grid over North America (0.5 x 0.625) Full chemistry Standard OR Complex SOA with SVPOA 47 vertical levels

compiler: gcc 9.3.0

Questions

Additional details/context

Hello! I am interested in comparing the PM2.5 speciation between Standard and Complex SOA. I understand how to do this for simple SOA, where I calculate as follows (where the species concentrations have been adjusted by their molecular weight/volume of 1 mole air at standard temp and pressure to get the same units of ug/mol): PM2.5 = AerMass_NH4*SIA_GROWTH + AerMassNIT*SIA_GROWTH + AerMassSO4*SIA_GROWTH + AerMassHMS*SIA_GROWTH + (SpeciesConcVV_BCPI + SpeciesConcVV_BCPO) + (SpeciesConcVV_OCPI *ORG_GROWTH+ SpeciesConcVV_OCPO)*2.1 + SpeciesConcVV_DST1 + SpeciesConcVV_DST2*0.30 + SpeciesConcVV_SOAS*ORG_GROWTH This is based on the GEOS-Chem code as well as this wiki page (which I know is a bit out of date since it does not have HMS): https://wiki.seas.harvard.edu/geos-chem/index.php/Particulate_matter_in_GEOS-Chem. This lets me calculate the speciation and get a pie chart along the lines of:

image

Where OA is primary organic aerosol (from OCPI and OCPO) and SOA is secondary organic aerosol (from SOAS).

However, it seems less clear to me what is included in the SOA and primary OA in the PM2.5 calculation for the complex SOA scheme with SVPOA. According to the aerosol mod code,


 ELSE IF ( Is_ComplexSOA ) THEN
          State_Chm%AerMass%PM25(I,J,L) = State_Chm%AerMass%PM25(I,J,L)                 + &
                        State_Chm%AerMass%TSOA(I,J,L)   * ORG_GROWTH  + &
                        State_Chm%AerMass%ASOA(I,J,L)   * ORG_GROWTH  + &
                        State_Chm%AerMass%ISOAAQ(I,J,L) * ORG_GROWTH        ! Includes SOAGX' 

However, there is no species AerMassISOAAQ. I see in aerosol mod, the ISOAAQ is calculated as follows:

 !-------------------------------------------------------
       ! Mass loading of isoprene SOA (ISOAAQ) [kg/m3]
       !-------------------------------------------------------

       ! Glyoxal
       IF ( id_SOAGX > 0 ) THEN
          State_Chm%AerMass%ISOAAQ(I,J,L) = Spc(id_SOAGX)%Conc(I,J,L) / AIRVOL(I,J,L)
       ENDIF

       ! IEPOX
       IF ( id_SOAIE > 0 ) THEN
          State_Chm%AerMass%ISOAAQ(I,J,L) = State_Chm%AerMass%ISOAAQ(I,J,L) &
                          + Spc(id_SOAIE)%Conc(I,J,L) / AIRVOL(I,J,L)
       ENDIF

       !-----------------------------------------------------------------------
       ! Exclude INDIOL from AOD and aerosol mass calculations. This results in
       ! lost mass. As noted in Fisher et al. (2016, ACP), this is a source of
       ! uncertainty and would benefit from an update when more information
       ! about this process becomes available. (eam, jaf, mps, 3/5/18)
       !! SOA from alkyl nitrates (some contribution
       !! from non-isoprene sources)
       !IF ( id_INDIOL > 0 ) THEN
       !   State_Chm%AerMass%ISOAAQ(I,J,L) = State_Chm%AerMass%ISOAAQ(I,J,L) + Spc(id_INDIOL)%Conc(I,J,L) / AIRVOL(I,J,L)
       !ENDIF
       !-----------------------------------------------------------------------

       ! SOA from ISOPOOH oxidation product
       IF ( id_LVOCOA > 0 ) THEN
          State_Chm%AerMass%ISOAAQ(I,J,L) = State_Chm%AerMass%ISOAAQ(I,J,L) &
                          + Spc(id_LVOCOA)%Conc(I,J,L) / AIRVOL(I,J,L)
       ENDIF

Therefore I have included SOAGX, SOAEI, and LVOCOA in the calculation of ISOAAQ, and calculated SOA as: SOA = AerMassTSOA*ORG_GROWTH + AerMassASOA*ORG_GROWTH + (AerMassSOAGX + AerMassSOAEI + AerMassLVOCOA)*ORG_GROWTH

However, I am a bit confused what is primary OA.
In the aerosol mod code, I see:

  ! Need to add OPOA to PM2.5 for complexSOA_SVPOA simulations
          ! -- Maggie Marvin (15 Jul 2020)
          IF ( Is_OPOA ) THEN
             State_Chm%AerMass%PM25(I,J,L) = State_Chm%AerMass%PM25(I,J,L) + ( State_Chm%AerMass%OPOA(I,J,L) * ORG_GROWTH )
             State_Chm%AerMass%PM10(I,J,L) = State_Chm%AerMass%PM10(I,J,L) + ( State_Chm%AerMass%OPOA(I,J,L) * ORG_GROWTH )
          ENDIF
       ENDIF

So I initially though OPOA could be the primary organic aerosol. But according to the readthedocs , the OPOA is aerosols products of POG oxidation, which makes me think it is hydrophilic only? I see there is another species called AerMassPOA which is described as aerosols from SVOCs. In issue #2315 it seems OPOA is included in the ComplexSOA_SVPOA calculation. It seems from #384 that perhaps there was debate whether OPOA should be included in SOA or POA and that may be why it is separate?

So I was just hoping (1) to clarify how to calcuate SOA and primary OA that are included in the PM2.5 calculation, and (2) propose either a feature where these diagnostics are made a bit clearer in the future, or more clarification on the History diagnostics page on ReadTheDocs, as many of the wiki links cited in previous issues no longer work.

Thanks! :) @beckyalexander @theloniuspunk @wporter

theloniuspunk commented 1 week ago

Hi Tessa,

I haven't run the complex OA code myself, but of somewhat familiar with it. Looking at Sid Pai's paper (https://acp.copernicus.org/articles/20/2637/2020/), EPOA should be the emitted POA (OPOA is if the emitted POA and POG gets oxidized). I'm not sure why EPOA isn't in the lines of code you gave. Is it already in the PM2.5 prior to adding in TSOA etc?

Jeff

tessac2 commented 3 days ago

Hi Jeff, thank you for your response and for sharing this paper by Sid Pai! According to the paper, in the simple scheme "The EPOA and OPOA species are represented within the GEOS-Chem model using the variable names OCPO and OCPI, respectively." This is consistent with the definition of PM2.5 in the aerosol_mod, excerpt of which is included below for reference.

However, the definition of primary OA in the complex scheme still seems a bit unclear to me. It is my understanding that Pai used EPOA and OPOA to calculate total POA ("As in the simple scheme, the EPOA and OPOA are assumed to have an OM:OC ratio of 1.4 and 2.1, respectively. ") but I am not sure what EPOA is called in the complex scheme, as there are no species called "OCPO" that are produced in complex SOA.

The wiki link in the aerosol_mod code for PM calculation is broken so I am unsure where to look for additional information.

` !============================================================== ! P A R T I C U L A T E M A T T E R ! ! See this GEOS-Chem wiki page for the most up-to-date ! definitions of PM2.5 and PM10 used in GEOS-Chem: ! ! http://wiki.geos.chem.org/Particulate_Matter_in_GEOS-Chem !==============================================================

   ! Particulate matter < 2.5um [kg/m3]
   State_Chm%AerMass%PM25(I,J,L) = State_Chm%AerMass%NH4(I,J,L)        * SIA_GROWTH + &
                 State_Chm%AerMass%NIT(I,J,L)        * SIA_GROWTH + &
                 State_Chm%AerMass%SO4(I,J,L)        * SIA_GROWTH + &
                 State_Chm%AerMass%HMS(I,J,L)        * SIA_GROWTH + &   ! (jmm, 06/30/18)
                 State_Chm%AerMass%BCPI(I,J,L)                    + &
                 State_Chm%AerMass%BCPO(I,J,L)                    + &
                 State_Chm%AerMass%OCPO(I,J,L)                    + &
                 State_Chm%AerMass%OCPI(I,J,L)       * ORG_GROWTH + &
                 State_Chm%AerMass%SALA(I,J,L)       * SSA_GROWTH + &
                 SOILDUST(I,J,L,1)              + &
                 SOILDUST(I,J,L,2)              + &
                 SOILDUST(I,J,L,3)              + &
                 SOILDUST(I,J,L,4)              + &
                 SOILDUST(I,J,L,5) * 0.3_fp           ! + 30%  of DST2

   ! Particulate matter < 10um [kg/m3]
   State_Chm%AerMass%PM10(I,J,L) = State_Chm%AerMass%PM25(I,J,L) +                    &   ! PM2.5
                 SOILDUST(I,J,L,5) * 0.7_fp     + &   ! + 70%  of DST2
                 SOILDUST(I,J,L,6)              + &   ! + 100% of DST3
                 SOILDUST(I,J,L,7) * 0.9_fp     + &   ! + 90%  of DST4
                 State_Chm%AerMass%SALC(I,J,L)       * SSA_GROWTH

   ! Include either simple SOA (default) or Complex SOA in
   ! PM2.5 calculation.  In simulations where both Simple SOA and
   ! Complex SOA species are carried (i.e. "benchmark"), then
   ! only the Simple SOA will be added to PM2.5 and PM10, in order
   ! to avoid double-counting. (bmy, 03 Nov 2021)
   IF ( Is_SimpleSOA ) THEN
      State_Chm%AerMass%PM25(I,J,L) = State_Chm%AerMass%PM25(I,J,L) + ( State_Chm%AerMass%SOAS(I,J,L) * ORG_GROWTH )
      State_Chm%AerMass%PM10(I,J,L) = State_Chm%AerMass%PM10(I,J,L) + ( State_Chm%AerMass%SOAS(I,J,L) * ORG_GROWTH )

   ELSE IF ( Is_ComplexSOA ) THEN
      State_Chm%AerMass%PM25(I,J,L) = State_Chm%AerMass%PM25(I,J,L)                 + &
                    State_Chm%AerMass%TSOA(I,J,L)   * ORG_GROWTH  + &
                    State_Chm%AerMass%ASOA(I,J,L)   * ORG_GROWTH  + &
                    State_Chm%AerMass%ISOAAQ(I,J,L) * ORG_GROWTH        ! Includes SOAGX

      State_Chm%AerMass%PM10(I,J,L) = State_Chm%AerMass%PM10(I,J,L)                 + &
                    State_Chm%AerMass%TSOA(I,J,L)   * ORG_GROWTH  + &
                    State_Chm%AerMass%ASOA(I,J,L)   * ORG_GROWTH  + &
                    State_Chm%AerMass%ISOAAQ(I,J,L) * ORG_GROWTH        ! Includes SOAGX

      ! Need to add OPOA to PM2.5 for complexSOA_SVPOA simulations
      ! -- Maggie Marvin (15 Jul 2020)
      IF ( Is_OPOA ) THEN
         State_Chm%AerMass%PM25(I,J,L) = State_Chm%AerMass%PM25(I,J,L) + ( State_Chm%AerMass%OPOA(I,J,L) * ORG_GROWTH )
         State_Chm%AerMass%PM10(I,J,L) = State_Chm%AerMass%PM10(I,J,L) + ( State_Chm%AerMass%OPOA(I,J,L) * ORG_GROWTH )
      ENDIF
   ENDIF

   ! Apply STP correction factor based on ideal gas law
   State_Chm%AerMass%PM25(I,J,L) = State_Chm%AerMass%PM25(I,J,L) * ( 1013.25_fp / PMID(I,J,L) ) * &
                 ( T(I,J,L)   / 298.0_fp    )

   State_Chm%AerMass%PM10(I,J,L) = State_Chm%AerMass%PM10(I,J,L) * ( 1013.25_fp / PMID(I,J,L) ) * &
                 ( T(I,J,L)   / 298.0_fp    )

`

theloniuspunk commented 3 days ago

Hi Tessa,

OCPO is part of the first PM2.5 calculation in the code you pasted. It wouldn't be produced in the complex SOA scheme since it's only emitted, not chemically produced. Or maybe I'm not understanding you correctly?

Jeff

tessac2 commented 3 days ago

Hi Jeff, Thanks for your reply and apologies for the confusion--I think I am also confused. In the paper by Pai, it stated when describing the simple SOA scheme that EPOA is represented in the model as OCPO (There is no variable named EPOA and when you search the code for it nothing shows up).

Where I am getting confused is in the description of the complex scheme, where nothing is called OCPO but in the description of the complex model it states that primary OA has an EPOA and OPOA component, and there is a species in AerosolMass called OPOA, but I don't see anything called EPOA. "The complex scheme, based primarily on Pye et al. (2010) and Marais et al. (2016), is graphically described in Fig. 1. The primary organics are treated as semi-volatile and allowed to reversibly partition between the aerosol (EPOA) and gas (EPOG) phase using a two-product reversible partitioning model while simultaneously undergoing oxidation with OH in the gas phase to form oxidized primary organic gases (OPOGs) that, in turn, reversibly partition to oxidized primary organic aerosols (OPOAs)."

So I am trying to calculate total primary organic aerosols in the complex scheme, and just unsure what to include in the calculation. I know AerMass_OPOA should be included but not sure how to represent the EPOA fraction. Is this the AerMass_POA metric? In the ReadtheDocs, POA is described as "aerosols from SVOCs". image

theloniuspunk commented 3 days ago

Hi Tessa,

I'm confused about OCPO not being part of AerMass. The code that you included in the first post from this morning includes "State_Chm%AerMass%OCPO(I,J,L)".

(Again, my group doesn't generally run the complex scheme, and I haven't personally dug into the code in a while... the sad progression of professors :/)

yuanjianz commented 2 days ago

Hi @tessac2, I am not an expert in aerosol but I did some research about aerosol_mod when I was implememnting the fix #2315. It seems like more of a code implementation questions here.

Regarding your question about EPOA, I think in complexSOA_SVPOA scheme, it is still represented by OCPO(no longer an advected species in SVPOA, so you don't have SpeciesConcVV%OCPO but SpeciesConcVV%POA1 and POA2 instead). https://github.com/geoschem/geos-chem/blob/bef56c605e018eecbd91646a51ce82c7cd77f56a/GeosCore/aerosol_mod.F90#L502-L511

SimpleSOA and ComplexSOA_nonSVPOA:
EPOA = AerMass%OCPO = SpeciesConcVV%OCPO*OCFOPOA(2.1)*unitconv
AerMass%OCPI = SpeciesConcVV%OCPI*OCFOPOA(2.1)*unitconv
Primary OA = AerMass%OCPO+AerMass%OCPI*ORG_GROWTH
ComplexSOA_SVPOA:
EPOA = AeroMass%OCPO = (SpeciesConcVV%POA1+SpeciesConcVV%POA2)*OCFPOA(1.4)*unitconv %hydrophobic
OCPI is NOT advected but replaced by hydrophilic OPOA
OPOA = (SpeciesConcVV%OPOA1+SpeciesConcVV%OPOA2)*OCFOPOA(2.1)*unitconv
Primay OA = EPOA+OPOA(?)*ORG_GROWTH

To calculate primary OA for complexSOA_SVPOA, I recommend to start from SpeciesConcVV since AerMass diagnostic seems to not account for hygroscopic growth.

theloniuspunk commented 1 day ago

Thank you! I'm glad to have a serious complexSOA user/contributer weigh in!