Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
tessac2 opened this issue Oct 10, 2024 · 9 comments
Labels
category: Question Further information is requested help needed: Request Input From Community We need GC community to provide a fix/update topic: Aerosols Related to aerosol species in GEOS-Chem

Comments

@tessac2
Copy link

tessac2 commented Oct 10, 2024

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

  • How is primary and secondary organic aerosol calculated in the PM2.5 calculation in complex SOA simulations with SVPOA?
  • Would it be possible to have simpler diagnostics to speciate PM2.5 using different SOA schemes?

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

@tessac2 tessac2 added the category: Question Further information is requested label Oct 10, 2024
@yantosca yantosca added topic: Aerosols Related to aerosol species in GEOS-Chem help needed: Request Input From Community We need GC community to provide a fix/update labels Oct 10, 2024
@theloniuspunk
Copy link

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
Copy link
Author

tessac2 commented Oct 14, 2024

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
Copy link

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
Copy link
Author

tessac2 commented Oct 14, 2024

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
Copy link

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
Copy link

yuanjianz commented Oct 15, 2024

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).

! Hydrophobic OC [kg/m3]
! SOAupdate: Treat either OCPO (x2.1) or POA (x1.4)
IF ( IS_POA ) THEN
State_Chm%AerMass%OCPO(I,J,L) = ( Spc(id_POA1)%Conc(I,J,L) &
+ Spc(id_POA2)%Conc(I,J,L) ) &
* State_Chm%AerMass%OCFPOA(I,J) / AIRVOL(I,J,L)
ELSE IF ( IS_OCPO ) THEN
State_Chm%AerMass%OCPO(I,J,L) = Spc(id_OCPO)%Conc(I,J,L) &
* State_chm%AerMass%OCFOPOA(I,J) / AIRVOL(I,J,L)
ENDIF

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
Copy link

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

@tessac2
Copy link
Author

tessac2 commented Oct 18, 2024

Thank you @theloniuspunk and @yuanjianz !

@yuanjianz thank you for your detailed explanation. Would AerMass_OPOA take into account hygroscopic growth or would it be just an issue with the POA?

Following your calculation: 'Primary OA = EPOA+OPOA(?)*ORG_GROWTH'. Do you know if there something that is double counted by calculating the Primary OA this way? I just wanted to clarify the question mark.

I also am a bit confused by some aspects of the diagnostics_mod.F90 in regards to this.

In the sum of organic aerosol for TotalOA there is OCPO, OCPI and OPOA. Does this mean OPOA/OCPI are double counted in TotalOA for the complex scheme?

   !--------------------------------------
   ! Sum of all organic aerosol [ug/m3]
   !--------------------------------------
   IF ( State_Diag%Archive_TotalOA ) THEN
      State_Diag%TotalOA(I,J,L) = ( TSOA(I,J,L) + &
                                    ASOA(I,J,L) + &
                                    OCPO(I,J,L) + &
                                    OCPI(I,J,L) + &
                                    OPOA(I,J,L) + &
                                    ISOAAQ(I,J,L) ) * kgm3_to_ugm3
   ENDIF

Additionally, for total organic carbon it seems like it either takes into account POA or OPOA based on the IF (Is_POA) ELSE IF (Is_OPOA), but I could be misinterpreting?


'      !--------------------------------------
       ! Sum of all organic carbon [ug/m3]
       !--------------------------------------
       IF ( State_Diag%Archive_TotalOC ) THEN

          IF ( Is_POA ) THEN
             State_Diag%TotalOC(I,J,L) = &
                  ( ( TSOA(I,J,L) + ASOA(I,J,L) &
                    + OCPI(I,J,L) + OPOA(I,J,L) ) / OCFOPOA(I,J) &
                    + OCPO(I,J,L) / OCFPOA(I,J) ) * kgm3_to_ugm3

          ELSE IF ( Is_OPOA ) THEN
             State_Diag%TotalOC(I,J,L) = &
                  ( ( TSOA(I,J,L) + ASOA(I,J,L) &
                    + OCPO(I,J,L) + OCPI(I,J,L) + OPOA(I,J,L) ) &
                    / OCFOPOA(I,J) ) * kgm3_to_ugm3
          ENDIF'

@yuanjianz
Copy link

yuanjianz commented Oct 19, 2024

Hi @tessac2, for your three quesions:

Would AerMass_OPOA take into account hygroscopic growth or would it be just an issue with the POA?

I think AerMass diagnostics don't account for hygroscopic growth except for PM25.

Following your calculation: 'Primary OA = EPOA+OPOA(?)*ORG_GROWTH'. Do you know if there something that is double counted by calculating the Primary OA this way? I just wanted to clarify the question mark.

I put the question mark here because I am not an expert in aerosol chemistry that I am not sure if OPOA is a component of primary OA. As for the double counting, maybe @theloniuspunk may have better insights.

I also am a bit confused by some aspects of the diagnostics_mod.F90 in regards to this.

This part's logic is clarified and simplified in my fix in #2315. See diagnostics_mod.F90 fix.

  1. TotalOA: OCPO in complexSOA_SVPOA is essentially EPOA, and in all scenario OCPI and OPOA does not co-exist. So I don't think there is a double counting here.
  2. The ELSE IF (Is_OPOA) should be replaced by ELSE IF (Is_OCPO) and supplemented by hydrophillic OA/OC added afterwards.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
category: Question Further information is requested help needed: Request Input From Community We need GC community to provide a fix/update topic: Aerosols Related to aerosol species in GEOS-Chem
Projects
None yet
Development

No branches or pull requests

4 participants