Hello SMOKE community,
I’m conducting source apportionment using SMOKE v4.8 for 13 SNAP emission sectors by running the zero-out method (BASE scenario plus 13 scenarios with each SNAP category zeroed via removing one category at a time) for each month of 2019. In my post processing, I’m getting non-additive results where the sum of individual SNAP contributions doesn’t equal the BASE scenario, and I’m seeking guidance on whether this is expected behavior.
Setup:
SMOKE v4.8, area sources, European domain
13 SNAP categories (energy, industry, transport, agriculture, etc.)
Year 2019, monthly SMOKE runs
Zero-out method: One SNAP category is not taken into consideration for each run, by removing its txt file from arinv.area.lst inside area inventory folder.
For post-processing, I computed total annual emissions per pollutant and per scenario by summing all hourly emission values over all grid cells and over all timesteps from the SMOKE EGTS output files. Specifically:
For each scenario (BASE and each zero-SNAP run), for each pollutant, I read all .ncf files, summed emissions over all time steps and spatial grid cells, without any averaging or normalization. The resulting value represents the total annual emission mass over the full modeling domain. Sectoral impacts were computed as:
ImpactSNAPi=BASE−zeroSNAPi. Then, I evaluated additivity by comparing:
∑ImpactSNAPi vs BASE.
| PMFINE | PMC | PM10 | NO | NO2 | SO2 | NH3 | CO | NOx | |
|---|---|---|---|---|---|---|---|---|---|
| IMPACTSUM | 620327566 | 351324279 | 971650572 | 48463517 | 47688032.5 | 39428038.75 | 102982685.5 | 373153510 | 96151520.5 |
| BASE-IMPACTSUM | 2584338 | 1943727 | 4529336 | 1797991.5 | 66881.25 | 88870.75 | 29080.5 | 16767804 | 1864914 |
| relative residual % | 0.00415 | 0.00550 | 0.00464 | 0.03577 | 0.00140 | 0.00225 | 0.00028 | 0.04300 | 0.01903 |
Small residual differences (<5%) were observed, so I am trying to understand the reasons. A colleague supports that successfully used this method some years ago with perfect additivity, so I’m concerned something is wrong with my approach. Does SMOKE distribute emissions, renormalize temporal splits, apply speciation or vertical allocation? When one sector is removed, can temporal redistribution slightly shift how other emissions are written due to floating point ordering, accumulation and minor nonlinearities and introduce small deviations? Is there available documentation on what normalization is performed (if it does) or whether it could cause the remaining non-zeroed profiles to be redistributed differently when one category is removed?
Thank you for any insights!