Add new emissions source to CMAQ analysis

Hello, I am working on using CMAQ-5.3.3 to quantify the impact of new oil and gas point sources under development. I hoped to use the DESID module to do this, but it appears this module specifically allows for scaling emissions from existing sources. As the sources I’m considering are not operational, they are not available in an emissions inventory to process through SMOKE. Any assistance on ways to proceed would be greatly appreciated.


As you mention, DESID will not work with scaling sources that are not there, as this part is done in SMOKE beforehand.

Depending on your domain and how many sources, you may have a couple of choices.

Option 1:
To add new sources you will have to run SMOKE and process the pt_oilgas sector.
Look into an existing platform for a starting point (i.e. for 2018: 2018 Emissions Modeling Platform | US EPA).

1.You will have to modify your inventory that is in FF10 format.
Description of that can be found in the SMOKE 4.9.1 manual:
under section FF10 Format is explained.
2.You can then run the sector in SMOKE and obtain the inline and stack_groups netcdf files that CMAQ needs

Option 2:
If for some reason you cannot create an FF10 file, and have a few sources to add, then you can still:

  1. Run the sector in SMOKE for your domain and time period using your existing inventory (this step you would have to do as well for comparing against your changes)
  2. Modify the hourly inline and stack_groups netcdf files manually to include your additional pollutants.

There is one stack_groups file: The details on the stack_groups file can be found in the User’s Guide, under Section 7.3.2. STACK_GROUP.

The inline netcdf files include the hourly emissions for the same sources. The inline files don’t have any specific information about plume rise; they just contain hourly emissions by source.
They are hourly netcdf files that are not gridded but NROWS has all points that map to the stack_groups.
CMAQ uses the stack information from stack_groups + the hourly emissions from the inline files to calculate plume rise.

Option 3:
If you can align your domain/simulation to an existing set of inputs that you have (or align to EQUATES data: EQUATES | US EPA ), you should be able to skip running SMOKE altogether and work after manipulating those netcdf files directly.

I hope this helps to get you started.

1 Like

I apologize for taking a long time to respond, and thanks Christos for providing a nice run-through of how to develop new emissions files using SMOKE.

A colleague has shared some code with us in the form of a Jupyter Notebook that can create IOAPI-gridded files. You need to fill in speciation, layer allocation, and other specifics, but it could be a fast way to get going via Google Colab or another platform that supports Jupyter. Please see the images at the bottom of this reply. Unfortunately, this forum will not allow me to upload a pdf.

Two other examples of modifying emission files using Jupyter may be useful to you as well:
csv_to_ emis:



QuickEmissions (Jupyter Notebook):

Just wondering if another path would be to develop a SMOKE inventory file in an appropriate format and to run it through SMOKE.

The best path to take could depend on some of the details of your analysis.

Thank you all for your responses, they’ve been a great help. I’ll be looking into both manipulating my input netcdf files manually that Christos suggested and utilizing the Jupyter notebook that Ben provided to see what will work best for my application.

Again, your assistance is much appreciated.