2.8.19. Processing hour-specific CEM data

Smkinven can allocate annual emissions to hourly data using the hourly heat input from the standard local time CEM data. Smkinven must match the ORIS/boiler combinations that appear in the standard local time CEM data to sources in the annual emissions inventory. Smkinven will first skip any ORIS/boiler combinations in the input CEM data that do not appear in the summary list (CEMSUM) created by CEMScan; it is important that users ensure that their input CEM data and CEM summary file remain consistent. Smkinven will also skip any CEM ORIS IDs that are not in the inventory and also any ORIS and boiler combinations that are not in the inventory. Note that the inventory may contain sources with valid ORIS IDs but blank boiler codes; none of these sources will be matched to the CEM data. The format of the CEM hour-specific data is shown in Table 6.22, “CEM Format for individual hour-specific data files”.

Data Check : Before calculating the hourly emissions, Smkinven first checks if the hourly NOx emissions from the CEM data are zero or null. If so, Smkinven checks if the hourly heat input, gross load, and steam load values are zero or null before all output values will be set to zero. In this case a warning will be written to the Smkinven log file.

Special handling is needed when processing SO2 and NOx emissions. If the summed annual CEM SO2 and NOx emissions for a particular ORIS/boiler combination are zero or null, Smkinven will calculate hourly emissions based on the SO2 and NOx emissions in the annual inventory rather than using the hourly CEM data. If the summed annual SO2 and NOxemissions are valid but a particular hour is missing the hourly SO2 and NOx emissions, Smkinven will set the hourly SO2 and NOx emissions to zero and write a warning to the log file.

Calculation: When calculating hourly emissions, Smkinven must use data from the annual inventory. If any of the matching inventory sources are missing the annual emissions value, the program will exit with an error. Smkinven will start with the hourly emissns from the CEM data and then disaggregate the emissions to the matching inventory sources like so:

Hourly NOx emissions for source i = (annual NOx emissions for source i / summed annual NOx emissions for all matching sources ) * hourly CEM NOx emissions * pounds to tons conversion

If the summed annual emissions for all matching sources is zero, the hourly CEM emissions will be distributed evenly to the matching inventory sources. For all other pollutants, the hourly emissions are calculated as;

Hourly emissions for source i = annual factor * annual emissions for source i

The annual factor in the above calculation will preferentially be:

Annual factor = hourly heat input for ORIS/boiler / annual summed heat input for ORIS/boiler

If heat input data are not available, Smkinven will fallback to steam load followed by gross load. The heat input values do not need to be disaggregated to the matching inventory sources because the same disaggregation factor would be used for both the hourly heat input and summed heat input.

Used to calculate hourly flow rates from hourly heat input when reading CEM data. If FLOW_RATE_FACTOR is set to zero or unset, then Smkinven will not calculate hourly flow rates.

Hourly flow rate (m3/s) = [FLOW_RATE_FACTOR (ft3/MMBTU) * hourly heat input (MMBTU/hr) * 0.02831 m3/ft3] / 3600 s/hr

Smkinven then needs to assign the ORIS/boiler-level hourly flow rate to the matching inventory sources. To do this, it sums the flow rate for sources with the same stack. Smkinven uses the plant ID and stack ID to determine which sources feed into the same stack. Script setting information is available at Section 4.14.3.2, “Input Environment Variables”.

NOTE: It is not recommended to run Smkinven for an entire year's worth of CEM data since the memory requirements are large. Instead, users should process only the CEM data for their episode of interest. This may require multiple runs of Smkinven to break up large episodes.