Chapter 5 Total net generation requirement profile

Total net electricity net generation requirement is calculated by the summation of an electricity requirement and VSPP in each region as given in equation (5.1).

\[\begin{equation} TOTNETGEN_{i,t,h} = MEAReq_{t,h} + \sum_{i=1}^{4}(PEAReq_{i,t,h} + VSPP_{i,t,h}) \tag{5.1} \end{equation}\]

Where, \(TOT_NET_GEN_{i,t,h}\) denotes total net electricity generation requirement in region \(i\) in year \(t\) at time stamp \(h\) (MW).
\(MEAReq_{t,h}\) denotes the MEA requirement profile in year \(t\) at time stamp \(h\) (MW).
\(PEAReq_{i,t,h}\) denotes the PEA requirement profile in region \(i\) in year \(t\) at time stamp \(h\) (MW).
\(VSPP_{i,t,h}\) denotes the electricity generation from \(VSPP\) in region \(i\) in year \(t\) at time stamp \(h\) (MW).

5.1 The 2019 MEA Total net generation requirement profile

profile <-
  
  read_excel("raw_data/raw_data_profiles/02_Hourly Sale_NetGen_2019.xlsx",
             sheet = "Load Curve",
             range = "BK3:BQ17523") %>% 
  select(datetime = `Date/Time`, MAC) %>% 
  mutate(date = date(datetime),
         time = format(as.POSIXct(datetime),"%H:%M:%S"),
         year = year(datetime),
         month = month(datetime),
         day = day(datetime)) %>% 
  select(datetime, date, time, year, month, day, MAC)

# Summary data ####
maxv <- ceiling(max(profile$MAC)) # Get a peak MW
minv <- floor(min(profile$MAC)) # Get a min MW
energy <- sum(profile$MAC)/2000 # Calculate the energy
peak_day <- profile %>% #Find a peak day
  group_by(year) %>% 
  filter(MAC == max(MAC)) %>% 
  pull(datetime)
min_day <- profile %>% #Find a min day
  group_by(year) %>% 
  filter(MAC == min(MAC)) %>% 
  last() %>%  
  pull(datetime)
load_factor <- percent((energy*10^3)/(maxv*8760), 
                       accuracy = 0.01, 
                       decimal.mark = ".")
summary <- tibble(peak_day = peak_day,
                  min_day = min_day,
                  peak_mw = maxv, 
                  min_mw = minv, 
                  energy_gwh = energy,
                  load_factor = load_factor) # combine all data in 1 table
Table 5.1: Summary of a MEA total net electricity generation profile in 2019
peak_day min_day peak_mw min_mw energy_gwh load_factor
2019-04-25 13:49:00 2019-01-01 07:00:00 11070 3215 64374.99 66.38%
profile_plot <-
  ggplot() + 
  geom_line(data=profile, 
            aes(x = datetime, 
                y = MAC,
                group = month,
                color = as.factor(month)),
            show.legend = FALSE) +
  ThemeLine +
  labs(x = NULL,
       y = "MEA Total net generation requiremnet (MW)")+
  scale_x_datetime(breaks=date_breaks("1 month"), 
                   labels=date_format("%b %y")) +
  scale_y_continuous(breaks = seq(0, round(maxv,-2)*1.2,1000),
                     limits = c(0, round(maxv, -2)*1.2)) +  
  scale_color_manual(values = linepalette1) +
  geom_point(data=summary,
             aes(x = peak_day, y = peak_mw))+
  # geom_hline(yintercept = 0) +
  geom_text(data = summary,
            aes(x = peak_day, y = round(maxv, -2)*1.2),
            label = glue("Peak {maxv} MW \n@ {peak_day}"),
            # hjust = 1,
            vjust = 3) +
  geom_point(data=summary,
             aes(x = min_day, y = min_mw))+
  geom_text(data = summary,
            aes(x = min_day, y = round(minv, -3)*0.8),
            label = glue("Minimum {minv} MW \n@ {min_day}"),
            hjust = 0,
            vjust = 0)

