Code for: Human health effects of amine-based carbon capture and storage in the US electricity sector
Data files
May 22, 2026 version files 91.37 KB
-
CCS_grid_emissions_code.zip
66.58 KB
-
README.md
24.79 KB
Abstract
Post-combustion carbon capture and storage (CCS) can reduce CO2 emissions from coal and natural gas combined cycle (NGCC) power plants, yet the human health externalities are not well understood. This code was used to generate the results in "Human Health Effects of Amine-Based Carbon Capture and Storage in the US Electricity Sector." This code allocates load to specific natural gas combined cycle and coal-fired power plants in the U.S. through 2050 and estimates air pollutant emissions from CCS and non-CCS plants. Results from this code can be used as an input for an air quality model for estimating health damages from the air pollutant emissions.
This repository contains the MATLAB code and input data used to estimate plant-level emissions and costs for post-combustion carbon capture and storage (CCS) retrofits at U.S. coal and natural gas combined cycle (NGCC) power plants.
Requirements
- MATLAB (R2019a or later; no additional toolboxes required)
- NREL Cambium 2023 dataset (see below)
Repository Structure
McGrid_Dryad/
├── Code/
│ └── CCS_emissions_code.m # Main emissions and cost model
├── Input_Data/
│ ├── power_plant_geologic_storage_control_technology_parameters.csv
│ └── neighboring_GEA_regions/ # 18 CSV files defining neighboring grid regions
└── Output/ # Output CSVs are written here after running
Downloading the Cambium 2023 Dataset
The model requires hourly electricity generation data from the NREL Cambium 2023 dataset, which must be downloaded separately and is not included in this repository due to its size (864 files).
- Navigate to the NREL Scenario Viewer: https://scenarioviewer.nlr.gov/
- Download the Cambium 2023 hourly data for the following scenarios:
HighRECostLowRECostMidCase
- Place the downloaded files in the following directory structure within
Input_Data/:
Input_Data/
└── Cambium_2023/
├── HighRECost/
│ └── Cambium23_HighRECost_hourly_<region>_<year>.csv
├── LowRECost/
│ └── Cambium23_LowRECost_hourly_<region>_<year>.csv
└── MidCase/
└── Cambium23_MidCase_hourly_<region>_<year>.csv
How to Run
- Open MATLAB and set the working directory to
McGrid_Dryad/Code/. - Open and run
CCS_emissions_code.m.
Output CSV files will be written to the Output/ folder at the root of the repository.
Model Description
The model loops over all combinations of the following scenarios and produces plant-level emission and cost estimates for each:
| Parameter | Options |
|---|---|
| Grid scenario | HighRECost, LowRECost, MidCase |
| Analysis year | 2025, 2030, 2040, 2050 |
| CCS eligibility criteria | Less30yearsGreater100MW, Less20yearsGreater300MW, Less10yearsGreater300MW, Less10yearsGreater300MWCF40 |
| CCS adoption scenario | Full CCS, No CCS |
| Emissions scenario | min (99% CO2 removal), med (95% CO2 removal), max (90% CO2 removal) |
| Cost scenario | min, med, max |
Key Modeling Steps
- Plant selection: NGCC and coal plants are identified from the power plant database for each of the 18 GEA grid regions. Plants are retired based on assumed lifetimes (52 years for coal, 40 years for NGCC). If no eligible plants exist in a region, neighboring regions are used.
- Demand allocation: Each plant is assigned a share of regional electricity demand based on its historical generation capacity fraction, scaled to total annual demand from the Cambium hourly data.
- Emissions calculation: Plant-level emissions (kg) are computed for NOx, SO2, CO2, CH4, N2O, CO2-equivalent, PM2.5, and NH3. For CCS plants under the Full CCS scenario:
- An energy penalty of 11% (NGCC) or 16% (coal) is applied to account for increased fuel use.
- CO2 emissions are reduced by the capture efficiency (99%, 95%, or 90%).
- NH3 emissions from the amine scrubbing solvent are added using emission factors from the literature.
- Methane leakage from increased natural gas consumption is included for NGCC plants.
- CO2-equivalent is calculated using GWP values of 30 for CH4 and 273 for N2O.
- Cost calculation (NOTE: Not used in the publication): Private CCS costs (2024 USD) are estimated for capture, transport, storage, SCR (selective catalytic reduction), and FGD (flue gas desulfurization), discounted at 5% per year. The 45Q tax credit ($85/tonne CO2) is also computed.
Output Files
For each scenario combination, five CSV files are written to Output/:
emission_results_ngcc_nonccs_combined_...csv— Non-CCS NGCC plants, all regions combinedemission_results_ngcc_ccs_combined_...csv— CCS-eligible NGCC plants, all regions combinedemission_results_coal_nonccs_combined_...csv— Non-CCS coal plants, all regions combinedemission_results_coal_ccs_combined_...csv— CCS-eligible coal plants, all regions combinedemission_results_all_combined_...csv— All plant types combined
Each file contains the full plant database columns plus the following computed columns:
| Column | Description | Units |
|---|---|---|
| meets_criteria | Whether plant meets CCS eligibility criteria | binary |
| percentage_generation | Plant's share of regional generation | fraction |
| amount_of_demand_met_by_plant_MWh | Annual energy attributed to plant | MWh |
| NOx_emissions_kg | NOx emissions | kg |
| SO2_emissions_kg | SO2 emissions | kg |
| CO2_emissions_kg | CO2 emissions | kg |
| CH4_emissions_kg | CH4 emissions | kg |
| N2O_emissions_kg | N2O emissions | kg |
| CO2_eq_emissions_kg | CO2-equivalent emissions | kg |
| PM25_emissions_kg | PM2.5 emissions | kg |
| NH3_emissions_kg | NH3 emissions | kg |
| cost_capture | Cost of CO2 capture | 2024 USD |
| cost_transport | Cost of CO2 transport | 2024 USD |
| cost_storage | Cost of CO2 geologic storage | 2024 USD |
| SCR_cost | Cost of selective catalytic reduction (NOx control) | 2024 USD |
| FGD_cost | Cost of flue gas desulfurization (SO2 control) | 2024 USD |
| 45Q_tax_credit | Value of 45Q tax credit | 2024 USD |
Missing Data in Power Plant Database
The file power_plant_geologic_storage_control_technology_parameters.csv contains empty cells in three groups. Empty cells have been left blank (rather than filled with a placeholder value) to avoid introducing errors in the MATLAB model, which reads this file numerically. The empty cells and their causes are described below:
PM2.5 emission rate (column 22) - 6 plants
Six plants do not have a PM2.5 emission rate value. This data was not reported for these plants in the eGRID source database and is therefore not available (N/A). These plants are still included in the model; their PM2.5 output emissions are recorded as zero.
Fuel_Specifics (column 23) - 22 plants
Twenty-two plants do not have a value in the Fuel_Specifics column. This field is a descriptive label sourced from eGRID and was not reported for these plants. This column is not used in the emissions model.
GEA region code and geographic attributes (columns 25-43) - 14 plants
Fourteen plants are missing values across all geographic columns (GEA_region_code through y coordinate). These plants could not be spatially matched to a GEA grid region during the GIS spatial join, most likely because they are located in U.S. territories or areas outside the coverage of the GEA region shapefile. Because the model filters plants by GEA region code (column 25), these 14 plants are effectively excluded from all model calculations.
Power Plant Database Column Descriptions
The file power_plant_geologic_storage_control_technology_parameters.csv contains one row per plant (777 plants total). Emission rates are sourced from the U.S. EPA Emissions & Generation Resource Integrated Database (eGRID). Geologic storage distance and cost data are derived from the U.S. DOE National Energy Technology Laboratory (NETL) storage resource databases. All columns are described below.
| Column # | Column Name | Description |
|---|---|---|
| 1 | Join_Count | Number of matches from GIS spatial join operation (GIS artifact; not used in model) |
| 2 | TARGET_FID | Feature identifier from first GIS spatial join (GIS artifact; not used in model) |
| 3 | Join_Count_1 | Number of matches from second GIS spatial join operation (GIS artifact; not used in model) |
| 4 | TARGET_FID_1 | Feature identifier from second GIS spatial join (GIS artifact; not used in model) |
| 5 | DOE_EIA_ORIS_plant_or_facility_code | U.S. Energy Information Administration (EIA) unique plant identifier |
| 6 | latitude | Plant latitude (decimal degrees) |
| 7 | longitude | Plant longitude (decimal degrees) |
| 8 | Number_of_units | Number of generating units at the plant |
| 9 | Number_of_generators | Number of individual generators at the plant |
| 10 | Coal_1_Gas_2 | Plant fuel type used in model (1 = coal, 2 = natural gas combined cycle (NGCC)) |
| 11 | Plant_primary_coal_oil_gas__other_fossil_fuel_category | Descriptive fuel type label from eGRID (e.g., "COAL", "Natural Gas Fired Combined Cycle") |
| 12 | Plant_capacity_factor | Annual capacity factor — ratio of actual annual generation to maximum possible generation at nameplate capacity (unitless fraction, 0–1) |
| 13 | Plant_nameplate_capacity__MW_ | Plant nameplate (maximum rated) generating capacity (MW) |
| 14 | Nonbaseload_Factor | Fraction of generation occurring under non-baseload operating conditions, from eGRID (unitless fraction) |
| 15 | Plant_annual_net_generation__MWh_ | Annual net electricity generation delivered to the grid (MWh) |
| 16 | Plant_annual_NOx_total_output_emission_rate__lb_MWh_ | Annual NOx (nitrogen oxides) total output emission rate (lb/MWh) |
| 17 | Plant_annual_SO2_total_output_emission_rate__lb_MWh_ | Annual SO2 (sulfur dioxide) total output emission rate (lb/MWh) |
| 18 | Plant_annual_CO2_total_output_emission_rate__lb_MWh_ | Annual CO2 (carbon dioxide) total output emission rate (lb/MWh) |
| 19 | Plant_annual_CH4_total_output_emission_rate__lb_MWh_ | Annual CH4 (methane) total output emission rate (lb/MWh) |
| 20 | Plant_annual_N2O_total_output_emission_rate__lb_MWh_ | Annual N2O (nitrous oxide) total output emission rate (lb/MWh) |
| 21 | Plant_annual_CO2_equivalent_total_output_emission_rate__lb_MWh_ | Annual CO2-equivalent total output emission rate from eGRID (lb/MWh); not used in model as CO2e is recalculated using scenario-specific GWP values |
| 22 | PM_2_5_Emission_Rate__lb_MWh_ | Annual PM2.5 (fine particulate matter) emission rate (lb/MWh) |
| 23 | Fuel_Specifics | More specific fuel type description (e.g., "Conventional Steam Coal", "Natural Gas Fired Combined Cycle") |
| 24 | Year | Year the plant came online (commission year) |
| 25 | GEA_region_code | GEA grid region code assigned to the plant (1–18; see GEA Region Codes table) |
| 26 | transgrp | Transmission group — electric grid administrative zone name |
| 27 | OBJECTID_1 | GIS object identifier from grid region shapefile (GIS artifact; not used in model) |
| 28 | st | U.S. state abbreviation where the plant is located |
| 29 | rto | Regional Transmission Organization (RTO) or Independent System Operator (ISO) code |
| 30 | interconne | Electrical interconnection the plant belongs to (Eastern, Western, or ERCOT) |
| 31 | country | Country (all entries are USA) |
| 32 | custreg | Customer region label (broad geographic grouping) |
| 33 | nercr | North American Electric Reliability Corporation (NERC) reliability region |
| 34 | transreg | Transmission region label |
| 35 | cendiv | U.S. Census Bureau division (e.g., ESC = East South Central) |
| 36 | intercon_1 | Electrical interconnection label (duplicate of column 30) |
| 37 | st_interco | State and interconnection combined identifier |
| 38 | usda_regio | U.S. Department of Agriculture (USDA) regional label |
| 39 | aggreg | Aggregation label combining state and transmission region (e.g., "MS_SERTP") |
| 40 | labelx | GIS label placement x coordinate (GIS artifact; not used in model) |
| 41 | labely | GIS label placement y coordinate (GIS artifact; not used in model) |
| 42 | x | Projected x coordinate in ArcGIS spatial reference system (GIS artifact; not used in model) |
| 43 | y | Projected y coordinate in ArcGIS spatial reference system (GIS artifact; not used in model) |
| 44 | NEAR_FID | GIS feature ID of the nearest geologic storage site polygon (GIS artifact; used to derive column 45) |
| 45 | Distance_to_storage_meters | Distance from the plant to the nearest viable geologic CO2 storage site (meters) |
| 46 | Cost_range | Geologic storage cost range category from NETL data ($/tonne CO2; e.g., "4 - 5.99") |
| 47 | Data_Origin | Source type for geologic storage cost data ("Cost Analysis" or "Storage Window") |
| 48 | Cost_Avg | Average geologic CO2 storage cost from NETL data ($/tonne CO2) |
| 49 | SO2_control | Whether the plant has an existing flue gas desulfurization (FGD) unit for SO2 control (1 = yes, 0 = no) |
| 50 | NOx_control | Whether the plant has an existing selective catalytic reduction (SCR) unit for NOx control (1 = yes, 0 = no) |
| 51 | Hg Control | Whether the plant has existing mercury (Hg) emission control equipment (1 = yes, 0 = no) |
| 52 | Younger 30 Years | Whether the plant is less than 30 years old as of the analysis year (1 = yes, 0 = no) |
| 53 | Younger 20 Years | Whether the plant is less than 20 years old as of the analysis year (1 = yes, 0 = no) |
| 54 | Younger 10 Years | Whether the plant is less than 10 years old as of the analysis year (1 = yes, 0 = no) |
| 55 | Greater 100 MW | Whether the plant nameplate capacity exceeds 100 MW (1 = yes, 0 = no) |
| 56 | Greater 300 MW | Whether the plant nameplate capacity exceeds 300 MW (1 = yes, 0 = no) |
| 57 | Capacity Factor Greater 15% | Whether the plant capacity factor exceeds 15% (1 = yes, 0 = no) |
| 58 | Capacity Factor Greater 40% | Whether the plant capacity factor exceeds 40% (1 = yes, 0 = no) |
Neighboring GEA Regions Files
The neighboring_GEA_regions/ folder contains 18 CSV files, one per GEA region. Each file is named neighbors_<REGION>.csv and contains a single column of GEA region codes (integers, no header) listing the regions that are geographically adjacent to the named region. These files are used by the model when a region contains no eligible plants: the model looks to neighboring regions to find suitable coal or NGCC plants as substitutes.
Example: neighbors_CAISO.csv contains the codes for NorthernGrid_South (9), NorthernGrid_West (10), and WestConnect_South (18), which border the CAISO region.
GEA Region Codes
| Code | Region |
|---|---|
| 1 | CAISO |
| 2 | ERCOT |
| 3 | FRCC |
| 4 | ISONE |
| 5 | MISO_Central |
| 6 | MISO_North |
| 7 | MISO_South |
| 8 | NorthernGrid_East |
| 9 | NorthernGrid_South |
| 10 | NorthernGrid_West |
| 11 | NYISO |
| 12 | PJM_East |
| 13 | PJM_West |
| 14 | SERTP |
| 15 | SPP_North |
| 16 | SPP_South |
| 17 | WestConnect_North |
| 18 | WestConnect_South |
