69 lines
4.6 KiB
R
69 lines
4.6 KiB
R
#A script which attempts to pull in all data, and create a data frame with the maximum revenue values for each facility, year and discount rate. The output can then be used to make figures and graphs
|
|
library(tidyverse)
|
|
library(parallel)
|
|
NCORES <- detectCores()-1
|
|
library(lpSolve) #For solving discrete value maximization for the power plants
|
|
####Manual inputs
|
|
#Range of discount rates to calculate in the model. Each facility will have each rate calculated, so more values slows the results but allows for more discount rates to be reported in the findings.
|
|
DISCOUNT_RATE_LIST <- seq(0.01,0.15,by=0.0025)
|
|
#The cost per ton of shipping uranium, used to see what can be shipped on day one of the project.
|
|
CV <- 1.2874*(6984013) #Data from New Mexico Report, Converted from 2019 to Dec 2025
|
|
#Locations to save results
|
|
SAVE_DIR <- "./Data/Cleaned_Data/"
|
|
#Create any need save locations
|
|
dir.create(SAVE_DIR,recursive=TRUE,showWarnings=FALSE)
|
|
TOTAL <- read_csv("Data/Raw_Data/Curie_Spent_Fuel_Site_Totals.csv") %>% mutate(OP_YEAR=year(Op_Date_Min),CLOSE_YEAR=year(Close_Date_Max))%>% select(Facility,Total_Assemblies,Total_Tons,OP_YEAR,CLOSE_YEAR)
|
|
FACILITY_LIST <- TOTAL %>% pull(Facility)
|
|
#https://www.nrc.gov/reactors/operating/licensing/renewal/subsequent-license-renewal
|
|
SUBMITTED <-rbind(c(FACILITY_LIST[str_detect(FACILITY_LIST,"Duane*" )],2025),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Nine Mile*" )],2026),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Ginna*" )],2026),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Cooper*" )],2026),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Farley*" )],2027),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Prairie*" )],2027),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Brunswick*" )],2027),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Cook" )],2027),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Hope" )],2027),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Salem" )],2027),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Perry" )],2027),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Millstone" )],2028),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Palisades" )],2028),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Beaver" )],2028),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Callaway" )],2029),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Three Mile Island" )],2029),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Davis-Besse" )],2029),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Wolf" )],2030),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Lucie" )],2021),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Robinson" )],2025),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Hatch" )],2025))
|
|
SUBMITTED <- SUBMITTED %>% as_tibble
|
|
colnames(SUBMITTED ) <- c("Facility","App_Date","Status")
|
|
SUBMITTED <- SUBMITTED%>% mutate(Status="Applied",App_Date=as.numeric(App_Date)) %>% select(Facility,Status,App_Date)
|
|
|
|
#Issued
|
|
RENEWED <- rbind(c(FACILITY_LIST[str_detect(FACILITY_LIST,"Turkey" )],"Granted",2018,2033),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Peach" )],"Granted",2019,2034),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Surry" )],"Granted",2020,2033),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"North" )],"Granted",2021,2040),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Monticello" )],"Granted",2024,2030),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Oconee" )],"Granted",2025,2034),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Summer" )],"Granted",2025,2042),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Beach" )],"Granted",2025,2033),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Browns" )],"Granted",2025,2036),
|
|
c(FACILITY_LIST[str_detect(FACILITY_LIST,"Dresden" )],"Granted",2025,2031))
|
|
RENEWED <- RENEWED %>% as_tibble
|
|
colnames(RENEWED) <- c("Facility","Status","App_Date","Op_Date")
|
|
RENEWED <- RENEWED %>% mutate(Op_Date=as.numeric(Op_Date),App_Date=as.numeric(App_Date))
|
|
AVG_LENGTH <- RENEWED %>% mutate(DIFF=Op_Date-App_Date) %>% pull(DIFF) %>% mean %>% round
|
|
SUBMITTED <- SUBMITTED %>% mutate(Op_Date=App_Date+AVG_LENGTH)
|
|
UPDATE <- rbind(RENEWED,SUBMITTED )
|
|
TOTAL_ORIG <- TOTAL
|
|
TOTAL <- TOTAL %>% left_join(UPDATE) %>% mutate(CLOSE_YEAR=ifelse(Op_Date>CLOSE_YEAR & !is.na(Status),Op_Date,CLOSE_YEAR)) %>% select(-Status,-App_Date,-Op_Date)
|
|
source("./Scripts/Functions/NPV_Functions.r")
|
|
TOTAL_VALUE_METRICS <- MULTI_DISCOUNT_RATE_NPV(DISCOUNT_RATE_LIST,TOTAL ,DOLLARS_SAVED_PER_YEAR=CV)%>% left_join(read_csv("Data/Raw_Data/Curie_Spent_Fuel_Site_Totals.csv")) %>% select(Year,Facility,Discount,Total_Tons,Revenue)
|
|
TOTAL_VALUE_METRICS_ORIG <- MULTI_DISCOUNT_RATE_NPV(DISCOUNT_RATE_LIST,TOTAL_ORIG ,DOLLARS_SAVED_PER_YEAR=CV) %>% left_join(read_csv("Data/Raw_Data/Curie_Spent_Fuel_Site_Totals.csv")) %>% select(Year,Facility,Discount,Total_Tons,Revenue)
|
|
TOTAL_VALUE_METRICS_ORIG
|
|
saveRDS(TOTAL_VALUE_METRICS ,paste0(SAVE_DIR,"Reactor_Values.Rds"))
|
|
|
|
|