Converting pre-gridded emission (MICS-Asia) to SMKOE input


I’m trying to convert a pre-gridded emission MICS-Asia to input for SMOKE.

When I commanded ncdump,

ncdump -h
netcdf MICS_Asia_SAPRC99_ALK1_2010_0.25x0.25 {
lon = 560 ;
lat = 441 ;
time = 12 ;
double time(time) ;
time:units = “month” ;
time:long_name = “Time” ;
float lon(lon) ;
lon:axis = “X” ;
lon:long_name = “Longitude” ;
lon:short_name = “Lon” ;
lon:units = “degree” ;
lon:GridCenter_Start = 40.125f ;
lon:GridCenter_End = 179.875f ;
float lat(lat) ;
lat:axis = “Y” ;
lat:long_name = “Latitude” ;
lat:short_name = “Lat” ;
lat:units = “degree” ;
lat:GridCenter_Start = -20.125f ;
lat:GridCenter_End = 89.875f ;
float SAPRC99_ALK1_INDUSTRY(time, lat, lon) ;
SAPRC99_ALK1_INDUSTRY:short_name = “MICS_Asia_SAPRC99_ALK1_IND” ;
SAPRC99_ALK1_INDUSTRY:units = " Mmol/month" ;
SAPRC99_ALK1_INDUSTRY:gamap_category = “ANTHSRCE” ;

Which should I follow between Pre-gridded inventories from the same modeling domain as an area source without source characterization or attributes and Pre-gridded inventories processing for converting between different modeling domains with source characterization and attributes ?

Thank you.

Data description >

  • Gridded emissions are prepared in NetCDF format.
  • Filename format: MICS_Asia_xx(species name)_xxxx(year)_0.25×
  • For each species, emissions by five sectors are developed: POWER, INDUSTRY, RESIDENTIAL, TRANSPORT and AGRICULTURE (only for NH3).
  • Spatial resolution: 0.25 x 0.25 degree. Domain: 40.125 E – 179.875 E (center of grid, longitude), 20.125 S – 89.875 N (center of grid, latitude). Dimension of dataset: 560 (cols) x 441 (rows) x 12 (months).
  • Units of gridded emissions: For CB05 and SAPRC-99 mechanisms: Mmol/month/grid (106 mol/month/grid); For other species: Mg/month/grid (106 g/month/grid).

There may be better, off-the-shelf, solutions for you, but if you’re going to have to write your own, here are a few things that might help:

  • The emissions unit Mmol/month is almost certainly not true; instead, the actual unit is the non-MKS Mmol/month per grid cell. That means you need to take into account the ratio between the area of the input-cell and the area of the output-cell, for whatever re-gridding needs to happen. (It can be useful, at least conceptually, to convert to the MKS units Mmol/(M^2 month) as an intermediate form to be re-gridded.
  • SMOKE-format-compatible data is in Models-3 I/O API. That means you’re going to have to write your own (probably Fortran) program to do the conversion; note that so far, all attempts to treat this as a data-format instead of as a programming interface have failed.
  • The I/O API provides a number of tools that might save you a lot of work:
    • Module MODNCFIO provides easy high-level routines for dealing with netCDF
    • Module MODGCTP provides high level geo-spatial (map projection) transforms: you might want to
    • use routine GRID2XY to help you in computing interpolation-coefficients, and then
    • subroutines UNGRIDB to calculate those coefficients and BILIN to use them to do the actual interpolation
      [Sorry, this forum-software does not support nested lists properly…]

The EDGAR processing feature in SMOKE won’t work for MICS-Asia. It will probably require quite a bit of updates in SMOKE to make that happened. I think you will be better off to develop your own code to convert this pregridded MICS-Asia or contact the MICS-Asia developers for their assistance on how to retroject their emissions for other modeling domains.

1 Like

Thank you for your comment.

I have a question regarding Models-3 I/O API (like the AG file that can be output from Smkmerge. Is this like agts_l.area.20181103.4.Cheongju_100m.capss2016.ncf

ncdump -h agts_l.area.20181103.4.Cheongju_100m.capss2016.ncf
netcdf agts_l.area.20181103.4.Cheongju_100m.capss2016 {
TSTEP = UNLIMITED ; // (96 currently)
LAY = 1 ;
VAR = 45 ;
ROW = 240 ;
COL = 240 ;
TFLAG:long_name = "TFLAG " ;
TFLAG:var_desc = "Timestep-valid flags: (1) YYYYDDD or (2) HHMMSS " ;
float CO(TSTEP, LAY, ROW, COL) ;
CO:long_name = "CO " ;
CO:units = "moles/s " ;
CO:var_desc = "Model species CO " ;
float NO(TSTEP, LAY, ROW, COL) ;
NO:long_name = "NO " ;
NO:units = "moles/s " ;
NO:var_desc = "Model species NO " ;
float NO2(TSTEP, LAY, ROW, COL) ;
NO2:long_name = "NO2 " ;
NO2:units = "moles/s " ;
NO2:var_desc = "Model species NO2 " ;
ACET:long_name = "ACET " ;
ACET:units = "moles/s " ;
ACET:var_desc = "Model species ACET " ;

I have difficulty in finding the AG file that can be output from Smkmerge. Where can I find AG file?

(I succeeded in reprojecting MICS-Asia emission to my model grids using gdalwarp in GDAL library. As your comments, I shoud take into account cell area when converting to MKS units.)

I repeat: don’t try to treat this as a data format. There are internal data structures to maintain the integrity of the data, that you won’t understand. Analogously, do you treat MS-Word as a data format? – do you use a hex-editor to compose or edit it?

1 Like

I am not sure why are you looking for AG file but if you generate it through Smkmerge, it should be located under REPSTAT folder (./data/reports/{SCEN}/static). You can also find the exact location from Smkmerge log file. To generate AG file, you need to turn off the following flags in Smkmerge run setting:

setenv MRG_SPCMAT_YN N # Y produces speciated output
setenv MRG_TEMPORAL_YN N # Y produces temporally allocated output

1 Like


In case it is useful, I put together a Python Notebook to process MICS for use in CMAQ. You would need to modify the GRIDDESC to match your own domain. Then, run the notebook to create monthly representative days.

I haven’t used the emissions, so the results are untested. The output files are readable by IOAPI’s m3xtract, and I have spot checked by comparing fluxes of original file to regridded files for CO. Obviously, you should QA the emissions to make sure they provide the right masses before using them with CMAQ.

This link will take you to the github gist MICS.ipynb. Please, let me know if this works for you.