#' Read in GDX and calculate emissions, used in convGDX2MIF.R for the reporting
#'
#' Read in emissions data from GDX file, information used in convGDX2MIF.R
#' for the reporting
#'
#'
#' @param gdx a GDX object as created by readGDX, or the path to a gdx
#' @param output a magpie object containing all needed variables generated by other report*.R functions
#' @return MAgPIE object - contains the emission variables
#' @author Sebastian Osorio, Renato Rodrigues
#' @seealso \code{\link{convGDX2MIF}}
#' @examples
#'
#' \dontrun{reportEmissions(gdx)}
#'
#' @importFrom gdx readGDX
#' @importFrom magclass mbind setNames dimSums getSets getSets<- as.magpie
#' @export
#'
reportEmissions <- function(gdx, output=NULL) {
if(is.null(output)){
stop("please provide a file containing all needed information")
}
# read sets
te <- readGDX(gdx,name = "te")
teel <- readGDX(gdx,name = "teel")
ter <- readGDX(gdx,name = "ter")
tecoal <- readGDX(gdx,name = "tecoal")
telig <- readGDX(gdx,name = "telig")
tegas <- readGDX(gdx,name = "tegas")
tengcc <- readGDX(gdx,name = "tengcc")
tefossil <- readGDX(gdx,name = "tefossil") #set of fossil-based generation technologies
teccs <- readGDX(gdx,name = "teccs") #set of generation technologies with CCS
tebio <- readGDX(gdx,name = "tebio") #set of biomass generation technologies
teoil <- readGDX(gdx,name = "teoil") #set of oil generation technologies
teothers <- readGDX(gdx,name = "teothers") #set of other gases generation technologies
tegas_el <- intersect(tegas,teel)
tengcc_el <- intersect(tengcc,teel)
sety <- readGDX(gdx,name = "sety") #set secondary energy
tewaste <- readGDX(gdx, name = "tewaste", format = "first_found", react = 'silent') # set of waste generation technologies
tau <- readGDX(gdx, name = "tau") # set of time slices
if(is.null(tewaste)) {tewaste <- "waste"} #in old model versions this set was not defined and only the tech 'waste' existed
# read parameters
p_taulength <- readGDX(gdx, name = c("p_taulength", "pm_taulength"), field = "l", format = "first_found")[, , tau] # number of hours/year per tau
s_c2co2 <- readGDX(gdx,name = "s_c2co2",field = "l",format = "first_found") #conversion factor C -> CO2
c_LIMESversion <- readGDX(gdx,name = "c_LIMESversion",field = "l",format = "first_found")
# read variables
v_emi <- readGDX(gdx,name = c("vm_emi", "v_emi"),field = "l",format = "first_found",restore_zeros = FALSE)
# create MagPie object of v_emi with iso3 regions
v_emi <- limesMapping(v_emi)
#take only the co2 and convert from GtC to MtCO2
v_emi_ccs <- v_emi[,,"cco2"]*as.numeric(s_c2co2)*1000
v_emi <- v_emi[,,"co2"]*as.numeric(s_c2co2)*1000
v_emi_el <- v_emi
#Check the version so to choose the electricity-related variables
if(c_LIMESversion >= 2.28) {
if("sehe" %in% sety) {
v_emi_he <- v_emi[,,"sehe"]
}
v_emi_el <- v_emi[,,"seel"]
heating <- .readHeatingCfg(gdx)
}
#annual emissions per primary energy type
tmp1 <- NULL
#annual emissions per country
tmp2 <- NULL
varList_el <- list(
#Conventional
"Emissions|CO2|Energy|Supply|Electricity (Mt CO2/yr)" = "seel",
"Emissions|CO2|Energy|Supply|Electricity|Coal (Mt CO2/yr)" = intersect(teel,c(tecoal,telig)),
"Emissions|CO2|Energy|Supply|Electricity|Coal|w/o CCS (Mt CO2/yr)" = intersect(teel,setdiff(c(tecoal,telig),teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Coal|w/ CCS (Mt CO2/yr)" = intersect(teel,intersect(c(tecoal,telig),teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Hard Coal (Mt CO2/yr)" = intersect(teel,c(tecoal)),
"Emissions|CO2|Energy|Supply|Electricity|Hard Coal|w/o CCS (Mt CO2/yr)" = intersect(teel,setdiff(c(tecoal),teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Hard Coal|w/ CCS (Mt CO2/yr)" = intersect(teel,intersect(c(tecoal),teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Lignite (Mt CO2/yr)" = intersect(teel,c(telig)),
"Emissions|CO2|Energy|Supply|Electricity|Lignite|w/o CCS (Mt CO2/yr)" = intersect(teel,setdiff(c(telig),teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Lignite|w/ CCS (Mt CO2/yr)" = intersect(teel,intersect(c(telig),teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Oil (Mt CO2/yr)" = intersect(teel,c(teoil)),
"Emissions|CO2|Energy|Supply|Electricity|Gas (Mt CO2/yr)" = intersect(teel,c(tegas)),
"Emissions|CO2|Energy|Supply|Electricity|Gas|w/o CCS (Mt CO2/yr)" = intersect(teel,setdiff(tegas_el,teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Gas|w/ CCS (Mt CO2/yr)" = intersect(teel,intersect(tegas_el,teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Gas CC|w/o CCS (Mt CO2/yr)" = intersect(teel,setdiff(tengcc_el,teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Gas CC|w/ CCS (Mt CO2/yr)" = intersect(teel,intersect(tengcc_el,teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Gas CC (Mt CO2/yr)" = intersect(teel,c(tengcc_el)),
"Emissions|CO2|Energy|Supply|Electricity|Gas OC (Mt CO2/yr)" = intersect(teel,setdiff(tegas_el,tengcc_el)),
"Emissions|CO2|Energy|Supply|Electricity|Other (Mt CO2/yr)" = intersect(teel,c(teothers)),
"Emissions|CO2|Energy|Supply|Electricity|Waste (Mt CO2/yr)" = intersect(teel,c(tewaste)),
"Emissions|CO2|Energy|Supply|Electricity|Other Fossil (Mt CO2/yr)" = intersect(teel,c(teothers,tewaste,teoil)),
#general aggregation
"Emissions|CO2|Energy|Supply|Electricity|Fossil (Mt CO2/yr)" = intersect(teel,c(tefossil)),
"Emissions|CO2|Energy|Supply|Electricity|Fossil|w/o CCS (Mt CO2/yr)" = intersect(teel,setdiff(tefossil,teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Fossil|w/ CCS (Mt CO2/yr)" = intersect(teel,intersect(tefossil,teccs))
)
# helper function: checks if the given entity exists in one of ('any') the dimensions of var
hasEnty <- function(enty, var){
any(grepl(pattern = paste0("(^|\\.)",enty,"(\\.|$)"),getNames(var)))
}
for (var in names(varList_el)){
enty <- varList_el[[var]]
# execute only if all enties (e.g. "oil") exist in getNames(v_emi_el), skip otherwise
# This is necessary, because there are enties in varList_el that are not in getNames(v_emi_el) (e.g. "oil")
# which causes an error since non-existent elements cannot be selected via v_emi_el[,,enty]
if (all(vapply(enty,hasEnty,v_emi_el, FUN.VALUE = logical(1)))) {
tmp2 <- mbind(tmp2,setNames(dimSums(v_emi_el[,,enty],dim=3,na.rm = T),var))
}
}
# concatenate vars
tmp3 <- mbind(tmp1,tmp2)
#annual emissions withdrawn from the EU ETS
#If activate this, remember to activate the code in convGDX2MIF to erase the values for the countries for which this variable does not exist
tmp4 <- NULL
#tmp4 <- mbind(tmp4,setNames(dimSums(v_emifloor[,,]*s_c2co2*1000,3),"Emissions withdrawn ETS|CO2|Energy|Supply|Electricity (Mt CO2/yr)"))
if(c_LIMESversion >= 2.33) {
#Biomass related variables (because there are new biomass technologies from v2.33)
#tmp4 <- mbind(tmp4,setNames(dimSums(v_emi_el[,,intersect(tebio,teccs)],3),"Emissions|CO2|Energy|Supply|Electricity|Biomass (Mt CO2/yr)")) #might be confusing the fact that is exactly the same as BECCS
tmp4 <- mbind(tmp4,setNames(dimSums(v_emi_el[,,intersect(tebio,teccs)],dim = 3,na.rm = T),
"Emissions|CO2|Energy|Supply|Electricity|Biomass|w/ CCS (Mt CO2/yr)"))
tmp4 <- mbind(tmp4,setNames(dimSums(v_emi_ccs[,,intersect(tebio,teccs)],dim = 3,na.rm = T),
"Carbon Sequestration|CCS|Electricity|Biomass (Mt CO2/yr)"))
tmp4 <- mbind(tmp4,setNames(dimSums(v_emi_ccs[,,intersect(tebio,teccs)],dim = 3,na.rm = T),
"Emissions|Carbon removal|BECCS (Mt CO2/yr)"))
if(heating == "fullDH") {
#load heat-related sets
techp <- readGDX(gdx,name = "techp")
teoel <- readGDX(gdx,name = "teoel")
teohecen <- readGDX(gdx,name = "teohecen")
tedh <- readGDX(gdx,name = "tedh")
tedhelec <- readGDX(gdx,name = "tedhelec")
ternofluc <- readGDX(gdx,name = "ternofluc")
tehgen <- readGDX(gdx,name = "tehgen") #set of hydrogen generation technologies
#1) Emissions FROM DH: CHP AND Heat-only
varList_he <- list(
#1.b) CHP
"Emissions|CO2|Energy|Supply|Heat|District Heating|CHP (Mt CO2/yr)" = setdiff(techp,c(ter,ternofluc,tedhelec,tehgen)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|CHP|Coal (Mt CO2/yr)" = intersect(techp,c(tecoal,telig)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|CHP|Hard Coal (Mt CO2/yr)" = intersect(techp,c(tecoal)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|CHP|Lignite (Mt CO2/yr)" = intersect(techp,c(telig)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|CHP|Oil (Mt CO2/yr)" = intersect(techp,c(teoil)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|CHP|Gas (Mt CO2/yr)" = intersect(techp,c(tegas)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|CHP|Gas CC (Mt CO2/yr)" = intersect(techp,c(tengcc_el)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|CHP|Gas OC (Mt CO2/yr)" = intersect(techp,setdiff(tegas_el,tengcc_el)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|CHP|Other (Mt CO2/yr)" = intersect(techp,c(teothers)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|CHP|Other Fossil (Mt CO2/yr)" = intersect(techp,c(teothers,tewaste,teoil)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|CHP|Fossil (Mt CO2/yr)" = intersect(techp,c(tefossil)),
#1.c) Only-heat (centralized boilers)
"Emissions|CO2|Energy|Supply|Heat|District Heating|Heat-only (Mt CO2/yr)" = setdiff(teohecen,c(ter,ternofluc,tedhelec,tehgen)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Heat-only|Coal (Mt CO2/yr)" = intersect(teohecen,c(tecoal,telig)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Heat-only|Hard Coal (Mt CO2/yr)" = intersect(teohecen,c(tecoal)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Heat-only|Lignite (Mt CO2/yr)" = intersect(teohecen,c(telig)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Heat-only|Oil (Mt CO2/yr)" = intersect(teohecen,c(teoil)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Heat-only|Gas (Mt CO2/yr)" = intersect(teohecen,c(tegas)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Heat-only|Other (Mt CO2/yr)" = intersect(teohecen,c(teothers)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Heat-only|Waste (Mt CO2/yr)" = intersect(teohecen,c(tewaste)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Heat-only|Other Fossil (Mt CO2/yr)" = intersect(teohecen,c(teothers,tewaste,teoil)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Heat-only|Fossil (Mt CO2/yr)" = intersect(teohecen,c(tefossil)),
#1.d) District Heating
"Emissions|CO2|Energy|Supply|Heat|District Heating (Mt CO2/yr)" = setdiff(tedh,c(ter,ternofluc,tedhelec,tehgen)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Coal (Mt CO2/yr)" = intersect(tedh,c(tecoal,telig)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Hard Coal (Mt CO2/yr)" = intersect(tedh,c(tecoal)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Lignite (Mt CO2/yr)" = intersect(tedh,c(telig)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Oil (Mt CO2/yr)" = intersect(tedh,c(teoil)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Gas (Mt CO2/yr)" = intersect(tedh,c(tegas)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Other (Mt CO2/yr)" = intersect(tedh,c(teothers)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Waste (Mt CO2/yr)" = intersect(tedh,c(tewaste)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Other Fossil (Mt CO2/yr)" = intersect(tedh,c(teothers,tewaste,teoil)),
"Emissions|CO2|Energy|Supply|Heat|District Heating|Fossil (Mt CO2/yr)" = intersect(tedh,c(tefossil))
)
for (var in names(varList_he)) {
enty <- varList_he[[var]]
if (all(vapply(enty,hasEnty,v_emi_he, FUN.VALUE = logical(1)))) {
tmp4 <- mbind(tmp4,setNames(dimSums(v_emi_he[,,enty],dim=3,na.rm = T),var))
}
}
#Electricity and Heat
varList <- list(
#Conventional
"Emissions|CO2|Energy|Supply|Electricity and Heat (Mt CO2/yr)" = c("seel","sehe"),
"Emissions|CO2|Energy|Supply|Electricity and Heat|Biomass (Mt CO2/yr)" = intersect(te,intersect(tebio,teccs)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|Coal (Mt CO2/yr)" = intersect(te,c(tecoal,telig)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|Hard Coal (Mt CO2/yr)" = intersect(te,c(tecoal)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|Lignite (Mt CO2/yr)" = intersect(te,c(telig)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|Oil (Mt CO2/yr)" = intersect(te,c(teoil)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|Gas (Mt CO2/yr)" = intersect(te,c(tegas)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|Other (Mt CO2/yr)" = intersect(te,c(teothers)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|Waste (Mt CO2/yr)" = intersect(te,c(tewaste)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|Other Fossil (Mt CO2/yr)" = intersect(te,c(teothers,tewaste,teoil)),
#general aggregation
"Emissions|CO2|Energy|Supply|Electricity and Heat|Fossil (Mt CO2/yr)" = intersect(te,c(tefossil))
)
for (var in names(varList)){
enty <- varList[[var]]
if (all(vapply(enty,hasEnty,v_emi, FUN.VALUE = logical(1)))) {
tmp4 <- mbind(tmp4,setNames(dimSums(v_emi[,,enty],dim=3,na.rm = T),var))
}
}
#Electricity emissions
varList_el<- list(
#1.b) CHP
"Emissions|CO2|Energy|Supply|Electricity|CHP (Mt CO2/yr)" = setdiff(techp,c(ter,ternofluc,tedhelec,tehgen)),
"Emissions|CO2|Energy|Supply|Electricity|CHP|Coal (Mt CO2/yr)" = intersect(techp,c(tecoal,telig)),
"Emissions|CO2|Energy|Supply|Electricity|CHP|Hard Coal (Mt CO2/yr)" = intersect(techp,c(tecoal)),
"Emissions|CO2|Energy|Supply|Electricity|CHP|Lignite (Mt CO2/yr)" = intersect(techp,c(telig)),
"Emissions|CO2|Energy|Supply|Electricity|CHP|Oil (Mt CO2/yr)" = intersect(techp,c(teoil)),
"Emissions|CO2|Energy|Supply|Electricity|CHP|Gas (Mt CO2/yr)" = intersect(techp,c(tegas)),
"Emissions|CO2|Energy|Supply|Electricity|CHP|Gas CC (Mt CO2/yr)" = intersect(techp,c(tengcc_el)),
"Emissions|CO2|Energy|Supply|Electricity|CHP|Gas OC (Mt CO2/yr)" = intersect(techp,setdiff(tegas_el,tengcc_el)),
"Emissions|CO2|Energy|Supply|Electricity|CHP|Other (Mt CO2/yr)" = intersect(techp,c(teothers)),
"Emissions|CO2|Energy|Supply|Electricity|CHP|Other Fossil (Mt CO2/yr)" = intersect(techp,c(teothers,tewaste,teoil)),
"Emissions|CO2|Energy|Supply|Electricity|CHP|Fossil (Mt CO2/yr)" = intersect(techp,c(tefossil)),
#Electricity-only
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only (Mt CO2/yr)" = intersect(teoel,c(tefossil,intersect(tebio,teccs))),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Coal (Mt CO2/yr)" = intersect(teoel,c(tecoal,telig)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Coal|w/o CCS (Mt CO2/yr)" = intersect(teoel,setdiff(c(tecoal,telig),teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Coal|w/ CCS (Mt CO2/yr)" = intersect(teoel,intersect(c(tecoal,telig),teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Hard Coal (Mt CO2/yr)" = intersect(teoel,c(tecoal)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Hard Coal|w/o CCS (Mt CO2/yr)" = intersect(teoel,setdiff(c(tecoal),teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Hard Coal|w/ CCS (Mt CO2/yr)" = intersect(teoel,intersect(c(tecoal),teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Lignite (Mt CO2/yr)" = intersect(teoel,c(telig)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Lignite|w/o CCS (Mt CO2/yr)" = intersect(teoel,setdiff(c(telig),teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Lignite|w/ CCS (Mt CO2/yr)" = intersect(teoel,intersect(c(telig),teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Oil (Mt CO2/yr)" = intersect(teoel,c(teoil)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Gas (Mt CO2/yr)" = intersect(teoel,c(tegas)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Gas|w/o CCS (Mt CO2/yr)" = intersect(teoel,setdiff(tegas_el,teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Gas|w/ CCS (Mt CO2/yr)" = intersect(teoel,intersect(tegas_el,teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Gas CC|w/o CCS (Mt CO2/yr)" = intersect(teoel,setdiff(tengcc_el,teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Gas CC|w/ CCS (Mt CO2/yr)" = intersect(teoel,intersect(tengcc_el,teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Gas CC (Mt CO2/yr)" = intersect(teoel,c(tengcc_el)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Gas OC (Mt CO2/yr)" = intersect(teoel,setdiff(tegas_el,tengcc_el)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Other (Mt CO2/yr)" = intersect(teoel,c(teothers)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Waste (Mt CO2/yr)" = intersect(teoel,c(tewaste)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Other Fossil (Mt CO2/yr)" = intersect(teoel,c(teothers,tewaste,teoil)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Fossil (Mt CO2/yr)" = intersect(teoel,c(tefossil)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Fossil|w/o CCS (Mt CO2/yr)" = intersect(teoel,setdiff(tefossil,teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Fossil|w/ CCS (Mt CO2/yr)" = intersect(teoel,intersect(tefossil,teccs)),
"Emissions|CO2|Energy|Supply|Electricity|Electricity-only|Biomass|w/ CCS (Mt CO2/yr)" = intersect(teoel,intersect(tebio,teccs))
)
for (var in names(varList_el)) {
enty <- varList_el[[var]]
if (all(vapply(enty,hasEnty,v_emi_el, FUN.VALUE = logical(1)))) {
tmp4 <- mbind(tmp4,setNames(dimSums(v_emi_el[,,enty],dim=3,na.rm = T),var))
}
}
#CHP emissions
varList<- list(
#1.b) CHP
"Emissions|CO2|Energy|Supply|Electricity and Heat|CHP (Mt CO2/yr)" = setdiff(techp,c(ter,ternofluc,tedhelec,tehgen)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|CHP|Coal (Mt CO2/yr)" = intersect(techp,c(tecoal,telig)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|CHP|Hard Coal (Mt CO2/yr)" = intersect(techp,c(tecoal)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|CHP|Lignite (Mt CO2/yr)" = intersect(techp,c(telig)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|CHP|Oil (Mt CO2/yr)" = intersect(techp,c(teoil)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|CHP|Gas (Mt CO2/yr)" = intersect(techp,c(tegas)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|CHP|Gas CC (Mt CO2/yr)" = intersect(techp,c(tengcc_el)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|CHP|Gas OC (Mt CO2/yr)" = intersect(techp,setdiff(tegas_el,tengcc_el)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|CHP|Other (Mt CO2/yr)" = intersect(techp,c(teothers)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|CHP|Other Fossil (Mt CO2/yr)" = intersect(techp,c(teothers,tewaste,teoil)),
"Emissions|CO2|Energy|Supply|Electricity and Heat|CHP|Fossil (Mt CO2/yr)" = intersect(techp,c(tefossil))
)
for (var in names(varList)) {
enty <- varList[[var]]
if (all(vapply(enty,hasEnty,v_emi, FUN.VALUE = logical(1)))) {
tmp4 <- mbind(tmp4,setNames(dimSums(v_emi[,,enty],dim=3,na.rm = T),var))
}
}
}
}
# concatenate data
tmp5 <- mbind(tmp3,tmp4)
#Carbon sequestration
tmp6 <- NULL
tmp6 <- mbind(tmp6,setNames(dimSums(v_emi_ccs,dim = 3,na.rm = T),
"Carbon Sequestration|CCS|Electricity (Mt CO2/yr)"))
tmp6 <- mbind(tmp6,setNames(dimSums(v_emi_ccs[,,intersect(tefossil,teccs)],dim = 3,na.rm = T),
"Carbon Sequestration|CCS|Electricity|Fossil (Mt CO2/yr)"))
tmp6 <- mbind(tmp6,setNames(dimSums(v_emi_ccs[,,intersect(c(tecoal,telig),teccs)],dim = 3,na.rm = T),
"Carbon Sequestration|CCS|Electricity|Coal (Mt CO2/yr)"))
tmp6 <- mbind(tmp6,setNames(dimSums(v_emi_ccs[,,intersect(tecoal,teccs)],dim = 3,na.rm = T),
"Carbon Sequestration|CCS|Electricity|Hard Coal (Mt CO2/yr)"))
tmp6 <- mbind(tmp6,setNames(dimSums(v_emi_ccs[,,intersect(telig,teccs)],dim = 3,na.rm = T),
"Carbon Sequestration|CCS|Electricity|Lignite (Mt CO2/yr)"))
# concatenate data
tmp <- mbind(tmp5,tmp6)
##Additional estimations related to emission intensity
tmp7 <- NULL
tmp7 <- mbind(tmp7,setNames(
tmp[,,"Emissions|CO2|Energy|Supply|Electricity (Mt CO2/yr)"] * 1000 / output[,,"Secondary Energy|Electricity (TWh/yr)"],
"Emissions|CO2|Energy|Supply|Electricity|Emission factor (gCO2/kWh)")) #from MtCO2/TWh to gCO2/kWh
if(heating == "fullDH") {
tmp7 <- mbind(tmp7,setNames(
tmp[,,"Emissions|CO2|Energy|Supply|Heat|District Heating (Mt CO2/yr)"] * 1000 / output[,,"Secondary Energy|Gross|Heat|District Heating (TWh/yr)"],
"Emissions|CO2|Energy|Supply|Heat|District Heating|Emission factor (gCO2/kWh)")) #from MtCO2/TWh to gCO2/kWh
c_buildings <- readGDX(gdx, name = c("c_buildings", "report_c_buildings"),
field = "l", format = "first_found", react = 'silent') #switch on buildings module
if (c_buildings == 1) {
o_emiindheat <- readGDX(gdx, name = c("o_emiindheat"), field = "l", format = "first_found", react = 'silent') #heat indirect emissions
if(!is.null(o_emiindheat)) { #this was just added in May 2023; other related variables
o_emiindheat <- limesMapping(o_emiindheat)[,,"seel"]
tmp7 <- mbind(tmp7,setNames(
o_emiindheat, "Emissions|Indirect|CO2|Energy|Supply|Power to heat (Mt CO2/yr)"))
tmp7 <- mbind(tmp7,setNames(o_emiindheat * 1000 / output[,,"Secondary Energy Input|Electricity|Heat (TWh/yr)"],
"Emissions|Indirect|CO2|Energy|Supply|Emission factor|Power to heat (gCO2/kWh)")) #from MtCO2/TWh to gCO2/kWh
}
} #end buildings if
}
##DACCS
c_DACCS <- readGDX(gdx, name = c("c_DACCS"), field = "l", format = "first_found", react = 'silent') #heat peak demand in buildings
if(!is.null(c_DACCS)) {
if(c_DACCS >= 1) {
#Load sets, parameters and variables
tedaccs <- readGDX(gdx, name = "tedaccs")
v_Removal_DACCS <- readGDX(gdx, name = c("v_Removal_DACCS"), field = "l", format = "first_found", restore_zeros = FALSE)[, , tau] # SE consumption from DACCS
v_Emi_DACCS <- readGDX(gdx, name = c("v_Emi_DACCS"), field = "l", format = "first_found", restore_zeros = FALSE) # Emissions from DACCS
# create MagPie object of demand with iso3 regions
v_Removal_DACCS <- limesMapping(v_Removal_DACCS)
v_Emi_DACCS <- limesMapping(v_Emi_DACCS)
#Estimate annual removals, convert from MtC/h, convert to MtCO2/a
o_Removal_DACCS_annual <- dimSums(v_Removal_DACCS * p_taulength, dim = 3.1) * 44/12
#Filter per source, convert from GtC/a, convert to MtCO2/a
o_EmiGas_DACCS <- v_Emi_DACCS[,,"pegas"] * 1000 * 44/12
#Removals
varList_daccs <- list(
"Emissions|Carbon removal|DACCS (Mt CO2/yr)" = c(tedaccs),
"Emissions|Carbon removal|DACCS|Liquid solvent (Mt CO2/yr)" = "liquid_daccs",
"Emissions|Carbon removal|DACCS|Solid sorbent (Mt CO2/yr)" = "solid_daccs",
"Emissions|Carbon removal|DACCS|CaO ambient weathering (Mt CO2/yr)" = "caow_daccs"
)
for (var in names(varList_daccs)){ #Data is in MtC/h, convert to MtCO2/a
tmp7 <- mbind(tmp7, setNames(dimSums(o_Removal_DACCS_annual[, , varList_daccs[[var]]], dim = 3), var))
}
#Emissions
varList_daccs <- list(
"Emissions|CO2|Gas|DACCS (Mt CO2/yr)" = c(tedaccs),
"Emissions|CO2|Gas|DACCS|Liquid solvent (Mt CO2/yr)" = "liquid_daccs",
"Emissions|CO2|Gas|DACCS|Solid sorbent (Mt CO2/yr)" = "solid_daccs",
"Emissions|CO2|Gas|DACCS|CaO ambient weathering (TMt CO2/yr)" = "caow_daccs"
)
for (var in names(varList_daccs)){ #Data is in GtC/a, convert to MtCO2/a
tmp7 <- mbind(tmp7, setNames(dimSums(o_EmiGas_DACCS[, , varList_daccs[[var]]], dim = 3), var))
}
#Net Removals
varList_daccs <- list(
"Emissions|Net carbon removal|DACCS (Mt CO2/yr)" = c(tedaccs),
"Emissions|Net carbon removal|DACCS|Liquid solvent (Mt CO2/yr)" = "liquid_daccs",
"Emissions|Net carbon removal|DACCS|Solid sorbent (Mt CO2/yr)" = "solid_daccs",
"Emissions|Net carbon removal|DACCS|CaO ambient weathering (Mt CO2/yr)" = "caow_daccs"
)
for (var in names(varList_daccs)){ #Data is in GtC/a, convert to MtCO2/a
tmp7 <- mbind(tmp7, setNames(dimSums((o_Removal_DACCS_annual[, , varList_daccs[[var]]] - o_EmiGas_DACCS[, , varList_daccs[[var]]]), dim = 3), var))
}
#Total removals
dimSums(v_emi_ccs[,,intersect(tebio,teccs)],dim = 3,na.rm = T)
tmp7 <- mbind(tmp7, setNames(
tmp7[,,"Emissions|Carbon removal|DACCS (Mt CO2/yr)"] + tmp[,,"Emissions|Carbon removal|BECCS (Mt CO2/yr)"],
"Emissions|Carbon removal (Mt CO2/yr)"))
tmp7 <- mbind(tmp7, setNames(
tmp7[,,"Emissions|Net carbon removal|DACCS (Mt CO2/yr)"] + tmp[,,"Emissions|Carbon removal|BECCS (Mt CO2/yr)"],
"Emissions|Net carbon removal (Mt CO2/yr)"))
##Additional data related to DACCS
#The following variables/parameters were added together
#Load sets, parameters and variables
o_ElecPriceDAC <- readGDX(gdx, name = c("o_ElecPriceDAC"), field = "l", format = "first_found", restore_zeros = FALSE, react = 'silent') # Price paid by DACCS
if(!is.null(o_ElecPriceDAC)) {
#Load sets, parameters and variables
o_ElecTariffDAC <- readGDX(gdx, name = c("o_ElecTariffDAC"), field = "l", format = "first_found", restore_zeros = FALSE) # Price paid by DACCS
o_LCOR <- readGDX(gdx, name = c("o_LCOR"), field = "l", format = "first_found", restore_zeros = FALSE) # Levelised cost of removals
o_discRemoval <- readGDX(gdx, name = c("o_discRemoval"), field = "l", format = "first_found", restore_zeros = T)[,,c(tedaccs)] # Discounted removal volumes (for average LCOR)
# create MagPie object of demand with iso3 regions
o_ElecPriceDAC <- limesMapping(o_ElecPriceDAC)
o_ElecTariffDAC <- limesMapping(o_ElecTariffDAC)
o_LCOR <- limesMapping(o_LCOR)
o_discRemoval <- limesMapping(o_discRemoval)
#Electricity prices
varList_daccs <- list(
"Price|Secondary Energy Input|Electricity|DACCS|Liquid solvent (Eur2010/MWh)" = "liquid_daccs",
"Price|Secondary Energy Input|Electricity|DACCS|Solid sorbent (Eur2010/MWh)" = "solid_daccs",
"Price|Secondary Energy Input|Electricity|DACCS|CaO ambient weathering (Eur2010/MWh)" = "caow_daccs"
)
for (var in names(varList_daccs)){ #Data is in MtC/h, convert to MtCO2/a
tmp7 <- mbind(tmp7, setNames(o_ElecPriceDAC[, , varList_daccs[[var]]], var))
}
tmp7 <- mbind(tmp7, setNames(
dimSums(o_Removal_DACCS_annual * o_ElecPriceDAC, dim = 3, na.rm = T) /
dimSums(o_Removal_DACCS_annual, dim = 3),
"Price|Secondary Energy Input|Electricity|DACCS (Eur2010/MWh)"))
#Electricity tariffs
varList_daccs <- list(
"Tariff|Secondary Energy Input|Electricity|DACCS|Liquid solvent (Eur2010/MWh)" = "liquid_daccs",
"Tariff|Secondary Energy Input|Electricity|DACCS|Solid sorbent (Eur2010/MWh)" = "solid_daccs",
"Tariff|Secondary Energy Input|Electricity|DACCS|CaO ambient weathering (Eur2010/MWh)" = "caow_daccs"
)
for (var in names(varList_daccs)){ #Data is in MtC/h, convert to MtCO2/a
tmp7 <- mbind(tmp7, setNames(o_ElecTariffDAC[, , varList_daccs[[var]]], var))
}
tmp7 <- mbind(tmp7, setNames(
dimSums(o_Removal_DACCS_annual * o_ElecTariffDAC, dim = 3, na.rm = T) /
dimSums(o_Removal_DACCS_annual, dim = 3),
"Tariff|Secondary Energy Input|Electricity|DACCS (Eur2010/MWh)"))
#Levelised costs for plants built in t
varList_daccs <- list(
"Levelised cost of removals for plants built in t|DACCS|Liquid solvent (Eur2010/tCO2)" = "liquid_daccs",
"Levelised cost of removals for plants built in t|DACCS|Solid sorbent (Eur2010/tCO2)" = "solid_daccs",
"Levelised cost of removals for plants built in t|DACCS|CaO ambient weathering (Eur2010/tCO2)" = "caow_daccs"
)
for (var in names(varList_daccs)){ #Data is in MtC/h, convert to MtCO2/a
tmp7 <- mbind(tmp7, setNames(o_LCOR[, , varList_daccs[[var]]], var))
}
tmp7 <- mbind(tmp7, setNames(
dimSums(o_LCOR * o_discRemoval, dim = 3, na.rm = T) /
dimSums(o_discRemoval, dim = 3),
"Levelised cost of removals for plants built in t|DACCS (Eur2010/tCO2)"))
#Discounted removal volumes for plants built in t
varList_daccs <- list(
"Discounted removal volumes for plants built in t|DACCS (Mt CO2/yr)" = c(tedaccs),
"Discounted removal volumes for plants built in t|DACCS|Liquid solvent (Mt CO2/yr)" = "liquid_daccs",
"Discounted removal volumes for plants built in t|DACCS|Solid sorbent (Mt CO2/yr)" = "solid_daccs",
"Discounted removal volumes for plants built in t|DACCS|CaO ambient weathering (Mt CO2/yr)" = "caow_daccs"
)
for (var in names(varList_daccs)){ #Data is in MtC/h, convert to Mt CO2/yr/a
tmp7 <- mbind(tmp7, setNames(dimSums(o_discRemoval[, , varList_daccs[[var]]], dim = 3), var))
}
}#End if checking if o_ElecPriceDAC exists
}#End if checking if c_DACCS switch is on
}#End if checking if c_DACCS exists
# concatenate data
tmp <- mbind(tmp,tmp7)
return(tmp)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.