Skip to content

Commit

Permalink
Assign variables at the beginning functions
Browse files Browse the repository at this point in the history
  • Loading branch information
qluo0320github committed Dec 1, 2023
1 parent c0c89b8 commit 2a1616e
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 52 deletions.
3 changes: 2 additions & 1 deletion src/load_inputs/load_generators_data.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ function load_generators_data!(setup::Dict, path::AbstractString, inputs_gen::Di
filename = "Generators_data.csv"
gen_in = load_dataframe(joinpath(path, filename))


# Store DataFrame of generators/resources input data for use in model
inputs_gen["dfGen"] = gen_in

Expand All @@ -23,7 +24,6 @@ function load_generators_data!(setup::Dict, path::AbstractString, inputs_gen::Di
# Add Resource IDs after reading to prevent user errors
gen_in[!,:R_ID] = 1:G


scale_factor = setup["ParameterScale"] == 1 ? ModelScalingFactor : 1
## Defining sets of generation and storage resources

Expand Down Expand Up @@ -418,6 +418,7 @@ end
Function for reading input parameters related to co-located VRE-storage resources
"""
function load_vre_stor_data!(inputs_gen::Dict, setup::Dict, path::AbstractString)

error_strings = String[]
dfGen = inputs_gen["dfGen"]
inputs_gen["VRE_STOR"] = "VRE_STOR" in names(dfGen) ? dfGen[dfGen.VRE_STOR.==1,:R_ID] : Int[]
Expand Down
18 changes: 10 additions & 8 deletions src/model/core/co2.jl
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,10 @@ function co2!(EP::Model, inputs::Dict)
Z = inputs["Z"] # Number of zones
MULTI_FUELS = inputs["MULTI_FUELS"]
SINGLE_FUEL = inputs["SINGLE_FUEL"]

fuel_CO2 = inputs["fuel_CO2"] # CO2 content of fuel (t CO2/MMBTU or ktCO2/Billion BTU)
fuel_cols = inputs["FUEL_COLS"]
max_fuels = inputs["MAX_NUM_FUELS"]
omega = inputs["omega"]
### Expressions ###
# CO2 emissions from power plants in "Generators_data.csv"
# If all the CO2 capture fractions from Generators_data are zeros, the CO2 emissions from thermal generators are determined by fuel consumption times CO2 content per MMBTU
Expand All @@ -71,7 +73,7 @@ function co2!(EP::Model, inputs::Dict)
if y in SINGLE_FUEL
((1-dfGen[y, :Biomass]) *(EP[:vFuel][y, t] + EP[:vStartFuel][y, t]) * fuel_CO2[dfGen[y,:Fuel]])
else
sum(((1-dfGen[y, :Biomass]) *(EP[:vMulFuels][y, i, t] + EP[:vMulStartFuels][y, i, t]) * fuel_CO2[dfGen[y,inputs["FUEL_COLS"][i]]]) for i = 1:inputs["MAX_NUM_FUELS"])
sum(((1-dfGen[y, :Biomass]) *(EP[:vMulFuels][y, i, t] + EP[:vMulStartFuels][y, i, t]) * fuel_CO2[dfGen[y,fuel_cols[i]]]) for i = 1:max_fuels)
end)
else
@info "Using the CO2 module to determine the CO2 emissions of CCS-equipped plants"
Expand All @@ -84,8 +86,8 @@ function co2!(EP::Model, inputs::Dict)
(1-dfGen[y, :Biomass] - dfGen[y, :CO2_Capture_Fraction]) * EP[:vFuel][y, t] * fuel_CO2[dfGen[y,:Fuel]]+
(1-dfGen[y, :Biomass] - dfGen[y, :CO2_Capture_Fraction_Startup]) * EP[:vStartFuel][y, t] * fuel_CO2[dfGen[y,:Fuel]]
else
sum((1-dfGen[y, :Biomass] - dfGen[y, :CO2_Capture_Fraction]) * EP[:vMulFuels][y, i, t] * fuel_CO2[dfGen[y, inputs["FUEL_COLS"][i]]] for i = 1:inputs["MAX_NUM_FUELS"])+
sum((1-dfGen[y, :Biomass] - dfGen[y, :CO2_Capture_Fraction_Startup]) * EP[:vMulStartFuels][y, i, t] * fuel_CO2[dfGen[y, inputs["FUEL_COLS"][i]]] for i = 1:inputs["MAX_NUM_FUELS"])
sum((1-dfGen[y, :Biomass] - dfGen[y, :CO2_Capture_Fraction]) * EP[:vMulFuels][y, i, t] * fuel_CO2[dfGen[y, fuel_cols[i]]] for i = 1:max_fuels)+
sum((1-dfGen[y, :Biomass] - dfGen[y, :CO2_Capture_Fraction_Startup]) * EP[:vMulStartFuels][y, i, t] * fuel_CO2[dfGen[y, fuel_cols[i]]] for i = 1:max_fuels)
end)

# CO2 captured from power plants in "Generators_data.csv"
Expand All @@ -94,17 +96,17 @@ function co2!(EP::Model, inputs::Dict)
dfGen[y, :CO2_Capture_Fraction] * EP[:vFuel][y, t] * fuel_CO2[dfGen[y,:Fuel]]+
dfGen[y, :CO2_Capture_Fraction_Startup] * EP[:eStartFuel][y, t] * fuel_CO2[dfGen[y,:Fuel]]
else
sum(dfGen[y, :CO2_Capture_Fraction] * EP[:vMulFuels][y, i, t] * fuel_CO2[dfGen[y, inputs["FUEL_COLS"][i]]] for i = 1:inputs["MAX_NUM_FUELS"])+
sum(dfGen[y, :CO2_Capture_Fraction_Startup] * EP[:vMulStartFuels][y, i, t] * fuel_CO2[dfGen[y, inputs["FUEL_COLS"][i]]] for i = 1:inputs["MAX_NUM_FUELS"])
sum(dfGen[y, :CO2_Capture_Fraction] * EP[:vMulFuels][y, i, t] * fuel_CO2[dfGen[y, fuel_cols[i]]] for i = 1:max_fuels)+
sum(dfGen[y, :CO2_Capture_Fraction_Startup] * EP[:vMulStartFuels][y, i, t] * fuel_CO2[dfGen[y, fuel_cols[i]]] for i = 1:max_fuels)
end)

@expression(EP, eEmissionsCaptureByPlantYear[y=1:G],
sum(inputs["omega"][t] * eEmissionsCaptureByPlant[y, t]
sum(omega[t] * eEmissionsCaptureByPlant[y, t]
for t in 1:T))
# add CO2 sequestration cost to objective function
# when scale factor is on tCO2/MWh = > kt CO2/GWh
@expression(EP, ePlantCCO2Sequestration[y=1:G],
sum(inputs["omega"][t] * eEmissionsCaptureByPlant[y, t] *
sum(omega[t] * eEmissionsCaptureByPlant[y, t] *
dfGen[y, :CCS_Disposal_Cost_per_Metric_Ton] for t in 1:T))

@expression(EP, eZonalCCO2Sequestration[z=1:Z],
Expand Down
84 changes: 47 additions & 37 deletions src/model/core/fuel.jl
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,17 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict)
HAS_FUEL = inputs["HAS_FUEL"]
MULTI_FUELS = inputs["MULTI_FUELS"]
SINGLE_FUEL = inputs["SINGLE_FUEL"]
max_fuels = inputs["MAX_NUM_FUELS"]
fuel_cols = inputs["FUEL_COLS"]
fuels = inputs["fuels"]
fuel_costs = inputs["fuel_costs"]
heat_rates = inputs["HEAT_RATES"]
min_cofire = inputs["MIN_COFIRE"]
max_cofire = inputs["MAX_COFIRE"]
min_cofire_start =inputs["MIN_COFIRE_START"]
max_cofire_start =inputs["MAX_COFIRE_START"]
omega = inputs["omega"]

NUM_FUEL = length(fuels)

# create variable for fuel consumption for output
Expand All @@ -100,8 +110,8 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict)
# for resources that use multi fuels
# vMulFuels[y, f, t]: y - resource ID; f - fuel ID; t: time
if !isempty(MULTI_FUELS)
@variable(EP, vMulFuels[y in MULTI_FUELS, i = 1:inputs["MAX_NUM_FUELS"], t = 1:T] >= 0)
@variable(EP, vMulStartFuels[y in MULTI_FUELS, i = 1:inputs["MAX_NUM_FUELS"], t = 1:T] >= 0)
@variable(EP, vMulFuels[y in MULTI_FUELS, i = 1:max_fuels, t = 1:T] >= 0)
@variable(EP, vMulStartFuels[y in MULTI_FUELS, i = 1:max_fuels, t = 1:T] >= 0)
end


Expand All @@ -121,23 +131,23 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict)
if y in SINGLE_FUEL # for single fuel plants
EP[:vFuel][y, t]
else # for multi fuel plants
sum(EP[:vMulFuels][y, i, t] for i in 1:inputs["MAX_NUM_FUELS"])
sum(EP[:vMulFuels][y, i, t] for i in 1:max_fuels)
end)
@expression(EP, ePlantFuel_start[y in 1:G, t = 1:T],
if y in SINGLE_FUEL # for single fuel plants
EP[:vStartFuel][y, t]
else # for multi fuel plants
sum(EP[:vMulStartFuels][y, i, t] for i in 1:inputs["MAX_NUM_FUELS"])
sum(EP[:vMulStartFuels][y, i, t] for i in 1:max_fuels)
end)

# for multi-fuel resources
# annual fuel consumption by plant and fuel type
if !isempty(MULTI_FUELS)
@expression(EP, ePlantFuelConsumptionYear_multi_generation[y in MULTI_FUELS, i in 1:inputs["MAX_NUM_FUELS"]],
sum(inputs["omega"][t] * EP[:vMulFuels][y, i, t] for t in 1:T))
@expression(EP, ePlantFuelConsumptionYear_multi_start[y in MULTI_FUELS, i in 1:inputs["MAX_NUM_FUELS"]],
sum(inputs["omega"][t] * EP[:vMulStartFuels][y, i, t] for t in 1:T))
@expression(EP, ePlantFuelConsumptionYear_multi[y in MULTI_FUELS, i in 1:inputs["MAX_NUM_FUELS"]],
@expression(EP, ePlantFuelConsumptionYear_multi_generation[y in MULTI_FUELS, i in 1:max_fuels],
sum(omega[t] * EP[:vMulFuels][y, i, t] for t in 1:T))
@expression(EP, ePlantFuelConsumptionYear_multi_start[y in MULTI_FUELS, i in 1:max_fuels],
sum(omega[t] * EP[:vMulStartFuels][y, i, t] for t in 1:T))
@expression(EP, ePlantFuelConsumptionYear_multi[y in MULTI_FUELS, i in 1:max_fuels],
EP[:ePlantFuelConsumptionYear_multi_generation][y, i] + EP[:ePlantFuelConsumptionYear_multi_start][y, i])
end
# fuel_cost is in $/MMBTU (M$/billion BTU if scaled)
Expand All @@ -148,25 +158,25 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict)
# for multi-fuel resources
if !isempty(MULTI_FUELS)
# time-series fuel consumption costs by plant and fuel type during startup
@expression(EP, eCFuelOut_multi_start[y in MULTI_FUELS , i in 1:inputs["MAX_NUM_FUELS"], t = 1:T],
inputs["fuel_costs"][dfGen[y,inputs["FUEL_COLS"][i]]][t] * EP[:vMulStartFuels][y, i, t]
@expression(EP, eCFuelOut_multi_start[y in MULTI_FUELS , i in 1:max_fuels, t = 1:T],
fuel_costs[dfGen[y,fuel_cols[i]]][t] * EP[:vMulStartFuels][y, i, t]
)
# annual plant level fuel cost by fuel type during generation
@expression(EP, ePlantCFuelOut_multi_start[y in MULTI_FUELS, i in 1:inputs["MAX_NUM_FUELS"]],
sum(inputs["omega"][t] * EP[:eCFuelOut_multi_start][y, i, t] for t in 1:T))
@expression(EP, ePlantCFuelOut_multi_start[y in MULTI_FUELS, i in 1:max_fuels],
sum(omega[t] * EP[:eCFuelOut_multi_start][y, i, t] for t in 1:T))

end

@expression(EP, eCFuelStart[y = 1:G, t = 1:T],
if y in SINGLE_FUEL
(inputs["fuel_costs"][dfGen[y,:Fuel]][t] * EP[:vStartFuel][y, t])
(fuel_costs[dfGen[y,:Fuel]][t] * EP[:vStartFuel][y, t])
else
sum(EP[:eCFuelOut_multi_start][y, i, t] for i in 1:inputs["MAX_NUM_FUELS"])
sum(EP[:eCFuelOut_multi_start][y, i, t] for i in 1:max_fuels)
end)

# plant level start-up fuel cost for output
@expression(EP, ePlantCFuelStart[y = 1:G],
sum(inputs["omega"][t] * EP[:eCFuelStart][y, t] for t in 1:T))
sum(omega[t] * EP[:eCFuelStart][y, t] for t in 1:T))
# zonal level total fuel cost for output
@expression(EP, eZonalCFuelStart[z = 1:Z],
sum(EP[:ePlantCFuelStart][y] for y in dfGen[dfGen[!, :Zone].==z, :R_ID]))
Expand All @@ -175,24 +185,24 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict)
# for multi-fuel resources
if !isempty(MULTI_FUELS)
# time-series fuel consumption costs by plant and fuel type during generation
@expression(EP, eCFuelOut_multi[y in MULTI_FUELS , i in 1:inputs["MAX_NUM_FUELS"], t = 1:T],
inputs["fuel_costs"][dfGen[y,inputs["FUEL_COLS"][i]]][t] * EP[:vMulFuels][y,i,t]
@expression(EP, eCFuelOut_multi[y in MULTI_FUELS , i in 1:max_fuels, t = 1:T],
fuel_costs[dfGen[y,fuel_cols[i]]][t] * EP[:vMulFuels][y,i,t]
)
# annual plant level fuel cost by fuel type during generation
@expression(EP, ePlantCFuelOut_multi[y in MULTI_FUELS, i in 1:inputs["MAX_NUM_FUELS"]],
sum(inputs["omega"][t] * EP[:eCFuelOut_multi][y, i, t] for t in 1:T))
@expression(EP, ePlantCFuelOut_multi[y in MULTI_FUELS, i in 1:max_fuels],
sum(omega[t] * EP[:eCFuelOut_multi][y, i, t] for t in 1:T))

end

@expression(EP, eCFuelOut[y = 1:G, t = 1:T],
if y in SINGLE_FUEL
(inputs["fuel_costs"][dfGen[y,:Fuel]][t] * EP[:vFuel][y, t])
(fuel_costs[dfGen[y,:Fuel]][t] * EP[:vFuel][y, t])
else
sum(EP[:eCFuelOut_multi][y, i, t] for i in 1:inputs["MAX_NUM_FUELS"])
sum(EP[:eCFuelOut_multi][y, i, t] for i in 1:max_fuels)
end)
# plant level start-up fuel cost for output
@expression(EP, ePlantCFuelOut[y = 1:G],
sum(inputs["omega"][t] * EP[:eCFuelOut][y, t] for t in 1:T))
sum(omega[t] * EP[:eCFuelOut][y, t] for t in 1:T))
# zonal level total fuel cost for output
@expression(EP, eZonalCFuelOut[z = 1:Z],
sum(EP[:ePlantCFuelOut][y] for y in dfGen[dfGen[!, :Zone].==z, :R_ID]))
Expand All @@ -210,8 +220,8 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict)
if !isempty(MULTI_FUELS)
@expression(EP, eFuelConsumption_multi[f in 1:NUM_FUEL, t in 1:T],
sum((EP[:vMulFuels][y, i, t] + EP[:vMulStartFuels][y, i, t]) #i: fuel id
for i in 1:inputs["MAX_NUM_FUELS"],
y in intersect(dfGen[dfGen[!,inputs["FUEL_COLS"][i]] .== string(inputs["fuels"][f]) ,:R_ID], MULTI_FUELS))
for i in 1:max_fuels,
y in intersect(dfGen[dfGen[!,fuel_cols[i]] .== string(fuels[f]) ,:R_ID], MULTI_FUELS))
)
end

Expand All @@ -227,7 +237,7 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict)
end)

@expression(EP, eFuelConsumptionYear[f in 1:NUM_FUEL],
sum(inputs["omega"][t] * EP[:eFuelConsumption][f, t] for t in 1:T))
sum(omega[t] * EP[:eFuelConsumption][f, t] for t in 1:T))


### Constraint ###
Expand All @@ -238,7 +248,7 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict)

if !isempty(MULTI_FUELS)
@constraint(EP, cFuelCalculation_multi[y in intersect(MULTI_FUELS, setdiff(HAS_FUEL, THERM_COMMIT)), t = 1:T],
sum(EP[:vMulFuels][y, i, t]/inputs["HEAT_RATES"][i][y] for i in 1:inputs["MAX_NUM_FUELS"]) - EP[:vP][y, t] == 0
sum(EP[:vMulFuels][y, i, t]/heat_rates[i][y] for i in 1:max_fuels) - EP[:vP][y, t] == 0
)
end

Expand Down Expand Up @@ -269,7 +279,7 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict)
EP[:vFuel][y, t] - EP[:vP][y, t] * dfGen[y, :Heat_Rate_MMBTU_per_MWh] == 0)
if !isempty(MULTI_FUELS)
@constraint(EP, FuelCalculationCommit_multi[y in intersect(setdiff(THERM_COMMIT,THERM_COMMIT_PWFU), MULTI_FUELS), t = 1:T],
sum(EP[:vMulFuels][y, i, t]/inputs["HEAT_RATES"][i][y] for i in 1:inputs["MAX_NUM_FUELS"]) - EP[:vP][y, t] .== 0
sum(EP[:vMulFuels][y, i, t]/heat_rates[i][y] for i in 1:max_fuels) - EP[:vP][y, t] .== 0
)
end
end
Expand All @@ -280,7 +290,7 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict)
)
if !isempty(MULTI_FUELS)
@constraint(EP, cStartFuel_multi[y in intersect(THERM_COMMIT, MULTI_FUELS), t = 1:T],
sum(EP[:vMulStartFuels][y, i, t] for i in 1:inputs["MAX_NUM_FUELS"]) - (dfGen[y,:Cap_Size] * EP[:vSTART][y, t] * dfGen[y,:Start_Fuel_MMBTU_per_MW]) .== 0
sum(EP[:vMulStartFuels][y, i, t] for i in 1:max_fuels) - (dfGen[y,:Cap_Size] * EP[:vSTART][y, t] * dfGen[y,:Start_Fuel_MMBTU_per_MW]) .== 0
)
end

Expand All @@ -290,18 +300,18 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict)
# fuel2/heat rate <= max_cofire_level * total power without retrofit
if !isempty(MULTI_FUELS)
# during power generation
@constraint(EP, cMinCofire[y in MULTI_FUELS, i in 1:inputs["MAX_NUM_FUELS"], t = 1:T],
EP[:vMulFuels][y, i, t] >= inputs["MIN_COFIRE"][i][y] * EP[:ePlantFuel_generation][y,t]
@constraint(EP, cMinCofire[y in MULTI_FUELS, i in 1:max_fuels, t = 1:T],
EP[:vMulFuels][y, i, t] >= min_cofire[i][y] * EP[:ePlantFuel_generation][y,t]
)
@constraint(EP, cMaxCofire[y in MULTI_FUELS, i in 1:inputs["MAX_NUM_FUELS"], t = 1:T],
EP[:vMulFuels][y, i, t] <= inputs["MAX_COFIRE"][i][y] * EP[:ePlantFuel_generation][y,t]
@constraint(EP, cMaxCofire[y in MULTI_FUELS, i in 1:max_fuels, t = 1:T],
EP[:vMulFuels][y, i, t] <= max_cofire[i][y] * EP[:ePlantFuel_generation][y,t]
)
# startup
@constraint(EP, cMinCofireStart[y in MULTI_FUELS, i in 1:inputs["MAX_NUM_FUELS"], t = 1:T],
EP[:vMulStartFuels][y, i, t] >= inputs["MIN_COFIRE_START"][i][y] * EP[:ePlantFuel_start][y,t]
@constraint(EP, cMinCofireStart[y in MULTI_FUELS, i in 1:max_fuels, t = 1:T],
EP[:vMulStartFuels][y, i, t] >= min_cofire_start[i][y] * EP[:ePlantFuel_start][y,t]
)
@constraint(EP, cMaxCofireStart[y in MULTI_FUELS, i in 1:inputs["MAX_NUM_FUELS"], t = 1:T],
EP[:vMulStartFuels][y, i, t] <= inputs["MAX_COFIRE_START"][i][y] * EP[:ePlantFuel_start][y,t]
@constraint(EP, cMaxCofireStart[y in MULTI_FUELS, i in 1:max_fuels, t = 1:T],
EP[:vMulStartFuels][y, i, t] <= max_cofire_start[i][y] * EP[:ePlantFuel_start][y,t]
)

end
Expand Down
15 changes: 9 additions & 6 deletions src/write_outputs/write_fuel_consumption.jl
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ function write_fuel_consumption_plant(path::AbstractString,inputs::Dict, setup::
G = inputs["G"]
HAS_FUEL = inputs["HAS_FUEL"]
MULTI_FUELS = inputs["MULTI_FUELS"]
fuel_cols = inputs["FUEL_COLS"]
max_fuels = inputs["MAX_NUM_FUELS"]

# Fuel consumption cost by each resource, including start up fuel
dfPlantFuel = DataFrame(Resource = inputs["RESOURCES"][HAS_FUEL],
Fuel = dfGen[HAS_FUEL, :Fuel],
Expand All @@ -24,7 +27,7 @@ function write_fuel_consumption_plant(path::AbstractString,inputs::Dict, setup::

if !isempty(MULTI_FUELS)
dfPlantFuel.Multi_Fuels = dfGen[HAS_FUEL, :MULTI_FUELS]
for i = 1:inputs["MAX_NUM_FUELS"]
for i = 1:max_fuels
tempannualsum_fuel_heat_multi_generation = zeros(length(HAS_FUEL))
tempannualsum_fuel_heat_multi_start = zeros(length(HAS_FUEL))
tempannualsum_fuel_heat_multi_total = zeros(length(HAS_FUEL))
Expand All @@ -42,11 +45,11 @@ function write_fuel_consumption_plant(path::AbstractString,inputs::Dict, setup::
tempannualsum_fuel_cost_multi *= ModelScalingFactor^2
end

dfPlantFuel[!, inputs["FUEL_COLS"][i]] = dfGen[HAS_FUEL, inputs["FUEL_COLS"][i]]
dfPlantFuel[!, Symbol(string(inputs["FUEL_COLS"][i],"_AnnualSum_Fuel_HeatInput_Generation"))] = tempannualsum_fuel_heat_multi_generation
dfPlantFuel[!, Symbol(string(inputs["FUEL_COLS"][i],"_AnnualSum_Fuel_HeatInput_Start"))] = tempannualsum_fuel_heat_multi_start
dfPlantFuel[!, Symbol(string(inputs["FUEL_COLS"][i],"_AnnualSum_Fuel_HeatInput_Total"))] = tempannualsum_fuel_heat_multi_total
dfPlantFuel[!, Symbol(string(inputs["FUEL_COLS"][i],"_AnnualSum_Fuel_Cost"))] = tempannualsum_fuel_cost_multi
dfPlantFuel[!, fuel_cols[i]] = dfGen[HAS_FUEL, fuel_cols[i]]
dfPlantFuel[!, Symbol(string(fuel_cols[i],"_AnnualSum_Fuel_HeatInput_Generation"))] = tempannualsum_fuel_heat_multi_generation
dfPlantFuel[!, Symbol(string(fuel_cols[i],"_AnnualSum_Fuel_HeatInput_Start"))] = tempannualsum_fuel_heat_multi_start
dfPlantFuel[!, Symbol(string(fuel_cols[i],"_AnnualSum_Fuel_HeatInput_Total"))] = tempannualsum_fuel_heat_multi_total
dfPlantFuel[!, Symbol(string(fuel_cols[i],"_AnnualSum_Fuel_Cost"))] = tempannualsum_fuel_cost_multi
end
end

Expand Down

0 comments on commit 2a1616e

Please sign in to comment.