Difference between revisions of "POPs simulation"

From Geos-chem
Jump to: navigation, search
(Prevent error when reading global OC)
(PCB simulation)
Line 19: Line 19:
  
 
Info to be added.
 
Info to be added.
 +
 +
== References ==
 +
 +
#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'', <u>Environ. Sci. Technol.</u>, in press, 2014.
 +
#Friedman, C. L, Zhang, Y., Selin, N. E, ''Climate change and emissions impacts on atmospheric PAH transport to the Arctic'', <u>Environ. Sci. Technol.</u>, ''48'', pp4 29-437, 2014.
 +
# 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'', <u>Environ. Sci. Technol.</u>, 2012, '''46''' (17), pp 9501–9510, 2012. [http://pubs.acs.org/doi/abs/10.1021/es301904d Article]
 +
 +
--[[User:Bmy|Bob Y.]] 14:27, 14 April 2014 (EDT)
  
 
== Previous issues that are now resolved ==
 
== Previous issues that are now resolved ==

Revision as of 18:27, 14 April 2014

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

Overview

Authors and collaborators

PAH simulation

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)

PCB simulation

Info to be added.

References

  1. 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., in press, 2014.
  2. Friedman, C. L, Zhang, Y., Selin, N. E, Climate change and emissions impacts on atmospheric PAH transport to the Arctic, Environ. Sci. Technol., 48, pp4 29-437, 2014.
  3. 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), pp 9501–9510, 2012. Article

--Bob Y. 14:27, 14 April 2014 (EDT)

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)

Outstanding issues

Avoid div-by-zero errors in POPs simulation

This issue will be resolved in GEOS-Chem v10-01c.

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. 14:07, 14 April 2014 (EDT)

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., 46, 9501-9510, 2012.