POPs simulation

From Geos-chem
Jump to: navigation, search

On this page we include information relevant to the persistent organic pollutant (POPs) simulation in GEOS-Chem.

Overview

Authors and collaborators

PAH simulation

Overview

This update was tested in the 1-month benchmark simulation v9-02c and approved on 29 Nov 2012.

A simulation for polycyclic aromatic hydrocarbons (PAHs) has been added to GEOS-Chem v8-03-02 following Friedman and Selin (2012). Three separate PAHs are modeled: phenanthrene (PHE), pyrene (PYR), and benzo[a]pyrene (BaP). Separate modules have been created for each of the PAHs. Users can choose between different compounds in the input file.

--Melissa Payer 12:31, 21 September 2012 (EDT)

Updates to PAH code

These updates were included in the 1-month benchmark simulation v11-01c and approved on 14 Sept 2015. Additional benchmarking of the POPs simulation is in progress.

The updated PAH model is described in Friedman et al. (2014).

Carey Friedman wrote:

The updates are in version 9-03-01.
Some details about this version compared to the last:
The ability to run with GCAP met is possible, but I've toggled several GCAP options from within the code. The same holds for a new option to turn on "secondary emissions" (surface-to-air fluxes from previous deposition). Here's the list of in-the-code toggles as far as I can remember:
Changes for ability to do secondary emissions:
pops_mod.F
  • in the routine "pops_readsurfconc", you need to define a path for a file that contains masses of previously deposited PAH in the surface. I have GCAP and GEOS5 versions of these files for each of the three PAHs that we've been simulating.
  • in the routine "pop_read_foc", you need to define a path for a file that contains organic carbon content within surface soils. This is the same no matter what compound you're simulating.
land_pops_mod.F
  • This is an entirely new module, but I don't think I've hard coded anything in here.
Changes for ability to use GCAP:
global_oh_mod.F, global_o3_mod.F, global_oc_mod.F, global_bc_mod.F
  • For all species that PAHs interact with (OH, O3, OC, BC), I ran full chemistry GCAP simulations under conditions that corresponded to PAH simulations and archived them to use as input. In the paper above, I had four different scenarios:
    • 2000 "present" climate and 2000 emissions (PCPE)
    • 2000 climate and 2050 "future" emissions (PCFE)
    • 2050 climate and 2000 emissions (FCPE)
    • 2050 climate and 2050 emissions (FCFE)
So I have four files for each of these species, whose names correspond to those abbreviations (PCPE, etc.), that need to be toggled within the code in each of those modules.
Likewise, in that particular paper, PAH emissions were scaled depending on the scenario, but I did that all within the code, with different scalings for different regions. You would need this info in order to replicate my experiments. The emissions scaling methodology is detailed in my paper.
Lastly, I made some permanent changes to the default PAH emissions to update their distribution based on wildfire distributions. I've included the input files for the updated emissions inventories for each PAH as well.

--Melissa Sulprizio (talk) 15:20, 11 June 2015 (UTC)

PCB simulation

Overview

This update is slated for inclusion in GEOS-Chem v11-03 or later.

A simulation for polychlorinated biphenyls (PCBs) has been added to GEOS-Chem v9-01-03 following Friedman and Selin (2016). PCBs are partitioned into one bulk organic matter (OM) phase, which combines the OC phase and the BC phase.

--Bob Yantosca (talk) 14:43, 14 May 2018 (UTC)

Creating a POPs run directory

In GEOS-Chem v11-01c and later versions, you can create a POPs run directory by following these steps:

1. Download the GEOS-Chem Unit Tester if you haven't already
2. Edit the CopyRunDirs.input file to indicate which POPs run directory you would like to create.
3. Navigate to the run directory that you wish to copy. For example, type:
    cd ../runs/geos5_4x5_POPs
4. Modify the input.geos.template and HEMCO_Config.template files if necessary.
  • We provide three input.geos.template and three HEMCO_Config.template files, one for each of the possible POPs species:
  1. PHE (phenanthrene)
  2. PYR (pyrene)
  3. BaP (benzo[a]pyrene)
  • The default input.geos.template and HEMCO_Config.template files are symbolically linked to the files for PHE. To change POPs species for your simulation, you can modify the symbolic links. Type the following commands:
    rm input.geos.template
    ln -s input.geos.template.[SPECIES] input.geos.template

    rm HEMCO_Config.template
    ln -s ../chem_inputs/specialty/HEMCO_Config.template.POPs.[SPECIES] $
          HEMCO_Config.template