# Save the output ####
outputfigure <- paste0(outfigdir, "mea_total_netgen_req_2019.png")
ggsave(profile_plot, file = outputfigure, dpi = 150, width = 15, height = 5, units = "in", limitsize = FALSE)
profiledata <- c(profiledata, list("mea_total_netgen_req_2019" = profile))
profilefigure <- c(profilefigure, list("mea_total_netgen_req_2019" = profile_plot))
summarydata <- c(summarydata, list("sum_mea_total_netgen_req_2019" = summary))

The 2019 MEA total net electricity generation is illustrated in Figure 5.1.

Figure 5.1: The MEA total net electricity generation requirement in 2019.

5.2 The 2019 PEA R1 (Central region) total net generation requirement profile

profile <-
  
  read_excel("raw_data/raw_data_profiles/02_Hourly Sale_NetGen_2019.xlsx",
             sheet = "Load Curve",
             range = "BK3:BQ17523") %>% 
  select(datetime = `Date/Time`, CAC) %>% 
  mutate(date = date(datetime),
         time = format(as.POSIXct(datetime),"%H:%M:%S"),
         year = year(datetime),
         month = month(datetime),
         day = day(datetime)) %>% 
  select(datetime, date, time, year, month, day, CAC)

# Summary data ####
maxv <- ceiling(max(profile$CAC)) # Get a peak MW
minv <- floor(min(profile$CAC)) # Get a min MW
energy <- sum(profile$CAC)/2000 # Calculate the energy
peak_day <- profile %>% #Find a peak day
  group_by(year) %>% 
  filter(CAC == max(CAC)) %>% 
  pull(datetime)
min_day <- profile %>% #Find a min day
  group_by(year) %>% 
  filter(CAC == min(CAC)) %>% 
  last() %>%  
  pull(datetime)
load_factor <- percent((energy*10^3)/(maxv*8760), 
                       accuracy = 0.01, 
                       decimal.mark = ".")
summary <- tibble(peak_day = peak_day,
                  min_day = min_day,
                  peak_mw = maxv, 
                  min_mw = minv, 
                  energy_gwh = energy,
                  load_factor = load_factor) # combine all data in 1 table
Table 5.2: Summary of total net electricity generation profile in PEA R1 in 2019
peak_day min_day peak_mw min_mw energy_gwh load_factor
2019-05-08 22:30:00 2019-12-31 12:00:00 11400 3616 75379.76 75.48%
profile_plot <-
  ggplot() + 
  geom_line(data=profile, 
            aes(x = datetime, 
                y = CAC,
                group = month,
                color = as.factor(month)),
            show.legend = FALSE) +
  ThemeLine +
  labs(x = NULL,
       y = "R1 (Central region) Total net generation requiremnet (MW)")+
  scale_x_datetime(breaks=date_breaks("1 month"), 
                   labels=date_format("%b %y")) +
  scale_y_continuous(breaks = seq(0, round(maxv,-2)*1.2,1000),
                     limits = c(0, round(maxv, -2)*1.2)) +  
  scale_color_manual(values = linepalette1) +
  geom_point(data=summary,
             aes(x = peak_day, y = peak_mw))+
  # geom_hline(yintercept = 0) +
  geom_text(data = summary,
            aes(x = peak_day, y = round(maxv, -2)*1.2),
            label = glue("Peak {maxv} MW \n@ {peak_day}"),
            # hjust = 1,
            vjust = 1) +
  geom_point(data=summary,
             aes(x = min_day, y = min_mw))+
  geom_text(data = summary,
            aes(x = min_day, y = round(minv, -3)*0.8),
            label = glue("Minimum {minv} MW \n@ {min_day}"),
            hjust = 1,
            vjust = 0)

