CO₂ Capture, Utilization & Storage
E4ST.CCUS — Typestruct CCUS <: Modification
CCUS(;file, groupby)This is a Modification that sets up markets for carbon captured by generators.
file- a file to the table containing markets/prices for buying/selling carbon dioxide. See theccus_pathstable below, orsummarize_table(::Val{:ccus_paths})groupby- a String indicating how markets are grouped. I.e. "state".
Creates the following tables in data:
ccus_paths- contains all pathways possible to sell CO₂.producing_region- The producing regionstoring_region- The storing region of the pathwayccus_type- the type of ccus (eororsaline)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 stepprice_trans- the cost to transport 1 short ton of CO₂ fromproducing_regiontostoring_regionprice_store- the cost to store 1 short ton of CO₂ in the step
ccus_storers- contains all the storersstoring_region- the storing regionstep_id- the number of the step for the regionccus_type- whether the step iseororsaline.step_quantity- the number of short tons that may be stored in the stepprice_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 intoccus_pathstable.
ccus_producers- contains all the producers, grouped byccus_typeandproducing_region. This contains the following columns:producing_region- the region the CO₂ will be sent fromccus_type- the type of the step the CO₂ will be sent to (eororsaline)path_idxs- A list of indices representing the transportation paths to send carbon from this step. Indexes intoccus_pathstable.gen_idxs- A list of generator indices that produce CO₂ in this region.
Creates the following variables/expressions
co2_trans[1:nrow(ccus_paths), 1:nyear]- the amount of CO₂ transported along this producer-producer pathway (variable)co2_stor[1:nrow(ccus_storers), 1:nyear]- the amount of CO₂ stored by each storer (expression ofco2_trans)co2_prod[1:nrow(ccus_producers), 1:nyear]- the amount of CO₂ produced by each sending region (expression of electricity generation)co2_sent[1:nrow(ccus_producers), 1:nyear]- the amount of CO₂ sent out from each sending region (expression ofco2_trans). This includes CO₂ sent within the same region.cost_ccus_obj[1:nyear]- the total cost of ccus, as added to the objective function.
Creates the following constraints
cons_co2_stor[1:nrow(ccus_storers), 1:nyear]- the CO₂ stored at each injection site must not exceedstep_quantitycons_co2_bal[1:nrow(ccus_producers), 1:nyear]- the CO₂ balancing equation for each region, i.e.co2_prod == co2_sent.
Accessing Results
Results are stored in 2 places; the ccus_paths table, and the gen table.
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)- `computeresult(data, :ccuspaths, :storercosttotal, :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:
E4ST.modify_raw_data! — Methodmodify_raw_data!(mod::CCUS, config, data) -> nothingLoads mod.file into data[:ccus_paths]. See summarize_table(::Val{:ccus_paths}) for more info.
E4ST.modify_setup_data! — Methodmodify_setup_data!(mod::CCUS, config, data) -> nothingDoes the following:
- Adds a column for carbon captured,
capt_co2, based onemis_co2, andcapt_co2_percent - reduces
emis_co2bycapt_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}}
E4ST.modify_model! — Methodmodify_model!(mod::Modification, config, data, model)Apply mod to the model, called in setup_model
E4ST.modify_results! — Methodmodify_results!(mod::CCUS, config, data)E4ST.summarize_table — Methodsummarize_table(::Val{:ccus_paths})| column_name | data_type | unit | required | description |
|---|---|---|---|---|
producing_region | String | E4ST.NA | true | The name of the producing region (type of regions specified by groupby kwarg of CCUS mod |
storing_region | String | E4ST.NA | true | The name of the sequestering region (type of regions specified by groupby kwarg of CCUS mod |
step_id | Int64 | E4ST.NA | true | The number of this particular market step |
ccus_type | String | E4ST.NA | true | The type of storage. Can be "eor" or "saline" |
step_quantity | Float64 | E4ST.ShortTonsPerYear | true | The annual quantity of CO2 that can be stored in the step |
price_trans | Float64 | E4ST.DollarsPerShortTon | true | The cost of transporting a short ton of CO2 for this producer-storing_region pair |
price_store | Float64 | E4ST.DollarsPerShortTon | true | The cost to store a short ton of CO2 in this storage step |