5. Create your run directory using gcCopyRunDirs.
6. Compile and run GEOS-Chem.

--Melissa Sulprizio (talk) 17:56, 27 August 2015 (UTC)

Previous issues that are now resolved

Prevent error when reading global OC

NOTE: This issue was resolved in the GEOS-Chem v9-02 public release (03 Mar 2014).

In routine GET_GLOBAL_OC (in module GeosCore/global_oc_mod.F), we have:

     ! Data is only available for 2005-2009
     IF ( THISYEAR < 2005 ) THEN
        YEAR = 2005
     ELSE IF ( THIS YEAR > 2009 ) THEN
        YEAR = 2009
     ELSE
        YEAR = THISYEAR
     ENDIF

     ! Get the TAU0 value for the start of the given month
     XTAU = GET_TAU0( THISMONTH, 1, THISYEAR )

To avoid a segmentation fault error when THISYEAR is outside of 2005-2009, we must change XTAU to:

     ! Get the TAU0 value for the start of the given month
     XTAU = GET_TAU0( THISMONTH, 1, YEAR )

--Melissa Sulprizio 10:33, 24 February 2014 (EST)

Avoid div-by-zero errors in POPs simulation

These updates were validated in the 1-month benchmark simulation v10-01c and approved on 29 May 2014.

While testing the POPs simulation with the GEOS-Chem Unit Tester, we encountered some division-by-zero errors. The fixes are as follows:

(1) At about line 1661 of routine EMISSPOPS (in module file GeosCore/pops_mod.F), change this line of code:

         ! Check that sum thru PBL is equal to original emissions array
         SUM_OF_ALL(I,J) = POP_TOT_EM(I,J) / SUM_OF_ALL(I,J)

to this:

         ! Check that sum thru PBL is equal to original emissions array
         ! NOTE: Prevent div-by-zero floating point error (bmy, 4/14/14)
         IF ( SUM_OF_ALL(I,J) > 0d0 ) THEN 
            SUM_OF_ALL(I,J) = POP_TOT_EM(I,J) / SUM_OF_ALL(I,J)
         ENDIF

This prevents us from dividing by SUM_OF_ALL(I,J) if it’s zero. Otherwise some kind of junk value or NaN could possibly propagate thru the code.


(2) In routine CHEM_POPGP (in module GeosCore/pops_mod.F), make the following modifications:

      USE ERROR_MOD,          ONLY : SAFE_DIV   ! Add this w/ the other USE statements

      . . .

      REAL*8          :: DENOM                  ! Add this w/ the other variable declarations

      . . .

         ! Get AIRVOL
         AIR_VOL = State_Met%AIRVOL(I,J,L)

!-----------------------------------------------------------------------------
! Prior to 4/14/14:
! Need to put error traps to prevent div-by-zero (bmy, 4/14/14)
!         ! Define volume ratios:
!         ! VR_OC_AIR = volume ratio of OC to air [unitless]     
!         VR_OC_AIR   = C_OC_CHEM1 / AIR_VOL ! could be zero
!
!         ! VR_OC_BC  = volume ratio of OC to BC [unitless]
!         VR_OC_BC = C_OC_CHEM1 / C_BC_CHEM1 ! could be zero or undefined
!
!         ! VR_BC_AIR = volume ratio of BC to air [unitless]
!         VR_BC_AIR   = VR_OC_AIR / VR_OC_BC ! could be zero or undefined
!
!         ! VR_BC_OC  = volume ratio of BC to OC [unitless]
!         VR_BC_OC    = 1d0 / VR_OC_BC ! could be zero or undefined
!
!         ! Redefine fractions of total POPs in box (I,J,L) that are OC-phase, 
!         ! BC-phase, and gas phase with new time step (should only change if 
!         ! temp changes or OC/BC concentrations change) 
!         OC_AIR_RATIO = 1d0 / (KOA_T * VR_OC_AIR) 
!         OC_BC_RATIO = 1d0 / (KOC_BC_T * VR_OC_BC) 
!
!         BC_AIR_RATIO = 1d0 / (KBC_T * VR_BC_AIR) 
!         BC_OC_RATIO = 1d0 / (KBC_OC_T * VR_BC_OC)
!-----------------------------------------------------------------------------

         ! Define volume ratios:
         ! VR_OC_AIR = volume ratio of OC to air [unitless]     
         VR_OC_AIR     = C_OC_CHEM1 / AIR_VOL ! could be zero

         ! VR_OC_BC = volume ratio of OC to BC [unitless]
         VR_OC_BC      = SAFE_DIV( C_OC_CHEM1, C_BC_CHEM1, 0d0 )

         ! VR_BC_AIR = volume ratio of BC to air [unitless]
         VR_BC_AIR     = SAFE_DIV( VR_OC_AIR,  VR_OC_BC,   0d0 )

         ! VR_BC_OC = volume ratio of BC to OC [unitless]
         VR_BC_OC      = SAFE_DIV( 1d0,        VR_OC_BC,   0d0 ) 

         ! Redefine fractions of total POPs in box (I,J,L) that are OC-phase, 
         ! BC-phase, and gas phase with new time step (should only change if 
         ! temp changes or OC/BC concentrations change) 
         DENOM         = KOA_T * VR_OC_AIR
         OC_AIR_RATIO  = SAFE_DIV( 1d0,        DENOM,      0d0 )

         DENOM         = KOC_BC_T * VR_OC_BC
         OC_BC_RATIO   = SAFE_DIV( 1d0,        DENOM,      0d0 )

         DENOM         = KBC_T * VR_BC_AIR
         BC_AIR_RATIO  = SAFE_DIV( 1d0,        DENOM,      0d0 )

         DENOM         = KBC_OC_T * VR_BC_OC
         BC_OC_RATIO   = SAFE_DIV( 1d0,        DENOM,      0d0 )