# Save the output ####
outputfigure <- paste0(outfigdir, "r1_total_netgen_req_2019.png")
ggsave(profile_plot, file = outputfigure, dpi = 150, width = 15, height = 5, units = "in", limitsize = FALSE)
profiledata <- c(profiledata, list("r1_total_netgen_req_2019" = profile))
profilefigure <- c(profilefigure, list("r1_total_netgen_req_2019" = profile_plot))
summarydata <- c(summarydata, list("sum_r1_total_netgen_req_2019" = summary))

The 2019 total net electricity generation in PEA R1 is illustrated in Figure 5.2.

Figure 5.2: The PEA R1 total net electricity generation requirement in 2019.

5.3 The 2019 PEA R2 (North Eastern region) total net generation requirement profile

profile <-
  
  read_excel("raw_data/raw_data_profiles/02_Hourly Sale_NetGen_2019.xlsx",
             sheet = "Load Curve",
             range = "BK3:BQ17523") %>% 
  select(datetime = `Date/Time`, NEC) %>% 
  mutate(date = date(datetime),
         time = format(as.POSIXct(datetime),"%H:%M:%S"),
         year = year(datetime),
         month = month(datetime),
         day = day(datetime)) %>% 
  select(datetime, date, time, year, month, day, NEC)

# Summary data ####
maxv <- ceiling(max(profile$NEC)) # Get a peak MW
minv <- floor(min(profile$NEC)) # Get a min MW
energy <- sum(profile$NEC)/2000 # Calculate the energy
peak_day <- profile %>% #Find a peak day
  group_by(year) %>% 
  filter(NEC == max(NEC)) %>% 
  pull(datetime)
min_day <- profile %>% #Find a min day
  group_by(year) %>% 
  filter(NEC == min(NEC)) %>% 
  last() %>%  
  pull(datetime)
load_factor <- percent((energy*10^3)/(maxv*8760), 
                       accuracy = 0.01, 
                       decimal.mark = ".")
summary <- tibble(peak_day = peak_day,
                  min_day = min_day,
                  peak_mw = maxv, 
                  min_mw = minv, 
                  energy_gwh = energy,
                  load_factor = load_factor) # combine all data in 1 table
Table 5.3: Summary of total net electricity generation profile in PEA R2 in 2019
peak_day min_day peak_mw min_mw energy_gwh load_factor
2019-05-20 20:40:00 2019-01-01 23:30:00 4427 1234 23629.02 60.93%
profile_plot <-
  ggplot() + 
  geom_line(data=profile, 
            aes(x = datetime, 
                y = NEC,
                group = month,
                color = as.factor(month)),
            show.legend = FALSE) +
  ThemeLine +
  labs(x = NULL,
       y = "R2 (North Eastern region) Total net generation requiremnet (MW)")+
  scale_x_datetime(breaks=date_breaks("1 month"), 
                   labels=date_format("%b %y")) +
  scale_y_continuous(breaks = seq(0, round(maxv,-2)*1.2,1000),
                     limits = c(0, round(maxv, -2)*1.2)) +  
  scale_color_manual(values = linepalette1) +
  geom_point(data=summary,
             aes(x = peak_day, y = peak_mw))+
  # geom_hline(yintercept = 0) +
  geom_text(data = summary,
            aes(x = peak_day, y = round(maxv, -2)*1.2),
            label = glue("Peak {maxv} MW \n@ {peak_day}"),
            # hjust = 1,
            vjust = 1) +
  geom_point(data=summary,
             aes(x = min_day, y = min_mw))+
  geom_text(data = summary,
            aes(x = min_day, y = round(minv, -3)*0.8),
            label = glue("Minimum {minv} MW \n@ {min_day}"),
            hjust = -0.05,
            vjust = -1)

# Save the output ####
outputfigure <- paste0(outfigdir, "r2_total_netgen_req_2019.png")
ggsave(profile_plot, file = outputfigure, dpi = 150, width = 15, height = 5, units = "in", limitsize = FALSE)
profiledata <- c(profiledata, list("r2_total_netgen_req_2019" = profile))
profilefigure <- c(profilefigure, list("r2_total_netgen_req_2019" = profile_plot))
summarydata <- c(summarydata, list("sum_r2_total_netgen_req_2019" = summary))

