CO₂ Capture, Utilization & Storage
E4ST.CCUS
— Typestruct 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.
file
- a file to the table containing markets/prices for buying/selling carbon dioxide. See theccus_paths
table below, orsummarize_table(::Val{:ccus_paths})
groupby
- aString
indicating how markets are grouped. I.e. "state".co2_scalar
- aFloat64
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 than1e4
times smaller thanco2_step_quantity_limit
.co2_step_quantity_limit
- AFloat64
for the maximum quantity of CO₂ that can be stored in any step.
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 (eor
orsaline
)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_region
tostoring_region
price_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 iseor
orsaline
.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_paths
table.
ccus_producers
- contains all the producers, grouped byccus_type
andproducing_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 (eor
orsaline
)path_idxs
- A list of indices representing the transportation paths to send carbon from this step. Indexes intoccus_paths
table.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_quantity
cons_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)
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:
E4ST.modify_raw_data!
— Methodmodify_raw_data!(mod::CCUS, config, data) -> nothing
Loads 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) -> nothing
Does the following:
- Adds a column for carbon captured,
capt_co2
, based onemis_co2
, andcapt_co2_percent
- reduces
emis_co2
bycapt_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 |