The function SAFE_DIV (in module file GeosUtil/error_mod.F) tests if the division can be done, and if not, it will assign an alternate value (in this case, 0d0). Using SAFE_DIV prevents div-by-zero errors from happening in the computations for variables: VR_OC_AIR, VR_BC_AIR, VR_BC_OC, VR_OC_BC, OC_AIR_RATIO, OC_BC_RATIO, BC_AIR_RATIO, BC_OC_RATIO.

--Bob Y. 17:02, 30 May 2014 (EDT)

Avoid floating-point exception in routine CHEM_POPGP

This fix was included in v11-01j and approved on 03 Dec 2016

We discovered the following issue in routine CHEM_POPGP (in module GeosCore/pops_mod.F) while running GEOS-Chem unit tests with the GNU Fortran compiler. The C_NO3 variable is used in an expression, but is never assigned a value. This causes GNU Fortran to die with a floating-point exception.

What probably happened was that C_NO3 once was given a value, but then line of code was later removed from the module. The C_NO3 variable probably should have been removed at that time, but apparently was not.

The fix is simple. We just set C_NO3 to zero before it is used. We have added the lines in GREEN:

 ! Bug fix: Zero C_NO3 to avoid a floating-point exception error.
 ! K_POPP_NO3 is already set to zero, so this will already cause
 ! K_NO3_BC to be set to zero.  We think that C_NO3 once was
 ! assigned a value but was later taken out. (bmy, 10/6/16)
 C_NO3 = 0.0_fp

 ! Define K for oxidation of POPP by NO3  [/s]
 K_NO3_BC = K_POPP_NO3 * C_NO3 

The parameter K_POPP_NO3 is already assigned a value of zero, so the result of the expression for K_NO3_BC should be zero anyway.

--Bob Yantosca (talk) 15:20, 6 October 2016 (UTC)

Unresolved issues

None at this time.

References

  1. Friedman, C. L and, N. E. Selin, Long-Range Atmospheric Transport of Polycyclic Aromatic Hydrocarbons: A Global 3-D Model Analysis Including Evaluation of Arctic Sources, Environ. Sci. Technol., 2012, 46 (17), 9501–9510, 2012. Article
  2. Friedman, C. L., Pierce, J. R., Selin, N. E., Assessing the influence of secondary organic versus primary carbonaceous aerosols on long-range atmospheric polycyclic aromatic hydrocarbon transport, Environ. Sci. Technol., 48 (6), 3293–3302, 2014. Article
  3. Friedman, C. L., Zhang, Y., Selin, N. E, Climate change and emissions impacts on atmospheric PAH transport to the Arctic, Environ. Sci. Technol., 48 (1), 429–437, 2014. Article
  4. Friedman, C. L. and N.E. Selin, PCBs in the Arctic atmosphere: determining important driving forces using a global atmospheric transport model, Atmos. Chem. Phys., 16, 3433-3448, doi:10.5194/acp-16-3433-2016, 2016. Article

--Melissa Sulprizio (talk) 14:34, 20 October 2016 (UTC)