The 2019 total net electricity generation in PEA R2 is illustrated in Figure 5.3.

Figure 5.3: The PEA R2 total net electricity generation requirement in 2019.

5.4 The 2019 PEA R3 (Southern region) total net generation requirement profile

profile <-
  
  read_excel("raw_data/raw_data_profiles/02_Hourly Sale_NetGen_2019.xlsx",
             sheet = "Load Curve",
             range = "BK3:BQ17523") %>% 
  select(datetime = `Date/Time`, SAC) %>% 
  mutate(date = date(datetime),
         time = format(as.POSIXct(datetime),"%H:%M:%S"),
         year = year(datetime),
         month = month(datetime),
         day = day(datetime)) %>% 
  select(datetime, date, time, year, month, day, SAC)

# Summary data ####
maxv <- ceiling(max(profile$SAC)) # Get a peak MW
minv <- floor(min(profile$SAC)) # Get a min MW
energy <- sum(profile$SAC)/2000 # Calculate the energy
peak_day <- profile %>% #Find a peak day
  group_by(year) %>% 
  filter(SAC == max(SAC)) %>% 
  pull(datetime)
min_day <- profile %>% #Find a min day
  group_by(year) %>% 
  filter(SAC == min(SAC)) %>% 
  last() %>%  
  pull(datetime)
load_factor <- percent((energy*10^3)/(maxv*8760), 
                       accuracy = 0.01, 
                       decimal.mark = ".")
summary <- tibble(peak_day = peak_day,
                  min_day = min_day,
                  peak_mw = maxv, 
                  min_mw = minv, 
                  energy_gwh = energy,
                  load_factor = load_factor) # combine all data in 1 table
Table 5.4: Summary of total net electricity generation profile in PEA R3 in 2019
peak_day min_day peak_mw min_mw energy_gwh load_factor
2019-04-21 20:39:00 2019-01-05 04:00:00 2932 1462 18537.62 72.17%
profile_plot <-
  ggplot() + 
  geom_line(data=profile, 
            aes(x = datetime, 
                y = SAC,
                group = month,
                color = as.factor(month)),
            show.legend = FALSE) +
  ThemeLine +
  labs(x = NULL,
       y = "R3 (Southern region) Total net generation requiremnet (MW)")+
  scale_x_datetime(breaks=date_breaks("1 month"), 
                   labels=date_format("%b %y")) +
  scale_y_continuous(breaks = seq(0, round(maxv,-2)*1.2,500),
                     limits = c(0, round(maxv, -2)*1.2)) +  
  scale_color_manual(values = linepalette1) +
  geom_point(data=summary,
             aes(x = peak_day, y = peak_mw))+
  # geom_hline(yintercept = 0) +
  geom_text(data = summary,
            aes(x = peak_day, y = round(maxv, -2)*1.2),
            label = glue("Peak {maxv} MW \n@ {peak_day}"),
            # hjust = 1,
            vjust = 1) +
  geom_point(data=summary,
             aes(x = min_day, y = min_mw))+
  geom_text(data = summary,
            aes(x = min_day, y = round(minv, -3)*0.8),
            label = glue("Minimum {minv} MW \n@ {min_day}"),
            hjust = -0.05,
            vjust = -1)

# Save the output ####
outputfigure <- paste0(outfigdir, "r3_total_netgen_req_2019.png")
ggsave(profile_plot, file = outputfigure, dpi = 150, width = 15, height = 5, units = "in", limitsize = FALSE)
profiledata <- c(profiledata, list("r3_total_netgen_req_2019" = profile))
profilefigure <- c(profilefigure, list("r3_total_netgen_req_2019" = profile_plot))
summarydata <- c(summarydata, list("sum_r3_total_netgen_req_2019" = summary))

