R/reportFE.R

Defines functions reportFE

Documented in reportFE

#' Read in GDX and calculate final energy, used in convGDX2MIF.R for the
#' reporting
#'
#' Read in final energy information from GDX file, information used in
#' convGDX2MIF.R for the reporting
#'
#'
#' @param gdx a GDX as created by readGDX, or the file name of a gdx
#' @param regionSubsetList a list containing regions to create report variables region
#' aggregations. If NULL (default value) only the global region aggregation "GLO" will
#' be created.
#' @author Christoph Bertram, Antoine Levesque
#' @examples
#'
#'   \dontrun{reportPE(gdx)}
#'
#' @export
#' @importFrom gdx readGDX
#' @importFrom magclass new.magpie mselect getRegions getYears mbind setNames
#'                      dimSums getNames<- as.data.frame
#' @importFrom dplyr filter_ %>% mutate select inner_join group_by summarise
#'                   ungroup rename
#' @importFrom quitte inline.data.frame

reportFE <- function(gdx,regionSubsetList=NULL) {
  #---- Functions ----
  find_real_module <- function(module_set, module_name){
    return(module_set[module_set$modules == module_name,2])
  }


  ####### conversion factors ##########
  TWa_2_EJ     <- 31.536
  ####### read in needed data #########
  ## sets
  module2realisation <- readGDX(gdx, "module2realisation")
  rownames(module2realisation) <- module2realisation$modules
  FE_Transp_fety35    <- readGDX(gdx,"FE_Transp_fety35")
  FE_Elec_fety35    <- readGDX(gdx,"FE_Elec_fety35")
  sety <- readGDX(gdx,c("entySe","sety"),format="first_found")

  # the set liquids changed from sepet+sedie to seLiq in REMIND 1.7. Seliq, sega and seso changed to include biomass or Fossil origin after REMIND 2.0
  se_Liq    <- intersect(c("seliqfos", "seliqbio", "seliq", "sepet","sedie"),sety)
  se_Gas    <- intersect(c("segafos", "segabio", "sega"),sety)
  se_Solids <- intersect(c("sesofos", "sesobio", "seso"),sety)

  se2fe <- readGDX(gdx,"se2fe")
  FE_H2_fety <- c("feh2s", "feh2t")
  pe2se <- readGDX(gdx, "pe2se")
  FE_Stat_fety <- c("fegas", "fehos", "fesos", "feh2s", "fehes", "feels")

  esty <- readGDX(gdx,c("entyUe", "entyEs", "esty"),format="first_found")
  fety <- readGDX(gdx,c("entyFe","fety"),format="first_found")
  te <- readGDX(gdx,"te")
  pebio <- readGDX(gdx,c("peBio","pebio"),format="first_found")
  t2100 <- c(seq(2005,2060,by = 5), seq(2070,2110, by = 10),2130,2150)

  ppfen_stat <- readGDX(gdx,c("ppfen_stationary_dyn38","ppfen_stationary_dyn28","ppfen_stationary"),format="first_found", react = "silent")
  if (length(ppfen_stat) == 0) ppfen_stat = NULL
  ppfen_build <- readGDX(gdx,c("ppfen_buildings_dyn36","ppfen_buildings_dyn28","ppfen_buildings"),format="first_found", react = "silent")
  ppfen_ind <- readGDX(gdx,c("ppfen_industry_dyn37","ppfen_industry_dyn28","ppfen_industry"),format="first_found", react = "silent")
  ppfen_stat_build_ind <- c(ppfen_stat,ppfen_build,ppfen_ind)

  esty_build <-  readGDX(gdx,c("esty_dyn36"),format="first_found", react = "silent")
  all_esty       <- readGDX(gdx,name=c("all_esty"),types="sets",format="first_found", react = "silent")
  if(!is.null(all_esty)){
  fe2es <- readGDX(gdx,c("fe2es"),format="first_found", react = "silent")
  } else {
    fe2es = NULL
  }

  rlf <- readGDX(gdx,"rlf")

  ## parameter
  p_eta_conv = readGDX(gdx, c("pm_eta_conv","p_eta_conv"), restore_zeros = FALSE,format="first_found")
  pm_cesdata = readGDX(gdx,"pm_cesdata")
  s33_rockgrind_fedem <- readGDX(gdx,"s33_rockgrind_fedem", react = "silent")
  if (is.null(s33_rockgrind_fedem)){
    s33_rockgrind_fedem  <- new.magpie("GLO",NULL,fill=0)
  }

  ## variables
  prodFE  <- readGDX(gdx,name=c("vm_prodFe"),field="l",restore_zeros=FALSE,format="first_found")*TWa_2_EJ
  prodFE  <- prodFE[se2fe]
  prodSE <- readGDX(gdx,name=c("vm_prodSe","v_seprod"),field="l",restore_zeros=FALSE,format="first_found")*TWa_2_EJ
  prodSE <- mselect(prodSE,all_enty1=sety)
  vm_cesIO <- readGDX(gdx, name=c("vm_cesIO"), field="l", restore_zeros=FALSE,format= "first_found")*TWa_2_EJ
  vm_otherFEdemand  <- readGDX(gdx,name=c("vm_otherFEdemand"),field="l",format="first_found")*TWa_2_EJ
  vm_demFeForEs <- readGDX(gdx,name = c("vm_demFeForEs"), field="l", restore_zeros=FALSE,format= "first_found",react = "silent")*TWa_2_EJ
  v_prodEs <- readGDX(gdx,name = c("v_prodEs"), field="l",restore_zeros = F, format = "first_found", react = "silent") * TWa_2_EJ

  v33_grindrock_onfield  <- readGDX(gdx,name=c("v33_grindrock_onfield"),field="l",format="first_found",react = "silent")
  if (is.null(v33_grindrock_onfield)){
    v33_grindrock_onfield  <- new.magpie(getRegions(vm_otherFEdemand),getYears(vm_otherFEdemand),rlf,fill=0)
  }

  # Realisation of the different modules
  if ( !is.null(module2realisation) & (!"CES_structure" %in% module2realisation[, 1] )){
    stat_mod = find_real_module(module2realisation,"stationary")
    tran_mod = find_real_module(module2realisation,"transport")
    indu_mod = find_real_module(module2realisation,"industry")
    buil_mod = find_real_module(module2realisation,"buildings")
  } else {
    if ( !is.null(ppfen_stat)){   # In case the set module2realisation did not exist, find out whether it was stationary or buildings-industry
      stat_mod = "simple"
      indu_mod = "off"
      buil_mod = "off"
    } else {
      stat_mod = "off"
      indu_mod = "fixed_shares"
      buil_mod = "simple"
    }
    tran_mod = "complex"
  }

  if (buil_mod %in% c("services_putty", "services_with_capital")){
    p36_floorspace <- readGDX(gdx,"p36_floorspace")
  }
  ####### calculate minimal temporal resolution #####
  y <- Reduce(intersect,list(getYears(prodFE),getYears(prodSE)))
  prodFE  <- prodFE[,y,]
  prodSE <- prodSE[,y,]
  vm_cesIO <- vm_cesIO[,y,]
  if (0 < length(v_prodEs)) v_prodEs <- v_prodEs[,y,]
  vm_otherFEdemand <- vm_otherFEdemand[,y,]
  v33_grindrock_onfield<- v33_grindrock_onfield[,y,]

  ######## compute sets for summation below ######
  setSolBio <- dplyr::filter_(pe2se, ~all_enty %in% pebio, ~all_enty1 %in% se_Solids)

  ####### calculate reporting parameters ############
  tmp0 <- NULL

  if (any(grep('\\.offset_quantity$', getNames(pm_cesdata)))) {
    # Correct for offset quantities in the transition between ESM and CES for zero quantities
    pf <- paste0(getNames(vm_cesIO), '.offset_quantity')
    offset <- collapseNames(pm_cesdata[,,pf]) * TWa_2_EJ
    vm_cesIO = vm_cesIO + offset[,y,getNames(vm_cesIO)]
  }

  #--- Stationary Module ---
  if (stat_mod == "simple"){
    tmp0 <- mbind(tmp0,
                  setNames((dimSums(vm_cesIO[,,"feels"],dim=3,na.rm=T) + vm_otherFEdemand[,,"feels"]),          "FE|Stationary|Electricity (EJ/yr)"),
                  setNames((dimSums(vm_cesIO[,,"fegas"],dim=3,na.rm=T) + vm_otherFEdemand[,,"fegas"]),          "FE|Stationary|Gases (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,"fesos"],dim=3,na.rm=T),          "FE|Stationary|Solids (EJ/yr)"),
                  setNames((dimSums(vm_cesIO[,,"fehos"],dim=3,na.rm=T) + vm_otherFEdemand[,,"fedie"]),          "FE|Stationary|Liquids (EJ/yr)"),
                  setNames((dimSums(vm_cesIO[,,"feh2s"],dim=3,na.rm=T) + vm_otherFEdemand[,,"feh2s"]),          "FE|Stationary|Hydrogen (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,"fehes"],dim=3,na.rm=T),          "FE|Stationary|Heat (EJ/yr)"),
                  setNames( ( dimSums(vm_cesIO[,,ppfen_stat_build_ind],dim=3,na.rm=T)
                              + vm_otherFEdemand[,,"feels"]
                              + vm_otherFEdemand[,,"fegas"]
                              + vm_otherFEdemand[,,"feh2s"]
                              + vm_otherFEdemand[,,"fedie"]),             "FE|Other Sector (EJ/yr)")
    )
  }

  #--- Buildings Module ---
  if (buil_mod == "simple"){
    tmp0 <- mbind(tmp0,
                  setNames(dimSums(vm_cesIO[,,"feelb"],dim=3,na.rm=T),          "FE|Buildings|Electricity (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,"fegab"],dim=3,na.rm=T),          "FE|Buildings|Gases (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,"fesob"],dim=3,na.rm=T),          "FE|Buildings|Solids (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,"fehob"],dim=3,na.rm=T),          "FE|Buildings|Liquids (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,"feh2b"],dim=3,na.rm=T),          "FE|Buildings|Hydrogen (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,"feheb"],dim=3,na.rm=T),          "FE|Buildings|Heat (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,ppfen_build],dim=3,na.rm=T),      "FE|Buildings (EJ/yr)")
    )
  }

  if (buil_mod %in% c("services_putty", "services_with_capital")){

    p36_floorspace <- p36_floorspace[,y,]
    vm_demFeForEs = vm_demFeForEs[fe2es]

    ces_elec = c(grep("elb$", ppfen_build, value = T),grep("hpb$", ppfen_build, value = T))
    es_elec = c(grep("elb$", esty_build, value = T),grep("hpb$", esty_build, value = T))
    es_solids = c(grep("sob$", esty_build, value = T), grep("stb$", esty_build, value = T))
    es_gas = grep("gab$", esty_build, value = T)
    es_liq = grep("hob$", esty_build, value = T)
    es_heat = grep("heb$", esty_build, value = T)
    es_hydro = grep("h2b$", esty_build, value = T)

    putty_ue = c("uescb","ueshb","uealb","uecwb")

    tmp0 <- mbind(tmp0,
                  # Useful Energy
                  setNames(dimSums(vm_cesIO[,,"uealb"],dim=3,na.rm=T),        "UE|Buildings|Appliances and Light (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,"uecwb"],dim=3,na.rm=T),        "UE|Buildings|Cooking and Water (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,"ueshb"],dim=3,na.rm=T),        "UE|Buildings|Space Heating (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,"uescb"],dim=3,na.rm=T),        "UE|Buildings|Space Cooling (EJ/yr)"),

                  setNames(dimSums(vm_cesIO[,,putty_ue],dim=3,na.rm=T),       "UE|Buildings (EJ/yr)"),

                  setNames(dimSums(vm_cesIO[,,"uescb"],dim=3,na.rm=T),        "UE|Buildings|Space Cooling|Electricity (EJ/yr)"),

                  setNames(dimSums(vm_cesIO[,,"uealb"],dim=3,na.rm=T),        "UE|Buildings|Appliances and Light|Electricity (EJ/yr)"),

                  setNames(dimSums(v_prodEs[,,c("uecwsob","uecwstb")],dim=3,na.rm=T),        "UE|Buildings|Cooking and Water|Solids (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"uecwsob"],dim=3,na.rm=T),        "UE|Buildings|Cooking and Water|Solids|Modern (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"uecwstb"],dim=3,na.rm=T),        "UE|Buildings|Cooking and Water|Solids|Traditional (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"uecwelb"],dim=3,na.rm=T),        "UE|Buildings|Cooking and Water|Electricity|Resistance (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"uecwheb"],dim=3,na.rm=T),        "UE|Buildings|Cooking and Water|Heat (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"uecwgab"],dim=3,na.rm=T),        "UE|Buildings|Cooking and Water|Gases (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"uecwhob"],dim=3,na.rm=T),        "UE|Buildings|Cooking and Water|Liquids (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"uecwh2b"],dim=3,na.rm=T),        "UE|Buildings|Cooking and Water|Hydrogen (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"uecwhpb"],dim=3,na.rm=T),        "UE|Buildings|Cooking and Water|Electricity|Heat pumps (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,c("uecwelb","uecwhpb")],dim=3,na.rm=T), "UE|Buildings|Cooking and Water|Electricity (EJ/yr)"),


                  setNames(dimSums(v_prodEs[,,c("ueshsob","ueshstb")],dim=3,na.rm=T),        "UE|Buildings|Space Heating|Solids (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"ueshsob"],dim=3,na.rm=T),        "UE|Buildings|Space Heating|Solids|Modern (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"ueshstb"],dim=3,na.rm=T),        "UE|Buildings|Space Heating|Solids|Traditional (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"ueshelb"],dim=3,na.rm=T),        "UE|Buildings|Space Heating|Electricity|Resistance (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"ueshheb"],dim=3,na.rm=T),        "UE|Buildings|Space Heating|Heat (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"ueshgab"],dim=3,na.rm=T),        "UE|Buildings|Space Heating|Gases (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"ueshhob"],dim=3,na.rm=T),        "UE|Buildings|Space Heating|Liquids (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"ueshh2b"],dim=3,na.rm=T),        "UE|Buildings|Space Heating|Hydrogen (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,"ueshhpb"],dim=3,na.rm=T),        "UE|Buildings|Space Heating|Electricity|Heat pumps (EJ/yr)"),
                  setNames(dimSums(v_prodEs[,,c("ueshelb","ueshhpb")],dim=3,na.rm=T), "UE|Buildings|Space Heating|Electricity (EJ/yr)"),

                  # Final Energy
                  setNames(dimSums(vm_cesIO[,,"fealelb"],dim=3,na.rm=T),        "FE|Buildings|Appliances and Light|Electricity (EJ/yr)"),

                  setNames(dimSums(vm_demFeForEs[,,c("uecwsob","uecwstb")],dim=3,na.rm=T),        "FE|Buildings|Cooking and Water|Solids (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"uecwsob"],dim=3,na.rm=T),        "FE|Buildings|Cooking and Water|Solids|Modern (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"uecwstb"],dim=3,na.rm=T),        "FE|Buildings|Cooking and Water|Solids|Traditional (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"uecwelb"],dim=3,na.rm=T),        "FE|Buildings|Cooking and Water|Electricity|Resistance (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"uecwheb"],dim=3,na.rm=T),        "FE|Buildings|Cooking and Water|Heat (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"uecwgab"],dim=3,na.rm=T),        "FE|Buildings|Cooking and Water|Gases (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"uecwhob"],dim=3,na.rm=T),        "FE|Buildings|Cooking and Water|Liquids (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"uecwh2b"],dim=3,na.rm=T),        "FE|Buildings|Cooking and Water|Hydrogen (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"uecwhpb"],dim=3,na.rm=T),        "FE|Buildings|Cooking and Water|Electricity|Heat pumps (EJ/yr)"),

                  setNames(dimSums(vm_demFeForEs[,,c("uecwelb","uecwhpb")],dim=3,na.rm=T), "FE|Buildings|Cooking and Water|Electricity (EJ/yr)"),

                  setNames(dimSums(vm_cesIO[,,"fescelb"],dim=3,na.rm=T),        "FE|Buildings|Space Cooling|Electricity (EJ/yr)"),

                  setNames(dimSums(vm_demFeForEs[,,c("ueshsob","ueshstb")],dim=3,na.rm=T),        "FE|Buildings|Space Heating|Solids (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"ueshsob"],dim=3,na.rm=T),        "FE|Buildings|Space Heating|Solids|Modern (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"ueshstb"],dim=3,na.rm=T),        "FE|Buildings|Space Heating|Solids|Traditional (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"ueshelb"],dim=3,na.rm=T),        "FE|Buildings|Space Heating|Electricity|Resistance (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"ueshheb"],dim=3,na.rm=T),        "FE|Buildings|Space Heating|Heat (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"ueshgab"],dim=3,na.rm=T),        "FE|Buildings|Space Heating|Gases (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"ueshhob"],dim=3,na.rm=T),        "FE|Buildings|Space Heating|Liquids (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"ueshh2b"],dim=3,na.rm=T),        "FE|Buildings|Space Heating|Hydrogen (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,"ueshhpb"],dim=3,na.rm=T),        "FE|Buildings|Space Heating|Electricity|Heat pumps (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,c("ueshelb","ueshhpb")],dim=3,na.rm=T), "FE|Buildings|Space Heating|Electricity (EJ/yr)"),

                  setNames(dimSums(vm_cesIO[,,ces_elec],dim=3,na.rm=T)
                           + dimSums(vm_demFeForEs[,,es_elec],dim=3,na.rm=T),        "FE|Buildings|Electricity (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,es_gas],dim=3,na.rm=T),         "FE|Buildings|Gases (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,es_solids],dim=3,na.rm=T),      "FE|Buildings|Solids (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,es_liq],dim=3,na.rm=T),         "FE|Buildings|Liquids (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,es_hydro],dim=3,na.rm=T),       "FE|Buildings|Hydrogen (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs[,,es_heat],dim=3,na.rm=T),        "FE|Buildings|Heat (EJ/yr)"),

                  setNames(dimSums(vm_cesIO[,,ces_elec],dim=3,na.rm=T)
                           + dimSums(vm_demFeForEs[,,esty_build],dim=3,na.rm=T) ,       "FE|Buildings (EJ/yr)")
    )

    tmp0 <- mbind(tmp0,

                  setNames(dimSums(tmp0[,,c("UE|Buildings|Space Heating (EJ/yr)",
                                            "UE|Buildings|Space Cooling (EJ/yr)")],dim=3,na.rm=T),        "UE|Buildings|Space Conditioning (EJ/yr)"),

                  setNames(dimSums(tmp0[,,"FE|Buildings|Appliances and Light|Electricity (EJ/yr)"],dim=3,na.rm=T),        "FE|Buildings|Appliances and Light (EJ/yr)"),

                  setNames(dimSums(tmp0[,,c("FE|Buildings|Cooking and Water|Solids (EJ/yr)",
                                            "FE|Buildings|Cooking and Water|Electricity (EJ/yr)",
                                            "FE|Buildings|Cooking and Water|Heat (EJ/yr)",
                                            "FE|Buildings|Cooking and Water|Gases (EJ/yr)",
                                            "FE|Buildings|Cooking and Water|Liquids (EJ/yr)",
                                            "FE|Buildings|Cooking and Water|Hydrogen (EJ/yr)")],dim=3,na.rm=T),        "FE|Buildings|Cooking and Water (EJ/yr)"),


                  setNames(dimSums(tmp0[,,"FE|Buildings|Space Cooling|Electricity (EJ/yr)"],dim=3,na.rm=T),        "FE|Buildings|Space Cooling (EJ/yr)"),

                  setNames(dimSums(tmp0[,,c("FE|Buildings|Space Heating|Solids (EJ/yr)",
                                            "FE|Buildings|Space Heating|Electricity (EJ/yr)",
                                            "FE|Buildings|Space Heating|Heat (EJ/yr)",
                                            "FE|Buildings|Space Heating|Gases (EJ/yr)",
                                            "FE|Buildings|Space Heating|Liquids (EJ/yr)",
                                            "FE|Buildings|Space Heating|Hydrogen (EJ/yr)")],dim=3,na.rm=T),        "FE|Buildings|Space Heating (EJ/yr)")

    )

    tmp0 <-  mbind(tmp0,
                   setNames(p36_floorspace,        "Energy Service|Buildings|Floor Space (bn m2/yr)")
                   )
  }


  # ---- Industry Module ----
  if (indu_mod == "fixed_shares"){
    tmp0 = mbind(tmp0,
                 setNames(dimSums(vm_cesIO[,,"feeli"],dim=3,na.rm=T),          "FE|Industry|Electricity (EJ/yr)"),
                 setNames(dimSums(vm_cesIO[,,"fegai"],dim=3,na.rm=T),          "FE|Industry|Gases (EJ/yr)"),
                 setNames(dimSums(vm_cesIO[,,"fesoi"],dim=3,na.rm=T),          "FE|Industry|Solids (EJ/yr)"),
                 setNames(dimSums(vm_cesIO[,,"fehoi"],dim=3,na.rm=T),          "FE|Industry|Liquids (EJ/yr)"),
                 setNames(dimSums(vm_cesIO[,,"feh2i"],dim=3,na.rm=T),          "FE|Industry|Hydrogen (EJ/yr)"),
                 setNames(dimSums(vm_cesIO[,,"fehei"],dim=3,na.rm=T),          "FE|Industry|Heat (EJ/yr)")
    )
  } else if ('subsectors' == indu_mod) {
    # list of FE items to calculate
    var_FE_Industry <- list(
      # solids
      'Solids|Cement'          = 'feso_cement',
      'Solids|Chemicals'       = 'feso_chemicals',
      'Solids|Steel'           = 'feso_steel',
      'Solids|Steel|Primary'   = 'feso_steel',
      'Solids|Steel|Secondary' = c(),
      'Solids|other'           = 'feso_otherInd',
      'Solids'                 = c('feso_cement', 'feso_chemicals',
                                   'feso_steel', 'feso_otherInd'),
      # liquids
      'Liquids|Cement'          = 'feli_cement',
      'Liquids|Chemicals'       = 'feli_chemicals',
      'Liquids|Steel'           = 'feli_steel',
      'Liquids|Steel|Primary'   = 'feli_steel',
      'Liquids|Steel|Secondary' = c(),
      'Liquids|other'           = 'feli_otherInd',
      'Liquids'                 = c('feli_cement', 'feli_chemicals',
                                    'feli_steel', 'feli_otherInd'),
      # gases
      'Gases|Cement'          = 'fega_cement',
      'Gases|Chemicals'       = 'fega_chemicals',
      'Gases|Steel'           = 'fega_steel',
      'Gases|Steel|Primary'   = 'fega_steel',
      'Gases|Steel|Secondary' = c(),
      'Gases|other'           = 'fega_otherInd',
      'Gases'                 = c('fega_cement', 'fega_chemicals',
                                  'fega_steel', 'fega_otherInd'),
      # hydrogen
      'Hydrogen|Cement'          = 'feh2_cement',
      'Hydrogen|Chemicals'       = 'feh2_chemicals',
      'Hydrogen|Steel'           = 'feh2_steel',
      'Hydrogen|Steel|Primary'   = 'feh2_steel',
      'Hydrogen|Steel|Secondary' = c(),
      'Hydrogen|other'           = 'feh2_otherInd',
      'Hydrogen'                 = c('feh2_cement', 'feh2_chemicals',
                                     'feh2_steel', 'feh2_otherInd'),
      # heat (only used in other Industry subsectors)
      'Heat|Cement'          = c(),
      'Heat|Chemicals'       = c(),
      'Heat|Steel'           = c(),
      'Heat|Steel|Primary'   = c(),
      'Heat|Steel|Secondary' = c(),
      'Heat|other'           = 'fehe_otherInd',
      'Heat'                 = 'fehe_otherInd',

      # electricity
      'Electricity|Cement' = 'feel_cement',

      'Electricity|Chemicals' = c('feelhth_chemicals', 'feelwlth_chemicals'),
      'Electricity|Chemicals|High-Temperature Heat' = 'feelhth_chemicals',
      'Electricity|Chemicals|Work and Low-Temperature Heat' =
        'feelwlth_chemicals',

      'Electricity|Steel'           = c('feel_steel_primary',
                                        'feel_steel_secondary'),
      'Electricity|Steel|Primary'   = 'feel_steel_primary',
      'Electricity|Steel|Secondary' = 'feel_steel_secondary',

      'Electricity|other' = c('feelhth_otherInd', 'feelwlth_otherInd'),
      'Electricity|other|High-Temperature Heat'         = 'feelhth_otherInd',
      'Electricity|other|Work and Low-Temperature Heat' = 'feelwlth_otherInd',

      'Electricity' = c('feel_cement', 'feelhth_chemicals',
                        'feelwlth_chemicals', 'feel_steel_primary',
                        'feel_steel_secondary', 'feelhth_otherInd',
                        'feelwlth_otherInd'),

      'Electricity|High-Temperature Heat' = c('feelhth_chemicals',
                                              'feelhth_otherInd'),

      'Electricity|Work and Low-Temperature Heat' = c('feel_cement',
                                                      'feelwlth_chemicals',
                                                      'feel_steel_primary',
                                                      'feel_steel_secondary',
                                                      'feelwlth_otherInd'),

      # subsector totals
      'Cement' = c('feso_cement', 'feli_cement', 'fega_cement', 'feh2_cement',
                   'feh2_cement', 'feel_cement'),

      'Chemicals' = c('feso_chemicals', 'feli_chemicals', 'fega_chemicals',
                      'feh2_chemicals', 'feelhth_chemicals',
                      'feelwlth_chemicals'),

      'Steel' = c('feso_steel', 'feli_steel', 'fega_steel', 'feh2_steel',
                  'feel_steel_primary', 'feel_steel_secondary'),

      'Steel|Primary' = c('feso_steel', 'feli_steel', 'fega_steel',
                          'feh2_steel', 'feel_steel_primary'),

      'Steel|Secondary' = 'feel_steel_secondary',

      'other' = c('feso_otherInd', 'feli_otherInd', 'fega_otherInd',
                  'feh2_otherInd', 'fehe_otherInd', 'feelhth_otherInd',
                  'feelwlth_otherInd')
    )

    # list of production items to calculate, including factor for unit conversion
    var_UE_Industry <- inline.data.frame(
      'item;                                                  pf;                   factor',
      'Production|Industry|Cement (Mt/yr);                    ue_cement;            1e3',
      'Production|Industry|Steel|Primary (Mt/yr);             ue_steel_primary;     1e3',
      'Production|Industry|Steel|Secondary (Mt/yr);           ue_steel_secondary;   1e3',
      'Value Added|Industry|Chemicals (billion US$2005/yr);   ue_chemicals;         1e3',
      'Value Added|Industry|other (billion US$2005/yr);       ue_otherInd;          1e3',
      'Activity|Industry (arbitrary unit/yr);                 ue_industry;          1'
    )

    tmp0 <- mbind(
      tmp0,

      # for each item in var_FE_Industry
      lapply(var_FE_Industry,
             function(x) {
               # sum up indicated values from vm_cesIO, convert to EJ
               dimSums(mselect(vm_cesIO, all_in = x), dim = 3)
             }
      ) %>%
        # bind resulting list to single magpie object
        mbind() %>%
        # and rename accordingly
        setNames(paste0('FE|Industry|', names(var_FE_Industry), ' (EJ/yr)')),

      # get all UE values from vm_cesIO
      mselect(vm_cesIO, all_in = var_UE_Industry$pf) %>%
        magclass::as.data.frame() %>%
        mutate(Data1 = as.character(.data$Data1)) %>%
        select(-.data$Cell) %>%
        # combine with new names and factors
        inner_join(var_UE_Industry, c('Data1' = 'pf')) %>%
        # compute converted values
        group_by(.data$Region, .data$Year, .data$item) %>%
        # reverse unit conversion done during loading
        summarise(Value = sum(.data$Value * .data$factor) / TWa_2_EJ) %>%
        ungroup() %>%
        rename(Data1 = .data$item) %>%
        # back to magpie
        as.magpie()
    )

    # calculate UE|Steel as the sum of primary and secondary steel
    tmp0 <- mbind(
      tmp0,
      setNames(
        tmp0[,,'Production|Industry|Steel|Primary (Mt/yr)']
        + tmp0[,,'Production|Industry|Steel|Secondary (Mt/yr)'],
        'Production|Industry|Steel (Mt/yr)')
    )

    # calculate specific energy consumption of industrial production
    tmp0 <- mbind(
      tmp0,

      setNames(
        # EJ/yr / Mt/yr * 1e12 MJ/EJ / (1e6 t/Mt) = MJ/t
        ( tmp0[,,'FE|Industry|Cement (EJ/yr)']
        / tmp0[,,'Production|Industry|Cement (Mt/yr)']
        ) * 1e6,

        'Specific Energy Consumption|Production|Cement (MJ/t)'
      ),

      setNames(
        # EJ/yr / Mt/yr * 1e12 MJ/EJ / (1e6 t/Mt) = MJ/t
        ( tmp0[,,'FE|Industry|Steel (EJ/yr)']
        / tmp0[,,'Production|Industry|Steel (Mt/yr)']
        ) * 1e6,

        'Specific Energy Consumption|Production|Steel (MJ/t)'
      )
    )

  }

  if ('simple' != stat_mod) {
    tmp0 <- mbind(
      tmp0,
      setNames(
        ( dimSums(vm_cesIO[,,ppfen_ind], dim = 3) ),  'FE|Industry (EJ/yr)'),

      setNames(
        ( dimSums(vm_cesIO[,,c(ppfen_ind)], dim = 3)
          + tmp0[,,'FE|Buildings (EJ/yr)']
          + vm_otherFEdemand[,,'feels']
          + vm_otherFEdemand[,,'fegas']
          + vm_otherFEdemand[,,'feh2s']
          + vm_otherFEdemand[,,'fedie']
        ),
        'FE|Other Sector (EJ/yr)')
    )
  }

  # add Industry electricity share (for SDG targets)
  tmp0 <- mbind(
    tmp0,
    setNames(
        tmp0[,,'FE|Industry|Electricity (EJ/yr)']
      / tmp0[,,'FE|Industry (EJ/yr)']
      * 100,
      'FE|Industry|Electricity|Share (%)')
  )

  # ----
  tmp1 <- NULL
  tmp1 <- mbind(tmp0,
                setNames(dimSums(prodFE[,,se_Solids],dim=3,na.rm=T),  "FE|+|Solids (EJ/yr)"),
                setNames(dimSums(prodFE[,,se_Liq],dim=3,na.rm=T),     "FE|+|Liquids (EJ/yr)"),
                setNames(dimSums(prodFE[,,se_Gas],dim=3,na.rm=T),  "FE|+|Gases (EJ/yr)"),
                setNames(dimSums(prodFE[,,FE_Elec_fety35],dim=3,na.rm=T),      "FE|+|Electricity (EJ/yr)"),
                setNames(dimSums(prodFE[,,FE_H2_fety],dim=3,na.rm=T),          "FE|+|Hydrogen (EJ/yr)"),
                setNames(dimSums(prodFE[,,"sehe.fehes.tdhes"],dim=3,na.rm=T),  "FE|+|Heat (EJ/yr)"),
                setNames(dimSums(prodFE[,,FE_Transp_fety35],dim=3,na.rm=T) - vm_otherFEdemand[,,'fedie'],    "FE|Transport (EJ/yr)"),
                setNames(dimSums(prodFE[,,"seel.feelt.tdelt"],dim=3,na.rm=T),  "FE|Transport|Electricity (EJ/yr)"),
                setNames(dimSums(prodFE[,,"seh2.feh2t.tdh2t"],dim=3,na.rm=T),  "FE|Transport|Hydrogen (EJ/yr)"),
                setNames(dimSums(prodFE[,,c("fedie","fepet")],dim=3,na.rm=T) - vm_otherFEdemand[,,'fedie'],  "FE|Transport|Liquids (EJ/yr)"),
                setNames(dimSums(prodFE[,,"fedie"],dim=3,na.rm=T)- vm_otherFEdemand[,,'fedie'],             "FE|Transport|Diesel (EJ/yr)"),
                setNames(dimSums(prodFE[,,"fepet"],dim=3,na.rm=T),             "FE|Transport|Petrol (EJ/yr)"),
                setNames(p_eta_conv[,t2100,intersect(c("tdsos", "tdbiosos"),getNames(p_eta_conv))] * dimSums(prodSE[setSolBio][,t2100,], dim = 3), "FE|Solids|Biomass (EJ/yr)"),
                setNames(p_eta_conv[,t2100,intersect(c("tdsos", "tdbiosos"),getNames(p_eta_conv))] * dimSums(prodSE[,t2100,"biotrmod"], dim = 3),  "FE|Solids|Biomass|Modern (EJ/yr)"),
                setNames(p_eta_conv[,t2100,intersect(c("tdsos", "tdbiosos"),getNames(p_eta_conv))] * dimSums(prodSE[,t2100,"biotr"], dim = 3),     "FE|Solids|Biomass|Traditional (EJ/yr)"),
                setNames(p_eta_conv[,t2100,intersect(c("tdsos", "tdfossos"),getNames(p_eta_conv))] * dimSums(prodSE[,t2100,"coaltr"], dim = 3),    "FE|Solids|Coal (EJ/yr)")
  )

  if ("fegat" %in% getNames(prodFE, dim=2)){
    tmp1 <- mbind(tmp1,
                  setNames(dimSums(prodFE[,,"fegat"],dim=3,na.rm=T),             "FE|Transport|Gases (EJ/yr)"))
  }else{
    ## If there is no nat. gas in transport, let's just put zero
    tmp1 <- mbind(tmp1,
                  setNames(dimSums(prodFE[,,"fepet"] * 0, dim=3,na.rm=T),        "FE|Transport|Gases (EJ/yr)"))
  }

  if (tran_mod == "complex"){

    ## load conversion parameters
    p35_passLDV_ES_efficiency <- readGDX(gdx,"p35_passLDV_ES_efficiency", restore_zeros = FALSE)
    p35_pass_FE_share_transp <- readGDX(gdx,"p35_pass_FE_share_transp", restore_zeros = FALSE)
    p35_freight_ES_efficiency <- readGDX(gdx,"p35_freight_ES_efficiency", restore_zeros = FALSE)
    p35_pass_nonLDV_ES_efficiency <- readGDX(gdx,"p35_pass_nonLDV_ES_efficiency", restore_zeros = FALSE)

    #choose the CES entries names for transport
    name_trsp=c("fepet","ueLDVt","fedie","ueHDVt","feelt","ueelTt","fepet_pass_sm","fedie_pass_sm","feelt_pass_sm","fedie_pass_lo","fedie_frgt_sm","feelt_frgt_sm","fedie_frgt_lo")
    name_trsp=name_trsp[name_trsp%in%getNames(vm_cesIO)]

    name_trsp_HDV <- c("fedie","ueHDVt")
    name_trsp_HDV=name_trsp_HDV[name_trsp_HDV%in%getNames(vm_cesIO)]
    name_trsp_LDV <- c("fepet","ueLDVt")
    name_trsp_LDV=name_trsp_LDV[name_trsp_LDV%in%getNames(vm_cesIO)]
    name_trsp_ELT <- c("feelt","ueelTt")
    name_trsp_ELT=name_trsp_ELT[name_trsp_ELT%in%getNames(vm_cesIO)]

    fe2ue <- readGDX(gdx,c("fe2ue", "fe2es"), format = "first_found")
    setTrainEl <- filter_(fe2ue, ~all_enty == "feelt", ~all_te == "apTrnElT")
    LDV35 <- readGDX(gdx, "LDV35")


    demFE <- readGDX(gdx,name=c("v_demFe","vm_demFe"),field="l",restore_zeros=FALSE,format="first_found")*TWa_2_EJ
    demFE <- demFE[fe2ue]
    demFEdieTrsp <- dimSums(demFE[,, "fedie"], dim=3,na.rm=T) - vm_otherFEdemand[,,'fedie']

    tmp1 <- mbind(tmp1,
                  setNames(dimSums(demFE[,, "fepet"], dim=3,na.rm=T) + demFEdieTrsp  * p35_pass_FE_share_transp,
                           "FE|Transport|Pass|Liquids (EJ/yr)" ),
                  setNames(demFEdieTrsp * (1-p35_pass_FE_share_transp),
                           "FE|Transport|Freight|Liquids (EJ/yr)" ),
                  setNames(dimSums(demFE[,, "feh2t"],dim=3,na.rm=T),             "FE|Transport|Pass|Hydrogen (EJ/yr)" ),
                  setNames(dimSums(demFE[,, "feelt"],dim=3,na.rm=T),             "FE|Transport|Pass|Electricity (EJ/yr)" ),
                  setNames(dimSums(demFE[setTrainEl],dim=3,na.rm=T),             "FE|Transport|Pass|Train|Electricity (EJ/yr)" ),
                  setNames(dimSums(demFE[,,LDV35],dim=3,na.rm=T),                "FE|Transport|Pass|Road|LDV (EJ/yr)"),
                  setNames(dimSums(demFE[,,"apCarH2T"],dim=3,na.rm=T),           "FE|Transport|Pass|Road|LDV|Hydrogen (EJ/yr)"),
                  setNames(dimSums(demFE[,,"apCarPeT"],dim=3,na.rm=T),           "FE|Transport|Pass|Road|LDV|Liquids (EJ/yr)"),
                  setNames(dimSums(demFE[,,"apCarElT"],dim=3,na.rm=T),           "FE|Transport|Pass|Road|LDV|Electricity (EJ/yr)"),
                  setNames(dimSums(prodFE[,,FE_Transp_fety35],dim=3,na.rm=T)
                           -dimSums(demFE[,,LDV35],dim=3,na.rm=T) - vm_otherFEdemand[,,'fedie'],               "FE|Transport|non-LDV (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,name_trsp_LDV],dim=3,na.rm=T) * p35_passLDV_ES_efficiency,            "ES|Transport|Pass|Road|LDV (bn pkm/yr)"),
                  setNames(dimSums(vm_cesIO[,,name_trsp_LDV],dim=3,na.rm=T),            "UE|Transport|LDV (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,name_trsp_HDV],dim=3,na.rm=T),            "UE|Transport|HDV (EJ/yr)"),
                  NULL
    )
  }
  if (tran_mod == "edge_esm") {
    ## define the set that contains fe2es for transport
    fe2es_dyn35 <- readGDX(gdx,c("fe2es_dyn35"), format = "first_found")

    vm_demFeForEs_trnsp = vm_demFeForEs[fe2es_dyn35]

    tmp1 <- mbind(tmp1,
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"eselt_frgt_",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Freight|Electricity (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"eselt_pass_",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Pass|Electricity (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"esdie_frgt_",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Freight|Liquids (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,c("esdie_pass_", "espet_pass_"),pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Pass|Liquids (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"esgat_frgt_",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Freight|Gases (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"esgat_pass_",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Pass|Gases (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"esh2t_pass_",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Pass|Hydrogen (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"esh2t_frgt_",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Freight|Hydrogen (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"eselt_frgt_sm",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Freight|Short-Medium distance|Electricity (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"eselt_pass_sm",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Pass|Short-Medium distance|Electricity (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"esdie_frgt_sm",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Freight|Short-Medium distance|Diesel Liquids (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"esdie_pass_sm",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Pass|Short-Medium distance|Diesel Liquids (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"espet_pass_sm",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Pass|Short-Medium distance|Petrol Liquids (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"esdie_frgt_lo",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Freight|Long distance|Diesel Liquids (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"esdie_pass_lo",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Pass|Long distance|Diesel Liquids (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"esgat_frgt_sm",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Freight|Short-Medium distance|Gases (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"esgat_pass_sm",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Pass|Short-Medium distance|Gases (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"esh2t_pass_sm",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Pass|Short-Medium distance|Hydrogen (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"esh2t_frgt_sm",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Freight|Short-Medium distance|Hydrogen (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"_frgt_",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Freight (EJ/yr)"),
                  setNames(dimSums(vm_demFeForEs_trnsp[,,"_pass_",pmatch=TRUE],dim=3,na.rm=T),"FE|Transport|Pass (EJ/yr)"),
                  setNames(dimSums(vm_cesIO[,,"entrp_frgt_",pmatch=TRUE],dim=3,na.rm=T)/TWa_2_EJ * 1e3, # remove EJ conversion factor, conv. trillion to billion tkm
                           "ES|Transport|Freight (bn tkm/yr)"),
                  setNames(dimSums(vm_cesIO[,,"entrp_pass_",pmatch=TRUE],dim=3,na.rm=T)/TWa_2_EJ * 1e3, # trillion to billion pkm
                           "ES|Transport|Pass (bn pkm/yr)"),
                  setNames(dimSums(vm_cesIO[,,"entrp_frgt_sm",pmatch=TRUE],dim=3,na.rm=T)/TWa_2_EJ * 1e3, # trillion to billion tkm
                           "ES|Transport|Freight|Short-Medium distance (bn tkm/yr)"),
                  setNames(dimSums(vm_cesIO[,,"entrp_pass_sm",pmatch=TRUE],dim=3,na.rm=T)/TWa_2_EJ * 1e3, # trillion to billion pkm
                           "ES|Transport|Pass|Short-Medium distance (bn pkm/yr)"),
                  setNames(dimSums(vm_cesIO[,,"entrp_frgt_lo",pmatch=TRUE],dim=3,na.rm=T)/TWa_2_EJ * 1e3, # trillion to billion tkm
                           "ES|Transport|Freight|Long distance (bn tkm/yr)"),
                  setNames(dimSums(vm_cesIO[,,"entrp_pass_lo",pmatch=TRUE],dim=3,na.rm=T)/TWa_2_EJ * 1e3, # trillion to billion pkm
                           "ES|Transport|Pass|Long distance (bn pkm/yr)"))


    }




  #--- CDR reporting ---

  tmpCDR1 <- NULL
  tmpCDR1 <- mbind(tmpCDR1,
                setNames(vm_otherFEdemand[,,"feh2s"],        "FE|CDR|DAC|Hydrogen (EJ/yr)"),
                setNames(vm_otherFEdemand[,,"fegas"],        "FE|CDR|DAC|Gases (EJ/yr)"),
                setNames(vm_otherFEdemand[,,"fedie"],        "FE|CDR|EW|Diesel (EJ/yr)"),
                setNames(s33_rockgrind_fedem*dimSums(v33_grindrock_onfield[,,],dim=3,na.rm=T),        "FE|CDR|EW|Electricity (EJ/yr)"),
                setNames(vm_otherFEdemand[,,"feels"],        "FE|CDR|Electricity (EJ/yr)"),
                setNames(vm_otherFEdemand[,,"fedie"],        "FE|CDR|Liquids (EJ/yr)"),
                setNames(vm_otherFEdemand[,,"fegas"],        "FE|CDR|Gases (EJ/yr)"),
                setNames(vm_otherFEdemand[,,"feh2s"],        "FE|CDR|Hydrogen (EJ/yr)")
  )


  tmpCDR2 <- NULL
  tmpCDR2 <- mbind(tmpCDR1,
                setNames(tmpCDR1[,,"FE|CDR|Electricity (EJ/yr)"] - tmpCDR1[,,"FE|CDR|EW|Electricity (EJ/yr)"], "FE|CDR|DAC|Electricity (EJ/yr)")
  )
  tmpCDR3 <- NULL
  tmpCDR3 <- mbind(tmpCDR2,
                setNames(tmpCDR1[,,"FE|CDR|DAC|Hydrogen (EJ/yr)"] + tmpCDR1[,,"FE|CDR|DAC|Gases (EJ/yr)"] + tmpCDR2[,,"FE|CDR|DAC|Electricity (EJ/yr)"], "FE|CDR|DAC (EJ/yr)"),
                setNames(tmpCDR2[,,"FE|CDR|EW|Diesel (EJ/yr)"] + tmpCDR2[,,"FE|CDR|EW|Electricity (EJ/yr)"], "FE|CDR|EW (EJ/yr)")
  )
  tmpCDR4 <- NULL
  tmpCDR4 <- mbind(tmpCDR3,
                setNames(tmpCDR3[,,"FE|CDR|DAC (EJ/yr)"] + tmpCDR3[,,"FE|CDR|EW (EJ/yr)"], "FE|CDR (EJ/yr)")
  )

  tmp2 <- mbind(
    tmp1,
    tmpCDR4)

  if (stat_mod == "simple"){
    tmp2 = mbind(tmp2,
                 setNames(tmp1[,,"FE|Stationary|Liquids (EJ/yr)"] + tmpCDR4[,,"FE|CDR|Liquids (EJ/yr)"],"FE|Other Sector|Liquids (EJ/yr)"),
                 setNames(tmp1[,,"FE|Stationary|Gases (EJ/yr)"] + tmpCDR4[,,"FE|CDR|Gases (EJ/yr)"],"FE|Other Sector|Gases (EJ/yr)"),
                 setNames(tmp1[,,"FE|Stationary|Hydrogen (EJ/yr)"] + tmpCDR4[,,"FE|CDR|Hydrogen (EJ/yr)"],"FE|Other Sector|Hydrogen (EJ/yr)"),
                 setNames(tmp1[,,"FE|Stationary|Electricity (EJ/yr)"] + tmpCDR4[,,"FE|CDR|Electricity (EJ/yr)"],"FE|Other Sector|Electricity (EJ/yr)"),
                 setNames(tmp1[,,"FE|Stationary|Solids (EJ/yr)"], "FE|Other Sector|Solids (EJ/yr)"),
                 setNames(tmp1[,,"FE|Stationary|Heat (EJ/yr)"], "FE|Other Sector|Heat (EJ/yr)")
                 )
  } else if (stat_mod == "off"){
    tmp2 = mbind(tmp2,
                 setNames(tmp1[,,"FE|Buildings|Solids (EJ/yr)"] + tmp1[,,"FE|Industry|Solids (EJ/yr)"] ,"FE|Other Sector|Solids (EJ/yr)"),
                 setNames(tmp1[,,"FE|Buildings|Liquids (EJ/yr)"] + tmp1[,,"FE|Industry|Liquids (EJ/yr)"] + tmpCDR4[,,"FE|CDR|Liquids (EJ/yr)"],"FE|Other Sector|Liquids (EJ/yr)"),
                 setNames(tmp1[,,"FE|Buildings|Gases (EJ/yr)"] + tmp1[,,"FE|Industry|Gases (EJ/yr)"] + tmpCDR4[,,"FE|CDR|Gases (EJ/yr)"],"FE|Other Sector|Gases (EJ/yr)"),
                 setNames(tmp1[,,"FE|Buildings|Hydrogen (EJ/yr)"] + tmp1[,,"FE|Industry|Hydrogen (EJ/yr)"]+ tmpCDR4[,,"FE|CDR|Hydrogen (EJ/yr)"],"FE|Other Sector|Hydrogen (EJ/yr)"),
                 setNames(tmp1[,,"FE|Buildings|Electricity (EJ/yr)"] + tmp1[,,"FE|Industry|Electricity (EJ/yr)"]+ tmpCDR4[,,"FE|CDR|Electricity (EJ/yr)"],"FE|Other Sector|Electricity (EJ/yr)"),
                 setNames(tmp1[,,"FE|Buildings|Heat (EJ/yr)"] + tmp1[,,"FE|Industry|Heat (EJ/yr)"],"FE|Other Sector|Heat (EJ/yr)")
                 )
    if("segabio" %in% se_Gas){
      ## Bioshare in FEDIE and FEPET
      fedie_bioshare <- dimSums(prodFE[,,"seliqbio.fedie.tdbiodie"] /
                                (prodFE[,,"seliqbio.fedie.tdbiodie"] +
                                 prodFE[,, "seliqfos.fedie.tdfosdie"]),dim=3,na.rm=T)
      fepet_bioshare <- dimSums(prodFE[,,"seliqbio.fepet.tdbiopet"] /
                                (prodFE[,,"seliqbio.fepet.tdbiopet"] +
                                 prodFE[,, "seliqfos.fepet.tdfospet"]),dim=3,na.rm=T)

      tmp2 <- mbind(tmp2,
                    setNames(dimSums(prodFE[,,"segabio.fegas.tdbiogas"],dim=3,na.rm=T),
                             "FE|Other Sector|Gases|Biomass (EJ/yr)"),
                    setNames(dimSums(prodFE[,,"segafos.fegas.tdfosgas"],dim=3,na.rm=T),
                             "FE|Other Sector|Gases|Non-Biomass (EJ/yr)"))

      if(tran_mod == "edge_esm"){
        p35_pass_FE_share_transp <- dimSums(vm_demFeForEs_trnsp[,,"esdie_pass_",pmatch=TRUE], dim=3,na.rm=T) /
          dimSums(vm_demFeForEs_trnsp[,,"esdie_",pmatch=TRUE], dim=3,na.rm=T)
      }

      tmp2 <- mbind(
        tmp2,
        setNames((dimSums(prodFE[,,"fedie"], dim=3,na.rm=T) - vm_otherFEdemand[,,'fedie'])* fedie_bioshare * p35_pass_FE_share_transp +
                 dimSums(prodFE[,,"fepet"], dim=3,na.rm=T) * fepet_bioshare,
                 "FE|Transport|Pass|Liquids|Biomass (EJ/yr)"),
        setNames((dimSums(prodFE[,,"fedie"], dim=3,na.rm=T) - vm_otherFEdemand[,,'fedie']) * (1-p35_pass_FE_share_transp) * fedie_bioshare,
                 "FE|Transport|Freight|Liquids|Biomass (EJ/yr)"))
      tmp2 <- mbind(tmp2,
                    setNames(
                      tmp2[,,"FE|Transport|Pass|Liquids|Biomass (EJ/yr)"] +
                      tmp2[,,"FE|Transport|Freight|Liquids|Biomass (EJ/yr)"],
                      "FE|Transport|Liquids|Biomass (EJ/yr)"
                    ))

    }

    if("fegat" %in% fety && "segabio" %in% se_Gas){
      tmp2 <- mbind(tmp2,
                    setNames(dimSums(prodFE[,,"segabio.fegat.tdbiogat"],dim=3,na.rm=T),
                             "FE|Transport|Gases|Biomass (EJ/yr)"),
                    setNames(dimSums(prodFE[,,"segafos.fegat.tdfosgat"],dim=3,na.rm=T),
                             "FE|Transport|Gases|Non-Biomass (EJ/yr)"))
    }
  }

    tmp2 = mbind(tmp2,
    setNames(tmp1[,,"FE|Solids|Biomass (EJ/yr)"],"FE|Other Sector|Solids|Biomass (EJ/yr)"),
    setNames(tmp1[,,"FE|Solids|Biomass|Traditional (EJ/yr)"],"FE|Other Sector|Solids|Biomass|Traditional (EJ/yr)"),
    setNames(tmp1[,,"FE|Solids|Coal (EJ/yr)"],"FE|Other Sector|Solids|Coal (EJ/yr)"),
    setNames(tmp1[,,"FE|Other Sector (EJ/yr)"] + tmp1[,,"FE|Transport (EJ/yr)"], "FE (EJ/yr)"),
    setNames(tmp1[,,"FE|+|Electricity (EJ/yr)"] / TWa_2_EJ * 1000 * 1.1 * 1.4, "Cap|Electricity|Peak Demand|Estimated from FE x 1p4 x 1p1 (GW)")
   )

  tmp2a <- mbind(
    tmp2,
    setNames(tmp2[,,"FE (EJ/yr)"],"FE|Gross with CDR (EJ/yr)"),
    setNames(tmp2[,,"FE (EJ/yr)"] - tmp2[,,"FE|CDR (EJ/yr)"], "FE|Net without CDR (EJ/yr)")
  )


  if (tran_mod == "complex") {
    tmp2 <- mbind(tmp2a,
                  setNames(tmp1[,, "FE|Transport|Freight|Liquids (EJ/yr)"], "FE|Transport|Freight (EJ/yr)"),
                  setNames(p35_pass_FE_share_transp * tmp1[,, "UE|Transport|HDV (EJ/yr)"], "UE|Transport|Pass|non-LDV (EJ/yr)"),
                  setNames((1- p35_pass_FE_share_transp) * tmp1[,, "UE|Transport|HDV (EJ/yr)"], "UE|Transport|Freight (EJ/yr)"),
                  NULL
    )

  # 1.1 is loss for SE2FE, 1.4 is peak to average (US 1.5, IND/CHN/AFR 1.2, EUR/JPN 1.4)

    tmp3 <- mbind(tmp2,
                  setNames(p35_freight_ES_efficiency * tmp2[,,"UE|Transport|Freight (EJ/yr)"],"ES|Transport|Freight (bn tkm/yr)"),
                  setNames(p35_pass_nonLDV_ES_efficiency * tmp2[,,"UE|Transport|Pass|non-LDV (EJ/yr)"],"ES|Transport|Pass|non-LDV (bn pkm/yr)"),
                  setNames(tmp2[,,"FE|Transport|Pass|Liquids (EJ/yr)"] + tmp2[,,"FE|Transport|Pass|Hydrogen (EJ/yr)"] + tmp2[,,"FE|Transport|Pass|Electricity (EJ/yr)"], "FE|Transport|Pass (EJ/yr)")
    )

    tmp4 <- mbind(tmp3,
                  setNames(tmp3[,,"FE|Transport|Pass (EJ/yr)"] - tmp3[,,"FE|Transport|Pass|Road|LDV (EJ/yr)"], "FE|Transport|Pass|non-LDV (EJ/yr)"),
                  setNames(tmp3[,,"ES|Transport|Pass|Road|LDV (bn pkm/yr)"] + tmp3[,,"ES|Transport|Pass|non-LDV (bn pkm/yr)"], "ES|Transport|Pass (bn pkm/yr)")
    )
  }else{
    # we add no entries here for now. *TODO* check if these entries are used, e.g., in exoGAINSairpollutants, to sum up fes.
    tmp4 <- tmp2
  }

  #--- Disaggregate solids between coal, modern biomass and traditional biomass
  if (stat_mod == "off"){

    tmp4 <-  mbind(tmp4,  setNames(asS4(pmin(tmp4[,,"FE|Solids|Biomass|Traditional (EJ/yr)"],tmp4[,,"FE|Buildings|Solids (EJ/yr)"]))  ,"FE|Buildings|Solids|Biomass|Traditional (EJ/yr)"))

    tmp4 <-  mbind(tmp4,  setNames(tmp4[,,"FE|Solids|Biomass|Traditional (EJ/yr)"] - tmp4[,,"FE|Buildings|Solids|Biomass|Traditional (EJ/yr)"],"FE|Industry|Solids|Biomass|Traditional (EJ/yr)" ))

    share_sol_noTrad_buil = (tmp4[,,"FE|Buildings|Solids (EJ/yr)"] - tmp4[,,"FE|Buildings|Solids|Biomass|Traditional (EJ/yr)"]) / (tmp1[,,"FE|+|Solids (EJ/yr)"] - tmp4[,,"FE|Solids|Biomass|Traditional (EJ/yr)"] )
    share_sol_noTrad_indu = (tmp4[,,"FE|Industry|Solids (EJ/yr)"] - tmp4[,,"FE|Industry|Solids|Biomass|Traditional (EJ/yr)"]) / (tmp1[,,"FE|+|Solids (EJ/yr)"] - tmp4[,,"FE|Solids|Biomass|Traditional (EJ/yr)"] )

    tmp4 <- mbind(tmp4,
                  setNames(tmp4[,,"FE|Solids|Biomass|Modern (EJ/yr)"] *share_sol_noTrad_buil,  "FE|Buildings|Solids|Biomass|Modern (EJ/yr)"),
                  setNames(tmp4[,,"FE|Solids|Coal (EJ/yr)"]  * share_sol_noTrad_buil,"FE|Buildings|Solids|Coal (EJ/yr)"),
                  setNames(tmp4[,,"FE|Solids|Biomass|Modern (EJ/yr)"] * share_sol_noTrad_indu  ,"FE|Industry|Solids|Biomass|Modern (EJ/yr)"),
                  setNames(tmp4[,,"FE|Solids|Coal (EJ/yr)"] *  share_sol_noTrad_indu,"FE|Industry|Solids|Coal (EJ/yr)")
    )

    tmp4 <-  mbind(tmp4,
                   setNames(tmp4[,,"FE|Buildings|Solids|Biomass|Traditional (EJ/yr)"] +  tmp4[,,"FE|Buildings|Solids|Biomass|Modern (EJ/yr)"],"FE|Buildings|Solids|Biomass (EJ/yr)"),
                   setNames(tmp4[,,"FE|Industry|Solids|Biomass|Traditional (EJ/yr)"] +tmp4[,,"FE|Industry|Solids|Biomass|Modern (EJ/yr)"],"FE|Industry|Solids|Biomass (EJ/yr)")
    )

    # Add fuel (vs elec) computation
    tmp4 = mbind(tmp4,
    setNames(tmp4[,,"FE|Buildings (EJ/yr)"] - tmp4[,,"FE|Buildings|Electricity (EJ/yr)"] - tmp4[,,"FE|Buildings|Heat (EJ/yr)"], "FE|Buildings|Fuels (EJ/yr)"),
    setNames(tmp4[,,"FE|Industry (EJ/yr)"] - tmp4[,,"FE|Industry|Electricity (EJ/yr)"] - tmp4[,,"FE|Industry|Heat (EJ/yr)"], "FE|Industry|Fuels (EJ/yr)")
    )
  }



  tmp5 <- mbind(tmp4,
                setNames(tmp4[,,"FE|Transport|Liquids (EJ/yr)"] + tmp4[,,"FE|Transport|Hydrogen (EJ/yr)"], "FE|Transport|Fuels (EJ/yr)"),
                setNames(tmp4[,,"FE (EJ/yr)"] - tmp4[,,"FE|+|Electricity (EJ/yr)"] - tmp4[,,"FE|+|Heat (EJ/yr)"], "FE|Fuels (EJ/yr)")
  )
  out <- tmp5


  ### FS: add new FE sectoral synfuel/biomass/fossil reporting
  #( taking into account that the proportion of seliqfos and seliqbio flows may be different across sectors)

  ### disclaimer: (!) SE synfuels in REMIND normal are temporarily are part of segafos/seliqfos (this is differnet in REMIND-EU!)


  # calculate synfuel share in SE seliqfos

  if("seliqbio" %in% se_Liq){

    ## only if CCU is on
    if (module2realisation["CCU",2] == "on") {
      p_share_synfuel_liq <- replace_non_finite(
        collapseNames(prodSE[,,"seliqfos.MeOH"] / dimSums(mselect(prodSE, all_enty1="seliqfos"), dim=3,na.rm=T)))
      p_share_synfuel_gas <- replace_non_finite(
        prodSE[,,"h22ch4"] / dimSums(mselect(prodSE, all_enty1="segafos"), dim=3,na.rm=T))

    } else {
      p_share_synfuel_liq = 0
      p_share_synfuel_gas = 0
    }

    p_share_coal_liq <- replace_non_finite(
      collapseNames(
        dimSums(prodSE[,,c("seliqfos.coalftrec", "seliqfos.coalftcrec")], dim=3,na.rm=T) / dimSums(mselect(prodSE, all_enty1="seliqfos"), dim=3,na.rm=T)))


    ## New Reporting variables ignore otherFEdemand (fedie for enhanced weathering)
    tmp8 <- mbind(
      setNames(p_share_synfuel_liq * collapseNames(prodFE[,,"seliqfos.fepet.tdfospet"]),
               "FE|Transport|Liquids|LDV|Synthetic|New Reporting (EJ/yr)"),
      setNames(p_share_synfuel_liq * collapseNames(prodFE[,,"seliqfos.fedie.tdfosdie"]),
               "FE|Transport|Liquids|HDV|Synthetic|New Reporting (EJ/yr)"),
      setNames(p_share_synfuel_liq * collapseNames(dimSums(prodFE[,,c("tdfospet","tdfosdie")], dim=3,na.rm=T)),
               "FE|Transport|Liquids|Synthetic|New Reporting (EJ/yr)"),
      setNames(collapseNames(prodFE[,,"seliqbio.fepet.tdbiopet"]),
               "FE|Transport|Liquids|LDV|Biomass|New Reporting (EJ/yr)"),
      setNames(collapseNames(prodFE[,,"seliqbio.fedie.tdbiodie"]),
               "FE|Transport|Liquids|HDV|Biomass|New Reporting (EJ/yr)"),
      setNames(collapseNames(dimSums(prodFE[,,c("tdbiopet","tdbiodie")], dim=3,na.rm=T)),
               "FE|Transport|Liquids|Biomass|New Reporting (EJ/yr)"),
      setNames((1-p_share_synfuel_liq) * collapseNames(prodFE[,,"seliqfos.fepet.tdfospet"]),
               "FE|Transport|Liquids|LDV|Fossil|New Reporting (EJ/yr)"),
      setNames((1-p_share_synfuel_liq) * collapseNames(prodFE[,,"seliqfos.fedie.tdfosdie"]),
               "FE|Transport|Liquids|HDV|Fossil|New Reporting (EJ/yr)"),
      setNames((1-p_share_synfuel_liq) * collapseNames(dimSums(prodFE[,,c("tdfospet","tdfosdie")], dim=3,na.rm=T)),
               "FE|Transport|Liquids|Fossil|New Reporting (EJ/yr)"),
      setNames((dimSums(prodFE[,,"fedie"], dim=3,na.rm=T) - vm_otherFEdemand[,,'fedie']) * (1-fedie_bioshare) * p_share_synfuel_liq * p35_pass_FE_share_transp +
               dimSums(prodFE[,,"fepet"], dim=3,na.rm=T) * (1-fepet_bioshare) * p_share_synfuel_liq,
               "FE|Transport|Pass|Liquids|Hydrogen (EJ/yr)"),
      setNames((dimSums(prodFE[,,"fedie"], dim=3,na.rm=T) - vm_otherFEdemand[,,'fedie']) * (1-fedie_bioshare) * p_share_synfuel_liq * (1-p35_pass_FE_share_transp),
               "FE|Transport|Freight|Liquids|Hydrogen (EJ/yr)"),
      setNames((dimSums(prodFE[,,"fedie"], dim=3,na.rm=T) - vm_otherFEdemand[,,'fedie']) * (1-fedie_bioshare) * p_share_synfuel_liq,
               "FE|Transport|Liquids|Hydrogen (EJ/yr)"))



      if ("fegat" %in% getNames(prodFE, dim=2)) {
        tmp8 <- mbind(
          tmp8,
          setNames(p_share_synfuel_liq * collapseNames(dimSums(prodFE[,,c("tdfosgat")], dim=3,na.rm=T)),
                   "FE|Transport|Gases|Synthetic|New Reporting (EJ/yr)"),
          setNames(collapseNames(dimSums(prodFE[,,c("tdbiogat")], dim=3,na.rm=T)),
                   "FE|Transport|Gases|Biomass|New Reporting (EJ/yr)"),
          setNames((1-p_share_synfuel_liq) * collapseNames(dimSums(prodFE[,,c("tdfosgat")], dim=3,na.rm=T)),
                   "FE|Transport|Gases|Fossil|New Reporting (EJ/yr)"))
      }

    }else{
      p_share_coal_liq = 0
      tmp8 <- mbind(
        new.magpie(getRegions(vm_otherFEdemand),getYears(vm_otherFEdemand), "FE|Transport|Pass|Liquids|Hydrogen (EJ/yr)", fill=0),
        new.magpie(getRegions(vm_otherFEdemand),getYears(vm_otherFEdemand), "FE|Transport|Freight|Liquids|Hydrogen (EJ/yr)", fill=0),
        new.magpie(getRegions(vm_otherFEdemand),getYears(vm_otherFEdemand), "FE|Transport|Liquids|Hydrogen (EJ/yr)", fill=0))
    }

  if("segabio" %in% se_Gas){
    tmp8 <- mbind(
      tmp8,
      setNames(
        (dimSums(prodFE[,,"fedie"], dim=3,na.rm=T) - vm_otherFEdemand[,,'fedie']) * (1-fedie_bioshare) * (1 - p_share_synfuel_liq - p_share_coal_liq) +
          dimSums(prodFE[,,"fepet"], dim=3,na.rm=T) * (1 - fepet_bioshare) * (1 - p_share_coal_liq - p_share_synfuel_liq),
        "FE|Transport|Liquids|Oil (EJ/yr)"),
      setNames(
        (dimSums(prodFE[,,"fedie"], dim=3,na.rm=T) - vm_otherFEdemand[,,'fedie']) * (1-fedie_bioshare) * p_share_coal_liq +
          dimSums(prodFE[,,"fepet"], dim=3,na.rm=T) * (1 - fepet_bioshare) * p_share_coal_liq,
        "FE|Transport|Liquids|Coal (EJ/yr)"))
  }



    out <- mbind(out, tmp8)


  # add global values
  out <- mbind(out,dimSums(out,dim=1))
  # add other region aggregations
  if (!is.null(regionSubsetList))
    out <- mbind(out, calc_regionSubset_sums(out, regionSubsetList))

  out2 <- mbind(out,
                setNames(100 * out[,,"FE|Transport|Fuels (EJ/yr)"] / out[,,"FE|Transport (EJ/yr)"], "FE|Transport|Fuels|Share (Percent)"),
                setNames(100 * out[,,"FE|Fuels (EJ/yr)"] / out[,,"FE (EJ/yr)"], "FE|Fuels|Share (Percent)")
  )

  # change Other Sector to Buildings and Industry if this is the structure used
  if (stat_mod == "off"){
    magclass::getNames(out2) <- sub("Other Sector","Buildings and Industry", magclass::getNames(out2))

  # Add fuel shares
    out2 = mbind(out2,
                 setNames(100 * out[,,"FE|Buildings|Fuels (EJ/yr)"] / out[,,"FE|Buildings (EJ/yr)"], "FE|Buildings|Fuels|Share (Percent)"),
                 setNames(100 * out[,,"FE|Industry|Fuels (EJ/yr)"] / out[,,"FE|Industry (EJ/yr)"], "FE|Industry|Fuels|Share (Percent)")
                 )
  }
  return(out2)
}
pik-piam/remind documentation built on Sept. 9, 2021, 1:09 p.m.