Ydinvoimalan kustannus-hyötyanalyysi
Opasnet Suomista
Versio hetkellä 28. syyskuuta 2014 kello 15.20 – tehnyt Jouni (keskustelu | muokkaukset) (ensimmäinen luonnos, ei vielä laske kunnolla)
Moderaattori:Jouni (katso kaikki)
Sivun edistymistä ei ole arvioitu. Arvostuksen määrää ei ole arvioitu (ks. peer review). |
Lisää dataa
|
Sisällys
Kysymys
Miten lasketaan suunniteltavan ydinvoimalan kannattavuus käyttöiän aikana?
Vastaus
Perustelut
Riippuvuudet
Data
Laskenta
Nuclear investment calculator. Copyright James Corbishley and Matti Liski 2014 Original calculator in Excel [1].
library(OpasnetUtils) library(ggplot2) ##### RESULTS SHEET #### Locations in the Excel sheet # average_monthly_price (€/MWh) # discount_rate # noisedens calculations.2015!E5:DA5 # expected_price calculations.2015!B68:B80 # ElPrice calculations.2015 E68:DA80 # k.new calculations.2015!E53:DA65 and parameters!D50:K62 (MWh per week) # Dthermal_noisegrid calculations.2015!E38:DA50 # dummies parameters!D78:D90 # beta.0 parameters!D72 # beta.oil parameters!D73 # beta.eua parameters!D74 # beta.p parameters!D75 # price.ceiling parameters!D66 # price.oil results!C5:J5 and scenarios!C25:J25 # new_capacity_of_interest (MW) # new_capacity_marginal_cost (€/MWh) # noisedens calculations.2015!E5:DA5 # noisegridbase calculation.2015!E3:DA3 # Dthermal_sd calculations.2015!E23:DA35 # noise_step parameters!D65 # grid_points parameters!D66 # Dthermal parameters!A5:A17 # estimated demand data: weekly average thermal demands in GWh # Dthermal_sd parameters!A20:A32 # standard deviations of demand shock for each week (GWh/month) ###### INDICES year <- seq(2015, 2050, 5) month = c( "Weeks 1 to 4", "Weeks 5 to 8", "Weeks 9 to 12", "Weeks 13 to 16", "Weeks 17 to 20", "Weeks 21 to 24", "Weeks 25 to 28", "Weeks 29 to 32", "Weeks 33 to 36", "Weeks 37 to 40", "Weeks 41 to 44", "Weeks 45 to 48", "Weeks 49 to 52" ) tim <- Ovariable("time", data = data.frame( Year = year, Result = year )) tim0 <- 2015 ##### USER INPUTS oil <- c("Oil price 20 % higher", "Oil price same", "Oil price 20 % lower") price.oil <- Ovariable("price.oil", data = data.frame( Oil_price = factor(oil, levels = oil, ordered = TRUE), Result = c(96, 80, 64) )) # Choice between 64, 80, and 96 capacity <- c("2 %/a growth", "TEM scenario (1.7%/a growth)", "1 %/a growth") new_capacity_other <- Ovariable("new_capacity_other", data = data.frame( New_capacity = rep(factor(capacity, levels = capacity, ordered = TRUE), each = 8), Year = rep(year, times = 3), Result = c( 1860.730594, 5481.175799, 9222.751142, 10084.121, 8859.360731, 8859.360731, 8859.360731, 8859.360731, 1860.730594, 4931.506849, 8105.022831, 8835.616438, 7796.803653, 7796.803653, 7796.803653, 7796.803653, 1860.730594, 3549.657534, 5295.091324, 5696.917808, 5125.570776, 5125.570776, 5125.570776, 5125.570776 ) )) demand <- c("Demand 1 %/a growth", "Demand 0.5 %/a growth TEM scenario", "Demand 0 %/a growth") change_in_demand <- Ovariable("change_in_demand", data = data.frame( Demand_change = rep(factor(demand, levels = demand, ordered = TRUE), each = 8), Year = rep(year, times = 3), Result = c( 0, 4200.913242, 6563.926941, 8716.894977, 9950.913242, 9950.913242, 9950.913242, 9950.913242, 0, 1826.484018, 2853.881279, 3789.954338, 4326.484018, 4326.484018, 4326.484018, 4326.484018, 0, 0, 0, 0, 0, 0, 0, 0 ) )) ##### CONSTANTS discount_rate <- 0.04 fixed_costs_of_new_capacity <- Ovariable("fixed_costs", data = data.frame( Year = year, Result = c(6144, rep(0, 7)) )) new_capacity_marginal_cost <- 12 #(€/MWh) constant new_capacity_of_interest <- Ovariable("new_capacity", data = data.frame( Year = year, Result = c(0, 440, rep(1100, 6)) )) beta.0 <- 589000 beta.oil <- -23987 beta.eua <- 0 beta.p <- 1185400 dummies <- Ovariable("dummies", data = data.frame( Month = month, Result = c(490300, 589230, 571340, 198190, -317120, -684420, -849080, -851290, -664640, -371490, 0, 218750, 288840) )) price.eua <- 0 # Price - EU emission permits price.feed <- 0 # Feed in tariff price floor price.ceiling <- 2000 noise_step <- 0.1 grid_points <- 101 Dthermal <- Ovariable("Dthermal", data = data.frame( Month = month, Result = c(17312, 17219, 16987, 15524, 12905, 11291, 10646, 10341, 11618, 13023, 15029, 16480, 16883) / 4 * 1000 # From GWh/month to MWh/week by months )) Dthermal_sd <- Ovariable("Dthermal_sd", data = data.frame( Month = month, Result = c(1793.887609, 1488.891349, 1724.802631, 2120.030658, 2159.49847, 2059.897288, 2060.876501, 2175.181979, 1787.44249, 1265.978929, 1680.445962, 1949.800284, 1960.079672) / 4 * 1000 # From GWh/month to MWh/week by months )) ###### VARIABLES discount_factor <- 1 / (1 + discount_rate) ^ (tim - tim0) d <- (grid_points - 1) / 2 * noise_step noisegridbase <- Ovariable("noisegridbase", data = data.frame( Grid = seq(-d, d, noise_step), Result = seq(-d, d, noise_step) )) Dthermal_noisegrid <- Dthermal + noisegridbase * Dthermal_sd result(Dthermal_noisegrid)[result(Dthermal_noisegrid) < 0] <- 0 k.new <- (new_capacity_of_interest + new_capacity_other - change_in_demand) * 24 * 7 ElPrice <- exp((1 / beta.p) * (Dthermal_noisegrid - k.new - beta.0 - beta.oil * price.oil - beta.eua * price.eua - dummies)) result(ElPrice)[result(ElPrice) < 0] <- 0 result(ElPrice)[result(ElPrice) > price.ceiling] <- price.ceiling ERF <- function(x) { result(x) <- 2 * pnorm(result(x) * sqrt(2)) - 1 # Use pnorm to produce the error function (ERF in Excel) functionality. return(x) } noisedens <- 1/2 * (ERF((noisegridbase + noise_step / 2)/sqrt(2)) - ERF((noisegridbase - noise_step / 2)/sqrt(2))) average_monthly_price <- oapply(ElPrice * noisedens, cols = "Grid", FUN = sum) # (€/MWh) marginal_costs_for_the_new_capacity <- new_capacity_marginal_cost * k.new / 10^6 * 4 revenue_for_the_new_capacity <- average_monthly_price * k.new / 10^6 * 4 revenue_for_the_new_capacity <- oapply(unkeep(revenue_for_the_new_capacity, prevresults = TRUE, sources = TRUE), cols = "Month", FUN = sum) cumfun <- (Ovariable("temp", data = data.frame(Year = year, Result = year)) <= Ovariable("temp2", data = data.frame(Year2 = year, Result = year))) * 1 ###nominal analysis (euros millions) 2015-19 nominal_costs <- -1 * fixed_costs_of_new_capacity - marginal_costs_for_the_new_capacity * 5 # (M€ per 5 a) nominal_revenues <- revenue_for_the_new_capacity * 5 # (M€ per 5 a) nominal_net_revenues <- nominal_revenues + nominal_costs cumulative_net_revenues <- oapply(nominal_net_revenues * cumfun, cols = "Year", FUN = sum) ###integrated over time ###present value analysis (euros millions) 2015-19 present_costs <- nominal_costs * discount_factor present_revenues <- nominal_revenues * discount_factor present_net_revenues <- nominal_net_revenues * discount_factor present_cumulative_net_revenues <- oapply(present_net_revenues * cumfun, cols = "Year", FUN = sum) ###integrated over time. ggplot(present_cumulative_net_revenues@output, aes(x = Year2, weight = Result, fill = Oil_price)) + geom_bar(position = "dodge") + facet_grid(New_capacity ~ Demand_change) |
Katso myös
Avainsanat
Viitteet
Aiheeseen liittyviä tiedostoja
<mfanonymousfilelist></mfanonymousfilelist>