CO₂ Capture, Utilization & Storage

E4ST.CCUSType
struct CCUS <: Modification

CCUS(;file, groupby, co2_scalar=1e5, co2_step_quantity_limit=1e9)

This is a Modification that sets up markets for carbon captured by generators.

Keyword Arguments

  • file - a file to the table containing markets/prices for buying/selling carbon dioxide. See the ccus_paths table below, or summarize_table(::Val{:ccus_paths})
  • groupby - a String indicating how markets are grouped. I.e. "state".
  • co2_scalar - a Float64 for how much to scale the co2 variables by. This helps with numerical instability, given that some CO₂ steps can be very large and could bloat the RHS and bounds range of the model. A good rule of thumb is that this should be no less than 1e4 times smaller than co2_step_quantity_limit.
  • co2_step_quantity_limit - A Float64 for the maximum quantity of CO₂ that can be stored in any step.

Tables Added

  • ccus_paths - contains all the pathways to selling CO₂. The table includes the producing region, the sequstering region and the type of storage, market steps, the quantity available for storage, and the costs of storage and transport.

Table Columns Added

  • (:ccus_paths, :path_idx) - the index of this path.
  • (:ccus_paths, :price_total) - the cost of transporting and storing a short ton of CO₂ in this storage pathway.
  • (:ccus_paths, :stored_co2) - the amount of CO₂ stored via this storage path, measured in short tons.
  • (:ccus_paths, :storer_cost) - total storage cost of CCUS via this pathway, from the perspective of the sequesterer.
  • (:ccus_paths, :storer_revenue) - total revenue earned from storage for CCUS via this pathway. This is the amount paid by the EGU's to the sequesterer, equal to the clearing price minus the transport cost.
  • (:ccus_paths, :storer_profit) - total profit earned by storing carbon via this pathway, equal to the revenue minus the cost.
  • (:gen, :capt_co2) - the rate of capture of CO2 (calculated from emis_co2 and capt_co2_percent).
  • (:gen, :ccus_type) - the type of the step the CO₂ will be sent to (eor or saline).
  • (:gen, :price_capt_co2) - region-wide clearing price for the generator to pay for the transport and storage of a short ton of captured CO2.
  • (:gen, :price_capt_co2_store) - region-wide clearing price for the generator to pay for the storage of a short ton of captured CO2.
  • (:gen, :price_capt_co2_trans) - region-wide clearing price for the generator to pay for the transport of a short ton of captured CO2.

Creates the following tables in data:

  • ccus_paths - contains all pathways possible to sell CO₂.
    • producing_region - The producing region
    • storing_region - The storing region of the pathway
    • ccus_type - the type of ccus (eor or saline)
    • step_id - the number of the step (not very important other than for book-keeping)
    • step_quantity - the quantity of CO₂ that can be stored in this step
    • price_trans - the cost to transport 1 short ton of CO₂ from producing_region to storing_region
    • price_store - the cost to store 1 short ton of CO₂ in the step
  • ccus_storers - contains all the storers
    • storing_region - the storing region
    • step_id - the number of the step for the region
    • ccus_type - whether the step is eor, saline, or na
    • step_quantity - the number of short tons that may be stored in the step
    • price_store - the price to store a short ton of CO₂.
    • path_idxs - A list of indices representing the transportation paths to store carbon in this step. Indexes into ccus_paths table.
  • ccus_producers - contains all the producers, grouped by ccus_type and producing_region. This contains the following columns:
    • producing_region - the region the CO₂ will be sent from
    • ccus_type - the type of the step the CO₂ will be sent to (eor or saline)
    • path_idxs - A list of indices representing the transportation paths to send carbon from this step. Indexes into ccus_paths table.
    • gen_idxs - A list of generator indices that produce CO₂ in this region.

