We hear a lot about how performance in the oil sands is improving steadily in terms of its emissions intensity, and one of the ways we can assess that is looking at project-level data for in situ projects’ use of steam. While there isn’t a 1:1 relationship between aggregate use of steam and aggregate GHG emissions, it will be strongly correlated. This also gets us around the question of looking at emissions which include cogeneration of power and down to the direct use of the key input to production, which is steam.
The Alberta Energy Regulator provides monthly data for in-situ operations in the Alberta oil sands in a report known as the ST-53. The data are available here, and you can either download the data and analyze it yourself or use the embedded R code below to download all the data.
If you’re going to run the R code, you’ll need a few basic set-up elements to get everything to work. I’ve included the code here for your reference.
#packages used
library(tidyverse)
library(scales)
library(lubridate)
library(reshape2)
library(knitr)
library(prettydoc)
library(zoo)
library(readxl)
library(viridis)
library(patchwork)
library(kableExtra)
knitr::opts_chunk$set(
message=F,
warning=F,
# fig.retina=3,
# dpi = 300,
# fig.align = "center",
NULL
)
colors_tableau10 <- function()
{
return(c("#1F77B4", "#FF7F0E", "#2CA02C", "#D62728", "#9467BD", "#8C564B",
"#E377C2", "#7F7F7F", "#BCBD22", "#17BECF"))
}
colors_tableau10_light <- function()
{
return(c("#AEC7E8", "#FFBB78", "#98DF8A", "#FF9896", "#C5B0D5", "#C49C94",
"#F7B6D2", "#C7C7C7", "#DBDB8D", "#9EDAE5"))
}
colors_tableau10_medium <- function()
{
return(c("#729ECE", "#FF9E4A", "#67BF5C", "#ED665D", "#AD8BC9", "#A8786E",
"#ED97CA", "#A2A2A2", "#CDCC5D", "#6DCCDA"))
}
set_png<-function(file_sent,width=1400,height=750,res=130){
#MAC
if(R.version$platform == "x86_64-apple-darwin15.6.0")
png(file=file_sent, width = width, height = height,res=res)
#PC
if(R.version$platform == "x86_64-w64-mingw32")
png(file=file_sent, width = width, height = height,res=res,type='cairo')
}
weekly_small<-function(caption_align=1){
theme_minimal()+theme(
plot.margin = margin(.25, .75, .25, .75, "cm"),
legend.position = "bottom",
legend.margin=margin(c(0,0,0,0),unit="cm"),
legend.text = element_text(colour="black", size = 9),
plot.caption = element_text(size = 9, face = "italic",hjust=caption_align),
plot.title = element_text(size = 12,face = "bold"),
plot.subtitle = element_text(size = 11, face = "italic"),
panel.grid.minor = element_blank(),
text = element_text(size = 11,face = "bold"),
axis.title.x = element_text(size = 11,face = "bold", colour="black",margin = margin(t = 15, b = 0)),
axis.text = element_text(size = 11,face = "bold", colour="black",margin = margin(t = 10, b = 10)),
)
}
Once you’ve got the preliminaries of the code, downloading the data is fairly easy. Each of the data files are stored by year, with the exception of the current year which is has a different naming convention. The first step is to access the data (click on the code button to see how to do things in R if you’re interested). The code also includes some fixes for names of projects which are not consistent in the data. This is basically a trial and error process to find broken data series.
#don't need to cache this long-term - it's daily data
fix_names<-function(data_sent){
data_sent<-data_sent %>% mutate(`Scheme Name`= case_when(
#Christina Lake
grepl("MEG", Operator) & grepl("Christina", `Scheme Name`) ~ "Christina Lake (MEG)",
grepl("Meg", Operator) & grepl("Christina", `Scheme Name`) ~ "Christina Lake (MEG)",
grepl("Cenovus", Operator) & grepl("Christina", `Scheme Name`) ~ "Christina Lake (CVE)",
#Mackay River (Suncor or Brion)
grepl("Suncor", Operator) & grepl("Mackay", `Scheme Name`) ~ "MacKay River (Suncor)",
grepl("Suncor", Operator) & grepl("Mckay", `Scheme Name`) ~ "MacKay River (Suncor)",
grepl("Suncor", Operator) & grepl("ay", `Scheme Name`) ~ "MacKay River (Suncor)",
grepl("Brion", Operator) & grepl("ay", `Scheme Name`) ~ "MacKay River (Petrochina)",
grepl("Petrochina", Operator) & grepl("ay", `Scheme Name`) ~ "MacKay River (Petrochina)",
grepl("PetroChina", Operator) & grepl("ay", `Scheme Name`) ~ "MacKay River (Petrochina)",
grepl("Peace River", `Scheme Name`) ~ "Peace River",
#hangingstone
grepl("Japan", Operator) & grepl("Hang", `Scheme Name`) ~ "Hangingstone (JACOS)",
grepl("Athabasca", Operator) & grepl("Hang", `Scheme Name`) ~ "Hangingstone (ATH)",
grepl("Jackfish", `Scheme Name`) ~ "Jackfish",
grepl("Lindbergh", `Scheme Name`) ~ "Lindbergh",
grepl("Kirby South", `Scheme Name`) ~ "Kirby",
TRUE ~ `Scheme Name`
)
)
}
st_53_online<-function(download=F){
#every year is xls except for 2015 which is an xlsx file
#each file contains a worksheet for bitumen, produced water, and steam usage.
years<-seq(2010,year(Sys.Date()-months(4))) #2 month data lag
#years<-seq(2010,2021)
data_store <- list()
for(year in years){
#year<-2015
#download=T
#https://www.aer.ca/documents/sts/ST53/ST53_2009-12.xls
address<-paste("https://www.aer.ca/documents/sts/ST53/ST53_",year,"-12.xls",sep="")
filename<-paste("st53_",year,".xls",sep="")
if(year==2015){
filename<-paste("st53_",year,".xlsx",sep="")
address<-paste("https://www.aer.ca/documents/sts/ST53/ST53_",year,"-12.xlsx",sep="")
}
if(year==2024){
filename<-paste("st53_",year,".xls",sep="")
address<-paste("https://www.aer.ca/documents/sts/ST53/ST53_Current.xls",sep="")
}
#remove the current file
if(download==T & year==2023)
if(file.exists(filename))
file.remove(filename)
if(download==T)
if(!file.exists(filename))
download.file(address,filename,mode = "wb")
#read the bitumen production data. Units are Crude Bitumen Production Rates Per Calendar Day (m³)
bitumen_data <- read_excel(filename, sheet = "BITUMEN", skip = 3)
bitumen_data<-bitumen_data[!is.na(bitumen_data$`Approval Number`),]
bitumen_data$Operator<-gsub(" \\(¹\\)","",bitumen_data$Operator)
#take out notes denoted by (*)
IDs<-names(bitumen_data)[1:5]
bitumen_data$`Monthly Average`<-NULL
bitumen_data<-melt(bitumen_data,id=IDs,measure.vars = month.abb,variable.name = "Month",value.name = "Bitumen")
bitumen_data$Month<-match(as.character(bitumen_data$Month),month.abb)
bitumen_data <-bitumen_data %>% filter(!is.na(Bitumen))
#need to trim the totals from the files here
#steam data - units are Steam Injection Rates Per Calendar Day (m³)
steam_data <- read_excel(filename, sheet = "STEAM", skip = 3)
steam_data<-steam_data[!is.na(steam_data$`Approval Number`),]
steam_data$Operator<-gsub(" \\(¹\\)","",steam_data$Operator) #take out notes denoted by (*)
IDs<-names(steam_data)[1:5]
steam_data$`Monthly Average`<-NULL
steam_data<-melt(steam_data,id=IDs,measure.vars = month.abb, variable.name = "Month",value.name = "Steam")
steam_data <-steam_data %>% filter(!is.na(Steam))
steam_data$Month<-match(as.character(steam_data$Month),month.abb)
#water data: Water Production Rates Per Calendar Day (m³)
water_data <- read_excel(filename, sheet = "WATER", skip = 3)
water_data<-water_data[!is.na(water_data$`Approval Number`),]
water_data$Operator<-gsub(" \\(¹\\)","",water_data$Operator) #take out notes denoted by (*)
IDs<-names(water_data)[1:5]
water_data$`Monthly Average`<-NULL
water_data<-melt(water_data,id=IDs,measure.vars = month.abb, variable.name = "Month",value.name = "water")
water_data <-water_data %>% filter(!is.na(water))
water_data$Month<-match(as.character(water_data$Month),month.abb)
#merge them all
bitumen_data<-bitumen_data %>% left_join(steam_data %>% select(Month,`Approval Number`,Steam))%>%
left_join(water_data %>% select(Month,`Approval Number`,water))
#merge(bitumen_data,steam_data,by=c("Recovery Method","Area","Operator","Approval Number","Month","Date"))
#create dates
bitumen_data$Date<-ymd(paste(year,"-",bitumen_data$Month,"-",days_in_month(bitumen_data$Month),sep = ""))
bitumen_data$year<-year
bitumen_data$Bitumen<-as.numeric(bitumen_data$Bitumen)
#here, we need to combine within schemes since there are a couple of Schemes with two separate approvals
bitumen_data<-bitumen_data %>% group_by(Operator,`Scheme Name`,Area,`Recovery Method`,Month,Date,year) %>%
summarize(Bitumen=sum(Bitumen,na.rm = T),Steam=sum(Steam,na.rm = T),water=sum(water,na.rm = T)) %>% ungroup()
bitumen_data$SOR<-bitumen_data$Steam/bitumen_data$Bitumen #do SOR later
data_store[[year]]<-bitumen_data
}
ST53_data<-do.call("rbind", data_store)
ST53_data<-fix_names(ST53_data)
ST53_data
}
#run the code
ST53_data <-st_53_online(download = T)
With the data downloaded and compiled into a single file, and with names fixed, we can now start looking into the performance of these resource projects over time. First, let’s have a look at some of the summary statistics for the major projects.
#create a data frame that is only SAGD and CSS
df1<- ST53_data %>% filter(`Recovery Method`=="Commercial-SAGD" |`Recovery Method`=="Commercial-CSS" ) %>%
#group by month and recovery method
group_by(Month,year,Date,`Recovery Method`) %>%
#figure out total bitumen production, steam production, and water production
summarise(Bitumen=sum(Bitumen,na.rm = TRUE),Steam=sum(Steam,na.rm = TRUE),water=sum(water,na.rm = TRUE)) %>%
#calculate SOR
mutate(SOR=Steam/Bitumen) %>% ungroup() %>%
#now go back and do monthly averages
group_by(Month,year,Date) %>% mutate(monthly_bbl=sum(Bitumen,na.rm = TRUE),monthly_steam=sum(Steam,na.rm = TRUE),
monthly_sor=monthly_steam/monthly_bbl,
monthly_water=sum(water,na.rm = TRUE),
monthly_wsr=monthly_water/monthly_steam)
df_project<- ST53_data %>% filter(`Recovery Method`=="Commercial-SAGD" |`Recovery Method`=="Commercial-CSS" ) %>%
#group by month and recovery method
group_by(`Scheme Name`) %>%
#figure out total bitumen production, steam production, and water production
summarise(Operator=last(Operator),steam=sum(Steam,na.rm = T),bitumen=sum(Bitumen,na.rm = T),Bitumen=last(Bitumen)*6.2929,`Recovery Method`=last(`Recovery Method`))%>%
arrange(-Bitumen)%>% mutate(`Scheme Name`=as_factor(`Scheme Name`),`Scheme Name`=fct_other(`Scheme Name`,keep = as.character(head(`Scheme Name`,10))),`Scheme Name`=fct_na_value_to_level(`Scheme Name`,level = "Other")) %>% mutate(Operator=if_else(`Scheme Name`=="Other","Other",Operator)) %>%
group_by(`Scheme Name`,Operator)%>%
summarise(CSOR=sum(steam,na.rm = T)/sum(bitumen,na.rm = T),
Bitumen=sum(Bitumen,na.rm = TRUE),
`Recovery Method`=last(`Recovery Method`))%>% ungroup()%>%
mutate(`Recovery Method`=if_else(`Scheme Name`=="Other","Variable",`Recovery Method`),
`Recovery Method`=gsub("Commercial-","",`Recovery Method`))%>%
mutate(`Scheme Name`=fct_reorder(`Scheme Name`,CSOR),`Scheme Name`=fct_relevel(`Scheme Name`,"Other",after=Inf))%>%
mutate(Bitumen=format(round(Bitumen,-3), big.mark = ","))%>%
arrange(`Scheme Name`)
# arrange(-Bitumen)
df_year<-df1 %>% group_by(year,`Recovery Method`) %>% summarise(Bitumen=mean(Bitumen)*6.2929,SOR=mean(SOR))%>% ungroup()%>%
#mutate(rec2=`Recovery Method`)%>%
pivot_wider(names_from = c(`Recovery Method`), values_from = c(Bitumen,SOR))%>%
mutate(Total_Bitumen=`Bitumen_Commercial-CSS`+`Bitumen_Commercial-SAGD`)%>%
relocate(Total_Bitumen,.after=3)
There are a few very large projects, which you can see listed here.
Project | Operator | Cumulative Steam-to-Oil Ratio | Bitumen Production (Barrels Per Day), month ended August, 2024 |
Recovery Method
|
---|---|---|---|---|
Christina Lake (CVE) | Cenovus Energy Inc. | 1.95 | 241,000 | SAGD |
Christina Lake (MEG) | MEG Energy Corp. | 2.42 | 101,000 | SAGD |
Jackfish | Canadian Natural Resources Limited | 2.45 | 131,000 | SAGD |
Foster Creek | Cenovus Energy Inc. | 2.48 | 194,000 | SAGD |
Firebag | Suncor Energy Inc. | 2.78 | 240,000 | SAGD |
Surmont | ConocoPhillips Canada Resources Corp. | 2.86 | 55,000 | SAGD |
Kirby | Canadian Natural Resources Limited | 3.10 | 65,000 | SAGD |
Long Lake | CNOOC Petroleum North America ULC | 3.75 | 59,000 | SAGD |
Cold Lake | Imperial Oil Resources Limited | 4.07 | 134,000 | CSS |
Primrose and Wolf Lake | Canadian Natural Resources Limited | 4.97 | 68,000 | CSS |
Other | Other | 3.66 | 305,000 | Variable |
The first thing we might be interested in is how steam use per barrel has evolved over time, and how it differs between extraction types. So, let’s group and summarize the data and you can see what we get.
Year | Commercial CSS | Commercial SAGD | Commercial Total | CSS | SAGD |
---|---|---|---|---|---|
2010 | 238701 | 317666 | 556367 | 3.83 | 2.94 |
2011 | 261179 | 374347 | 635526 | 3.64 | 2.92 |
2012 | 259468 | 487049 | 746517 | 3.64 | 2.87 |
2013 | 252544 | 580990 | 833535 | 3.67 | 2.90 |
2014 | 242771 | 733838 | 976609 | 3.66 | 2.74 |
2015 | 263298 | 842062 | 1105360 | 4.13 | 2.68 |
2016 | 236985 | 933062 | 1170047 | 4.56 | 2.70 |
2017 | 246039 | 1099073 | 1345112 | 4.61 | 2.69 |
2018 | 217934 | 1166174 | 1384108 | 5.13 | 2.75 |
2019 | 221369 | 1152257 | 1373627 | 5.08 | 2.76 |
2020 | 213889 | 1130321 | 1344210 | 5.03 | 2.71 |
2021 | 214691 | 1294728 | 1509419 | 5.18 | 2.65 |
2022 | 220107 | 1304648 | 1524755 | 5.03 | 2.64 |
2023 | 223220 | 1328805 | 1552025 | 4.95 | 2.71 |
2024 | 228265 | 1368933 | 1597197 | 4.90 | 2.67 |
#df1$Date<-as.Date(paste(df1$year,"-",df1$Month,"-",days_in_month(df1$Month),sep = ""))
#png<-1
#if(png==1)#set these to only turn on if you're making PNG graphs
# set_png("in_situ_prod.png")
#convert to 1000s of bbls per day
prod_graph<-ggplot(df1,aes(Date,Bitumen*6.2929/10^3,group=`Recovery Method`,colour=`Recovery Method`,fill=`Recovery Method`)) +
geom_area(position = "stack") +
scale_colour_viridis("Recovery Method",discrete=TRUE)+
scale_fill_viridis("Recovery Method",discrete=TRUE)+
scale_x_date(date_breaks = "12 months", date_labels = "%b\n%Y",expand=c(0,0)) +
#scale_y_continuous(limits=c(0,6),breaks=seq(0,6,1))+
theme_minimal()+weekly_small()+
labs(y="Bitumen production (1000s of barrels per day)",#x="Date",
title=paste("Alberta Oil Sands In-Situ Bitumen Production by Recovery Method",sep=""),
caption="Source: AER/ERCB ST53 data, graph by Andrew Leach.")
#if(png==1)#set these to only turn on if you're making PNG graphs
# dev.off()
#png<-1
#if(png==1)#set these to only turn on if you're making PNG graphs
# set_png("in_situ_water.png")
water_graph<-ggplot(df1,aes(Date,water/Bitumen,group=`Recovery Method`,colour=`Recovery Method`,fill=`Recovery Method`)) +
geom_line(size=2)+
scale_colour_viridis("Recovery Method",discrete=TRUE)+
scale_fill_viridis("Recovery Method",discrete=TRUE)+
scale_x_date(date_breaks = "12 months", date_labels = "%b\n%Y",expand=c(0,0)) +
#scale_y_continuous(limits=c(0,6),breaks=seq(0,6,1))+
theme_minimal()+weekly_small()+
labs(y="Water production ratio (barrels per barrel bitumen)",#x="Date",
title=paste("Alberta Oil Sands In-Situ Water Production Ratio by Recovery Method",sep=""),
caption="Source: AER/ERCB ST53 data, graph by Andrew Leach.")
#if(png==1)#set these to only turn on if you're making PNG graphs
# dev.off()
#png<-1
#if(png==1)#set these to only turn on if you're making PNG graphs
# set_png("in_situ_SOR.png")
sor_graph<-ggplot(df1,aes(Date,SOR,group=`Recovery Method`,colour=`Recovery Method`)) +
geom_line(size=2) +
geom_line(data=filter(df1,`Recovery Method`=="Commercial-SAGD"),aes(Date,monthly_sor,colour="Production-weighted average"),size=2) +
scale_colour_viridis("Recovery Method:",discrete=TRUE)+
scale_fill_viridis("Recovery Method:",discrete=TRUE)+
scale_x_date(date_breaks = "12 months", date_labels = "%b\n%Y",expand=c(0,0)) +
#scale_y_continuous(limits=c(0,6),breaks=seq(0,6,1))+
scale_y_continuous(breaks=pretty_breaks())+
theme_minimal()+weekly_small()+
labs(y="Steam:bitumen ratio",#x="Date",
title=paste("Alberta Oil Sands Steam:Oil Ratios by Recovery Method",sep=""),
caption="Source: AER/ERCB ST53 data, graph by Andrew Leach.")
#if(png==1)#set these to only turn on if you're making PNG graphs
# dev.off()
#png<-1
#if(png==1)#set these to only turn on if you're making PNG graphs
# set_png("SAGD_SOR.png")
SAGD_SOR<-ggplot(filter(df1,`Recovery Method`=="Commercial-SAGD"),aes(Date,SOR,group=`Recovery Method`,colour=`Recovery Method`)) +
geom_line(size=2) +
scale_colour_viridis("Recovery Method:",discrete=TRUE)+
scale_fill_viridis("Recovery Method:",discrete=TRUE)+
scale_x_date(date_breaks = "12 months", date_labels = "%b\n%Y",expand=c(0,0)) +
scale_y_continuous()+
theme_minimal()+weekly_small()+
labs(y="Steam:bitumen ratio",#x="Date",
title=paste("Alberta Oil Sands Steam:Oil Ratios by Recovery Method",sep=""),
caption="Source: AER/ERCB ST53 data, graph by Andrew Leach.")
#if(png==1)#set these to only turn on if you're making PNG graphs
# dev.off()
While the raw data are helpful, it really jumps out when you look at the changes visually. In particular, what is going on with CSS and SAGD steam-oil ratios?
Displays the most recent crude import data and historic ranges.
Displays the most recent crude import data and historic ranges.
Displays the most recent crude import data and historic ranges.
Displays the most recent crude import data and historic ranges.
It’s certainly the case that the cumulative steam used per barrel produced decreased dramatically through 2015 as new projects matured, better technology was deployed, and projects came up to full capcity, with more steam being devoted to oil production than to net-to-grid power. But, since 2015, the flattening of cumulative performance is striking.
#create a data frame that is only SAGD and CSS
df2<- ST53_data %>% filter(`Recovery Method`=="Commercial-SAGD" |`Recovery Method`=="Commercial-CSS" ) %>%
#group by month and recovery method
group_by(Month,year,Date,`Recovery Method`) %>%
#figure out total bitumen production, steam production, and water production
summarise(Bitumen=sum(Bitumen,na.rm = TRUE),Steam=sum(Steam,na.rm = TRUE),water=sum(water,na.rm = TRUE)) %>%
#calculate SOR
mutate(SOR=Steam/Bitumen) %>% ungroup() %>%
group_by(`Recovery Method`) %>% arrange(Date) %>%
#now go back and do cumulatives
mutate(cumul_bbl=cumsum(Bitumen),cumul_steam=cumsum(Steam),
cumul_sor=cumul_steam/cumul_bbl)
p1<-ggplot(filter(df2),aes(Date,cumul_sor,group=`Recovery Method`,colour=`Recovery Method`)) +
geom_line(size=2) +
scale_colour_viridis("Recovery Method:",discrete=TRUE)+
scale_fill_viridis("Recovery Method:",discrete=TRUE)+
scale_x_date(date_breaks = "12 months", date_labels = "%b\n%Y",expand=c(0,0)) +
scale_y_continuous()+
theme_minimal()+weekly_small()+
labs(y="Cumulative steam:bitumen ratio",#x="Date",
title=paste("Alberta Oil Sands Cumulative steam:Oil Ratios by Recovery Method",sep=""),
caption="Source: AER/ERCB ST53 data, graph by Andrew Leach.")
p2<-ggplot(filter(df2),aes(Date,Steam/Bitumen,group=`Recovery Method`,colour=`Recovery Method`)) +
geom_line(size=2) +
scale_colour_viridis("Recovery Method:",discrete=TRUE)+
scale_fill_viridis("Recovery Method:",discrete=TRUE)+
scale_x_date(date_breaks = "12 months", date_labels = "%b\n%Y",expand=c(0,0)) +
scale_y_continuous()+
theme_minimal()+weekly_small()+
labs(y="Monthly steam:bitumen ratio",#x="Date",
title=paste("Alberta Oil Sands Monthly steam:oil Ratios by Recovery Method",sep=""),
caption="Source: AER/ERCB ST53 data, graph by Andrew Leach.")
(p1+p2)
Finally, we can also use the generated data to look at specific project, and to check out how their performance compares to the average within their class of project (SAGD or CSS).
SAGD_data <- ST53_data %>% filter(grepl("Commercial",`Recovery Method`),Bitumen>0)%>%
group_by(Date,`Recovery Method`) %>%
mutate(mean_sor=sum(Steam,na.rm = T)/sum(Bitumen,na.rm = T))%>% ungroup() %>%
group_by(`Scheme Name`) %>% mutate(csor=cumsum(Steam)/cumsum(Bitumen)) %>%
ungroup()%>%
mutate(Date=as.Date(Date))%>%
group_by(Date, year, Month,`Scheme Name`,`Recovery Method`) %>%
summarize(Bitumen=sum(Bitumen,na.rm = T),
Steam=sum(Steam,na.rm = T),
sor=Steam/Bitumen,
mean_sor=mean(mean_sor),
Operator=last(Operator)
) %>% ungroup() %>%
group_by(`Scheme Name`) %>%
arrange(Date)%>%
mutate(cumul_bbl=cumsum(Bitumen),cumul_steam=cumsum(Steam),
cumul_sor=cumul_steam/cumul_bbl)%>% ungroup()
sagd_plot<-function(scheme_name){
scheme_data<-SAGD_data %>% filter(`Scheme Name`==scheme_name) %>% filter(Bitumen>0)%>% mutate(
year=year(Date),month=1:n()) #first steam in month 30
plot_a<-ggplot(scheme_data)+
#ggplot(SAGD_data)+ #Foster Creek
geom_line(aes(Date,Steam*6.2929/10^3))+
guides(colour="none")+
scale_x_date(date_breaks = "12 months", date_labels = "%b\n%Y",expand=c(0,0)) +
scale_y_continuous(expand = c(0,0),breaks = pretty_breaks())+
labs(y="Steam Production (1000 barrels per day)",x="",
title=paste(scheme_name,"Steam Production"))+
weekly_small()
plot_b<-ggplot(scheme_data)+
#ggplot(SAGD_data)+ #Foster Creek
geom_line(aes(Date,Bitumen*6.2929/10^3))+
guides(colour="none")+
scale_x_date(date_breaks = "12 months", date_labels = "%b\n%Y",expand=c(0,0)) +
scale_y_continuous(expand = c(0,0),breaks = pretty_breaks())+
#geom_hline(yintercept = 0) +
labs(y="Bitumen Production (1000 barrels per day)",x="",
title=paste(scheme_name,"Bitumen Production")
)+
weekly_small()
plot_c<-ggplot(scheme_data)+
#ggplot(SAGD_data)+ #Foster Creek
geom_line(aes(Date,pmin(10,sor)))+
geom_line(aes(Date,mean_sor),linetype=2)+
guides(colour="none")+
#scale_x_date(name=NULL,date_breaks = "24 months", date_labels = "%b\n%Y",expand=c(0,0)) +
scale_x_date(date_breaks = "12 months", date_labels = "%b\n%Y",expand=c(0,0)) +
scale_y_continuous(expand = c(0,0),breaks = pretty_breaks())+
#geom_hline(yintercept = 0) +
labs(y="Steam-to-oil ratio (barrels per barrel)",x="Production Month",
title=paste(scheme_name,"Monthly Steam-to-oil Ratio"),
subtitle="Monthly data capped at SOR of 10",
caption="Dashed line is monthly average for recovery method (SAGD or CSS)")+
weekly_small()
plot_d<-ggplot(scheme_data)+
#ggplot(SAGD_data)+ #Foster Creek
geom_line(aes(Date,pmin(10,cumul_sor)))+
guides(colour="none")+
#scale_x_date(name=NULL,date_breaks = "24 months", date_labels = "%b\n%Y",expand=c(0,0)) +
scale_x_date(date_breaks = "12 months", date_labels = "%b\n%Y",expand=c(0,0)) +
scale_y_continuous(expand = c(0,0),breaks = pretty_breaks())+
#geom_hline(yintercept = 0) +
labs(y="Cumulative steam-to-oil ratio (barrels per barrel)",x="Production Month",
title=paste(scheme_name,"Cumulative Steam-to-oil Ratio"),
subtitle="Monthly data capped at CSOR of 10",
caption="Graphs by Andrew Leach, data via AER")+
weekly_small()
(plot_a + plot_b) / (plot_c+ plot_d)
}
sagd_plot("Christina Lake (MEG)")
sagd_plot("Kirby")
sagd_plot("Firebag")
sagd_plot("Christina Lake (CVE)")
sagd_plot("Foster Creek")
sagd_plot("MacKay River (Suncor)")
sagd_plot("Long Lake")
sagd_plot("Sunrise")
sagd_plot("Tucker Lake")
sagd_plot("Peace River")
sagd_plot("Primrose and Wolf Lake")
sagd_plot("Cold Lake")
sagd_plot("Surmont")