National Emissions Inventory Processing

How do I obtain CMAQ ready emissions generated from the 2014v7.0 NEI Platform data?

Follow the instructions on the README that is provided with the data files and scripts to reproduce the CMAQ ready emissions files, or use the emis_mole_all files from the following package:

I am (for the first time) trying to process the NEI2014 (for CMAQ on 12US2 grid) using the inbuilt smokev4.5 that comes with the modeling platform, but this is proving a little difficult with some errors. I basically tried to run the nonpoint oil and gas emissions processing script (./Annual_np_oilgas_12US2_2014fd_cb6_14j.csh located at $INSTALL_DIR/2014fd_cb6_14j/scripts/nonpoint/) first and got the following at the end:

Basically, the errors on the screen can be listed in order of appearance as:

  1. ERROR detected in logfile
  2. ERROR: detected in Grdmat​
  3. ERROR: Running smk_run for one-time steps​
  4. ERROR: At least one message’s priority is less than or equal to the exit priority: 1​
  5. ERROR: Level 1 errors or Level 0 warnings found. Check log files, fix inputs, and rerun.​

When I attended to the first ERROR (error in logfile), I checked the logfile and saw that there was an error there:
ERROR: input file not found: SRGPRO_PATH

How can I get the SRGPRO file (USA_100_NOFILL.txt) from the NEI2014 modelling platform?


Most of the data for the 2014 platform are located here:

The spatial surrogates are the same as are used for 2016 alpha and those are stored here:

I reviewed the 2014 README and didn’t see a note to that effect – I will try to make that clearer for others.


Were you able to run other area sectors like Nonpoint sector?

I just found the surrogate files that Alison pointed to above, and smoke ran a little further (past SMKINVEN, GRDMAT, SPCMAT) but showed errors in SMKREPORT:

and at the end,

When I looked for the timetracker.csh file, I could only find timetracker_v2.csh file at:
but I am not sure what happened with time there!

Timetracker is not needed – you can comment it out

Thanks - I commented out the lines (probably in about 20 places) in smk_run_v8.csh script that used timetracker but got the same timetracker error in m3stat so commented out timetracker in m3stat_chk_v6.csh script (in like two lines). Then, SMOKE proceeded showed a warning and an error in the Smkmerge log file:

We are thinking that some path or other date-related setting is not set correctly. In addition, the error you posted discusses an incorrect date setting. Have you reviewed the logs and standard output? We would like to see your SMOKE
logs and standard output file, and the updated np_oilgas run script. Can you zip these up and email them to After zipping, please change the file extension to .piz to get through the mail server.

While we are thinking about why running np_oilgas sector is not working, I thought I would try running another sector (cmv_c1c2), so I ran the script Annual_cmv_c1c2_12US2_2014fd_cb6_14j.csh and saw the following syntax error occur consistently:

I wasn’t sure what this error was about.

That error message is about a missing IOAPI tool called dayshift that allow to incrementally increase the processing date. If you haven’t link your IOAPI library to NEI platform package properly, you may do so for a proper run of all setting/run scripts.

Thanks - I actually made a symbolic link (using ln -s command) from the libioapi.a file and the datshift command located at $INSTALL_DIR/ioapi/ to the location $INSTALL_DIR/smoke4.5/Linux2_x86_64ifort but I still got the same syntax error? Should I link my own compiled IOAPI tools instead of the built-in IOAPI tools that come with the NEI2014 modeling platform?

If you have your own set of tools, you could try that.

Hi @skunwar, I’m getting the same error (missing datshift) - Did you ever resolve this?

EDIT: Nevermind - to fix, one needs to change the ASSIGNS file to use $IOAPIDIR rather than the default path on the system (/bin/env) - it only needs to be changed on a few lines

Hi @jschnell, I am pulling out this suggestion I received via email regarding the issue:


Looks like you already solved the problem. Great!

1 Like

Hi @bbaek @lizadams - I’m processing the 2016 inventory with the 2016-alpha package and have a question on the dust adjustment.

My episode is from 7/22/2018 - 09/01/2018 (i.e., RUN MONTHS = “7 8 9”. I have already run WRF and processed the output through MCIP. I understand that the some of the programs use representative days to speed up calculations. However, I think this is causing an issue with my run since, for example, for July, the afdust program is picking days in July that I have not simulated, and then when the adjustments are run, it looks for a METCRO2D file that is not there (e.g., 07/01/2018).

So, do I need to simulate the entire month of any month for which I want to process emissions? Or is there a way to adjust this easily somewhere in the run scripts. I can edit afdust_adj_emf.csh so that it picks a single, static METCRO file, but then my met adjustments won’t be correct. Any advice?

If I were you, I would use the IOAPI tool called “m3tshift” to time shift one of your METCRO2D files to those missing dates so then you don’t have to run MCIP for those missing dates.

Hi @bbaek - thanks for the response - I ended up editing the afdust_adj script for my case to pick a static file for the dates I have not simulated and dynamic for those that have, though I’ll have to change this for each new case.

I am trying to use the M3TSHIFT function to change the year ‘stamp’ of mcip output files from 2006 to 2014 (only month of September with hourly met data), and for some reason, the script keeps writing 2006 only to the new file, without changing it to 2014. Below is the code:

#!/bin/csh -f

setenv INFILE "METCRO2D_test_mcip"
setenv OUTFILE "shiftedMETCRO2D_test_mcip"

set ORIGDATE = 2006244
set NEWDATE = 2014244
set dateInd = (seq 1 720)

foreach d ($dateInd)
set timeArr = (‘seq 0 10000 230000’)
foreach ORIGTIME ($timeArr)
$IOAPI_31/m3tshift << DONE
$ORIGDATE#use default starting date (obtained from the file header)
$ORIGTIME#use default starting time (obtained from the file header)
$NEWDATE# target date
$ORIGTIME# target time
0# use the default run length: entire duration of file

Any suggestions? Thanks!

I would suggest you to run m3tshift interactively first to make sure that you entered correct values in the correct order. Here is my run scripts for m3tshft.

foreach SCEN ( MECRO2D )
setenv TDATE 2005356 # start date

setenv JDATE 2004356
setenv EDATE 2004365

while ( $JDATE <= $EDATE )

setenv org $file1
setenv new $file2

./m3tshift << EOF



@ JDATE = $JDATE + 1
@ TDATE = $TDATE + 1