|
|
Line 72: |
Line 72: |
|
| |
|
| --[[User:Melissa Payer|Melissa Sulprizio]] ([[User talk:Melissa Payer|talk]]) 15:20, 11 June 2015 (UTC) | | --[[User:Melissa Payer|Melissa Sulprizio]] ([[User talk:Melissa Payer|talk]]) 15:20, 11 June 2015 (UTC) |
|
| |
| == Previous issues that are now resolved ==
| |
|
| |
| === Prevent error when reading global OC ===
| |
|
| |
| <span style="color:green">'''''NOTE: This issue was resolved in the [[GEOS-Chem v9-02]] public release (03 Mar 2014).'''''</span>
| |
|
| |
| In routine <tt>GET_GLOBAL_OC</tt> (in module <tt>GeosCore/global_oc_mod.F</tt>), 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 <tt>THISYEAR</tt> is outside of 2005-2009, we must change <tt>XTAU</tt> to:
| |
|
| |
| ! Get the TAU0 value for the start of the given month
| |
| XTAU = GET_TAU0( THISMONTH, 1, YEAR )
| |
|
| |
| --[[User:Melissa Payer|Melissa Sulprizio]] 10:33, 24 February 2014 (EST)
| |
|
| |
| === Avoid div-by-zero errors in POPs simulation ===
| |
|
| |
| <span style="color:green">'''''These updates were validated in the 1-month benchmark simulation [[GEOS-Chem v10-01 benchmark history#v10-01c|v10-01c]] and approved on 29 May 2014.'''''</span>
| |
|
| |
| 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 <tt>EMISSPOPS</tt> (in module file <tt>GeosCore/pops_mod.F</tt>), 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 <tt>CHEM_POPGP</tt> (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)
| |
|
| |
| <span style="color:red">!-----------------------------------------------------------------------------
| |
| ! 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)
| |
| !-----------------------------------------------------------------------------</span>
| |
|
| |
| <span style="color:green">! 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 )</span>
| |
|
| |
| The function <tt>SAFE_DIV</tt> (in module file <tt>GeosUtil/error_mod.F</tt>) tests if the division can be done, and if not, it will assign an alternate value (in this case, 0d0). Using <tt>SAFE_DIV</tt> prevents div-by-zero errors from happening in the computations for variables: <tt>VR_OC_AIR, VR_BC_AIR, VR_BC_OC, VR_OC_BC, OC_AIR_RATIO, OC_BC_RATIO, BC_AIR_RATIO, BC_OC_RATIO</tt>.
| |
|
| |
| --[[User:Bmy|Bob Y.]] 17:02, 30 May 2014 (EDT)
| |
|
| |
| === Avoid floating-point exception in routine CHEM_POPGP ===
| |
|
| |
| <span style="color:green">'''''This fix was included in [[GEOS-Chem v11-01 benchmark history#v11-01j|v11-01j]] and approved on 03 Dec 2016'''''</span>
| |
|
| |
| We discovered the following issue in routine <code>CHEM_POPGP</code> (in module <code>GeosCore/pops_mod.F</code>) while running GEOS-Chem unit tests with the [[GNU Fortran compiler]]. The <code>C_NO3</code> 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 <code>C_NO3</code> once was given a value, but then line of code was later removed from the module. The <code>C_NO3</code> variable probably should have been removed at that time, but apparently was not.
| |
|
| |
| The fix is simple. We just set <code>C_NO3</code> to zero before it is used. We have added the lines in <span style="color:green">GREEN</span>:
| |
|
| |
| <span style="color: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</span>
| |
|
| |
| ! Define K for oxidation of POPP by NO3 [/s]
| |
| K_NO3_BC = K_POPP_NO3 * C_NO3
| |
|
| |
| The parameter <code>K_POPP_NO3</code> is already assigned a value of zero, so the result of the expression for <code>K_NO3_BC</code> should be zero anyway.
| |
|
| |
| --[[User:Bmy|Bob Yantosca]] ([[User talk:Bmy|talk]]) 15:20, 6 October 2016 (UTC)
| |
|
| |
|
| == Unresolved issues == | | == Unresolved issues == |
The POPs simulation is currently stale in GEOS-Chem 13.0.0 and later versions. We look to the GEOS-Chem Community to help maintain this simulation.
Previous | Next | Guide to GEOS-Chem simulations
- Simulations using KPP-built mechanisms (carbon, fullchem, Hg)
- Aerosol-only simulation
- CH4 simulation
- CO2 simulation
- Metals simulation
- POPs simulation
- Tagged CO simulation
- Tagged O3 simulation
- TransportTracers simulation
Overview
On this page we include information relevant to the persistent organic pollutant (POPs) simulation in GEOS-Chem.
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)
Unresolved issues
None at this time.
References
- 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
- 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
- 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
- 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)
Previous | Next | Guide to GEOS-Chem simulations