The 2019 total net electricity generation in PEA R3 is illustrated in Figure 5.4.

Figure 5.4: The PEA R3 total net electricity generation requirement in 2019.

5.5 The 2019 PEA R4 (Northern region) total net generation requirement profile

profile <-
  
  read_excel("raw_data/raw_data_profiles/02_Hourly Sale_NetGen_2019.xlsx",
             sheet = "Load Curve",
             range = "BK3:BQ17523") %>% 
  select(datetime = `Date/Time`, NAC) %>% 
  mutate(date = date(datetime),
         time = format(as.POSIXct(datetime),"%H:%M:%S"),
         year = year(datetime),
         month = month(datetime),
         day = day(datetime)) %>% 
  select(datetime, date, time, year, month, day, NAC)

# Summary data ####
maxv <- ceiling(max(profile$NAC)) # Get a peak MW
minv <- floor(min(profile$NAC)) # Get a min MW
energy <- sum(profile$NAC)/2000 # Calculate the energy
peak_day <- profile %>% #Find a peak day
  group_by(year) %>% 
  filter(NAC == max(NAC)) %>% 
  pull(datetime)
min_day <- profile %>% #Find a min day
  group_by(year) %>% 
  filter(NAC == min(NAC)) %>% 
  last() %>%  
  pull(datetime)
load_factor <- percent((energy*10^3)/(maxv*8760), 
                       accuracy = 0.01, 
                       decimal.mark = ".")
summary <- tibble(peak_day = peak_day,
                  min_day = min_day,
                  peak_mw = maxv, 
                  min_mw = minv, 
                  energy_gwh = energy,
                  load_factor = load_factor) # combine all data in 1 table
Table 5.5: Summary of total net electricity generation profile in PEA R4 in 2019
peak_day min_day peak_mw min_mw energy_gwh load_factor
2019-05-20 21:01:00 2019-12-09 04:00:00 3575 1053 18164.57 58.00%
profile_plot <-
  ggplot() + 
  geom_line(data=profile, 
            aes(x = datetime, 
                y = NAC,
                group = month,
                color = as.factor(month)),
            show.legend = FALSE) +
  ThemeLine +
  labs(x = NULL,
       y = "R4 (Northern region) Total net generation requiremnet (MW)")+
  scale_x_datetime(breaks=date_breaks("1 month"), 
                   labels=date_format("%b %y")) +
  scale_y_continuous(breaks = seq(0, round(maxv,-2)*1.2,500),
                     limits = c(0, round(maxv, -2)*1.2)) +  
  scale_color_manual(values = linepalette1) +
  geom_point(data=summary,
             aes(x = peak_day, y = peak_mw))+
  # geom_hline(yintercept = 0) +
  geom_text(data = summary,
            aes(x = peak_day, y = round(maxv, -2)*1.2),
            label = glue("Peak {maxv} MW \n@ {peak_day}"),
            # hjust = 1,
            vjust = 1) +
  geom_point(data=summary,
             aes(x = min_day, y = min_mw))+
  geom_text(data = summary,
            aes(x = min_day, y = round(minv, -3)*0.8),
            label = glue("Minimum {minv} MW \n@ {min_day}"),
            hjust = 1,
            vjust = -1)

# Save the output ####
outputfigure <- paste0(outfigdir, "r4_total_netgen_req_2019.png")
ggsave(profile_plot, file = outputfigure, dpi = 150, width = 15, height = 5, units = "in", limitsize = FALSE)
profiledata <- c(profiledata, list("r4_total_netgen_req_2019" = profile))
profilefigure <- c(profilefigure, list("r4_total_netgen_req_2019" = profile_plot))
summarydata <- c(summarydata, list("sum_r4_total_netgen_req_2019" = summary))

The 2019 total net electricity generation in PEA R4 is illustrated in Figure 5.5.

Figure 5.5: The PEA R4 total net electricity generation requirement in 2019.

5.6 The 2019 Total net generation requirement profile

