Last update: 13 Oct 2025 *** PLEASE READ THIS BEFORE RUNNING SMOKE. *** This package contains files relevant to the 2022 v2 emissions modeling platform. It includes scripts and executables for processing emissions sectors through SMOKE for the 2022he case. This package includes precompiled SMOKE 5.2.1 (labeled as "5.2" in the directory structure), update September 2025. Due to an architecture change on EPA systems, SMOKE executables are now compiled with the AMD AOCC compiler, as opposed to the Intel "ifx" compiler in older platforms. == 1. Introduction == These packages contain scripts, inventories, and ancillary files related to EPA's 2022 v2 platform for air quality modeling. This package includes inputs and scripts for modeling year 2022. The basis of this platform is the 2020 National Emissions Inventory (2020NEI). The emissions files are here: https://gaftp.epa.gov/air/emismod/2022/v2/2022emissions/ The ancillary data are here: https://gaftp.epa.gov/air/emismod/2022/v2/ancillary_data/ CMAQ model-ready emissions generated using these packages with SMOKE v5.2.1 should be identical to those used in EPA's 2022 v2 platform, with some exceptions as noted in this README. There may be additional emissions differences resulting from differences in the Linux operating system, hardware platform, and other system-specific differences. The data files are divided into several directories: - 2022emissions/ contains emission inventories for the year 2022, including national CEMS emissions, nonroad inventories and onroad activity data, and point and nonpoint inventories. - ancillary_inputs contains general ancillary files (ge_dat), including those related to speciation, spatial allocation (gridding), temporalization, and gridded ocean chlorine emissions files, which are included in the final model-ready emissions. - smoke_2022_platform_core_26sep2025.zip contains scripts to run the core SMOKE programs along with precompiled SMOKE executables from SMOKE version 5.2.1. - spatial_surrogates contains 12km spatial surrogates for the US, Canada, and Mexico. Section 4 of this README includes information about the modeling sectors used in the platform. Section 5 of this README includes information about the inventories provided. Section 6 of this README includes information about the ancillary (non-inventory) files included. == 2. Requirements for processing emissions for air quality modeling == If you are only reviewing inventories and not developing emissions for air quality modeling, you do not need to install SMOKE or to follow the instructions below. Instead, unzip the files with the data of interest and examine those and the corresponding reports that are provided. If you plan to develop emissions for air quality modeling, SMOKE v5.2.1 is REQUIRED to process this case. SMOKE v5.2.1 includes new features and bug fixes required for the platform, particularly for sectors with daily and hourly processing (e.g. livestock, fires, ptegu, CMV). The run scripts included in this package use C-shell, referenced at the top of all scripts as: "#/bin/tcsh". Older versions of these scripts may reference /bin/csh instead. If so, and if /bin/csh is not available on your system while /bin/tcsh is, you may need to either edit all run scripts to say /bin/tcsh at the top, or create a softlink in which /bin/csh -> /bin/tcsh. Python: We also recommend (if not require) python version 3.0 or later, along with select python libraries. Many of the helper scripts included in this package use python. The python scripts within this package reference '#!/usr/bin/env python'; you may need to change this on your computing platform. All of the scripts have been updated for Python 3.5 to match the configuration on EPA's cluster. You should still be able to use Python 2.7 if you install the "future" modules. In most cases that can be done by running: sudo pip install future == 3. Installation of data files and scripts == This readme covers the installation of the SMOKE inventories, scripts, and ancillary files used for the 2022 v2 platform. Choose an install directory on your system; we will refer to this directory as "INSTALL_DIR". To review/reproduce emissions for all sectors, unzip all the .zip files into INSTALL_DIR. The packages have subdirectories embedded within them, so it is important that all files be unpacked in the same place in order for the scripts know where to find the inputs. If you are only interested in reproducing or examining emissions for specific sectors, you may download and unzip only the data for those sectors from the inventory directories, but for SMOKE processing you should also include the files in the ancillary_inputs and spatial_surrogates directories, and also the contents of the SMOKE core script package. Precompiled SMOKE executables and I/O API utilities are available in the SMOKE zip. Prior to running the SMOKE executables, the AMD Optimizing C/C++ and Fortran Compilers (AOCC) must be installed on the running system. AOCC may be downloaded from AMD?s site, https://www.amd.com/en/developer/aocc.html, using the instructions in the link. SMOKE executables were compiled with AOCC version 5.0. If you would like to use an alternate set of SMOKE executables instead of the execs in this package, then in each sector run script in #INSTALL_DIR/[CASE]/scripts/*/, setenv SMOKE_LOCATION [location of your execs]. Similarly, to use an alternate set of I/O API utilities (e.g. m3xtract, m3tshift), setenv IOAPI_LOCATION [location of your execs]. All SMOKE inventories, scripts, and ancillary files used for the platform are provided. The full set of emission factor tables is not always permanently stored on the FTP server due to their large size; if they are not posted, they are furnished upon request. Prior to running SMOKE, you will need to edit the INSTALL_DIR (your install directory) and MET_ROOT (location of MCIP meteorology data) environment variable definitions in the "directory_definitions.csh" script located in each CASE/scripts directory. This script is sourced by each of the individual run scripts for each sector. Regarding the MCIP data, SMOKE only uses the GRIDCRO2D, METCRO2D, and METCRO3D files. If you are computing plume rise within SMOKE using the Laypoint program, SMOKE also needs the METDOT3D file. MCIP meteorology data is not included in the package. This is used for the onroad, onroad_ca_adj, dust (afdust/canada_afdust/canada_ptdust), and biogenics (beis4) sectors. == 4. Case description and instructions for each sector == Scripts are provided to process emissions for a 12km national grid (12US1) using CB6R3AE7 speciation for CMAQ. The emissions from this package will work with base CMAQ but not the Multi-Pollutant version used for AirToxScreen. For more information on Multi-Pollutant / toxics emissions processing, see section 12. For information on the CRACMM speciation mechanism, see section 13. The scripts can be adapted to run for other grids. First, in the directory_definitions.csh script, edit REGION_ABBREV and REGION_IOAPI_GRIDNAME. You also may need to change other inputs in each individual sector script, such as spatial surrogates (SRGPRO / SRGDESC), transportable fractions (XPORTFRAC), gridded meteorology for onroad (METMOVES), ocean chlorine (for the sector merge), and biogenic land use. For those wishing to process emissions for the 12US2 domain instead of 12US1, a sample directory_definitions script for 12US2 which illustrates the settings to change is included in the 2022v1 platform package. If you are changing the grid to 12US2, you do not need to change the spatial surrogates, since 12US2 is a subset of 12US1. You do need to window the other grid-specific input files, however. Emissions for the platform may be processed for CMAQ and CAMx modeling. In addition to scripts for running SMOKE, this package also includes scripts for converting SMOKE outputs (CMAQ-ready emissions) to the format required by CAMx. Emissions processing is split into "sectors". Each sector has its own run scripts for processing, with one (or more) run scripts per case. See Section 7 of this README for information about the run script zips. All sectors are US-only unless otherwise noted. The sectors are: AFDUST: Particulate emissions from fugitive dust sources. This sector is processed in two steps. The first (Annual_afdust_12US1_*) processes the annual inventory, and the second (Annual_afdust_adj_12US1*) applies adjustments - transportable fraction and meteorologically-based - and outputs the adjusted emissions under the sector name "afdust_adj". The afdust scripts must be run in that order. AIRPORTS: Emissions from airports. This is a 'point' sector, and like all 'point' sectors, is processed via two scripts: the 'onetime' script, and the 'daily' script. The 'onetime' script must be run first. All emissions in this sector are low-level only (no inline files). BEIS4: Biogenic emissions generated using the BEIS model, version 4. This package contains inputs to support running Normbeis4 and Tmpbeis4, unlike past platforms which included a pre-processed Normbeis output file. CANADA_OG2D: Point source emissions from low-level Canada upstream oil and gas sources. This is a 'point' sector, and like all 'point' sectors, is processed via two scripts: the 'onetime' script, and the 'daily' script. The 'onetime' script must be run first. All emissions in this sector are low-level only (no inline files). CANADA_AFDUST: Particulate emissions from fugitive dust sources in Canada. This sector was called "othafdust" in modeling platforms prior to 2020. Just like with afdust, this sector is processed in two steps. The first (Annual_canada_afdust_12US1_*) processes the annual inventory, and the second (Annual_canada_afdust_adj_12US1*) applies adjustments - transportable fraction and meteorologically-based - and outputs the adjusted emissions under the sector name "canada_afdust_adj". The canada_afdust scripts must be run in that order. Fugitive dust emissions in Mexico are included in the othar sector and do not need the same transportable fraction and meteorological adjustments that the Canada fugitive dust emissions in canada_afdust do. CANADA_ONROAD: Mobile onroad source emissions from Canada. This sector was called "onroad_can" in modeling platforms prior to 2020. CANADA_PTDUST: Point source particulate emissions from fugitive dust sources in Canada. This sector was called "othptdust" in modeling platforms prior to 2020. In Canada, dust emissions are in area source format for some sources (canada_afdust sector) and point source format for other sources (canada_ptdust sector). This is a 'point' sector with additional adjustments, and is processed via THREE scripts: the 'onetime' script, the 'daily' script, and then the adjust script (canada_ptdust_adj), in that order. All emissions in this sector are low-level only (no inline files). CANMEX_AG: Area source emissions from Canada and Mexico agricultural sources. In emissions modeling platforms prior to 2020, only Canada ag sources were processed separately, but now both Canada and Mexico ag sources are processed together, all as area sources. CANMEX_AREA: Area source emissions from Canada and Mexico, including mobile nonroad. This sector was called "othar" in modeling platforms prior to 2020. CANMEX_POINT: Point source emissions from Canada and Mexico. This sector was called "othpt" in modeling platforms prior to 2020. This is a 'point' sector, and like all 'point' sectors, is processed via two scripts: the 'onetime' script, and the 'daily' script. The 'onetime' script must be run first. All emissions in this sector are elevated (no low-level contribution). CMV_C1C2: Emissions from C1 and C2 commercial marine sources, including ports and navigable waterways. Includes C1/C2 marine emissions in the entire domain, including US, Canada, Mexico, and all bodies of water which lie outside the boundaries of those countries. This is a 'point' sector, and like all 'point' sectors, is processed via two scripts: the 'onetime' script, and the 'daily' script. The 'onetime' script must be run first. Inventories for this sector are grid-specific and designed for the 12US1 grid, or 12km grids which are a subset of 12US1 (e.g. 12US2). Therefore, emissions are output under the sector name "cmv_c1c2_12". All emissions in this sector are elevated (no low-level contribution). CMV_C3: Emissions from C3 commercial marine sources, including ports and navigable waterways. Includes C3 marine emissions in the entire domain, including US, Canada, Mexico, and all bodies of water which lie outside the boundaries of those countries. This is a 'point' sector, and like all 'point' sectors, is processed via two scripts: the 'onetime' script, and the 'daily' script. The 'onetime' script must be run first. Inventories for this sector are grid-specific and designed for the 12US1 grid, or 12km grids which are a subset of 12US1 (e.g. 12US2). Therefore, emissions are output under the sector name "cmv_c3_12". All emissions in this sector are elevated (no low-level contribution). FERTILIZER: Agricultural emissions from fertilizer (ammonia). Fertilizer emissions are not included in the default sector merge because CMAQ was run with the bidirectional flux option for this case, but fertilizer emissions and scripts are provided in this package for those who wish to run this sector. The fertilizer inventory in this package is developed from 2022v1 platform CMAQ outputs in which fertilizer emissions were calculated inline by CMAQ. LIVESTOCK: Agricultural emissions from livestock. This is mostly ammonia, but includes other pollutants from livestock sources as well. MEXICO_ONROAD: Mobile onroad source emissions from Mexico. This sector was called "onroad_mex" in modeling platforms prior to 2020. The onroad Mexico emissions inventory includes pre-speciated VOC emissions for an older CB6 mechanism, so there is an extra script for this sector to convert those emissions to the newer CB6 mechanism needed for CMAQ. This extra script is called *_part2_combine.csh and uses the combine utility to perform the CB6 mechanism conversion. The combine program is included, pre-compiled, in the SMOKE package along with pre-compiled SMOKE executables and I/O API utilities. To help make the distinction between emissions for the two CB6 mechanisms, older CB6 emissions use the sector name "mexico_onroad_cb6orig". The combine post-processing step creates emissions files with the final sector name "mexico_onroad". NONPT: Area source emissions not included in other sectors. As of the 2022v1 platform, open burning emissions are now in a separate sector called "openburn". NONROAD: Off highway mobile source emissions. EPA processed this sector using a new SMOKE feature supporting output of multiple subsector emissions files in a single SMOKE run. Specifically, SMOKE outputs diesel and gas (including all non-diesel fuels such as LPG and CNG) in separate emissions files as if they are different sectors, in addition to the total nonroad emissions. By default, the scripts included in this package will output separate emissions for gas and diesel (in addition to the total nonroad emissions). To turn off this option and have SMOKE only generate a single nonroad emissions file per day, set environment variable SMK_SUB_SECTOR_OUTPUT_YN to N. NP_OILGAS: Area source oil and gas emissions. NP_SOLVENTS: Area source emissions from solvents. ONROAD: On highway mobile source emissions, excluding California. This sector is processed using SMOKE-MOVES with multiple scripts as described in section 4B. EPA processed this sector using a new SMOKE feature supporting output of multiple subsector emissions files in a single SMOKE run. Specificially, SMOKE-MOVES outputs diesel and gas (including all non-diesel fuels such as E-85) as separate emissions files as if they are different sectors, in addition to the total onroad emissions. By default, the scripts included in this package will output separate emissions for gas and diesel (in addition to the total sector emissions). To turn off this option and have SMOKE only generate a single emissions file per day, set environment variable SMK_SUB_SECTOR_OUTPUT_YN to N. ONROAD_CA_ADJ: On highway mobile source emissions, California only. This sector is processed using SMOKE-MOVES with multiple scripts as described in section 4B. EPA processed this sector using a new SMOKE feature supporting output of multiple subsector emissions files in a single SMOKE run. Specificially, SMOKE-MOVES outputs diesel and gas (including all non-diesel fuels such as E-85) as separate emissions files as if they are different sectors, in addition to the total onroad emissions. By default, the scripts included in this package will output separate emissions for gas and diesel (in addition to the total sector emissions). To turn off this option and have SMOKE only generate a single emissions file per day, set environment variable SMK_SUB_SECTOR_OUTPUT_YN to N. OPENBURN: Nonpoint open burning emissions. In prior platforms, this sector was part of the nonpt sector, but is now its own area-source sector. PTAGFIRE: Point source agricultural burning emissions. The ptagfire sector uses a daily point source inventory. This is a 'point' sector, and like all 'point' sectors, is processed via two scripts: the 'onetime' script, and the 'daily' script. The 'onetime' script must be run first. All emissions in this sector are elevated (no low-level contribution). PTEGU: Electric generating unit emissions. This sector incorporates CEM (Continuous Emissions Monitoring) hourly emissions for a majority of sources. This is a 'point' sector, and like all 'point' sectors, is processed via a 'onetime' script first, followed by a 'daily' script. For ptegu there are two 'daily' scripts for different months of the year: 'summer' (May through September), 'winter' (December through February), and 'wintershld' ("shoulder" months; March/April/October/November). For sources without hourly CEM emissions, summer and winter use different hourly temporalization, and so they are run with separate inputs. All emissions in this sector are elevated (no low-level contribution). PTNONIPM: Point source emissions from industrial activities. This is a 'point' sector, and like all 'point' sectors, is processed via two scripts: the 'onetime' script, and the 'daily' script. The 'onetime' script must be run first. All emissions in this sector are elevated (no low-level contribution). PTNONIPM_HR: Point source emissions from industrial activities for sources with hourly data. This is a new sector for the 2022v2 platform, and contains hourly inventories for two groups of sources which were previously part of the ptnonipm sector: emissions associated with Taconite mines in Minnesota, and units in other states which have been matched to hourly CEMS data (similar to units in the ptegu sector, except these units are not EGUs). This is a 'point' sector, and like all 'point' sectors, is processed via two scripts: the 'onetime' script, and the 'daily' script. The 'onetime' script must be run first. All emissions in this sector are elevated (no low-level contribution). PTFIRE-RX: Point source emissions from year specific controlled (prescribed) burning. Fires are processed in the 'inline' format for CMAQ, and are all elevated (no low-level contribution). This is a 'point' sector, and is processed via multiple scripts: the 'onetime' script, and then the 'daily' scripts. The 'onetime' script must be run first. The two daily scripts, "lowactivity" and "highactivity", are run for different months of the year, and both must be run. PTFIRE-WILD: Point source emissions from year specific wild fires. Fires are processed in the 'inline' format for CMAQ, and are all elevated (no low-level contribution). This is a 'point' sector, and is processed via multiple scripts: the 'onetime' script, and then the 'daily' scripts. The 'onetime' script must be run first. The two daily scripts, "lowactivity" and "highactivity", are run for different months of the year, and both must be run. PTFIRE_OTHNA: Point source emissions from year specific controlled burning and wild fires in the rest of North America ('OTHNA' = OTHer North America), including Canada and Mexico. In addition to Canada and Mexico, fire emissions for Central America and the Caribbean are also included. Emissions from those areas are ultimately not modeled due to being outside of the 12US1 modeling domain, but they are provided for possible use in larger grids. These fires are processed in the 'inline' format for CMAQ, and are all elevated (no low-level contribution). This is a 'point' sector, and like all 'point' sectors, is processed via two scripts: the 'onetime' script, and the 'daily' script. The 'onetime' script must be run first. PT_OILGAS: Point source oil and gas emissions, including emissions from offshore oil rigs in the Gulf of Mexico. This is a 'point' sector, and like all 'point' sectors, is processed via two scripts: the 'onetime' script, and the 'daily' script. The 'onetime' script must be run first. All emissions in this sector are elevated (no low-level contribution). RAIL: Area source railway emissions. RWC: Area source residential wood combustion emissions. == 4B. Notes regarding onroad == Onroad emissions are processed using SMOKE-MOVES. The processing is split into multiple run scripts. In this platform, SMOKE-MOVES inputs were prepared using MOVES5. Speciation of VOC emissions is handled within SMOKE-MOVES, using GSREFs developed from MOVES outputs. Those GSREFs, as well as GSPROs for the CB6R3AE7 mechanism, are included in this package. As described in the SMOKE online documentation, SMOKE-MOVES handles onroad emissions separately for six types of processes: - On-network emissions (RatePerDistance, or RPD) - Off-network emissions, fuel vapor venting (RatePerProfile, or RPP) - Off-network emissions, extended idling (RatePerHour, or RPH) - On-network idling (ONI) emissions (RatePerHour-ONI, or RPHO) - Off-network emissions, starts (RatePerStart, or RPS) - All other evaporative off-network emissions (RatePerVehicle, or RPV) For each of the two onroad sectors (onroad, onroad_ca_adj), there are separate run scripts for RPD, RPP, RPH, RPHO, RPS, and RPV, plus a merge script that combines emissions from the six streams into a single emissions file per day. These scripts may take a particularly long time to run, especially RPD. Therefore, consideration should be given to running multiple RPD jobs in parallel, such as one job per quarter. The reason onroad has been split into two sectors - onroad and onroad_ca_adj - is in order to match SMOKE-MOVES annual emission totals with those provided by California. To do this, we split California into a separate sector, and run SMOKE-MOVES with a control factor file (CFPRO) which nudges the emissions so that the annual totals post-SMOKE-MOVES equal those provided by CARB. CARB provided separate onroad emissions inventories for use in the beta platform, and we match their provided emissions at the county/SCC level, except that the CARB inventory does not distinguish between different on-network road types (but does distinguish on-network emissions from off-network). == 4B1. DAYS_PER_RUN == SMOKE-MOVES can be run more efficiently if running more than one day at a time. For example, Movesmrg can create one 7-day emissions file more quickly than it can create seven individual 1-day emissions files. To turn on this feature, use the DAYS_PER_RUN variable, set to the number of days you wish to run in a single Movesmrg instance. The recommended value for DAYS_PER_RUN is 7. The onroad scripts include a setting called "DAYS_PER_RUN", set to 7 as the default. If DAYS_PER_RUN > 1, after Movesmrg is run, the run scripts will use the I/O API utility m3xtract to split up the multi-day emissions file into single day (25-hour) emissions files. Multi-day Movesmrg runs will never cross months. For example, if DAYS_PER_RUN = 7, then the last Movesmrg run of January will start on January 29th and end on January 31st (3 days), and the first Movesmrg run of February will start on February 1st and end on February 7th. Using the multi-day Movesmrg functionality requires multi-day MCIP files. For example, if DAYS_PER_RUN = 7, your METCRO2D files must also be 7 days (169 hours) long. These multi-day MCIP files should be stored in MET_ROOT_${Xday}/, where X = DAYS_PER_RUN (i.e. /7day for DAYS_PER_RUN = 7). For example, if the single day MCIP files are in /foo/foo/mcip_dir/, then 7-day MCIP files should be in /foo/foo/mcip_dir_7day/. Multiday versions of both the METCRO2D and METCRO3D must be created. Alternatively, to run Movesmrg one day at a time, set DAYS_PER_RUN = 1. This will eliminate the need for multiday MCIP files and also reduces the memory usage, but is less efficient for longer modeling periods. == 4C. Sector merge == After all sectors have been processed, the Sector_merge script merges the low-level emissions from all sectors into a single CMAQ-ready emissions file per day. For the 2022he case, two versions of the sector merge script are included in this package. - The "default" script will prepare merged emissions for CMAQ modeling, and exclude biogenics, RWC, and fertilizer from the merge. This script will output to: INSTALL_DIR/$CASE/smoke_out/$CASE/$GRID/$SPC/merged_nobeis_norwc/ - A second "withbeis_withrwc" script will include biogenics, RWC and fertilizer in the merged emissions, for the purposes of CAMx modeling, or anyone who wishes to run CMAQ without inline biogenics. This alternate script will output to: INSTALL_DIR/$CASE/smoke_out/$CASE/$GRID/$SPC/merged_withbeis_withrwc/ Inline emissions and stack_groups files will be output to the same directory, except in subdirectories by sector name (e.g. .../$SPC/ptnonipm/). The sectorlist file controls which sectors are included in the sector merge. This file is included in the package along with the run scripts, and is located in the $CASE/scripts directory for each case. Within the sectorlist file, the 'mergesector' column controls which sectors are merged (Y or N). For example, to run the sector merge without biogenics or RWC, set the mergesector column to N for the 'beis4' and 'rwc' sectors. Many point sectors have mergesector set to N (e.g. ptegu, canmex_point) because they do not have any 2-D gridded emissions. The two versions of the merge script use two different versions of the SECTORLIST, one with beis4/rwc/fertilizer turned on, and one with those sectors turned off. To merge in alternative biogenic emissions files, edit the sectorlist by changing the 'beis4' sector name to the sector name of your choice, and make sure your biogenic emissions files exist in the $CASE/premerged/[sector name] directory with filenames adhering to the file name convention used by other sectors. == 5. Description of inventory packages == Inventories for the 2022he case are included in the following files, all of which should be unpackaged in INSTALL_DIR. 2022emissions/2022he_canmex_inventory_25sep2025.zip 2022emissions/2022he_cem_inventory_25sep2025.zip 2022emissions/2022he_CMV_c1c2_12km_inventory_25sep2025.zip 2022emissions/2022he_CMV_c3_12km_inventory_25sep2025.zip 2022emissions/2022he_fertilizer_inventory_25sep2025.zip 2022emissions/2022he_fires_inventory_25sep2025.zip 2022emissions/2022he_mexico_onroad_inventory_25sep2025.zip 2022emissions/2022he_nonpoint_inventory_25sep2025.zip 2022emissions/2022he_nonroad_inventory_25sep2025.zip 2022emissions/2022he_onroad_activity_25sep2025.zip 2022emissions/2022he_onroad_SMOKE-MOVES_inventory_19jun2025.zip 2022emissions/2022he_point_inventory_25sep2025.zip Past platforms also included a biogenics package. The files from that package are now in the ancillary_data directory. The "canmex" package includes all inventories for Canada and Mexico other than fires, CMV, and Mexico onroad. The Mexico point source inventory has blank facility names for proprietary data sharing reasons. The "cem" package includes the hourly CEM (Continuous Emissions Monitoring) emissions used by the ptegu sector. This is the same data that is available on EPA's Air Markets Program Data website (ampd.epa.gov), except that we've split the data into months and days as needed for our scripts, and run the data through a "CEM convert" program so that the hourly CEM data is in FF10 Hourly format. Hourly CEM data for the ptnonipm_hr sector is in the point_inventory zip file. The "CMV" packages include annual and hourly inventories for the cmv_c1c2 and cmv_c3 sectors, 12US1 grid. Separate inventories for the 36US3 grid are available as part of the 2022v1 modeling platform; the CMV inventories did not change from 2022v1 platform to 2022v2 platform. To process CMV inventories for other grids, one should edit the 12US1 scripts and change the EMISINV and EMISHOUR definitions, along with the other grid changes described in Section 4 of this README. The "fires" package includes the inventories for the ptfire-rx, ptfire-wild, ptfire_othna, and ptagfire sectors. The "mexico_onroad" package includes the inventories for the onroad_mex sector. The "nonpoint" package includes inventories for the following sectors: afdust, fertilizer, livestock, nonpt, np_oilgas, rail, rwc, np_solvents, and openburn. Agricultural fire emissions also come from NEI Nonpoint, but those inventories are included in the fires zip. The "nonroad" package include the inventories for the nonroad sector. To reduce the file size, pollutants not needed for normal CMAQ modeling were removed, such as metals, PAHs, and dioxins and furans. The "onroad_activity" package includes the activity data for the onroad and onroad_ca_adj sectors. It does not include the emission factor tables also required to run SMOKE-MOVES; those are in separate zips posted in the 2022emissions/moves_eftables/ directory. The emission factor tables are provided on FTP with separate zips for each state, e.g. 2022emissions/moves_eftables/st10_2022he_eftables_caps.zip All of these EF tables exclude NOx humidity adjustments. In this platform, NOx humidity adjustments are calculated within SMOKE-MOVES rather than pre-applied. The "onroad_SMOKE-MOVES_emissions" package includes an FF10-formatted inventory representing emissions totals for the onroad sector as calculated by SMOKE-MOVES. This is provided for those who are interested in an onroad emissions inventory or report. Also, see section 14 for information on how to process this inventory through SMOKE in order to prepare model-ready onroad emissions without running SMOKE-MOVES. The "point" package includes annual inventories for the following sectors: ptnonipm, ptegu, pt_oilgas, airports. It also includes annual and hourly inventories for the ptnonipm_hr sector. See Section 4 of this README for a description of each modeling sector. == 6. Description of ancillary file packages == The following packages should be unpacked in INSTALL_DIR: ancillary_data/beis4_ge_dat_2022he_25sep2025.zip ancillary_data/gridding_ge_dat_2022he_24sep2025.zip ancillary_data/onroad_ge_dat_2022he_24sep2025.zip ancillary_data/other_ge_dat_2022he_24sep2025.zip ancillary_data/speciation_ge_dat_2022he_24sep2025.zip ancillary_data/temporal_ge_dat_2022he_24sep2025.zip ancillary_data/ocean_cl2.zip spatial_surrogates/surrogates_CONUS_12km_2022v2platform_04apr2025.zip spatial_surrogates/surrogates_CANMEX_12km_2022v2platform_15may2025.zip The "beis4" package includes gridded land use and biogenic emission factor files for input to BEIS version 4. This version of BEIS uses different land use and emission factor inputs compared to prior versions, such as BEIS 3.61. This package includes three files: gridded land use for the 12US1 domain (SMOKE input BELD6), gridded biomass data for the 12US1 domain (BIOMASS), and emission factors for BEIS 4 (BEISFAC). Past platforms included normalized emissions files from the Normbeis4 program, but instead, this package supports running Normbeis4 independently using the above inputs. The "gridding" package includes all SMOKE inputs related to spatial allocation other than the surrogates, including cross-references, surrogate descriptions, and gridded transportable fractions used in afdust_adj, canada_afdust_adj, and canada_ptdust_adj. The "speciation" package includes speciation profiles, cross-references, VOC-to-TOG conversion factors, and inventory tables. This .zip includes files for the CB6R3AE7 mechanism for CMAQ v5.4. The "temporal" package includes temporal profiles and cross-references, including daily and hourly temporal profiles developed by the SMOKE program Gentpro for use in the rwc, livestock, and fertilizer sectors. The "other" ge_dat package includes all other SMOKE ancillary files not included in the above packages, including: - SMOKE-MOVES ancillary files, including the reference county (MCXREF) and fuel month (MFMREF) cross-references, pollutant (MEPROC) and emission factor table (MRCLIST) lists, activity SCC to full SCC cross-references (SCCXREF), hourly speed profiles (SPDPRO), daily temperature data (METMOVES), and Movesmrg adjustment factors (CFPRO) - NHAPEXCLUDE files (concerns VOC HAP integration) - Other miscellaneous SMOKE inputs, such as the ARTOPNT, COSTCY, HOLIDAYS, MACTDESC, NAICSDESC, ORISDESC, PELVCONFIG, PSTK, SCCDESC - Smkreport configuration files (REPCONFIG, all in ge_dat/smkreport/repconfig) This ocean_chlorine.zip package contains gridded ocean chlorine emissions, which are included in the sector merge, for 12US1, 12US2, and 36US1, as well as a national-scale 4km domain. The "surrogates" packages contain the spatial surrogates at 12km resolution for the US, and for Canada and Mexico. 36km and 4km surrogates for the US, Canada, and Mexico may be provided in the future. The run scripts (see section 7) are already set up to use the proper ancillary files and inventories for each sector and case. == 7. Description of script packages == The SMOKE core script package should be unpacked in INSTALL_DIR. This includes scripts and precompiled executables for running SMOKE in general, and for running the 2022 modeling case in particular. The scripts in the 2022he_cb6_22m subdirectory are the scripts you run directly in order to replicate our emissions. Separate script(s) are provided for each sector. See section 4 for information pertinent to each sector. In general, you edit the directory_definitions.csh file, in particular INSTALL_DIR and MET_ROOT, and then run each sector. Sector scripts are organized into subdirectories within CASE/scripts by sector category: biogenics, nonpoint, onroad, point, and merge. For afdust sectors, run afdust/canada_afdust first, then afdust_adj/canada_afdust_adj. For point sectors, run "onetime" first, and then "daily". Some sectors have multiple daily scripts which run different months due to temporal profiles and cross-references varying by month (e.g. ptegu, ptfire-rx). Canada_ptdust has an additional "adj" script which comes after the daily script. For onroad sectors, run RPV/RPD/RPH/RPHO/RPP/RPS first, then the merge script. For onroad_mex, run the normal script and also the part2_combine script after that. The scripts, programs, and other inputs in the combine, ioapi, and smoke5.2 subdirectories are all "helper" scripts and inputs, and generally never need to be run directly. == 8. Preparing emissions for CAMx == Preparing emissions for the CAMx model instead of the CMAQ model requires converting the emissions to CAMx-ready format after SMOKE is run. Conversion scripts are included in the core SMOKE zip, and output to the INSTALL_DIR/CASE/scripts/camx/ directory. Those scripts use helper scripts and programs which are also included in the core SMOKE zip and output to INSTALL_DIR/camx/. CAMx emissions processing scripts are provided for the 2022he case. Converting CMAQ-ready emissions to CAMx-ready emissions consists of several steps. First, fire emissions must be processed through SMOKE in 3-D format instead of inline format so that the SMOKE outputs include layered emissions. This will need to be done for four sectors: ptfire-rx, ptfire-wild, ptfire_othna, and ptagfire. Scripts for processing these three sectors as 3-D layered sectors are provided in the CASE/scripts/point/ directory, alongside the regular scripts for processing inline emissions for CMAQ. The 3-D scripts specify '3D' in the filename, and '3D' has also been appended to the sector names to distinguish these runs from the inline runs (ptfire-rx3D, ptfire-wild3D, ptagfire3D, ptfire_othna3D). These scripts will produce gridded and layered 3-D emissions in the 2022he_cb6_22m/premerged directory, and will not produce any inline emissions files for CMAQ. Also, the 3-D fire scripts are configured to process emissions for the 12US2 grid, not 12US1. This is because EPA's 12km CAMx modeling was performed for the 12US2 grid. Second, those 3-D fire emissions must be separately converted to CAMx format. Scripts for this step, one per sector, are provided in the 2022he_cb6_22m/scripts/camx/ directory. Third, run the final CAMx conversion script, also available in the same scripts/camx/ directory. The output files should include one emis2d file per day and one mrgpt file per day. The files that CAMx needs are the emis2d file and the mrgpt file. This script is currently configured to use 3-D fire emissions from step 2 for the 12US2 grid, combined with other point sector emissions for the 12US1 grid. All CAMx-ready files will go to: INSTALL_DIR/$CASE/smoke_out/$CASE/12US2/camx/ The newest version of CAMx includes support for multiple input emissions files. So, it is not necessary to merge all point sector emissions together into a single mrgpt file per day. However, to make modeling easier, we included all point sectors in the mrgpt files. If you wish to include only a subset of the point sector emissions in the mrgpt file, in the camx_convert_*_12US2.csh script, and edit the mrg_sectors array. PTSR files from the individual sectors that are not merged will need to be included in CAMx modeling. Individual PTSR sector emissions will be output to the 12US2/camx/sector/ directory. That directory will include ALL PTSR sector emissions, not just the sectors that are not merged. == 8A. FORTRAN programs used by the CAMx converter == The CAMx converter uses several FORTRAN programs. The core SMOKE zip contains both our compiled FORTRAN executables (which may or may not work on your system), and the original FORTRAN source code and Makefiles, so that you may recompile these helper programs yourself. The source code is in INSTALL_DIR/camx/src/, and our executables are in INSTALL_DIR/camx/bin/ and INSTALL_DIR/camx/bin-fires/ (the fires conversion uses different versions of some executables). If you have to recompile the code, this is where the recompiled executables should ultimately go. Fires use a different version of the cmaq2uam program, and the source code for that version is in INSTALL_DIR/camx/src-21oct2013/. == 8B. Other files used by the CAMx converter == The subdirectories 'dates', 'land', 'oceanic_v5.1', and 'Species_Mapping_Tables' in INSTALL_DIR/camx/ include other files used by the converter. The addition of sea salt emissions requires CAMx-formatted meteorological data from WRF. Specifically, this requires a 'met3d' file and a 'met2d' file. The WRF_ROOT parameter in the final CAMx conversion script should point to the location of this data. Like the MCIP meteorology, these files are not included in the package. == 8C. Windowing merged low-level emissions from 12US1 to 12US2 == The SMOKE scripts provided in this package are for the 12US1 domain, but CAMx modeling is typically performed for the 12US2 domain. EPA typically processes emissions as follows: Sector and low-level merged emissions are generated for 12US1, and then the merged emissions are windowed to 12US2 prior to conversion to CAMx format. This way, CMAQ-ready emissions are available for both 12US1 and 12US2, since many groups prefer 12US1 for CMAQ modeling. A script is provided to window the merged 12US1 low-level emissions to 12US2: $INSTALL_DIR/2022he_cb6_22m/scripts/camx/m3wndw_loop_merged.csh == 8D. Lightning NOx emissions == In the 2022v1 and 2022v2 modeling platforms, a dataset of NOx emissions from lightning strikes was included in the CAMx modeling. The emissions were processed as a separate input to CAMx. For file size reasons, these additional emissions are not available on FTP. == 9. Log analyzer == The platform scripts include a Python-based tool called the log analyzer that runs automatically at the conclusion of each SMOKE job. The purpose of the log analyzer is to scan all log files from the sector, search for errors and warnings, and filter out common or "acceptable" warnings. Log analyzer output goes into this directory: $INSTALL_DIR/$CASE/reports/log_analyzer There are two types of output files: Level 1 and Level 3. Level 3 lists every instance of each error and warning individually, while Level 1 combines repeats of common warnings. It is sufficient to look at only the Level 1 output. The Level 1 output includes a "priority" code, the error/warning message, and the log file in which the message appears. The priority code is a number from 0 to 3. If priority = 2 or 3, the message has been identified as common or acceptable. This is based on a file called known_messages.txt, which is located here: $INSTALL_DIR/smoke4.9/scripts/log_analyzer/known_messages.txt If priority = 1, the message is included in known_messages and has been identified as NOT acceptable - however, many priority 1 warnings are in fact SOMETIMES acceptable and sometimes not, which is why they are not given priority 2 or 3. Some common priority 1 warnings are listed below. If priority = 0, the message is not included in known_messages. Priority 0 or priority 1 messages which are acceptable include: - WARNING: [*] is not found in both inventory pollutant and model species lists. These are common onroad messages resulting from the CFPRO file including more species than is always necessary. - WARNING: Could not read [BEGHOUR/ENDHOUR] from file "PDAY" This is a common ptfire warning and is acceptable. - WARNING: resetting surrogates ratio of Co/St/Ct (FIPS): ... This warning is in known_messages but is not always picked up by the log analyzer for reasons unknown. - WARNING: Speciation profile "?? " is not in profiles This warning is common/acceptable for onroad_mex. - WARNING: Total annual toxic emissions greater than annual [*]__VOC emissions for source: This warning is common for sectors with monthly inventories such as nonroad. - WARNING: Applying default time zone 5 to country/state/county code: [*] This warning is acceptable for Alaska FIPS and FIPS 85005. - WARNING: Duplicate entry in AR2PT x-ref file: This warning is acceptable but is not in known_messages to let us know we should correct it in the future. - WARNING: Hour-specific ending date/time WARNING: Could not read "INDXH" from file "PHOUR " netCDF error number -40 Error reading netCDF time step flag for PHOUR These four messages may appear in the Temporal logs for January and February for the CMV sectors. - WARNING: Dropping SCC .* not listed in SCCXREF file This is an acceptable warning for the RPP process in onroad. In other platforms which use MOVES3, this warning is also acceptable for RPV. (Platforms which uses MOVES3 also have an "RPS" process.) == 10. SMOKE reports (Smkreport) == By default, the run scripts run the Smkreport program, output to the $CASE/reports/inv directory. For sectors with annual inventories, reports are annual. For sectors with monthly inventories (e.g. nonroad), reports are monthly. Most reports include all inventory pollutants and model species, although PM10 usually appears as zero due to a SMOKE quirk; to get PM10, sum PM2_5 and PMC in the report. For onroad, these reports reflect activity, not emissions, and include some double counting due to how SMOKE allocates activity to different processes; therefore, you should not use the reports/inv reports for the onroad or onroad_ca_adj sectors. The following types of reports are generated. Note that not all types of reports are generated for all sectors: *state.txt: State totals. *county.txt: County totals. *state_scc.txt: State/SCC totals. *county_scc.txt: County/SCC totals. *state_naics.txt: State/NAICS totals. *cell_${GRID}.txt: Totals by grid cell. *cell_county_${GRID}.txt: Totals by grid cell and county. *state_grid_${GRID}.txt: State totals after gridding. *srgid_${GRID}.txt: Emissions totals at various resolutions after gridding, and also including the spatial surrogate assignment. *pm25prof.txt: Totals of PM2.5 at various resolutions, and also including the PM2.5 speciation profile assignment. *vocprof.txt: Totals of VOC at various resolutions, and also including the VOC speciation profile assignment. For sectors which are integrated and have both NONHAPVOC and VOC, or have multiple modes of VOC, there may be multiple VOC profile reports for NONHAPVOC and (no-integrate) VOC and/or for each mode. For all sectors except those processed with SMOKE-MOVES, Smkmerge generates daily county total reports in the $CASE/reports/smkmerge directory. These are then summed to annual by state and county, output to the $CASE/reports/annual_report directory. Emissions totals in the reports/annual_report directory (post-temporalization) should be within 1-2% of the totals in the reports/inv directory (pre-temporalization). For SMOKE-MOVES sectors, the $CASE/reports/smkmerge directory includes daily (or weekly if DAYS_PER_RUN=7) totals by county/SCC. Scripts to aggregate these totals to monthly or annual by state, county, state/SCC, and county/SCC are provided in the SMOKE utilities zip, movesmrg_report_postproc/ directory. == 11. Spinup == A parameter in the run scripts called SPINUP_DURATION supports the processing of emissions for December of the previous year for model spinup purposes. If SPINUP_DURATION > 0, then: - For sectors where emissions are processed for representative dates only, the entire month of December of the previous year will be processed - For sectors where emissions are processed daily, the last X days of December of the previous year will be processed, where X = SPINUP_DURATION However, in EPA emissions modeling platform applications, SPINUP_DURATION is set to a nonzero value (typically 10) ONLY for biogenics processing and for the final sector merge. For all other sectors, SPINUP_DURATION is set to 0 when running SMOKE. The scripts in this package are configured accordingly as the default. When the final sector merge is run, spinup period emissions for all sectors except biogenics are taken from December of the base year. For representative day sectors, dates are mapped based on day-of-week, and also Christmas holidays; for daily sectors, calendar dates are mapped. For example, the 12/28/2021 merged emissions include sectors from the following dates: - beis4: 12/28/2021 (actual spinup emissions; if biogenics are being merged) - afdust_adj, fertilizer, livestock, onroad, onroad_ca_adj, othafdust_adj, othptdust_adj, rwc: 12/28/2022 (daily sectors use December 2021 matched up by calendar day) - airports, canada_og2D, nonpt, nonroad, canada_onroad, mexico_onroad, canmex_area, canmex_ag: 12/06/2022 or 12/07/2022 (representative dates based on day-of-week; 7-days-of-week sectors have 12/07/2022, 4-days-of-week sectors have 12/06/2022) - np_oilgas, np_solvents, rail, openburn: 12/06/2022 (also representative dates, but these sectors have a single day per month) An illustration of how the dates are mapped in the spinup period is available in the smk_merge_dates files, for example: $INSTALL_DIR/smoke5.2/scripts/smk_dates/2022/smk_merge_dates_202201.txt Similarly for point sectors, when CMAQ is run, inline emissions from the base year are used to cover the spinup period as follows: - canmex_point, ptnonipm, pt_oilgas use representative date / day-of-week based mappings - cmv_c1c2, cmv_c3, ptegu, ptnonipm_hr use calendar date-based mappings - ptfire-rx, ptfire-wild, ptagfire, ptfire_othna (all fires) use January 1 emissions for all spinup days Sometimes, base year inline point emissions files are physically copied to December spinup dates to simplify the CMAQ setup, but CMAQ scripts can also be configured to point to base year dates while running spinup. == 12. Multi-pollutant emissions processing == EPA prepared CMAQ-ready emissions for 2022v2 platform to support Multi-Pollutant (toxics) modeling. However, this package is set up for CAP-focused modeling, without the additional HAPs that are included in Multi-Pollutant modeling. Therefore, CMAQ-ready emissions prepared with this package will not include all of the pollutants that are included in EPA's pre-processed modeling files for this platform. Here is a list of additional HAPs which were processed by EPA for this platform, but will not appear in SMOKE outputs generated with this script package: ACETONITRILE ACRYLICACID ACRYLONITRILE ARSENIC_C ARSENIC_F BENZOAPYRNE BERYLLIUM_C BERYLLIUM_F BR2_C2_12 CADMIUM_C CADMIUM_F CARBONTET CARBSULFIDE CHCL3 CHLOROPRENE CHROMHEX_C CHROMHEX_F CL2_C2_12 CL2_ME CL3_ETHE CL4_ETHANE1122 CL4_ETHE CL_ETHE DICHLOROBENZENE DICHLOROPROPENE DIESEL_PMC DIESEL_PMEC DIESEL_PMFINE DIESEL_PMNO3 DIESEL_PMOC DIESEL_PMSO4 ETOX HEXAMETHY_DIIS HEXANE HGIIGAS HGNRVA HYDRAZINE LEAD_C LEAD_F MAL_ANHYDRIDE MANGANESE_C MANGANESE_F METHCHLORIDE NICKEL_C NICKEL_F PAH_000E0 PAH_101E2 PAH_114E1 PAH_176E2 PAH_176E3 PAH_176E4 PAH_176E5 PAH_192E3 PAH_880E5 PHGI PROPDICHLORIDE QUINOLINE STYRENE TOL_DIIS TOLU TRIETHYLAMINE XYLENES == 13. CRACMM speciation mechanism == Additional files are provided to support emissions processing with CRACMM speciation as part of the 2022v1 modeling platform, in the following FTP directory: https://gaftp.epa.gov/Air/emismod/2022/v1/for_CRACMM/ == 14. "Onroad-as-nonpoint" processing == For those who wish to process the onroad sector similarly to nonpoint and nonroad, without using SMOKE-MOVES, the following package is provided as part of the 2022v1 modeling platform: https://gaftp.epa.gov/Air/emismod/2022/v1/2022emissions/onroad-as-nonpoint_2022hc_scripts_inputs_17dec2024.zip This is intended for users without the computing resources required to run SMOKE-MOVES. This package includes the onroad FF10 (same as in 2022emissions/), a sample run script, and other ancillary files needed to run onroad-as-nonpoint (INVTABLE, GSPRO, GSREF).