Retrofits
E4ST.Retrofit — TypeRetrofit <: ModificationAbstract supertype for retrofits. Must implement the following interfaces:
- (required)
can_retrofit(ret::Retrofit, gen::DataFrameRow)-> ::Bool- returns whether or not a generator row can be retrofitted. - (required)
get_retrofit(ret::Retrofit, gen)-> newgen::AbstractDict- returns a new row to be added to the gen table. - (optional)
init!(ret::Retrofit, config, data)- initialize data with theRetrofitby adding any necessary columns to the gen table, etc. Defaults to do nothing.
The following methods are defined for Retrofit, so you do not define any of the ordinary Modification methods for any subtype of Retrofit - only implement the above interfaces.
E4ST.modify_setup_data! — Methodmodify_setup_data!(ret::Retrofit, config, data)- Calls
init!(ret::Retrofit, config, data)to initialize the data. - Makes a
Dictindata[:retrofits]to keep track of the retrofits being produced for each retrofit. - Loops through the rows of the
gentable- Checks to see if the can be retrofitted via
can_retrofit(ret::Retrofit, row) - Constructs the new retrofitted generator via
get_retrofit(ret::Retrofit, row) - Constructs one new one for each year in the simulation.
- Checks to see if the can be retrofitted via
E4ST.modify_model! — Methodmodify_model!(ret::Retrofit, config, data, model)Modifies the model for retrofits. Only happens once, for all retrofits.
- Constrains the sum of the capacities of the original generators and the retrofits is less than the original max and greater than the original min by adding constraints
cons_pcap_gen_retro_minandcons_pcap_gen_retro_max - Removes the
cons_pcap_gen_noaddconstraints for prior to and on the retrofit year. - Fix the capacity of the new retrofit generators to 0 before the retrofit year.
E4ST.init! — Methodinit!(ret::Retrofit, config, data)initialize data with the Retrofit by adding any necessary columns to the gen table, etc. Defaults to do nothing.
E4ST.can_retrofit — Functioncan_retrofit(ret::Retrofit, row) -> ::BoolReturns whether or not a generator row can be retrofitted.
E4ST.get_retrofit — Functionget_retrofit(ret::Retrofit, row) -> ::AbstractDictReturns a new retrofit based off of row, to be added to the gen table. Note that the capex should be included in the retrofitted generator WITHOUT the existing generator's capex. I.e. capex for the retrofit should be only the capital costs for the retrofit, not including the initial capital costs for building the generator.
Coal CCS Retrofit
E4ST.CoalCCSRetrofit — TypeCoalCCSRetrofit(;kwargs...) <: RetrofitCoalCCSRetrofit represents a Retrofit for changing coal-burning plants (gentype="coal"), to have carbon capture technology, and be changed to (gentype="coalccsusretrofit")
Keyword Arguments:
crf = 0.115642438- the capital recovery factor (default value assumes 12 year economic lifetime)capt_co2_percent = 0.9- (between 0 and 1) the percentage of CO₂ captured by the retrofitreduce_nox_percent = 0.5- (between 0 and 1) the percent reduction in NOₓ emissionsreduce_so2_percent = 1.0- (between 0 and 1) the percent reduction in SO₂ emissionsreduce_pm25_percent = 0.35- (between 0 and 1) the percent reduction in PM2.5 emissions
Other Requirements:
- The
gentable must have aheat_ratecolumn - The
gentable must either have apcap_plant_avgcolumn, or it will be assumed that each generator represents a single plant. This value is used with the cost curves.
Cost adjustment values come from a regression in EPA Schedule 6 data.