HEMCO versions
On this page we provide information about the HEMCO development history.
Contents
- 1 Overview
- 2 HEMCO development history
- 3 Known issues
- 4 Previous issues that are now resolved
- 4.1 Updates to the volcanic emissions extension
- 4.2 Prevent zero emissions for MEGAN_Mono extension species
- 4.3 Add option to always use simulation year for specified fields
- 4.4 Updates from the NASA GEOS development branch
- 4.5 Bug fixes for HEMCO interpolation algorithm
- 4.6 HEMCO standalone now calls HCO_RUN in two phases
- 4.7 Wrap remaining HEMCO extensions in instances
- 4.8 Update HEMCO standalone for compatibility with FlexGrid
- 4.9 Fix unit conversion in HCO_UNIT_GetAreaScal
- 4.10 Bug fix: Read data with the "E" cycle flag just once
- 4.11 Add fix for collapsing model levels to reduced grid
- 4.12 Fixed error in HEMCO "exact" time option
- 4.13 Stop with error if multiple containers have the same name
- 4.14 Bug fix for distributing emissions in the vertical dimension
- 4.15 Add extra error checks in HEMCO standalone module
- 4.16 Remove null string character from netCDF unit string
- 4.17 Bug fix for HEMCO soil NOx error with ifort 17
- 4.18 Avoid segmentation fault in DustGinoux extension
- 4.19 Now use YYYYMMDDhhmm format for time stamp values
- 4.20 Read default DEP_RESERVOIR fields from file when not found in HEMCO restart file
- 4.21 Make anthropogenic emissions diagnostics 3D
- 4.22 HEMCO diagnostic and restart files now have an unlimited time dimension
- 4.23 Fixed bug in computation of local time in HCO_GetSuncos
- 4.24 Fixed bug in time interpolation in ncdf_mod.F90
- 4.25 Ocean grid boxes now use the timezone of the nearest land mass for computing emissions
- 4.26 Fix bug preventing HEMCO from writing restart files more than once per run
- 4.27 Fix missing pointer in call to HCO_CalcVertGrid
- 4.28 Enable emissions in the stratosphere for specialty simulations
- 4.29 Fix for segmentation fault when emissions are turned off
- 4.30 Now treat OCPI, OCPO, BCPI, and BCPO separately in HEMCO
Overview
HEMCO is a stand-alone software component for computing emissions in (global) atmospheric models. It provides a highly customizable interface to calculate and diagnose emissions from different sources, regions and species on a user-specified grid through automatic combination, overlay, and update of a set of data inventories and scale factors specified by the user.
HEMCO was implemented into GEOS-Chem v10-01 and allowed for the removal of many obsolete, legacy emissions routines from GEOS-Chem. For a complete list of removed legacy emissions routines, please see our Removal of obsolete modules and files wiki post. Most users of GEOS-Chem will just need to learn how to tell HEMCO which emissions they would like to apply to their GEOS-Chem simulations. For more information, please see the The HEMCO User's Guide. We will be providing more detailed documentation prior to the release of GEOS-Chem v10-01.
HEMCO development history
Each HEMCO version (and its corresponding GEOS-Chem version number(s)) are listed in the table below.
Version | Date released | Features added | Notes |
---|---|---|---|
3.0.0 | TBD |
|
|
2.2.0 | 03 Feb 2020 |
|
|
v2.1.012 | 01 Apr 2019 |
| |
v2.1.011 | 19 Feb 2019 |
| |
v2.1.010 | 05 Oct 2018 |
| |
v2.1.009 | 13 Sep 2018 |
|
|
v2.1.008 | 08 Aug 2018 |
|
|
v2.1.007 | 18 Jul 2018 |
|
|
v2.1.006 | 10 Jun 2018 |
|
|
v2.1.005 | 27 Jan 2018 |
|
|
v2.1.004 | 30 Dec 2017 |
JD1985= JULDAY(refYYYY, refMM, THISDAY ) + 1.0_dp
$ ncdump -v time -t HEMCO.201501010100.nc | grep "time = \"" time = "2014-12-31 01" ;
|
|
v2.1.003 | 19 Jul 2017 |
|
|
v2.1.002 | 07 Jul 2017 |
|
|
v2.1.001 | 16 May 2017 |
|
|
v2.0.004 | 26 Jan 2017 |
|
|
v2.0.003 | 14 Oct 2016 |
|
|
v1.1.016 | 14 Dec 2015 |
|
|
v1.1.015 | 07 Dec 2015 |
|
|
v1.1.014 | 23 Nov 2015 |
|
|
v1.1.013 | 19 Nov 2015 |
|
|
v1.1.012 | 06 Nov 2015 |
|
|
v1.1.011 | 14 Oct 2015 |
|
|
v1.1.010 | 22 Sep 2015 |
|
|
v1.1.009 | 10 Sep 2015 |
|
|
v1.1.008 | 13 Jul 2015 |
|
|
v1.1.007 | 06 Jul 2015 |
|
|
v1.1.006 | 01 Jul 2015 |
|
|
v1.1.005 | 09 Jun 2015 |
|
|
v1.1.004 | 20 May 2015 |
|
|
v1.1 | 16 Apr 2015 |
|
|
v1.0 | 07 Nov 2014 |
|
|
Known issues
Issues in automatic unit conversion
The following issues are present in the current version of HEMCO. We will take action to resolve these issues in future versions.
Issues caused by HEMCO not recognizing variations of the same unit strings
Xin Chen (U. Minnessota) reported unexpected HEMCO unit conversion behavior. Lizzie Lundgren traced this to HEMCO not recognizing variations of kg/m2/s strings as the same.
- If the unit strings in the netCDF file and in the HEMCO_Config.rc file are both the same (e.g. kg/m2/s, then no unit conversion is supposed to happen.
- But if the unit string in the file is e.g. kg m-2 s-1 and the unit in the HEMCO_Config.rc file is e.g. kg/m2/s, then HEMCO detects this as a difference in units, and will try to apply an automatic unit conversion that is really unnecessary.
This problem underscores the need to address the HEMCO automatic unit conversions ASAP.
Issues in unit conversions between kg and kgC
Christoph Keller wrote:
So the kg vs. kgC issue is indeed confusing and we are going to remove the auto-conversion in future versions. For now, HEMCO internally keeps everything in units of kg emitted species m-2 s-1. For the seaflux extension, this is kg (DMS) m-2 s-1 for DMS, and kg (C) m-2 s-1 for ACET and ALD2. When reading the emissions / surface concentrations from netCDF, HEMCO will try to convert all ACET/ALD2 emissions (or concentrations) to kg(C). If the emissions in the input file are already in kg(C), this should be specified in the HEMCO configuration file so that HEMCO won’t do the unit conversion anymore:
101 ACET_SEAWATER $ROOT/ACET/v2014-07/ACET_seawater.generic.1x1.nc ACET 2005/1/1/0 C xy kgC/m3 ACET - 1 1 (No unit conversion)
If, on the other hand, the input data is in kg/m3, then this should be specified accordingly in the configuration file and HEMCO will automatically convert it to kgC:
101 ALD2_SEAWATER $ROOT/ALD2/v2017-03/ALD2_seawater.geos.2x25.nc ALD2 1985/1-12/1/0 C xy kg/m3 ALD2 - 1 1 (Will do unit conversion)
The same principles applies to the HEMCO diagnostics: the unit specified in the HEMCO diagnostics file (HEMCO_Diagn.rc) determines whether the diagnostics are converted from kgC to kg or not, i.e.:
EMIS_ACET_OC_kg ACET 101 -1 -1 2 kg/m2/s (diagnostics is in kg(ACET) m-2 s-1) EMIS_ACET_OC_kgC ACET 101 -1 -1 2 kgC/m2/s (diagnostics is in kg(C) m-2 s-1)
In general, I recommend avoiding any ‘automatic’ unit conversions and provide all inputs/outputs in kg(C) where possible and specify the units in the HEMCO configuration file accordingly. This will also ensure full compatibility with future versions of HEMCO.
--Bob Yantosca (talk) 15:59, 19 April 2019 (UTC)
Error when distributing emissions in the vertical
Sally Wang wrote
Right now I am trying to specify 45% of passive tracer emitted above PBL while 55% of tracer emitted with PBL in tag CO run but I have some difficulties. I followed this wiki page and combine the ideas to implement emission fraction of passive tracer in my run: So in my HEMCO_Config file, I specified the emission rate of this tracer and emitted layer in this way:
0 INJF_FLUX_FT 1.0e-10 - - - xyL=PBL:47 kg/m2/s INJF 258/1008 1 1 0 INJF_FLUX_PBL 1.0e-10 - - - xyL=1:PBL kg/m2/s INJF 259/1008 1 1
The model failed to finish simulation and gave me this error message in HEMCO.log:
HEMCO ERROR: Negative emissions in: INJF_FLUX. To allow negatives, edit settings in the configuration file. ERROR LOCATION: HCO_CalcEmis (HCO_CALC_MOD.F90) ERROR LOCATION: HCO_RUN (hco_driver_mod.F90)
I have no idea why negative emission would show up.
Bob Yantosca replied:
I was able to replicate your issue in a Rn-Pb-Be-Passive species simulation with the v11-02d code (in development). I believe that this error is being caused by a parallelization bug in HEMCO, in the module where emissions are distributed in the vertical.
I used the "out-of-the-box" settings the Rn-Pb-Be-Passive species simulation in my input.geos file. I added these two lines (similar to yours) in my HEMCO_Config.rc to specify the passive species emissions flux:
0 PASV_FLUX_1 1.0e-10 - - - xyL=1:PBL kg/m2/s PASV - 1 1 0 PASV_FLUX_2 1.0e-10 - - - xyL=PBL:47 kg/m2/s PASV - 1 1
Running the code gives me this error:
forrtl: severe (408): fort: (3): Subscript #3 of the array VAL has value -1 which is less than the lower bound of 1
I’ve traced the error to this parallel loop at approx. line 838 of HEMCO/Core/hco_calc_mod.F90. A parallelization error (probably caused by variables that should be held PRIVATE but weren't) is causing the LowLL variable to not be set properly. LowLL gets returned as -1, then this value is used as the level index for the BXHEIGHT_M field lower down in the module.
The quickest solution that I have is for you to disable the parallel loop at ~ line 838 of HEMCO/Core/hco_calc_mod.F90. Add an extra comment character (!) in front of each of the !$OMP statements there.
!!$OMP PARALLEL DO & !!$OMP DEFAULT( SHARED ) & !!$OMP PRIVATE( I, J, L, tIdx, TMPVAL, DilFact, LowLL, UppLL ) & !!$OMP SCHEDULE( DYNAMIC ) . . . !!$OMP END PARALLEL DO
When I commented out this particular loop, I was able to get the model to pass a Rn-Pb-Be-Passive Speccies simulation unit test. Making this DO loop single processor eliminates the error.
We are looking into this issue and hope to have a fix shortly.
--Bob Yantosca (talk) 20:44, 17 October 2017 (UTC)
HEMCO errors apparently caused by bugs in Intel Fortran Compiler
Some users have reported technical issues with HEMCO that appear to be caused by bugs in the Intel Fortran Compiler.
Compiler | Issue | Status |
---|---|---|
Intel Fortran Compiler v15 | Segmentation fault occurs when compiling with flags: -check bounds -O2 |
|
Intel Fortran Compiler v13 Intel Fortran Compiler v14 |
Segmentation fault in HEMCO I/O module |
|
--Bob Y. (talk) 20:30, 25 August 2015 (UTC)
Previous issues that are now resolved
In this section we describe errors and other software issues caused by HEMCO dating back to GEOS-Chem v10-01e. All of these issues have since been resolved.
Updates to the volcanic emissions extension
This update (Git ID: 07c10319) was added to HEMCO v2.1.012, which was included in GEOS-Chem 12.3.0 (release date 01 Apr 2019).
We have made the following updates to the extension that handles volcanic emissions:
We have renamed HEMCO/Extensions/hcox_aerocom_mod.F90 to HEMCO/Extensions/hcox_volcano_mod.F90. We now have the option of using either AeroCom or OMI volcano emissions data, so we have changed the name of the module accordingly. Hopefully this should prevent confusion.
Module routines within HEMCO/Extensions/hcox_volcano_mod.F90 have likewise been renamed from HCOX_AeroCom_* to HCOX_Volcano_*.
In HEMCO/Extensions/hcox_state_mod.F90, we have renamed the flag ExtState%Aerocom to ExtState%Volcano, to be consistent with the new name of the volcano extension.
We have also fixed a bug: We now remove the MinDiagLev=2 parameter from being passed to routine HCO_EmisAdd. This was causing the degassing and eruptive emissions to both be zero (because it was ignoring the category values).
The --> Aerocom_Table setting in the HEMCO_Config.rc was renamed to --> Volcano_Table.
One final fix: We corrected a typo in HEMCO/Extensions/hcox_paranox_mod.F90, where the flag ExtState%AeroCom was referenced. This of course should have been ExtState%ParaNOx. There should be no references to the Volcano extension from the ParaNOx extension.
--Bob Yantosca (talk) 15:31, 21 March 2019 (UTC)
Prevent zero emissions for MEGAN_Mono extension species
This update (Git ID: af86c4dd) was added to HEMCO v2.1.012, which was included in GEOS-Chem 12.3.0 (release date 01 Apr 2019).
Bob Yantosca wrote:
I have just discovered a bug in the HEMCO/Extensions/hcox_megan_mod.F module. As it so happens, the biogenic emissions for the MEGAN monoterpene extensions were being computed with the wrong extension number. I needed to replace the lines of code in RED to with the lines of code in GREEN in hcox_megan_mod.F:
! Add flux to emission array CALL HCO_EmisAdd( am_I_Root, HcoState, FLUXCO, Inst%IDTCO, & RC, ExtNr=Inst%ExtNr ) & RC, ExtNr=Inst%ExtNrMono )
and in similar locations where CO, LIMO, MTPA, MTPO, and SESQ emissions fluxes are added to the HEMCO state (via routine HCO_EmisAdd).
The image below shows biogenic emissions of CO from monoterpenes, before ("Ref") and after ("Dev") the fix was applied. As you can see, before the fix, CO (and all the other MEGAN_Mono emitted species, omitted here) had zero biogenic emissions. This has now been corrected.
--Bob Yantosca (talk) 20:33, 19 March 2019 (UTC)
Add option to always use simulation year for specified fields
This update (Git ID: 23189032) was added to HEMCO v2.1.012, which was included in GEOS-Chem 12.3.0 (release date 01 Apr 2019).
This error is known to occur with GEOS-Chem 12.1.0 and higher versions.
Anthony Y.H. Wong wrote:
I use the v12.1.0 to run tropchem simulations that have to fix emission year. I used
Emission year: 2016
in my HEMCO_Config.rc file. The error message in HEMCO reads:
Once I deleted the line in HEMCO_Config.rc that specifies emission year, the model runs normally. That "1713" is apparently the source of the problem. Perhaps when GC restart files is read from HEMCO, somehow the emission time confuses the real time steps. Is there any solution to this problem?
Melissa Sulprizio wrote:
I think I may have found the problem. As you indicated, you have set a fixed emissions year in your HEMCO configuration file. This will change the year for any file read in via HEMCO to the specified year. However, your restart file and the met fields that you want to use for your simulation are for July 2016. As a temporary fix, you can remove the $YYYY tokens from the GC_RESTART entries and the met field entries in HEMCO_Config.rc and manually set it to the year of your restart file (which is 2016).
Christoph Keller wrote:
The year used in HEMCO is handled by the HcoClock object. It carries three year values: Clock%ThisYear is the current 'emission year', Clock%PrevYear is the emission year of the previous time step, and Clock%SimYear is the current simulation year. Clock%SimYear and Clock%ThisYear are always identical except for cases where the emission year is fixed (via HEMCO_Config.rc). When reading a file, HEMCO always uses Clock%ThisYear as the reference year. But it sounds like for some files, we would want to use Clock%SimYear instead. This would have to happen in routine HCO_GetPrefTimeAttr (in hco_tidx_mod.F90) when the current year is obtained:
! Get current time CALL HcoClock_Get( am_I_Root, HcoState%Clock, & cYYYY = cYr, cMM = cMt, cDD = cDy, & cWEEKDAY = cWd, cH = cHr, cM = cMn, RC = RC ) IF ( RC /= HCO_SUCCESS ) RETURN
Change to:
! Get current time CALL HcoClock_Get( am_I_Root, HcoState%Clock, & cYYYY = cYr, cMM = cMt, cDD = cDy, & cWEEKDAY = cWd, cH = cHr, cM = cMn, sYYYY = sYr, RC = RC ) IF ( RC /= HCO_SUCCESS ) RETURN IF ( SOMETHING ) cYr = sYr
The question is what the determination for this switch should be (which I just called 'SOMETHING' above)? A more complicated, but more robust approach would be to specifically mark these files in HEMCO_Config.rc (e.g. by adding an attribute to the time flag) and then add a corresponding flag to the FileData derived type (let's say 'AlwaysUseSimYear'), which already contains a bunch of meta-data that goes with each input file. This flag would then determine whether to use cYr or sYr:
IF ( Lct%Dct%Dta%AlwaysUseSimYear) cYr = sYr
As a permanent fix, we have added the `Y` option to the time cycle flag in HEMCO_Config.rc. Including this option will set `UseSimYear` to True in hco_config_mod.F90 which will in turn set cYr = sYr
as suggested above. This option is now used for GC_RESTART, HEMCO_RESTART, and meteorology fields in HEMCO_Config.rc.
--Melissa Sulprizio (talk) 20:18, 10 March 2019 (UTC)
Updates from the NASA GEOS development branch
This update (Git ID: fb093d61 ) was added to HEMCO v2.1.012, which was included in GEOS-Chem 12.3.0 (release date 01 Apr 2019).
Lizzie Lundgren wrote:
There are updates to HEMCO within the GEOS branch that Christoph Keller gave the go ahead to put into the standard model. These are summarized as follows:
- The readlist counter now makes sure that HEMCO establishes all pointers before calculating the emissions for the first time. With the update to GEOS-Chem 12.0 there were some clock mismatches that would leave a bunch of HEMCO fields unassigned when running GEOS-Chem within GEOS. The readlist counter variable is a more robust way to determine the status of these fields.
- The second update is the ‘Cap time shift’ flag (to be set in HEMCO_Config settings, defaults to false). This fixes an issue that Andrew Schuh reported when he tried applying a 90 minute offset (2000-2016/1-12/1-31/0-23/+90minutes) to 3-hourly data, with the 8 fields from one day (0z,3z,…,21z) stored in the same netCDF file. Without the TimeShiftCap flag there was the issue that HEMCO would jump back to the 0z slice after 22.30z. The TimeShiftCap flag makes sure that HEMCO doesn’t jump across midnight.
--Bob Yantosca (talk) 21:26, 7 March 2019 (UTC)
Bug fixes for HEMCO interpolation algorithm
This issue (Git ID: e947fc80) was added to HEMCO v2.1.012, which was included in GEOS-Chem 12.3.0 (release date 01 Apr 2019).
A couple of bugs for the HEMCO interpolation algorithm have been corrected:
Issue #1:
Bob Yantosca wrote:
I am digging into the issue of how to make HEMCO’s time interpolation in GEOS-Chem "Classic" match the behavior the MAPL ExtData component in GCHP. This came up during the implementation the MODIS LAI for GC 12.3.0. ExtData interpolates accordingly:
>> >> >> Interpolated field XLAIMULTI between 20151215 000000 and 20160115 000000 ( 0.548387 fraction)
(NOTE: The MODIS LAI data are tiemestamped on the 15th of the month.) But if I use this type of entry in the GEOS-Chem "Classic" HEMCO_Config.rc file file:
* XLAI00 MODIS_XLAI.025x025.$YYYY$MM.nc XLAI00 2005-2011/1-12/1-31/0 I xy cm2/cm2 * - 1 1
Then we get this output:
Reading variable XLAI00
HEMCO: Entering GET_TIMEIDX (hco_read_std_mod.F90) ( 6)
# time slices found: 1
# time slice range: 201102150000. 201102150000.
preferred datetime: 201101010000.
selected tidx1: 1
corresponding datetime 1: 201102150000.
assigned delta t [h]: 0
local time? F
HEMCO: Leaving GET_TIMEIDX (hco_read_std_mod.F90) ( 6)
Interpolated data between two files:
- File 1: MODIS_XLAI.025x025.201101.nc
Time stamp used: 201101150000.000
Applied weight: 1.000000
- File 2: MODIS_XLAI.025x025.201102.nc
Time stamp used: 201102150000.000
Applied weight: 0.0000000E+00
As you can see, HEMCO in GEOS-Chem "Classic" is trying to interpolate between Jan and Feb, but should instead be trying to interpolate between Dec and Jan. Furthermore, it is giving all the weight to Jan. This results in a mismatch when we compare the LAI data in GEOS-Chem "Classic" vs. GCHP.
Christoph Keller replied:
I think I figured this one out. There were two (independent) bugs in the interpolation procedure. One was related to how the weights were assigned to two given time stamps (subroutine GetWeights in HEMCO/Core/hcoio_read_std_mod.F90), and the other one was that interpolation would only work into the future, i.e. if the timestamp read from the first file was in the past (in your example the interpolation should go into the future). I added two fixes for this...and now it does this:
# time slices found: 1
# time slice range: 200707150000. 200707150000.
preferred datetime: 200708010000.
selected tidx1: 1
corresponding datetime 1: 200707150000.
assigned delta t [h]: 0
local time? F
HEMCO: Leaving GET_TIMEIDX (hco_read_std_mod.F90) ( 6)
Interpolated data between two files:
- File 1: MODIS_XLAI.025x025.200708.nc
Time stamp used: 200708150000.000
Applied weight: 0.5483871
- File 2: MODIS_XLAI.025x025.200707.nc
Time stamp used: 200707150000.000
Applied weight: 0.4516129
Issue #2:
Bob Yantosca wrote:
Running HEMCO past the leap year day 2016/02/29 gives this error, when reading the new Yuan et al 2011 LAI data:
HEMCO: Opening /n/holylfs/EXTERNAL_REPOS/GEOS-CHEM/gcgrid/data/ExtData/GEOS_4x5/GEOS_FP/2016/03/GEOSFP.20160301.I3.4x5.nc - Found all A1 met fields for 2016/02/29 23:30 At line 2393 of file hcoio_read_std_mod.F90 Fortran runtime error: Index '47' of dimension 1 of array 'availymdhm' above upper bound of 46
Adding this fix to routine GetIndex2Interp in HEMCO/Core/hcoio_read_std_mod.F90 seems to fix the out-of-bounds error:
! If all of those tests failed, simply get the next time
! slice.
IF ( tidx2 < 0 ) THEN
tidx2 = tidx1 + 1
! Make sure that tidx2 does not exceed nTime, which is
! the number of time slices in the file. This can cause
! an out-of-bounds error. (bmy, 3/7/19)
IF ( tidx2 > nTime ) tidx2 = nTime
... etc ...
--Bob Yantosca (talk) 17:47, 25 February 2019 (UTC)
HEMCO standalone now calls HCO_RUN in two phases
This update was included in GEOS-Chem 12.2.0, which was released on 19 Feb 2019.
In routine HCOI_Sa_Run (located in module in HEMCO/Interfaces/hcoi_standalone_mod.F90), we must now call HCO_Run twice, once with Phase=1 and once more with Phase=2. An update for FlexGrid in GEOS-Chem 12.1.0 added an IF block where emissions are computed only when Phase=2. Therefore, until this fix was made, base emissions were not being computed by the HEMCO standalone.
This update was added to HEMCO version 2.1.011.
--Bob Yantosca (talk) 13:05, 30 January 2019 (UTC)
Wrap remaining HEMCO extensions in instances
This update was included in GEOS-Chem 12.2.0, which was released on 19 Feb 2019.
In HEMCO 2.1.009, several extensions were wrapped in instances. An instance allows the HEMCO extension to run independently on multiple nodes when running in a HPC environment. This is necessary when running GEOS-Chem as GCHP, or when coupled to external models like NASA/GEOS, WRF, etc.
As it so happened, the GC_RnPbBe extension was not updated. This resulted in zero emissions for Rn and Be when using any version of IFORT. When using gfortran, Rn and Be emissions seemed to be fine. This is now fixed by wrapping the GC_RnPbBe extension in instances.
The following extensions are now also wrapped in instances: GC_POPs, DustGinoux, and TOMAS_Jeagle. This update was made to HEMCO version 2.1.011.
--Bob Yantosca (talk) 15:47, 28 January 2019 (UTC)
Update HEMCO standalone for compatibility with FlexGrid
This update was included in GEOS-Chem 12.2.0, which was released on 19 Feb 2019.
In HEMCO v2.1.011 (which will be introduced in GEOS-Chem 12.2.0), the HEMCO standalone was made compatible with the met field updates that were introduced for FlexGrid. Several of the met field names (which are used as inputs to the various HEMCO extensions) needed to be changed in HEMCO/Interfaces/hcoi_standalone_mod.F90 in order to be consistent with the FlexGrid met field definitions in the HEMCO_Config.rc configuration file.
NOTE: The HEMCO standalone in GEOS-Chem 12.1.0 and GEOS-Chem 12.1.1 will not work, as the expected met field names are incorrect. Upgrading to GEOS-Chem 12.2.0 or later will fix this issue.
--Bob Yantosca (talk) 18:12, 22 January 2019 (UTC)
Fix unit conversion in HCO_UNIT_GetAreaScal
This update (Git ID: 7dfd99da) was included in GEOS-Chem 12.1.0, which was released on 26 Nov 2018.
Erin McDuffie wrote:
- I would like to report a unit conversion error in the hco_unit_mod.F90 file, within the HCO_UNIT_GetAreaScal routine (HEMCO v2.1.008).
- The error occurs when HEMCO uses an incorrect ‘Scal’ factor when converting from km2 (but not cm2) to m2 and from cm3, dm3, and L to m3. For example, a factor of 1e-6 is used to convert cm-3 to m-3, when I believe this factor should be 1/1e-6.
- For example, for O3 in original units of molec/cm3/s (in $ROOT/HEMCO/UCX/v2018-02/UCX_ProdLoss.v11-02d.4x5.72L.nc):
- 1 molec/cm3/s * mol/6.022e23 molec.*48 g/mol * 1 kg/1e3 g gives a mass scale factor of 7.9e-26 kg/cm3/s.
- Multiplying 7.9e-26 kg/cm3/s by an area scale factor of 1e-6 gives 7.9e-32, which is the factor reported in the HEMCO.log file below.
- Here is the log file output of the variable PORL_L_S__PO3:
Reading variable PORL_L_S__PO3 Unit conversion settings: - Species MW : 48.0000000000000 - emitted compound MW: 48.0000000000000 - molecular ratio : 1.00000000000000 - keep input species : T - Year, month : 2013 7 Data was in units of molec/cm3/s - converted to HEMCO units by applying scale factor 7.970587394050387E-032 HEMCO WARNING: Data converted from kg/m3/s to kg/m3: UCX_PROD_O3: molec/cm3/s
- However, unless I am mistaken, 7.9e-26 kg/cm3/s should actually be multiplied by 1 cm3/1e-6 m3 to result in a scale factor of 7.9e-20 kg/m3/s.
--Melissa Sulprizio (talk) 12:05, 31 October 2018 (UTC)
--Bob Yantosca (talk) 16:08, 26 November 2018 (UTC)
Bug fix: Read data with the "E" cycle flag just once
This update (Git ID: 3f62e749) was included in GEOS-Chem 12.1.0, which was released on 26 Nov 2018.
This update does the following:
- If a file has the time cycle flag E, then that file will be read just once.
- Also, the HEMCO MEGAN extension will read data from restart files into module variables only once if we are using GEOS-Chem "Classic".
- Updates the HEMCO version number to 2.1.010.
Prior to this commit, HEMCO would have repeatedly attempted to read any file with the E time cycle flag. This fix had implications for restart files in HEMCO extensions, particularly MEGAN. Since approx. GEOS-Chem 12.0.0, certain MEGAN module variables that only should have been initialized once were getting overwritten on every emissions timestep.)
Also note: this fix should reduce the amount of time spent reading data from disk (as evidenced by the GEOS-Chem "Input" timer, when you compile with the TIMERS=1 option. This is because HEMCO no longer attempts to read files that have already been read. Tests have shown that this fix reduces the time spent in "Input" by approximately 1000 seconds for a 1-month geosfp_4x5_benchmark simulation.
The following time cycle flags are now used:
Cycle Flag | Name | Description |
---|---|---|
E | Exact | Fields are only used on the exact timestamp as requested in the HEMCO_Config.rc file. The file will not be read again once it is found. |
EF | Exact / Forced | Same behavior as CycleFlag = E, but will stop the simulation with an error if the file is not found. |
EC | Exact / Continuous | Fields are only used on the exact timestep as requested in the HEMCO_Config.rcfile. But HEMCO will continue to read or query the file on all timesteps. (NOTE: This is needed when running in the ESMF environment, as variables need to be filled from the ESMF Export State on each emissions timestep. |
ECF | Exact / Continuous / Forced | Same behavior as CycleFlag = EC, but will halt the simulation with an error if the file is not found. |
--Bob Yantosca (talk) 16:07, 26 November 2018 (UTC)
Add fix for collapsing model levels to reduced grid
This update (Git ID: 820b8d7d) was included in GEOS-Chem 12.1.0, which was released on 26 Nov 2018.
There is a bug in the way HEMCO does the vertical interpolation for model levels. In routine ModelLev_Interpolate (in HEMCO/Core/hco_interp_mod.F90), we have:
! If needed, collapse from native GEOS-5 onto reduced GEOS-5 IF ( nlev == 72 .OR. nlev == 73 ) THEN ! Add one level offset if these are edges IF ( nlev == 73 ) THEN OS = 1 ELSE OS = 0 ENDIF ! Collapse two levels (e.g. levels 39-40 into level 38): CALL COLLAPSE( Lct, REGR_4D, 37+OS, 37+OS, 2, T, 5 ) CALL COLLAPSE( Lct, REGR_4D, 38+OS, 39+OS, 2, T, 5 ) CALL COLLAPSE( Lct, REGR_4D, 39+OS, 41+OS, 2, T, 5 ) CALL COLLAPSE( Lct, REGR_4D, 40+OS, 43+OS, 2, T, 5 ) ! Collapse four levels: CALL COLLAPSE( Lct, REGR_4D, 41+OS, 45+OS, 4, T, 5 ) CALL COLLAPSE( Lct, REGR_4D, 42+OS, 49+OS, 4, T, 5 ) CALL COLLAPSE( Lct, REGR_4D, 43+OS, 53+OS, 4, T, 5 ) CALL COLLAPSE( Lct, REGR_4D, 44+OS, 57+OS, 4, T, 5 ) CALL COLLAPSE( Lct, REGR_4D, 45+OS, 61+OS, 4, T, 5 ) CALL COLLAPSE( Lct, REGR_4D, 46+OS, 65+OS, 4, T, 5 ) CALL COLLAPSE( Lct, REGR_4D, 47+OS, 69+OS, 4, T, 5 )
then in COLLAPSE, we have:
SUBROUTINE COLLAPSE ( Lct, REGR_4D, OutLev, InLev1, NLEV, T, MET ) ... ! Get maximum level to be used for pressure thickness calculations. ! This is one more than the number of levels to be used. TOPLEV = InLev1 + NLEV ! Get pointer to grid edges on the native input grid EDG => G5_EDGE_NATIVE(InLev1:TOPLEV) ! Thickness of output level THICK = EDG(1) - EDG(NLEV) ! Get level weights ALLOCATE(WGT(NLEV)) WGT = 0.0 DO I = 1, NLEV-1 WGT(I) = ( EDG(I) - EDG(I+1) ) / THICK ENDDO
Where the comments in ModelLev_Interpolate says it's lumping two (four) levels, the code is actually lumping three (five) levels. This was leading to an array-out-of-bounds error for G5_EDGE_NATIVE when attempting to collapse fields on level edges from 73 levels to 78 levels. To resolve the issue, we should use:
! Get maximum level to be used for pressure thickness calculations. TOPLEV = InLev1 + ( NLEV-1 ) ! Thickness of output level THICK = EDG(1) - EDG(NLEV) ! Get level weights ALLOCATE(WGT(NLEV)) WGT = 0.0 DO I = 1, NLEV-1 WGT(I) = ( EDG(I) - EDG(I+1) ) / THICK ENDDO
--Melissa Sulprizio (talk) 16:53, 27 September 2018 (UTC)
--Bob Yantosca (talk) 16:07, 26 November 2018 (UTC)
Fixed error in HEMCO "exact" time option
This fix was included in GEOS-Chem 12.0.0.
We discovered that the HEMCO "Exact" cycling option was not working as intended. We found this error when trying to set up a pulse plume with a passive species. The plume was supposed to be only emitted as a "puff" precisely at 2016/01/01 @ 00:00 GMT, according to these entries in the HEMCO_Config.rc file:
0 PASV_PLUME_FLUX 1.0 - 2016/1/1/0 E xyL=3000m kg/m2/s PASV 1000 1 1 . . . 1000 MASK_PLUME1 110/40/116/45 - 2016/1/1/0 E xy 1 1 110/40/116/45
But it was found that the plume continued to be emitted well past 2016/01/01 @ 00:00 GMT.
Christoph Keller has since submitted a fix for this issue and we have included it in the GEOS-Chem 12.0.0 release.
--Bob Yantosca (talk) 15:19, 9 August 2018 (UTC)
Stop with error if multiple containers have the same name
This fix was included in GEOS-Chem 12.0.0.
HEMCO now stops with an error if multiple containers in HEMCO_Config.rc have the same name. For example, the entries listed below:
# Cars 0 DICE_CO $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc CO 2013/1/1/0 C xy g/m2/yr CO 26/1008 1 60 # Motorcycles 0 DICE_CO $ROOT/DICE_Africa/v2016-10/DICE-Africa-motorcycles-2013-v01-4Oct2016.nc CO 2013/1/1/0 C xy g/m2/yr CO 26/1008 1 60
will now trigger the following error:
HEMCO ERROR: Error: HEMCO field already exists:DICE_CO
We added this update to prevent errors when using HEMCO in GEOS-Chem with the High-Performance option (aka GCHP).
--Bob Yantosca (talk) 15:37, 20 July 2018 (UTC)
Bug fix for distributing emissions in the vertical dimension
This fix was included in GEOS-Chem 12.0.0.
Christoph Keller wrote:
I discovered a bug in HEMCO that affects the vertical distribution of emissions. We now compute the fractions of the lowest and highest level correctly, and get PBL height in meters if needed. I'm fairly confident that it does not matter for the reference simulation because we don't distribute 2D emissions across multiple levels (where the bug fix has an impact).
--Bob Yantosca (talk) 18:13, 19 July 2018 (UTC)
Add extra error checks in HEMCO standalone module
This fix was included in GEOS-Chem 12.0.0.
When running a HEMCO standalone simulation, we discovered that that if the species number ID's are mis-indexed (in HEMCO_sa_Spec.rc), such as:
# ID NAME MW MWEMIS MOLECRATIO K0 CR PKA 1 CO 28.0 28.0 1.0 0.0 0.0 0.0 3 SOAP 150.0 150.0 1.0 0.0 0.0 0.0 4 NO 30.0 30.0 1.0 0.0 0.0 0.0
that this error is not trapped. Instead, an out-of-bounds error can overwrite species metadata such as molecular weights, leading to incorrect results—especially for those species that involve unit conversions.
We have added several fixes to HEMCO/Interfaces/hco_standalone_mod.F90 to avoid this situation. We improve the algorithm for parsing the HEMCO standalone species file. In addition, we now throw errors when
- The ID# of the first species read from the HEMCO species file is not 1; and
- The ID# of the last species read from the HEMCO species file does not match the total number of species read in.
This should prevent any typos in the HEMCO standalone species file from creating undetected errors.
--Bob Yantosca (talk) 20:57, 18 July 2018 (UTC)
Remove null string character from netCDF unit string
This fix was included in GEOS-Chem 12.0.0.
We have discovered a minor issue when HEMCO reads data into GEOS-Chem "Classic" (via module NcdfUtil/hcoio_read_std_mod.F90). Depending on now the netCDF file was written, the ASCII “NULL” character (\0, with ASCII value = 0) can be appended to the end of strings in the netCDF file. The null character is used in C and similar languages to denote end-of-string. But apparently the Fortran compiler can interpret the null character as a text character instead of a character to be skipped.
Adding debug printout to the HEMCO.log file which illustrates the issue
File units do not match: g/m2/yr^@ vs. g/m2/yr. File: .../HEMCO/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc ### ThisUnit |g/m2/yr^@| ### OrigUnit |g/m2/yr|
When you trim the string with command TRIM( ThisUnit ), the null character (which prints out in Fortran as ^@) is visible as part of the string. So the compiler thinks that variable ThisUnit (which is the unit string from the netCDF file) has 8 characters instead of 7. This causes the ThisUnit variable not to match the OrigUnit variable (which is the unit string read from HEMCO_Config.rc). For most HEMCO runs, which use Unit Tolerance = 1, this won’t cause a fatal error, but it will print a bunch of annoying File units do not match warning messages to the HEMCO.log file.
The fix is simple. We just need to test the last character of the VarUnit variable to see if it’s the ASCII null character. If it is, we replace it with a Fortran null character (''). This needs to be done in 2 places in NcdfUtil/hcoio_read_std_mod.F90:
(1) In routine NC_READ_VAR_CORE:
! Read units attribute. If unit attribute does not exist, return
! empty string (dimensionless vertical coordinates do not require
! a units attribute).
a_name = "units"
hasVar = Ncdoes_Attr_Exist ( fId, TRIM(v_name), TRIM(a_name), a_type )
IF ( .NOT. hasVar ) THEN
varUnit =
ELSE
CALL NcGet_Var_Attributes( fID, TRIM(v_name), &
TRIM(a_name), varUnit )
! Check if the last character of VarUnit is the ASCII null character
! ("\0", ASCII value = 0), which is used to denote the end of a string.
! The ASCII null character may be introduced if the netCDF file was
! written using a language other than Fortran. The compiler might
! interpret the null character as part of the string instead of as
! an empty space. If the null space is there, then replace it with
! a Fortran empty string value (''). (bmy, 7/17/18)
I = LEN_TRIM( VarUnit )
IF ( ICHAR( VarUnit(I:I) ) == 0 ) THEN
VarUnit(I:I) = ''
ENDIF
ENDIF
(2) And also in routine NC_READ_ARR:
! ----------------------------
! Read optional arguments
! ----------------------------
! Read units
IF ( PRESENT(VarUnit) )THEN
a_name = "units"
CALL NcGet_Var_Attributes(fId,TRIM(v_name),TRIM(a_name),a_val)
VarUnit = TRIM(a_val)
! Check if the last character of VarUnit is the ASCII null character
! ("\0", ASCII value = 0), which is used to denote the end of a string.
! The ASCII null character may be introduced if the netCDF file was
! written using a language other than Fortran. The compiler might
! interpret the null character as part of the string instead of as
! an empty space. If the null space is there, then replace it with
! a Fortran empty string value (''). (bmy, 7/17/18)
I = LEN_TRIM( VarUnit )
IF ( ICHAR( VarUnit(I:I) ) == 0 ) THEN
VarUnit(I:I) = ''
ENDIF
ENDIF
Adding debug output verifies that these fixes indeed strip out the unwanted NULL character:
- Reading from existing stream: .../HEMCO/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc #### NC_READ_ARR VarUnit before |g/m2/yr^@| #### NC_READ_ARR last char before |^@| #### NC_READ_ARR last char after | | #### NC_READ_ARR VarUnit after |g/m2/yr|
This issue only affects GEOS-Chem "Classic" simulations. For GCHP simulations, HEMCO relies on the MAPL "ExtData" I/O component, which ignores all input unit strings.
--Bob Yantosca (talk) 15:15, 17 July 2018 (UTC)
Bug fix for HEMCO soil NOx error with ifort 17
This fix was included in GEOS-Chem 12.0.0.
Jenny Fisher wrote:
I am having a really bizarre HEMCO error running GEOS-Chem v11-02f (with modifications to use the Australian nested grid, but nothing that would affect HEMCO), tropchem. The following is appearing in my HEMCO.log file:
Use soil NOx emissions (extension module) - NOx species : | ?(v;+^@^@^B^@^@^@^G^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ -1 - NOx scale factor : 1.000000 - NOx scale field : none - Use fertilizer NOx : T - Fertilizer scale factor: 6.800000090152025E-003
So soil NOx is not being defined properly. I traced this through the HEMCO code and discovered that the issue is arising in HCO_GetExtHcoID in HEMCO/Core/hco_state_mod.F90. I’ve printed virtually everything here, and all looks good until this loop:
! Extract species information DO I = 1, nSpc SpcNames(I) = TRIM(SUBSTR(I)) HcoIDs(I) = HCO_GetHcoID( TRIM(SpcNames(I)), HcoState ) ENDDO
If I print SUBSTR(I) in that loop, all looks good – it prints NO as expected. However, if I print SpcNames(I) it comes up blank. I even tried as a test manually assigning SpcNames(1) to be NO by adding the following before the HcoIDs line:</tt>
IF (ExtNr == 104) print*,'soil nox' IF (ExtNr == 104) SpcNames(1) = 'NO' print*,trim(spcnames(I)) call flush(6)
My "soil nox" message gets printed, but SpcNames(I) still prints an empty string.Note that none of the other species being read by HEMCO have any problem. I am compiling with DEBUG=yes BOUNDS=yes TRACEBACK=yes, and have tried two different versions of the ifort compiler (17.0.1 and 17.0.4) – all to no avail.
Do you have any idea what is going on here or how to fix it?? For now I am putting in a kludge to manually set Inst%IDTNO = 1 in hcox_soilnox_mod.F90 – but this is clearly not an appropriate solution.
--Bob Yantosca (talk) 15:04, 26 June 2018 (UTC)
Bob Yantosca replied:
We have rewritten the offending DO loop in hco_state_mod.F90 to hopefully be more friendly to compiler versions that exhibit some quirkiness when it comes to parsing strings:
! ! !LOCAL VARIABLES: ! INTEGER :: I, AS CHARACTER(LEN=255) :: MSG, LOC CHARACTER(LEN=2047) :: SpcStr, SUBSTR(255) CHARACTER(LEN=2047) :: TmpStr . . . ! Extract species information DO I = 1, nSpc !--------------------------------------------------------------------- ! Prior to 6/26/18: ! This code can cause issues with certain compiler versions, ! so let's rewrite it slightly (bmy, 6/26/18) !SpcNames(I) = SUBSTR(I) !HcoIDs(I) = HCO_GetHcoID( TRIM(SpcNames(I)), HcoState ) !--------------------------------------------------------------------- ! Rewrite this code to be a little more friendly to compilers with ! strict string-parsing syntax, such as ifort 17. ALSO NOTE: We don't ! necessarily have to do the TRIM in the call to HCO_GetHcoID, because ! the species name will be TRIMmed internally. We have noticed that ! some compilers don't like taking the TRIM of an array element as ! an argument to a function call. (bmy, 6/26/18) TmpStr = SubStr(I) SpcNames(I) = TRIM( TmpStr ) HcoIDs(I) = HCO_GetHcoID( TmpStr, HcoState ) ENDDO
--Bob Yantosca (talk) 13:52, 27 June 2018 (UTC)
Avoid segmentation fault in DustGinoux extension
This update was included in v11-02c and approved on 21 Sep 2017.
Paolo Tuccella (L'Aquila) wrote:
I have an issue running GEOS-Chem V11-01. When I run the model (merra2_2x25_soa configuration) with the DustGinoux dust emission scheme turned on in HEMCO_Config.rc, GEOS-Chem crashes with this message error:
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
The error is occuring at line 395 of HEMCO/Extensions/hcox_dustginoux_mod.F90, where the emissions flux of alkalinity dust is updated. So, turning on DustAlk in HEMCO_Config.rc, the model run without errors.
Bob Yantosca replied:
I’ve figured out the error. So the DustGinoux extension is usually turned off by default in the standard simulations, which is why we didn’t find this earlier. In the module the HEMCO/Extensions/hcox_dustginoux_mod.F, an error trap is lacking. So we need to add the code in GREEN to the existing IF statement at line 395:
IF ( ExtNrAlk > 0 ) THEN IF ( HcoIDsAlk(N) > 0 ) THEN ! Add flux to emission array CALL HCO_EmisAdd( am_I_Root, HcoState, FLUX_Alk(:,:,N), & HcoIDsAlk(N), RC, ExtNr=ExtNrAlk ) IF ( RC /= HCO_SUCCESS ) THEN WRITE(MSG,*) 'HCO_EmisAdd error: dust alkalinity bin ', N CALL HCO_ERROR(HcoState%Config%Err,MSG, RC ) RETURN ENDIF ENDIF ENDIF
If the DustAlk extension is turned off, then the HcoIDsAlk array will be unallocated. Therefore, to avoid a segmentation fault, we need to avoid executing this block of code whenever DustAlk is turned off.
--Bob Yantosca (talk) 20:38, 7 July 2017 (UTC)
Now use YYYYMMDDhhmm format for time stamp values
This update was included in v11-02c and approved on 21 Sep 2017.
This issue affects only GEOS-Chem "Classic" simulations (i.e. running GEOS-Chem without the ESMF and MPI libraries).
Andy Jacobson (NOAA) wrote:
Christoph Keller recently helped me discover a limitation of the netCDF routines used in HEMCO (i.e. for GEOS-Chem "Classic" simulations only), namely that the time coordinate variables are assumed to be integer types. In common situations such as the CarbonTracker netCDF files, the time is encoded as a float with units of "days since". This is silently misinterpreted by HEMCO because of limitations of the underlying netCDF routines. This results in incorrect time slices being chosen for HEMCO emissions, and
Bob Yantosca replied:
Long story short: The HEMCO module HEMCO/Core/hcoio_read_std_mod.F90 only assumed that the time stamps that would be read from netCDF files would only be in YYYYMMDDhh format. As Andy pointed out, it was picking out incorrect time slices for data with YYYYMMDDhhmm timestamps (such as the NOAA Carbon Tracker data).I’ve gone through and made a bunch of changes in the followng modules:
Variables that hold time stamps in hcoio_read_std_mod.F90 are now declared REAL*8, so that they will be large enough to hold a value in YYYYMMDDhhmm format (e.g. floating point value of order 1012). I’ve also adjusted the formulas where we extract e.g. YYYY, MM, DD etc. info from the YYYYMMDDhhmm timestamp accordingly. Also the function NC_READ_TIME_YYYYMMDDhh in ncdf_mod.F90 has now been renamed to NC_READ_TIME_YYYYMMDDhhmm to reflect the fact that it will return timestamps in the YYYYMMDDhhmm format.
- NcdfUtil/ncdf_mod.F90
- HEMCO/Core/hcoio_read_std_mod.F90
--Bob Yantosca (talk) 14:34, 12 April 2017 (UTC)
Read default DEP_RESERVOIR fields from file when not found in HEMCO restart file
This fix was included in v11-02a and approved on 12 May 2017.
Brian Boys wrote:
The HEMCO_Config file that ships out with GC has the date tolerance throughout set as exact (E) for the HEMCO_RESTART file inputs, and so if the HEMCO_RESTART file that is fed in at the beginning of the run isn't exactly the correct hour, the file is not read and default values are used. The concerning part is that one of the restart variables, DEP_RESERVOIR, used by the soilNOx extension has a long e-folding lifetime (4-6 months I think), and the default value(s?) that are used in the absence of a HEMCO_restart file are quite low (I estimate more than a factor of 3 over the E. U.S.). Would it make sense to change the date tolerance to 'C' for the soilNOx extension part of the file that is shipped from Harvard? The seasonal variability appears to be much less than a factor of 3.
The issue with the above solution is that it assumes a HEMCO restart file is included in the run directory. In fact, in GEOS-Chem v11-01 run directories created by the GEOS-Chem unit tester (except those created from 4x5_standard) do not include a HEMCO restart file because it is assumed that it's better to initialize a simulation with the default value than to use a HEMCO restart file for the wrong date.
Christoph Keller wrote:
We could add the default DEP_RESERVOIR field to the HEMCO configuration file and call it DEP_RESERVOIR_DEFAULT:
104 DEP_RESERVOIR_DEFAULT DepReservoirDefault.nc DEP_RESERVOIR 2013/7/1/0 C xy kg/m3 NO – 1 1
And then read this file first and use it as default field when obtaining the soil NOx restart data (hcox_soilnox_run in hcox_soilnox_mod.F90):
REAL(hp), TARGET :: Tmp2D(HcoState%NX, HcoState%NY) REAL(sp) :: Def2D(HcoState%NX, HcoState%NY) ... ! DEP_RESERVOIR. Read in kg NO/m3 CALL HCO_EvalFld( am_I_Root, HcoState, 'DEP_RESERVOIR_DEFAULT', Tmp2D, RC, FOUND=FOUND ) IF ( FOUND ) THEN Def2D = Tmp2D ELSE Def2D = 1.0e-4_sp ENDIF CALL HCO_RestartGet( am_I_Root, HcoState, 'DEP_RESERVOIR', & Inst%DEP_RESERVOIR, RC, Def2D=Def2D )
and then delete the IF ( .NOT. FOUND )
statement right afterwards.
For DepReservoirDefault.nc we can simply extract DEP_RESERVOIR from the HEMCO restart file used for the benchmark simulation (using cdo selvar).
A file DepReservoirDefault.nc can now be found at
http://ftp.as.harvard.edu/gcgrid/data/ExtData/HEMCO/SOILNOX/v2014-07/DepReservoirDefault.nc
--Melissa Sulprizio (talk) 13:58, 28 March 2017 (UTC)
Make anthropogenic emissions diagnostics 3D
These fixes were included in v11-02a and approved on 12 May 2017.
Jenny Fisher wrote:
Some of the anthropogenic emissions are now 3D (mine, but also NEI2011) - but even if I specify in input.geos that I want to save e.g. ND36 (anthro emissions) over N levels where N>1, the trac_avg file that is created only has surface level ND36. I did some digging, and I assume that is because when you call Diagn_Create() for ND36 in hcoi_gc_diagn_mod.F90, you do so with SpaceDim = 2. Is that correct? Is this perhaps a behaviour that should be changed in future as NEI11 is standard in v11-01?
I also assume the hard-coding in the routine mentioned above is the reason I can’t specify "extra" tracers to be included in ND36 – for example, NO2 (which again shows up with anthro emissions in my files and also in NEI11). Should we perhaps broaden the list of allowable ND36 tracers to match NEI11 species?
--Melissa Sulprizio (talk) 19:17, 22 March 2017 (UTC)
HEMCO diagnostic and restart files now have an unlimited time dimension
This update was included in v11-02a and approved on 12 May 2017.
Andy Jacobson (NOAA) wrote:
It would be convenient and COARDS/CF-compliant to convert the time dimension to an "unlimited" or "record" dimension in the restart files. That way, one can use NCO tools like ncrcat to concatenate them, and thereby have a file with the time evolution of the species. It's trivial to do this, requiring only 2 small changes in HEMCO/Core/hcoio_write_std_mod.F90:
(1) Add this line after the list of USE statements at the top of routine HCOIO_WRITE_STD:
# include "netcdf.inc"
(2) Substitute NF_UNLIMITED for nTime in the calls to NC_CREATE. Comment out the line in RED and add the line in GREEN:
! Create output file ! Pass CREATE_NC4 to make file format netCDF-4 (mps, 3/3/16 ! Now create netCDF file with time dimension as UNLIMITED (bmy, 3/8/17) IF ( NoLevDim ) THEN !CALL NC_CREATE( ncFile, title, nLon, nLat, -1, nTime, & CALL NC_CREATE( ncFile, title, nLon, nLat, -1, NF_UNLIMITED, & fId, lonId, latId, levId, timeId, VarCt, & CREATE_NC4=.TRUE. ) ELSE !CALL NC_CREATE( ncFile, title, nLon, nLat, nLev, nTime, & CALL NC_CREATE( ncFile, title, nLon, nLat, nLev, NF_UNLIMITED, & fId, lonId, latId, levId, timeId, VarCt, & CREATE_NC4=.TRUE. ) ENDIF
Note thatnTime
was hard-coded to 1 already in this routine. The#include
is there only to get the symbolNF_UNLIMITED
.It looks like this routine also writes the HEMCO_diagnostics.*.nc files, and it makes sense to have time as the record dimension there, too.
I've tested this in the v11-01 public release w/ patches, and it works fine.
--Bob Yantosca (talk) 22:15, 8 March 2017 (UTC)
Fixed bug in computation of local time in HCO_GetSuncos
This fix was included in v11-02a and approved on 12 May 2017.
Seb Eastham wrote:
I just came across an interesting glitch with HEMCO which affects any extension using the HEMCO built-in SUNCOS calculation, including MEGAN. In the routine HCO_GetSUNCOS in HEMCO/Core/hco_geotools_mod.F90, HEMCO uses the local time to calculate the solar zenith angle SUNCOS. However, this has two issues:It would be better to remove the call to HcoClock_GetLocal in routine HEMCO_GetSUNCOS. This fix involves deactivating the code in RED and activating the code in GREEN as shown below:
- If no timezones are defined, then SUNCOS is artificially forced into 15 degree bands
- If timezones ARE defined, the SUNCOS becomes defined by political boundaries (see plot below, generated by pulling values directly from GEOS-Chem "Classic" with the new Voronoi timezones):
!----------------------------------------------------------------------------- ! Prior to 3/2/17: ! Seb Eastham suggested to comment out the call to HcoClock_GetLocal. If ! the Voronoi or classic timezones are used, this will compute the timezones ! on political boundaries and not strictly on longitude. This will cause funny ! results. Replace this with a strict longitudinal local time. (bmy, 3/27/17) ! ! Local time [hours] at box (I,J) at the midpt of the chem timestep ! CALL HcoClock_GetLocal ( HcoState, I, J, cH=LHR, RC=RC ) ! ! IF ( RC /= HCO_SUCCESS ) THEN ! ERR = .TRUE. ! EXIT ! ENDIF !----------------------------------------------------------------------------- ! Prior to 3/2/17: ! Seb Eastham says that HOUR (in the new formula below) already contains DT. ! so we need to comment this out and just use HOUR + LONGITUDE/15. ! (bmy, 3/2/17) ! ! Adjust for time shift ! LHR = LHR + DT !---------------------------------------------------------------------------- ! Compute local time as UTC + longitude/15 (bmy, 3/2/17) LHR = HOUR + ( HcoState%Grid%XMid%Val(I,J) / 15.0_hp ) IF ( LHR < 0.0_hp ) LHR = LHR + 24.0_hp IF ( LHR >= 24.0_hp ) LHR = LHR - 24.0_hp
The idea is to change the calculation so it’s purely a function of physical latitude, not timezone. I've checked with Christoph (cc'd), and this is a genuine bug. It'll be fixed in the next version of HEMCO but I thought it would be worth putting a patch into GC now, given that the code change is minimal and the impact could be significant.
--Bob Yantosca (talk) 17:20, 2 March 2017 (UTC)
Fixed bug in time interpolation in ncdf_mod.F90
This update was included in GEOS-Chem v11-01 public release
Seb Eastham wrote:
While doing final checks on base emissions sets in GCHP, I noticed that the RCP emissions seemed to be about 2x greater in GCHP than in GEOS-Chem "Classic". On further investigation, this appears to be because of a bug in HEMCO; when the interpolation option is set to I, it looks like the interpolation might be using zeros for one of the slices, resulting in 50% of the expect emissions. I tested this by changing the RCP 4.5 interpolation setting from I to C for NOx, and running the year 2013. The two time slices between which interpolation is conducted are 2010 and 2020, between which there is a ~5% decrease in global NOx emissions (based on the original input file); however, when using the option I, I found that the NOx emissions were about 50% lower than when using the option C. Is this a known bug, or did I miss something?
Christoph Keller replied:
There was a bug in the netCDF reading routine that would overwrite the first time slice with the second one, and the interpolation then occurred between the second time slice (the right time window) and an array full of zeros. So no wonder that the results looked wrong. I added a fix for this to NcdfUtil/ncdf_mod.F90.
--Bob Yantosca (talk) 17:45, 10 January 2017 (UTC)
Ocean grid boxes now use the timezone of the nearest land mass for computing emissions
This update was included in GEOS-Chem v11-01 public release
Seb Eastham wrote:
Here are the HEMCO timezones used by default in GEOS-Chem v10-01. These are read from the netCDF file HEMCO/TIMEZONES/v2015-02/timezones_1x1.nc.Note that the timezones of the ocean cells in the above file are not computed robustly. As Christoph Keller points out:
The current timezones mask file does not work properly in grid cells with large ocean overlap. The problem is that the ocean values are netCDF _FillValues that become zero within HEMCO. As a quick fix I updated the timezones file [to HEMCO/TIMEZONES/v2015-02/timezones_1x1.edit.nc in v11-01j] to use a value of –5000 in all ocean cells, which then forces HEMCO to determine the time zone based on longitude in those cells.Please find a "nearest-cell" version of the HEMCO "timezones" file (HEMCO/TIMEZONES/v2015-02/timezones_voronoi_1x1.nc). I'd like to suggest that this replace the default HEMCO timezones file shown above. The new ("Voronoi") approach sets the timezone in every ocean cell to match that of the closest valid land cell by great circle distance. Without the update, some coastal areas will use the wrong timezone, resulting in incorrect diurnal scalings. Here is a plot of the Voronoi timezones:
The Voronoi timezones will be made the default HEMCO timezones in the v11-01 public release. In the meantime, GEOS-Chem users may select this option by updating this entry in the HEMCO_Config.rc file. Change the text in RED
* TIMEZONES $ROOT/TIMEZONES/v2015-02/timezones_1x1.edit.nc UTC_OFFSET 2000/1/1/0 C xy count * - 1 1
to the text in GREEN:
* TIMEZONES $ROOT/TIMEZONES/v2015-02/timezones_voronoi_1x1.nc UTC_OFFSET 2000/1/1/0 C xy count * - 1 1
--Bob Yantosca (talk) 19:00, 4 January 2017 (UTC)
Fix bug preventing HEMCO from writing restart files more than once per run
NOTE: This update was included in v11-01g (approved 28 Sep 2016).
Christoph Keller wrote:
- There is a merge error in the code that shortcuts the diagnostics writing after the first call. This is the current code in HEMCO/Core/hcoio_diagn_mod.F90:
! Only write diagnostics if this is the first Diagn_Get call for
! this container and time step.
IF ( ThisDiagn%nnGetCalls > 1 ) CYCLE
! NOTE: This may have been left over by a Git merge (bmy, 3/5/15)
! this container and time step.
IF ( PRESENT( OnlyIfFirst ) ) THEN
IF ( OnlyIfFirst .AND. ThisDiagn%nnGetCalls > 1 ) CYCLE
ENDIF
- Please remove/comment the highlighted line and recompile.
--Melissa Sulprizio (talk) 16:30, 30 August 2016 (UTC)
Fix missing pointer in call to HCO_CalcVertGrid
NOTE: This update was included in v11-01g (approved 28 Sep 2016).
We have found and fixed an error in routine GridEdge_Set
(located in module GeosCore/hcoi_gc_main_mod.F
), where we have this code:
!
! LOCAL VARIABLES:
!
REAL(hp), POINTER :: PSFC (:,: )
REAL(hp), POINTER :: ZSFC (:,: )
REAL(hp), POINTER :: TK (:,:,:)
REAL(hp), POINTER :: BXHEIGHT(:,:,:)
REAL(hp), POINTER :: PEDGE (:,:,:)
!=================================================================
! GridEdge_Set begins here
!=================================================================
! Pointers to fields
ZSFC => State_Met%PHIS
BXHEIGHT => State_Met%BXHEIGHT
TK => State_Met%T
! surface pressure in Pa
ALLOCATE(PSFC(IIPAR,JJPAR))
PSFC(:,:) = State_Met%PEDGE(:,:,1) * 100.0_hp
! Calculate missing quantities
CALL HCO_CalcVertGrid( am_I_Root, HcoState, PSFC, &
ZSFC, TK, BXHEIGHT, PEDGE, RC )
! Nullify local pointers
ZSFC => NULL()
BXHEIGHT => NULL()
TK => NULL()
IF ( ASSOCIATED(PSFC) ) DEALLOCATE(PSFC)
PSFC => NULL()
! Return w/ success
RC = HCO_SUCCESS
As you can see, PEDGE
is never defined, but is nevertheless passed to Hco_CalcVertGrid
, which is contained in module HEMCO/Core/hco_geotools_mod.F90
. This was producing the following error message in the HEMCO log file:
-------------------------------------------------------------------------------
Details about vertical grid calculations (only shown on first time step):
1. Input data availability:
- Temperature field TK obtained from model interface (min,max): 179.394287109375 312.010620117188
- Surface pressure PSFC [Pa] obtained from model interface (min, max): 54482.8735351562 103645.007324219
- Surface geopotential height ZSFC [m] obtained from model interface (min, max): -17.0556747924240 5115.05386332234
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
HEMCO ERROR: Wrong PEDGE array size: 255 -783173889 1988815368; should be:
72 46 48
ERROR LOCATION: HCO_CalcVertGrid (hco_geotools_mod.F90)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Because routine GridEdge_Set
lacked an error trap to test if Hco_CalcVertGrid
exited abnormally, there was no way to stop program execution at this point.
To fix these issues, we have rewritten routine GridEdge_Set
as follows. Our new code is displayed in GREEN.
! ! LOCAL VARIABLES: ! ! Strings CHARACTER(LEN=80) :: MSG, LOC ! Pointers REAL(hp), POINTER :: BXHEIGHT(:,:,:) ! Grid box height [m ] REAL(hp), POINTER :: PEDGE (:,:,:) ! Pressure @ lvl edges [Pa] REAL(hp), POINTER :: PSFC (:,: ) ! Surface pressure [Pa] REAL(hp), POINTER :: TK (:,:,:) ! Temperature [K ] REAL(hp), POINTER :: ZSFC (:,: ) ! Surface geopotential [m ] !======================================================================= ! GridEdge_Set begins here !======================================================================= ! Assume success RC = HCO_SUCCESS ! Allocate the PEDGE array, which holds level edge pressures [Pa] ! NOTE: Hco_CalcVertGrid expects pointer-based arguments, so we must ! make PEDGE be a pointer and allocate/deallocate it on each call. ALLOCATE( PEDGE( IIPAR, JJPAR, LLPAR+1 ), STAT=RC ) IF ( RC /= HCO_SUCCESS ) THEN MSG = 'ERROR allocating the PEDGE pointer-based array!' LOC = 'GridEdge_Set (GeosCore/hcoi_gc_main_mod.F90)' CALL ERROR_STOP( MSG, LOC ) ENDIF ! Edge and surface pressures [Pa] PEDGE = State_Met%PEDGE * 100.0_hp ! Convert hPa -> Pa PSFC => PEDGE(:,:,1) ! Point to other fields of State_Met ZSFC => State_Met%PHIS BXHEIGHT => State_Met%BXHEIGHT TK => State_Met%T ! Calculate missing quantities CALL HCO_CalcVertGrid( am_I_Root, HcoState, PSFC, & ZSFC, TK, BXHEIGHT, & PEDGE, RC ) ! Stop with an error if the vertical grid was not computed properly IF ( RC /= HCO_SUCCESS ) THEN MSG = 'ERROR returning from HCO_CalcVertGrid!' LOC = 'GridEdge_Set (GeosCore/hcoi_gc_main_mod.F90)' CALL ERROR_STOP( MSG, LOC ) ENDIF ! Nullify local pointers ZSFC => NULL() BXHEIGHT => NULL() TK => NULL() PSFC => NULL() ! Deallocate and nullify PEDGE IF ( ASSOCIATED( PEDGE ) ) DEALLOCATE( PEDGE ) PEDGE => NULL() ! Return w/ success RC = HCO_SUCCESS
Therefore we now:
- Allocate an array to store pressure edge values (
PEDGE
), converted from hPa to Pa, and - Add error traps to stop execution if
PEDGE
cannot be allocated, orHco_CalcVertGrid
exits abnormally.
Bob Yantosca validated these changes with a unit test on 06 Jun 2016. These updates will be included in GEOS-Chem v11-01g. This fix will also be brought into HEMCO v2.0.
--Bob Yantosca (talk) 14:44, 7 June 2016 (UTC)
Enable emissions in the stratosphere for specialty simulations
This update was validated with 1-month benchmark simulation v11-01f and 1-year benchmark simulation v11-01f-geosfp-Run0. This version was approved on 16 Apr 2016.
Emissions in the stratosphere were disabled in a HEMCO June 2015 update to prevent build-up of stratospheric concentrations due to aircraft emissions (mainly VOCs). The HEMCO update was merged into GEOS-Chem v11-01e. This resulted in very low statospheric Be7 sources to the troposphere and imbalanced Be7 trop+strat sources and sinks in the v11-01f 1-year RnPbBe benchmark. Christoph Keller recommended maintaining disabled emissions in the stratosphere for at least the full-chemistry simulation.
To correct this bug, we now only restrict emissions in the stratosphere if performing a full-chemistry simulation and UCX is turned off. Emissions in the stratosphere are enabled for all specialty simulations. This fix was added to v11-01f prior to final benchmark approval.
--Lizzie Lundgren (talk) 15:15, 22 March 2016 (UTC)
--Bob Yantosca (talk) 15:32, 30 March 2016 (UTC)
Fix for segmentation fault when emissions are turned off
In GEOS-Chem v10-01g, we fixed a bug in HEMCO that caused simulations to die with a segmentation fault when emissions were turned off in the input.geos file.
Bob Yantosca wrote:
- If you have these settings in input.geos:
%%% EMISSIONS MENU %%% : Turn on emissions? : F Emiss timestep (min) : 60 HEMCO Input file : HEMCO_Config.rc Etc..
- Then you get a seg fault on the RED line of code in routine GetHcoVal (in module file GeosCore/hcoi_gc_main_mod.F90):
!=================================================================
! GetHcoVal begins here
!=================================================================
! Init
FOUND = .FALSE.
IF ( PRESENT(Emis) ) Emis = 0.0_hp
IF ( PRESENT(Dep ) ) Dep = 0.0_hp
! Define tracer ID to be used. This is only different from the
! passed tracer ID if some species mapping occurs at this level.
tID = TrcID
! HEMCO species ID corresponding to this GEOS-Chem tracer
IF ( tID > 0 ) HcoID = M2HID(tID)%ID ID
- The issue is that if you turn off HEMCO, then the M2HID pointer never gets initialized. Turning off emissions in will also give us this error in the strat chem module:
HEMCO ERROR: Container not found: GEOSCCM_Br2_DAY ERROR LOCATION: HCO_GetPtr_3D (hco_emislist_mod.F90) =============================================================================== GEOS-CHEM ERROR: Cannot get pointer from HEMCO! Stratospheric Bry data is expected to be listed in the HEMCO configuration file and the GMI_StratChem extension must be enabled. This error occured when trying to get field GEOSCCM_Br2_DAY STOP at Set_BryPointers (start_chem_mod.F90) =============================================================================== - CLEANUP: deallocating arrays now...
- Which is probably to be expected now that HEMCO handles the strat Bry emissions.
Christoph Keller wrote:
- I’ve updated my code so that HEMCO can be used with LEMIS = F. The changes are:
- 1. In main.F, the HEMCO routines are now always called, even if LEMIS is set to FALSE. This ensures that HEMCO can still be used to read non-emission data such as the stratospheric Bry fields.
- 2. In hcoi_gc_main_mod.F90, there are now two checks for the LEMIS flag: If LEMIS is disabled, no HEMCO species are defined in subroutine Get_nHcoSpc, and as a result HEMCO will not calculate any emissions. Similarly, all HEMCO extensions will be deactivated by forcing all extension numbers to invalid values (—> CALL SetExtNr(… ).
- 3. Because all extensions are now automatically ignored when LEMIS is set to FALSE, I recommend moving the Strat Bry fields from the extension section into the ‘regular’ base emissions section. This way, these fields are always considered. So you'll need to add the following lines to the end of the BASE EMISSIONS section in the HEMCO configuration file:
# --- Stratospheric Bry data --- 0 GEOSCCM_Br_DAY $ROOT/HEMCO/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.day.nc BR 2007/$MM/1/0 C xyz pptv * - 60 1 0 GEOSCCM_Br2_DAY $ROOT/HEMCO/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.day.nc BRCL 2007/$MM/1/0 C xyz pptv * - 60 1 0 GEOSCCM_BrO_DAY $ROOT/HEMCO/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.day.nc BRO 2007/$MM/1/0 C xyz pptv * - 60 1 0 GEOSCCM_BrNO3_DAY $ROOT/HEMCO/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.day.nc BRONO2 2007/$MM/1/0 C xyz pptv * - 60 1 0 GEOSCCM_HBr_DAY $ROOT/HEMCO/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.day.nc HBR 2007/$MM/1/0 C xyz pptv * - 60 1 0 GEOSCCM_HOBr_DAY $ROOT/HEMCO/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.day.nc HOBR 2007/$MM/1/0 C xyz pptv * - 60 1 0 GEOSCCM_Br_NIGHT $ROOT/HEMCO/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.night.nc BR 2007/$MM/1/0 C xyz pptv * - 60 1 0 GEOSCCM_Br2_NIGHT $ROOT/HEMCO/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.night.nc BRCL 2007/$MM/1/0 C xyz pptv * - 60 1 0 GEOSCCM_BrO_NIGHT $ROOT/HEMCO/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.night.nc BRO 2007/$MM/1/0 C xyz pptv * - 60 1 0 GEOSCCM_BrNO3_NIGHT $ROOT/HEMCO/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.night.nc BRONO2 2007/$MM/1/0 C xyz pptv * - 60 1 0 GEOSCCM_HBr_NIGHT $ROOT/HEMCO/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.night.nc HBR 2007/$MM/1/0 C xyz pptv * - 60 1 0 GEOSCCM_HOBr_NIGHT $ROOT/HEMCO/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.night.nc HOBR 2007/$MM/1/0 C xyz pptv * - 60 1 END SECTION BASE EMISSIONS
- You should also remove the corresponding entries in the extensions section, including the extension toggle (GMI_StratChem) itself. If you prefer having the strat Bry fields listed in the extensions section, we can update the SetExtNr routine so that it doesn’t reset the extension number associated with GMI_StratChem. Just let me know if you’d prefer that solution.
- 4. With LEMIS set to FALSE, my code currently stops with an error because some of the emission diagnostics don’t work any more. I assume it’s expected that user disable the corresponding diagnostics in input.geos (which I didn’t), so I didn’t bother to account for that (e.g. in diag3.F, etc.).
--Bob Y. 14:08, 12 January 2015 (EST)
Now treat OCPI, OCPO, BCPI, and BCPO separately in HEMCO
The original implementation of HEMCO in GEOS-Chem treated carbon aerosols as black carbon (BC) and organic carbon (OC). The speciation into hydrophillic and hydrophobic carbon was done when passing HEMCO emissions to GEOS-Chem. Plots from 1-month benchmark v10-01e revealed large differences in OCPO and OCPI. To resolve these differences, we revert to splitting OC and BC into OCPI, OCPO, BCPI, and BCPO.
Comments from 1-month benchmark v10-01e:
Jeff Pierce wrote:
- The HEMCO emissions should be essentially the same as the previous emissions, right? I'm curious as to why the OCPO (hydrophobic OC aerosol from combustion sources) increased so much (see the ratios). There is more than a doubling in many high-OCPO regions.
- Even odder to me, OCPO has a fixed "aging" time to OCPI (hydrophilic), but the OCPI trends don't match up (as they should if transport/deposition/aging are held fixed between the two simulations). In some ways, it looks like the aging changed, but I think it's supposed to be fixed at 1.2 days.
Christoph Keller responded:
- HEMCO simply includes OC and BC, and the partitioning into hydrophilic and hydrophobic parts is done outside of HEMCO. This way, the fractions (0.5/0.5 for OC and 0.8/0.2 for BC) only need to be defined and applied at one place in the code. In v10-01d, biogenic emissions (and also AEIC aircraft emissions) were just emitted as OCPI, whereas those now become separated into OCPI and OCPO. This explains the increase in OCPO and the simultaneous decrease in OCPI.
- If there are concerns about this procedure, we can change the code so that HEMCO explicitly includes OCPI, OCPO, BCPI, and BCPO.
Christoph Keller wrote:
- The old code included a biogenic contribution, calculated from the MEGAN terpene emissions (assuming an OC yield of 0.1). These emissions were attributed to OCPI only. In the new version, they are split into OCPI and OCPO. That’s just the way it's implemented. If there is a good (scientific) reason to change it, it can be done quite easily.
Jeff Pierce responded:
- Right, this 0.1*monoterpenes is to represent biogenic SOA. It should be considered all hydrophilic organic carbon since SOA has a hygroscopicity (kappa) of around 0.1-0.2 while the hydrophobic OC has kappas much closer to zero. This should be reverted back to being all OCIL as it was before.
--Melissa Sulprizio 13:49, 20 November 2014 (EST)