The algorithm sweeps the parameters generation_factor and storage_capacity accross their ranges to determine the lowest cost system that maintains the hours of shortages below max_shortage_hours,
Table 1. Model Parameters
| Variable | Units | Description |
|---|---|---|
| Engineering Parameters | ||
| Energy Generation | ||
| Generation | kW | Hourly energy generation at a given location throughout the year |
| Baseline_generation | kw | Wave energy generation profile when average energy generation is equal to average community demand. The energy generation needed to meet demand is always above baseline. |
| Generation_factor | Generation = baseline_generation * generation_factor | |
| Generation_capacity | kW | Energy generation capacity or the maximum output of the energy system |
| max_wave_height | meters | Wave height at which the wave energy system submerges |
| Energy Storage | ||
| Storage_capacity | kWh | Energy Storage Capacity |
| Round_trip_efficiency | rate | The proportion of energy put into the ESS that can be retrieved from the ESS. This rate accounts for the losses during the charging and discharging of the ESS |
| Min_storage_rate | rate | Minimum energy that the energy storage system (ESS) needs to store as a proportion of the energy storage capacity. |
| Self_discharge_per_day | rate | Proportion of energy stored in the ESS lost to self-discharge per day. Flywheel ESS can have a self-discharge rate of 5 % per day (“Flywheel storage power system - Wikipedia” 2019). |
| Energy Resource Characteristics | ||
| Baseline_generation | kW | Hourly wave power profile for a given location over 1 year |
| Wind_power_profile | kW | Hourly wind power profile for a given location |
| Energy Demand Characteristics | ||
| Demand | kW | Hourly energy demand profile for a given location over 1 year |
| Max_shortage_hours | hours per year | Acceptable hours of shortages per year. In the U.S. each resident experienced about 8 hours of shortages on average in 2017. In remote communities shortages are more frequent (“Microgrid Market” 2018). |
| Economic Parameters | ||
| Generation_capex | $/kW | Capital expenditure per kW of generation capacity |
| Generation_opex | $/kW/year | Operating expenditure per kW of generation capacity per year |
| ESS_capex | $/kWh | Energy Storage Cost per kWh of ESS capacity |
| ESS_opex | $/kWh/year | Operating expenditure per kWh of ESS capacity per year |
Initial Values for Input Parameters
max_wave_height = 2.8 # meters. The average wave height in the Alaska Bay is 2 meters and peak wave height is 10 meters. The ARE system submerges to more closely match its energy generation capacity with the ambient wave power. At a max_wave_height of 2.8 meters ARE will harvest energy from the strongest ambient waves 80% of the time.
round_trip_efficiency = 0.87 # Wikipedia: https://en.wikipedia.org/wiki/Flywheel_energy_storage, round-trip efficiency up to 90%. http://energystorage.org/energy-storage/technologies/flywheels: 85 - 87%
min_storage_rate = 0.03 #Proportion of energy storage capacity required at all times. Our estimate for the FESS is based on the engineering estimated from the ARE Overall Feasibility Model.
min_storage_rate = 0.03 #Proportion of energy storage capacity required at all times
self_discharge_per_day = 0.05 #Proportion of energy stored in the ESS lost to self-discharge per day. (https://en.wikipedia.org/wiki/Flywheel_storage_power_system#Energy_loss. The Wikipedia article refers to the German technology company ATZ (http://www.atz-gmbh.com) that claim that the flywheel ESS that they developed has under 5% self-discharge rate per day.)
max_shortage_hours = 10 #According to Rural Utilities Service, the residents of the villages served by the Alaska Village Electric Coop experienced power outages for 11 hours in 2014 (@Allen2016). The average hours that an average U.S. resident experienced in 2017 was 7.8 hours @EIA2018.
# ARE generation parameters (wave energy generation and flywheel energy storage (fess))
wave_generation_capex = 5027.88 #$/kW. Source: ARE Overall Feasibility Model
wave_generation_opex = 70 #$/kW/year. 1.4 % of CapEx. Source: ARE Overall Feasibility Model.
fess_capex = 224.265 #$/kWh. Source: ARE Overall Feasibility Model
fess_opex = 3 # $/kWh. 1.4 % of CapEx. OpEx are low because the ESS is protected from the elements and movement in the ESS occurs without friction. We expect virtually unlimited number of charge and discharge cycles.
#Offshore Wind Parameters
cut_in_wind_speed = 3.6 #m/s. Most wind turbines start generating electricity at wind speeds of around 3.6 meters per second (m/s), (8 miles per hour). (DOE, EERE 'How do Wind Turbines Survive Severe Storms?') (DOE, EERE 'How #do Wind Turbines Survive Severe Storms?').
cut_out_wind_speed = 25 # m/s. The cut-out speed of a typical wind turbine is 25 m/s or above (DOE, EERE 'How do Wind Turbines Survive Severe Storms?') (DOE, EERE 'How #do Wind Turbines Survive Severe Storms?').
offshore_wind_generation_capex = 9600 #$/kW. Source: https://atb.nrel.gov/electricity/2018/index.html?t=ow
offshore_wind_generation_opex = 145 # $/kW/year
#Lithium Ion Battery Parameters
li_ion_self_discharge_per_day = 0.0007 #https://www.cei.washington.edu/education/science-of-solar/battery-technology/.1.5-2% per month.
li_ion_ess_round_trip_efficiency = 0.9 # http://css.umich.edu/factsheets/us-grid-energy-storage-factsheet: Battery storage efficiency: 60-95%
li_ion_ess_min_storage_rate = 0.03
li_ion_ess_self_discharge_per_day = 0.001 # low
li_ion_ess_capex = 652 # $/kWh. Lazard reorts that the average capital cost needed to integrate a compressed air, pumped hydro, thermal, or lithium ion battery storage system is $159/kWh, $263/kWh, $331/kWh, and $652/kWh, respectively. (http://www.intertek.com/blog/2017-10-06-grid-scale-energy/)
li_ion_ess_opex= 10# $/kWh
#Parameters refer to offshore wind energy generation and Li Ion energy storage
generation_capex <- offshore_wind_generation_capex
generation_opex <- offshore_wind_generation_opex
ess_capex <- li_ion_ess_capex
ess_opex <- li_ion_ess_opex
round_trip_efficiency <- li_ion_ess_round_trip_efficiency
min_storage_rate <- li_ion_ess_min_storage_rate
self_discharge_per_day <- li_ion_ess_self_discharge_per_day
capex=matrix(nrow=15,ncol=20) #rows sweep generation factors and columns sweep energy storage factors from lowest to highest
generation_capex_table <- capex #portion of capex from generation
storage_capex_table <- capex #portion of capex from storage
opex=capex
shortages=capex
lcoe=capex
generation_capacity_table = capex
storage_capacity_table = capex
for (i in 1:15){
generation_factor <- 0.1+(i-1)*0.5
data$generation <- data$baseline_generation*generation_factor
for (j in 1:20){
storage_factor <- (j-1)*20
storage_capacity <- storage_factor*mean(data$demand)
dat <- dispatch_storage_schedule(generation=data$generation,demand = data$demand, storage_capacity = storage_capacity, self_discharge_per_day = self_discharge_per_day,min_storage_rate = min_storage_rate, round_trip_efficiency= round_trip_efficiency)
capex[i,j] <- generation_capex*max(data$generation)+ess_capex*storage_capacity # $
generation_capex_table[i,j] <- generation_capex*max(data$generation)
storage_capex_table[i,j] <- ess_capex*storage_capacity
opex[i,j] <- generation_opex*max(data$generation)+ess_opex*storage_capacity # $/year
shortages[i,j] <- sum(dat$dispatch<dat$demand)
#Save energy generation and storage capacities
generation_capacity_table[i,j] <- max(dat$generation)
storage_capacity_table[i,j] <- storage_capacity
present_value_factor <- 8.5
lcoe[i,j]=(capex[i,j]/present_value_factor+opex[i,j])/sum(dat$dispatch)
}
}
save(shortages,file='wind_shortages.RData')
save(lcoe,file='wind_lcoe.RData')
save(capex,file='wind_capex.RData')
save(generation_capex_table, file='wind_generation_capex.RData')
save(storage_capex_table, file='wind_storage_capex.RData')
save(opex,file='wind_opex.RData')
save(generation_capacity_table, file='wind_generation_capacity.RData')
save(storage_capacity_table, file='wind_storage_capacity.RData')
load('wind_shortages.RData')
load('wind_lcoe.RData')
load('wind_capex.RData')
load('wind_generation_capex.RData')
load('wind_storage_capex.RData')
load('wind_opex.RData')
load('wind_generation_capacity.RData')
load('wind_storage_capacity.RData')
#print(shortages)
print(generation_capex_table)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 12338707 12338707 12338707 12338707 12338707 12338707
[2,] 74032243 74032243 74032243 74032243 74032243 74032243
[3,] 135725779 135725779 135725779 135725779 135725779 135725779
[4,] 197419315 197419315 197419315 197419315 197419315 197419315
[5,] 259112850 259112850 259112850 259112850 259112850 259112850
[6,] 320806386 320806386 320806386 320806386 320806386 320806386
[7,] 382499922 382499922 382499922 382499922 382499922 382499922
[8,] 444193458 444193458 444193458 444193458 444193458 444193458
[9,] 505886993 505886993 505886993 505886993 505886993 505886993
[10,] 567580529 567580529 567580529 567580529 567580529 567580529
[11,] 629274065 629274065 629274065 629274065 629274065 629274065
[12,] 690967601 690967601 690967601 690967601 690967601 690967601
[13,] 752661137 752661137 752661137 752661137 752661137 752661137
[14,] 814354672 814354672 814354672 814354672 814354672 814354672
[15,] 876048208 876048208 876048208 876048208 876048208 876048208
[,7] [,8] [,9] [,10] [,11] [,12]
[1,] 12338707 12338707 12338707 12338707 12338707 12338707
[2,] 74032243 74032243 74032243 74032243 74032243 74032243
[3,] 135725779 135725779 135725779 135725779 135725779 135725779
[4,] 197419315 197419315 197419315 197419315 197419315 197419315
[5,] 259112850 259112850 259112850 259112850 259112850 259112850
[6,] 320806386 320806386 320806386 320806386 320806386 320806386
[7,] 382499922 382499922 382499922 382499922 382499922 382499922
[8,] 444193458 444193458 444193458 444193458 444193458 444193458
[9,] 505886993 505886993 505886993 505886993 505886993 505886993
[10,] 567580529 567580529 567580529 567580529 567580529 567580529
[11,] 629274065 629274065 629274065 629274065 629274065 629274065
[12,] 690967601 690967601 690967601 690967601 690967601 690967601
[13,] 752661137 752661137 752661137 752661137 752661137 752661137
[14,] 814354672 814354672 814354672 814354672 814354672 814354672
[15,] 876048208 876048208 876048208 876048208 876048208 876048208
[,13] [,14] [,15] [,16] [,17] [,18]
[1,] 12338707 12338707 12338707 12338707 12338707 12338707
[2,] 74032243 74032243 74032243 74032243 74032243 74032243
[3,] 135725779 135725779 135725779 135725779 135725779 135725779
[4,] 197419315 197419315 197419315 197419315 197419315 197419315
[5,] 259112850 259112850 259112850 259112850 259112850 259112850
[6,] 320806386 320806386 320806386 320806386 320806386 320806386
[7,] 382499922 382499922 382499922 382499922 382499922 382499922
[8,] 444193458 444193458 444193458 444193458 444193458 444193458
[9,] 505886993 505886993 505886993 505886993 505886993 505886993
[10,] 567580529 567580529 567580529 567580529 567580529 567580529
[11,] 629274065 629274065 629274065 629274065 629274065 629274065
[12,] 690967601 690967601 690967601 690967601 690967601 690967601
[13,] 752661137 752661137 752661137 752661137 752661137 752661137
[14,] 814354672 814354672 814354672 814354672 814354672 814354672
[15,] 876048208 876048208 876048208 876048208 876048208 876048208
[,19] [,20]
[1,] 12338707 12338707
[2,] 74032243 74032243
[3,] 135725779 135725779
[4,] 197419315 197419315
[5,] 259112850 259112850
[6,] 320806386 320806386
[7,] 382499922 382499922
[8,] 444193458 444193458
[9,] 505886993 505886993
[10,] 567580529 567580529
[11,] 629274065 629274065
[12,] 690967601 690967601
[13,] 752661137 752661137
[14,] 814354672 814354672
[15,] 876048208 876048208
print(storage_capex_table)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[2,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[3,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[4,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[5,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[6,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[7,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[8,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[9,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[10,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[11,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[12,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[13,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[14,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[15,] 0 7978210 15956421 23934631 31912842 39891052 47869263 55847473
[,9] [,10] [,11] [,12] [,13] [,14] [,15]
[1,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[2,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[3,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[4,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[5,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[6,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[7,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[8,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[9,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[10,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[11,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[12,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[13,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[14,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[15,] 63825684 71803894 79782104 87760315 95738525 103716736 111694946
[,16] [,17] [,18] [,19] [,20]
[1,] 119673157 127651367 135629578 143607788 151585998
[2,] 119673157 127651367 135629578 143607788 151585998
[3,] 119673157 127651367 135629578 143607788 151585998
[4,] 119673157 127651367 135629578 143607788 151585998
[5,] 119673157 127651367 135629578 143607788 151585998
[6,] 119673157 127651367 135629578 143607788 151585998
[7,] 119673157 127651367 135629578 143607788 151585998
[8,] 119673157 127651367 135629578 143607788 151585998
[9,] 119673157 127651367 135629578 143607788 151585998
[10,] 119673157 127651367 135629578 143607788 151585998
[11,] 119673157 127651367 135629578 143607788 151585998
[12,] 119673157 127651367 135629578 143607788 151585998
[13,] 119673157 127651367 135629578 143607788 151585998
[14,] 119673157 127651367 135629578 143607788 151585998
[15,] 119673157 127651367 135629578 143607788 151585998
#print(lcoe)
#print(capex)
#print(opex)
#print(generation_capacity_table)
#print(storage_capacity_table)
#Function provides the characteristics of a system for a given maximum hours of shortages allowed
optimal_system <- function(max_shortages){ #Highest number of shortages per year
w <- which(shortages<=max_shortages) #indeces of shortages table with allowable shortage hours
allowable_lcoe <- as.vector(lcoe)[w]# lcoe when shortages do not exceed the max
minlcoe <- min(allowable_lcoe) #smallest lcoe when shortages do not exceed max
i <- which(lcoe==minlcoe) # the index of the position of minlcoe in the lcoe table
c <- rbind(as.vector(shortages)[i],round(minlcoe,digits=2), round(as.vector(capex)[i]/1000,2), round(as.vector(opex)[i]/1000,2),round(as.vector(generation_capacity_table)[i]/1000,2), round(as.vector(storage_capacity_table)[i]/1000,2),((i-1)%%15)+1,floor((i-1)/15)+1)
rownames(c) <- c("Hours of shortages","LCOE","CapEx in 1,000$","OpEx in 1,000$/year","Generation capacity in MW","Storage capacity in MWh","index_row","index_column")
return(c)
}
#c10 <- optimal_system(10) #Reliability level for Alaska Village Electric Cooperative
c0 <- optimal_system(0)
c87 <- optimal_system(87) #99% reliability
c1732 <- optimal_system(1732) #80% relability
c8760 <- optimal_system(8760)
c <- cbind(c0,c87,c1732,c8760)
colnames(c) <- c("Reliable","99% Reliable","80% Reliable","Min LCOE")
save(c, file='wind_results.RData')
| Reliable | 99% Reliable | 80% Reliable | Min LCOE | |
|---|---|---|---|---|
| Hours of shortages | 0.00 | 81.00 | 1697.00 | 8625.00 |
| LCOE | 11.04 | 10.31 | 6.72 | 3.12 |
| CapEx in 1,000$ | 440479.54 | 408566.70 | 229332.16 | 12338.71 |
| OpEx in 1,000$/year | 6680.99 | 6191.53 | 3471.31 | 186.37 |
| Generation capacity in MW | 33.42 | 33.42 | 20.56 | 1.29 |
| Storage capacity in MWh | 183.55 | 134.60 | 48.95 | 0.00 |
| index_row | 6.00 | 6.00 | 4.00 | 1.00 |
| index_column | 16.00 | 12.00 | 5.00 | 1.00 |
“Flywheel storage power system - Wikipedia.” 2019. Accessed August 10. https://en.wikipedia.org/wiki/Flywheel{\_}storage{\_}power{\_}system{\#}Energy{\_}loss.
“Microgrid Market.” 2018. MarketsandMarkets. https://www.marketsandmarkets.com/Market-Reports/micro-grid-electronics-market-917.html.