Total net electricity generation is calculated by the summation of total net electricity generation in MEA and PEA regions as given in equation (5.1).

profile <-
  
  profiledata$mea_total_netgen_req_2019 %>% 
  mutate(cac_tot_netgen = profiledata$r1_total_netgen_req_2019$CAC,
         nec_tot_netgen = profiledata$r2_total_netgen_req_2019$NEC,
         sac_tot_netgen = profiledata$r3_total_netgen_req_2019$SAC,
         nac_tot_netgen = profiledata$r4_total_netgen_req_2019$NAC,
         tot_netgen_req = MAC + cac_tot_netgen + nec_tot_netgen + sac_tot_netgen + nac_tot_netgen) %>% 
  select(-MAC, -cac_tot_netgen, -nec_tot_netgen, -sac_tot_netgen, -nac_tot_netgen)

# Summary data ####
maxv <- ceiling(max(profile$tot_netgen_req)) # Get a peak MW
minv <- floor(min(profile$tot_netgen_req)) # Get a min MW
energy <- sum(profile$tot_netgen_req)/2000 # Calculate the energy
peak_day <- profile %>% #Find a peak day
  group_by(year) %>% 
  filter(tot_netgen_req == max(tot_netgen_req)) %>% 
  pull(datetime)
min_day <- profile %>% #Find a min day
  group_by(year) %>% 
  filter(tot_netgen_req == min(tot_netgen_req)) %>% 
  last() %>%  
  pull(datetime)
load_factor <- percent((energy*10^3)/(maxv*8760), 
                       accuracy = 0.01, 
                       decimal.mark = ".")
summary <- tibble(peak_day = peak_day,
                  min_day = min_day,
                  peak_mw = maxv, 
                  min_mw = minv, 
                  energy_gwh = energy,
                  load_factor = load_factor) # combine all data in 1 table
Table 5.6: Summary of total net electricity generation profile in 2019
peak_day min_day peak_mw min_mw energy_gwh load_factor
2019-05-03 14:27:00 2019-01-02 04:00:00 32273 11467 200086 70.77%
profile_plot <-
  ggplot() + 
  geom_line(data=profile, 
            aes(x = datetime, 
                y = tot_netgen_req,
                group = month,
                color = as.factor(month)),
            show.legend = FALSE) +
  ThemeLine +
  labs(x = NULL,
       y = "Total net generation requiremnet (MW)")+
  scale_x_datetime(breaks=date_breaks("1 month"), 
                   labels=date_format("%b %y")) +
  scale_y_continuous(breaks = seq(0, round(maxv,-2)*1.2,2000),
                     limits = c(0, round(maxv, -2)*1.2)) +  
  scale_color_manual(values = linepalette1) +
  geom_point(data=summary,
             aes(x = peak_day, y = peak_mw))+
  # geom_hline(yintercept = 0) +
  geom_text(data = summary,
            aes(x = peak_day, y = round(maxv, -2)*1.2),
            label = glue("Peak {maxv} MW \n@ {peak_day}"),
            # hjust = 1,
            vjust = 1) +
  geom_point(data=summary,
             aes(x = min_day, y = min_mw))+
  geom_text(data = summary,
            aes(x = min_day, y = round(minv, -3)*0.8),
            label = glue("Minimum {minv} MW \n@ {min_day}"),
            hjust = 0,
            vjust = 1)

# Save the output ####
outputfigure <- paste0(outfigdir, "total_netgen_req_2019.png")
ggsave(profile_plot, file = outputfigure, dpi = 150, width = 15, height = 5, units = "in", limitsize = FALSE)
profiledata <- c(profiledata, list("total_netgen_req_2019" = profile))
profilefigure <- c(profilefigure, list("total_netgen_req_2019" = profile_plot))
summarydata <- c(summarydata, list("sum_total_netgen_req_2019" = summary))

The 2019 total net electricity generation is illustrated in Figure 5.6.

Figure 5.6: Total net electricity generation requirement in 2019.