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)),
  )
}

Download the Data

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 (FCCL)",
    #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==2023){
      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.

Bitumen Production from Steam-Assisted Gravity Drainage and Cyclic Steam Stimulation Regimes in Alberta

Project Operator Cumulative Steam-to-Oil Ratio Bitumen Production (Barrels Per Day), month ended January, 2023
Recovery Method
Christina Lake (FCCL) Cenovus Energy Inc.  1.92 237,000 SAGD
Christina Lake (MEG) MEG Energy Corp.  2.43 103,000 SAGD
Jackfish Canadian Natural Resources Limited 2.44 110,000 SAGD
Foster Creek Cenovus Energy Inc.  2.51 194,000 SAGD
Firebag Suncor Energy Inc.  2.80 227,000 SAGD
Surmont ConocoPhillips Canada Resources Corp.  2.89 123,000 SAGD
Kirby Canadian Natural Resources Limited 2.97 68,000 SAGD
Long Lake CNOOC Petroleum North America ULC 3.94 78,000 SAGD
Cold Lake Imperial Oil Resources Limited 4.01 138,000 CSS
Primrose and Wolf Lake Canadian Natural Resources Limited 4.90 81,000 CSS
Other Other 3.68 299,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.

Bitumen Production from Steam-Assisted Gravity Drainage and Cyclic Steam Stimulation Regimes in Alberta

Annual, Production-Weighted Average Performance Data
Bitumen Production
Steam-to-oil Ratio
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 222116 1372858 1594974 5.20 2.78
#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()

In situ aggregate performance

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?

Production

Displays the most recent crude import data and historic ranges.

In Situ SOR

Displays the most recent crude import data and historic ranges.

SAGD SOR

Displays the most recent crude import data and historic ranges.

Water

Displays the most recent crude import data and historic ranges.

In situ cumulative performance

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).

In situ project performance data

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)
}

Christina Lake (MEG)

sagd_plot("Christina Lake (MEG)")

Kirby

sagd_plot("Kirby")

Firebag (Suncor)

sagd_plot("Firebag")

Foster Creek (Cenovus)

sagd_plot("Foster Creek")

MacKay River (Suncor)

sagd_plot("MacKay River (Suncor)")

Long Lake (CNOOC)

sagd_plot("Long Lake")

Sunrise (Husky)

sagd_plot("Sunrise")

Tucker Lake (Husky)

sagd_plot("Tucker Lake")

Peace River (CNRL)

sagd_plot("Peace River")

Primrose and Wolf Lake (CNRL)

sagd_plot("Primrose and Wolf Lake")

Cold Lake (Imperial)

sagd_plot("Cold Lake")

Surmont

sagd_plot("Surmont")