Model Modification:

  • Variables
    • co2_trans[1:nrow(ccus_paths), 1:nyear] - the amount of captured CO₂ transported to each step along the producer-producer pathway. It is measured in MMT and bounded by [0, max_co2_storage * 1.1].
  • Expressions
    • cost_ccus_obj[1:nyear] - the total cost of ccus, as added to the objective function.
    • co2_stor[1:nrow(ccus_storers), 1:nyear] - the amount of CO₂ stored by each storer (expression of co2_trans).
    • co2_sent[1:nrow(ccus_producers), 1:nyear] - the amount of CO₂ sent out from each sending region (expression of co2_trans). This includes CO₂ sent within the same region.
    • co2_prod[1:nrow(ccus_producers), 1:nyear] - the amount of CO₂ produced by each sending region (expression of electricity generation).
  • Constraints
    • cons_co2_stor[1:nrow(ccus_storers), 1:nyear] - the CO₂ stored at each injection site must not exceed step_quantity
    • cons_co2_bal[1:nrow(ccus_producers), 1:nyear] - the CO₂ balancing equation for each region, i.e. co2_prod == co2_sent.

Results Formulas

  • (:ccus_paths, :stored_co2_total) - amount of CO₂ stored for the year, measured in short tons.
  • (:ccus_paths, :storer_cost_total) - the total annual storage cost of CCUS via this pathway, from the perspective of the sequesterer.
  • (:ccus_paths, :storer_revenue_total) - the total annual revenue earned from CCUS via this pathway. It is the amount paid by the EGUs to the sequesterer, which equals the clearing price minus the transport cost.
  • (:ccus_paths, :storer_profit_total) - the total annual profit earned by storing carbon via this pathway.
  • (:ccus_paths, :storer_cost_per_short_ton) - the total storage cost of CCUS per short ton via this pathway, from the perspective of the sequesterer.
  • (:ccus_paths, :storer_revenue_per_short_ton) - the total revenue earned from CCUS per short ton via this pathway. It is the amount paid by the EGUs to the sequesterer, which equals the clearing price minus the transport cost.
  • (:ccus_paths, :storer_profit_per_short_ton) - the total profit earned by storing a short ton of CO₂ via this pathway.
  • (:gen, :<name>_cost_capt_co2) - the total cost paid by generators to transport and store a short ton of captured CO2, computed with the clearing price
  • (:gen, :<name>_price_capt_co2_per_short_ton) - the average price paid by generators to transport and store a short ton of captured CO2, computed with the clearing price

Example Result Queries

  • compute_result(data, :gen, :stored_co2_total, :ccus_type=>"eor", "y2030")
  • compute_result(data, :gen, :cost_capt_co2, :ccus_type=>"eor", yr_idx)
  • compute_result(data, :gen, :cost_capt_co2_store, :gentype=>"coalccs", yr_idx)
  • compute_result(data, :gen, :cost_capt_co2_trans, :, yr_idx)
  • compute_result(data, :ccus_paths, :storer_cost_total, :storing_region=>"narnia")
  • compute_result(data, :ccus_paths, :storer_revenue_total, :producing_region=>"narnia")
  • compute_result(data, :ccus_paths, :storer_profit_total, :ccus_type=>"eor")

See also:

source
E4ST.modify_setup_data!Method
modify_setup_data!(mod::CCUS, config, data) -> nothing

Does the following:

  • Adds a column for carbon captured, capt_co2, based on emis_co2, and capt_co2_percent
  • reduces emis_co2 by capt_co2
  • Splits up carbon capturing generators into 2 separate generators - one for "saline" and one for "eor", and adjusts the eor emissions by config[eor_leakage_rate]
  • Add a column for ccus_type - either "eor", "saline", or "na"
  • Adds sets of indices to data[:ccus_gen_sets]::Vector{Vector{Int64}}
source
E4ST.modify_model!Method
modify_model!(mod::Modification, config, data, model)

Apply mod to the model, called in setup_model

source
E4ST.summarize_tableMethod
summarize_table(::Val{:ccus_paths})
column_namedata_typeunitrequireddescription
producing_regionStringE4ST.NAtrueThe name of the producing region (type of regions specified by groupby kwarg of CCUS mod
storing_regionStringE4ST.NAtrueThe name of the sequestering region (type of regions specified by groupby kwarg of CCUS mod
step_idInt64E4ST.NAtrueThe number of this particular market step
ccus_typeStringE4ST.NAtrueThe type of storage. Can be "eor" or "saline"
step_quantityFloat64E4ST.ShortTonsPerYeartrueThe annual quantity of CO2 that can be stored in the step
price_transFloat64E4ST.DollarsPerShortTontrueThe cost of transporting a short ton of CO2 for this producer-storing_region pair
price_storeFloat64E4ST.DollarsPerShortTontrueThe cost to store a short ton of CO2 in this storage step
source