From 3b3482302ea7e86488d00b593ca6a091691b780f Mon Sep 17 00:00:00 2001 From: David Klein <dklein@pik-potsdam.de> Date: Mon, 13 Jan 2020 16:55:22 +0100 Subject: [PATCH] Refactoring: - start scripts (part 6): delete files that are not needed anymore, moved files. --- scripts/output/comparison/compareScenarios.R | 4 +- scripts/run_submit/submit.R | 432 ------------------ scripts/run_submit/submit.cmd | 16 - scripts/run_submit/submit_par.cmd | 17 - scripts/run_submit/submit_par16.cmd | 17 - scripts/run_submit/submit_short.cmd | 15 - .../run_compareScenarios.R | 0 start.R | 26 -- start_bundle.R | 126 ----- 9 files changed, 2 insertions(+), 651 deletions(-) delete mode 100644 scripts/run_submit/submit.R delete mode 100644 scripts/run_submit/submit.cmd delete mode 100644 scripts/run_submit/submit_par.cmd delete mode 100644 scripts/run_submit/submit_par16.cmd delete mode 100644 scripts/run_submit/submit_short.cmd rename scripts/{run_submit => utils}/run_compareScenarios.R (100%) delete mode 100644 start.R delete mode 100644 start_bundle.R diff --git a/scripts/output/comparison/compareScenarios.R b/scripts/output/comparison/compareScenarios.R index b946208..449801c 100644 --- a/scripts/output/comparison/compareScenarios.R +++ b/scripts/output/comparison/compareScenarios.R @@ -52,11 +52,11 @@ start_comp <- function(outputdirs,shortTerm,outfilename) { cat("Starting ",jobname,"\n") on_cluster <- file.exists("/p/projects/") if (on_cluster) { - system(paste0("srun --qos=standby --job-name=",jobname," --output=",jobname,".out --error=",jobname,".err --mail-type=END --time=200 --mem-per-cpu=8000 Rscript scripts/run_submit/run_compareScenarios.R outputdirs=",paste(outputdirs,collapse=",")," shortTerm=",shortTerm," outfilename=",jobname," &")) + system(paste0("srun --qos=standby --job-name=",jobname," --output=",jobname,".out --error=",jobname,".err --mail-type=END --time=200 --mem-per-cpu=8000 Rscript scripts/utils/run_compareScenarios.R outputdirs=",paste(outputdirs,collapse=",")," shortTerm=",shortTerm," outfilename=",jobname," &")) } else { outfilename <- jobname tmp.env <- new.env() - script <- "scripts/run_submit/run_compareScenarios.R" + script <- "scripts/utils/run_compareScenarios.R" tmp.error <- try(sys.source(script,envir=tmp.env)) if(!is.null(tmp.error)) warning("Script ",script," was stopped by an error and not executed properly!") rm(tmp.env) diff --git a/scripts/run_submit/submit.R b/scripts/run_submit/submit.R deleted file mode 100644 index 73a2b8b..0000000 --- a/scripts/run_submit/submit.R +++ /dev/null @@ -1,432 +0,0 @@ -# | (C) 2006-2019 Potsdam Institute for Climate Impact Research (PIK) -# | authors, and contributors see CITATION.cff file. This file is part -# | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -# | AGPL-3.0, you are granted additional permissions described in the -# | REMIND License Exception, version 1.0 (see LICENSE file). -# | Contact: remind@pik-potsdam.de - -library(lucode, quietly = TRUE,warn.conflicts =FALSE) -library(dplyr, quietly = TRUE,warn.conflicts =FALSE) -require(gdx) - - - -# Function to create the levs.gms, fixings.gms, and margs.gms files, used in -# delay scenarios. -create_fixing_files <- function(cfg, input_ref_file = "input_ref.gdx") { - - # Start the clock. - begin <- Sys.time() - - # Extract data from input_ref.gdx file and store in levs_margs_ref.gms. - system(paste("gdxdump", - input_ref_file, - "Format=gamsbas Delim=comma FilterDef=N Output=levs_margs_ref.gms", - sep = " ")) - - # Read data from levs_margs_ref.gms. - ref_gdx_data <- suppressWarnings(readLines("levs_margs_ref.gms")) - - # Create fixing files. - cat("\n") - create_standard_fixings(cfg, ref_gdx_data) - - # Stop the clock. - cat("Time it took to create the fixing files: ") - manipulate_runtime <- Sys.time()-begin - print(manipulate_runtime) - cat("\n") - - - # Delete file. - file.remove("levs_margs_ref.gms") - -} - - -# Function to create the levs.gms, fixings.gms, and margs.gms files, used in -# the standard (i.e. the non-macro stand-alone) delay scenarios. -create_standard_fixings <- function(cfg, ref_gdx_data) { - - # Declare empty lists to hold the strings for the 'manipulateFile' functions. - full_manipulateThis <- NULL - levs_manipulateThis <- NULL - fixings_manipulateThis <- NULL - margs_manipulateThis <- NULL - - str_years <- c() - no_years <- (cfg$gms$cm_startyear - 2005) / 5 - - # Write level values to file - levs <- c() - for (i in 1:no_years) { - str_years[i] <- paste("L \\('", 2000 + i * 5, sep = "") - levs <- c(levs, grep(str_years[i], ref_gdx_data, value = TRUE)) - } - - writeLines(levs, "levs.gms") - - # Replace fixing.gms with level values - file.copy("levs.gms", "fixings.gms", overwrite = TRUE) - - fixings_manipulateThis <- c(fixings_manipulateThis, list(c(".L ", ".FX "))) - #cb q_co2eq is only "static" equation to be active before cm_startyear, as multigasscen could be different from a scenario to another that is fixed on the first - #cb therefore, vm_co2eq cannot be fixed, otherwise infeasibilities would result. vm_co2eq.M is meaningless, is never used in the code (a manipulateFile delete line command would be even better) - # manipulateFile("fixings.gms", list(c("vm_co2eq.FX ", "vm_co2eq.M "))) - - # Write marginal values to file - margs <- c() - str_years <- c() - for (i in 1:no_years) { - str_years[i] <- paste("M \\('", 2000 + i * 5, sep = "") - margs <- c(margs, grep(str_years[i], ref_gdx_data, value = TRUE)) - } - writeLines(margs, "margs.gms") - # temporary fix so that you can use older gdx for fixings - will become obsolete in the future and can be deleted once the next variable name change is done - margs_manipulateThis <- c(margs_manipulateThis, list(c("q_taxrev","q21_taxrev"))) - # fixing for SPA runs based on ModPol input data - margs_manipulateThis <- c(margs_manipulateThis, - list(c("q41_emitrade_restr_mp.M", "!!q41_emitrade_restr_mp.M")), - list(c("q41_emitrade_restr_mp2.M", "!!q41_emitrade_restr_mp2.M"))) - - #AJS this symbol is not known and crashes the run - is it depreciated? TODO - levs_manipulateThis <- c(levs_manipulateThis, - list(c("vm_pebiolc_price_base.L", "!!vm_pebiolc_price_base.L"))) - - #AJS filter out nash marginals in negishi case, as they would lead to a crash when trying to fix on them: - if(cfg$gms$optimization == 'negishi'){ - margs_manipulateThis <- c(margs_manipulateThis, list(c("q80_costAdjNash.M", "!!q80_costAdjNash.M"))) - } - if(cfg$gms$subsidizeLearning == 'off'){ - levs_manipulateThis <- c(levs_manipulateThis, - list(c("v22_costSubsidizeLearningForeign.L", - "!!v22_costSubsidizeLearningForeign.L"))) - margs_manipulateThis <- c(margs_manipulateThis, - list(c("q22_costSubsidizeLearning.M", "!!q22_costSubsidizeLearning.M")), - list(c("v22_costSubsidizeLearningForeign.M", - "!!v22_costSubsidizeLearningForeign.M")), - list(c("q22_costSubsidizeLearningForeign.M", - "!!q22_costSubsidizeLearningForeign.M"))) - fixings_manipulateThis <- c(fixings_manipulateThis, - list(c("v22_costSubsidizeLearningForeign.FX", - "!!v22_costSubsidizeLearningForeign.FX"))) - - } - - #JH filter out negishi marginals in nash case, as they would lead to a crash when trying to fix on them: - if(cfg$gms$optimization == 'nash'){ - margs_manipulateThis <- c(margs_manipulateThis, - list(c("q80_balTrade.M", "!!q80_balTrade.M")), - list(c("q80_budget_helper.M", "!!q80_budget_helper.M"))) - } - #RP filter out module 40 techpol fixings - if(cfg$gms$techpol == 'none'){ - margs_manipulateThis <- c(margs_manipulateThis, - list(c("q40_NewRenBound.M", "!!q40_NewRenBound.M")), - list(c("q40_CoalBound.M", "!!q40_CoalBound.M")), - list(c("q40_LowCarbonBound.M", "!!q40_LowCarbonBound.M")), - list(c("q40_FE_RenShare.M", "!!q40_FE_RenShare.M")), - list(c("q40_trp_bound.M", "!!q40_trp_bound.M")), - list(c("q40_TechBound.M", "!!q40_TechBound.M")), - list(c("q40_ElecBioBound.M", "!!q40_ElecBioBound.M")), - list(c("q40_PEBound.M", "!!q40_PEBound.M")), - list(c("q40_PEcoalBound.M", "!!q40_PEcoalBound.M")), - list(c("q40_PEgasBound.M", "!!q40_PEgasBound.M")), - list(c("q40_PElowcarbonBound.M", "!!q40_PElowcarbonBound.M")), - list(c("q40_EV_share.M", "!!q40_EV_share.M")), - list(c("q40_TrpEnergyRed.M", "!!q40_TrpEnergyRed.M")), - list(c("q40_El_RenShare.M", "!!q40_El_RenShare.M")), - list(c("q40_BioFuelBound.M", "!!q40_BioFuelBound.M"))) - - } - - if(cfg$gms$techpol == 'NPi2018'){ - margs_manipulateThis <- c(margs_manipulateThis, - list(c("q40_El_RenShare.M", "!!q40_El_RenShare.M")), - list(c("q40_CoalBound.M", "!!q40_CoalBound.M"))) - } - - # Include fixings (levels) and marginals in full.gms at predefined position - # in core/loop.gms. - full_manipulateThis <- c(full_manipulateThis, - list(c("cb20150605readinpositionforlevelfile", - paste("first offlisting inclusion of levs.gms so that level value can be accessed", - "$offlisting", - "$include \"levs.gms\";", - "$onlisting", sep = "\n")))) - full_manipulateThis <- c(full_manipulateThis, list(c("cb20140305readinpositionforfinxingfiles", - paste("offlisting inclusion of levs.gms, fixings.gms, and margs.gms", - "$offlisting", - "$include \"levs.gms\";", - "$include \"fixings.gms\";", - "$include \"margs.gms\";", - "$onlisting", sep = "\n")))) - - - # Perform actual manipulation on levs.gms, fixings.gms, and margs.gms in - # single, respective, parses of the texts. - manipulateFile("levs.gms", levs_manipulateThis) - manipulateFile("fixings.gms", fixings_manipulateThis) - manipulateFile("margs.gms", margs_manipulateThis) - - # Perform actual manipulation on full.gms, in single parse of the text. - manipulateFile("full.gms", full_manipulateThis) -} - - - - - -# Set value source_include so that loaded scripts know, that they are -# included as source (instead a load from command line) -source_include <- TRUE - -# unzip all .gz files -system("gzip -d -f *.gz") - -# Load REMIND run configuration -load("config.Rdata") - - -#AJS set MAGCFG file -magcfgFile = paste0('./magicc/MAGCFG_STORE/','MAGCFG_USER_',toupper(cfg$gms$cm_magicc_config),'.CFG') -if(!file.exists(magcfgFile)){ - stop(paste('ERROR in MAGGICC configuration: Could not find file ',magcfgFile)) -} -system(paste0('cp ',magcfgFile,' ','./magicc/MAGCFG_USER.CFG')) - -# Change flag "cm_compile_main" from TRUE to FALSE since we are not compiling -# main.gms but executing full.gms and therefore want to load some data from the -# input.gdx files. -manipulateFile("full.gms", list(c("\\$setglobal cm_compile_main *TRUE", - "\\$setglobal cm_compile_main FALSE"))) - -# Prepare the files containing the fixings for delay scenarios (for fixed runs) -if ( cfg$gms$cm_startyear > 2005 & (!file.exists("levs.gms.gz") | !file.exists("levs.gms"))) { - create_fixing_files(cfg = cfg, input_ref_file = "input_ref.gdx") -} - - -# Store REMIND directory and output file names -maindir <- cfg$remind_folder -REMIND_mif_name <- paste("REMIND_generic_", cfg$title, ".mif", sep = "") - -# Print message -cat("\nStarting REMIND...\n") - -# Save start time -begin <- Sys.time() - -# Call GAMS -if (cfg$gms$CES_parameters == "load") { - - system(paste0(cfg$gamsv, " full.gms -errmsg=1 -a=", cfg$action, - " -ps=0 -pw=185 -gdxcompress=1 -logoption=", cfg$logoption)) - -} else if (cfg$gms$CES_parameters == "calibrate") { - - # Remember file modification time of fulldata.gdx to see if it changed - fulldata_m_time <- Sys.time(); - - # Save original input - file.copy("input.gdx", "input_00.gdx", overwrite = TRUE) - - # Iterate calibration algorithm - for (cal_itr in 1:cfg$gms$c_CES_calibration_iterations) { - cat("CES calibration iteration: ", cal_itr, "\n") - - # Update calibration iteration in GAMS file - system(paste0("sed -i 's/^\\(\\$setglobal c_CES_calibration_iteration ", - "\\).*/\\1", cal_itr, "/' full.gms")) - - system(paste0(cfg$gamsv, " full.gms -errmsg=1 -a=", cfg$action, - " -ps=0 -pw=185 -gdxcompress=1 -logoption=", cfg$logoption)) - - # If GAMS found a solution - if ( file.exists("fulldata.gdx") - && file.info("fulldata.gdx")$mtime > fulldata_m_time) { - - #create the file to be used in the load mode - getLoadFile <- function(){ - - file_name = paste0(cfg$gms$cm_CES_configuration,"_ITERATION_",cal_itr,".inc") - ces_in = system("gdxdump fulldata.gdx symb=in NoHeader Format=CSV", intern = TRUE) %>% gsub("\"","",.) #" This comment is just to obtain correct syntax highlighting - expr_ces_in = paste0("(",paste(ces_in, collapse = "|") ,")") - - - tmp = system("gdxdump fulldata.gdx symb=pm_cesdata", intern = TRUE)[-(1:2)] %>% - grep("(quantity|price|eff|effgr|xi|rho|offset_quantity|compl_coef)", x = ., value = TRUE) - tmp = tmp %>% grep(expr_ces_in,x = ., value = T) - - tmp %>% - sub("'([^']*)'.'([^']*)'.'([^']*)'.'([^']*)' (.*)[ ,][ /];?", - "pm_cesdata(\"\\1\",\"\\2\",\"\\3\",\"\\4\") = \\5;", x = .) %>% - write(file_name) - - - pm_cesdata_putty = system("gdxdump fulldata.gdx symb=pm_cesdata_putty", intern = TRUE) - if (length(pm_cesdata_putty) == 2){ - tmp_putty = gsub("^Parameter *([A-z_(,)])+cesParameters\\).*$",'\\1"quantity") = 0;', pm_cesdata_putty[2]) - } else { - tmp_putty = pm_cesdata_putty[-(1:2)] %>% - grep("quantity", x = ., value = TRUE) %>% - grep(expr_ces_in,x = ., value = T) - } - tmp_putty %>% - sub("'([^']*)'.'([^']*)'.'([^']*)'.'([^']*)' (.*)[ ,][ /];?", - "pm_cesdata_putty(\"\\1\",\"\\2\",\"\\3\",\"\\4\") = \\5;", x = .)%>% write(file_name,append =T) - } - - getLoadFile() - - # Store all the interesting output - file.copy("full.lst", sprintf("full_%02i.lst", cal_itr), overwrite = TRUE) - file.copy("full.log", sprintf("full_%02i.log", cal_itr), overwrite = TRUE) - file.copy("fulldata.gdx", "input.gdx", overwrite = TRUE) - file.copy("fulldata.gdx", sprintf("input_%02i.gdx", cal_itr), - overwrite = TRUE) - - # Update file modification time - fulldata_m_time <- file.info("fulldata.gdx")$mtime - - } else { - break - } - } -} else { - stop("unknown realisation of 29_CES_parameters") -} - -# Calculate run time -gams_runtime <- Sys.time() - begin - -# If REMIND actually did run -if (cfg$action == "ce" && cfg$gms$c_skip_output != "on") { - - # Print Message - cat("\nREMIND run finished!\n") - - # Create solution report for Nash runs - if (cfg$gms$optimization == "nash" && cfg$gms$cm_nash_mode != "debug" && file.exists("fulldata.gdx")) { - system("gdxdump fulldata.gdx Format=gamsbas Delim=comma Output=output_nash.gms") - file.append("full.lst", "output_nash.gms") - file.remove("output_nash.gms") - } -} - -# Collect and submit run statistics to central data base -lucode::runstatistics(file = "runstatistics.rda", - modelstat = readGDX(gdx="fulldata.gdx","o_modelstat", format="first_found"), - config = cfg, - runtime = gams_runtime, - setup_info = lucode::setup_info(), - submit = cfg$runstatistics) - -# Compress files with the fixing-information -if (cfg$gms$cm_startyear > 2005) - system("gzip -f levs.gms margs.gms fixings.gms") - -# go up to the main folder, where the cfg files for subsequent runs are stored -setwd(cfg$remind_folder) - -#====================== Subsequent runs =========================== - -# 1. Save the path to the fulldata.gdx of the current run to the cfg files -# of the runs that use it as 'input_bau.gdx' - -# Use the name to check whether it is a coupled run (TRUE if the name ends with "-rem-xx") -coupled_run <- grepl("-rem-[0-9]{1,2}$",cfg$title) - -no_ref_runs <- identical(cfg$RunsUsingTHISgdxAsBAU,character(0)) | all(is.na(cfg$RunsUsingTHISgdxAsBAU)) | coupled_run - -if(!no_ref_runs) { - source("scripts/start_functions.R") - # Save the current cfg settings into a different data object, so that they are not overwritten - cfg_main <- cfg - - for(run in seq(1,length(cfg_main$RunsUsingTHISgdxAsBAU))){ - # for each of the runs that use this gdx as bau, read in the cfg, ... - cat("Writing the path for input_bau.gdx to ",paste0(cfg_main$RunsUsingTHISgdxAsBAU[run],".RData"),"\n") - load(paste0(cfg_main$RunsUsingTHISgdxAsBAU[run],".RData")) - # ...change the path_gdx_bau field of the subsequent run to the fulldata gdx of the current run ... - cfg$files2export$start['input_bau.gdx'] <- paste0(cfg_main$remind_folder,"/",cfg_main$results_folder,"/fulldata.gdx") - save(cfg, file = paste0(cfg_main$RunsUsingTHISgdxAsBAU[run],".RData")) - } - # Set cfg back to original - cfg <- cfg_main -} - -# 2. Save the path to the fulldata.gdx of the current run to the cfg files -# of the subsequent runs that use it as 'input_ref.gdx' and start these runs - -no_subsequent_runs <- identical(cfg$subsequentruns,character(0)) | identical(cfg$subsequentruns,NULL) | coupled_run - -if(no_subsequent_runs){ - cat('\nNo subsequent run was set for this scenario\n') -} else { - # Save the current cfg settings into a different data object, so that they are not overwritten - cfg_main <- cfg - source("scripts/start_functions.R") - - for(run in seq(1,length(cfg_main$subsequentruns))){ - # for each of the subsequent runs, read in the cfg, ... - cat("Writing the path for input_ref.gdx to ",paste0(cfg_main$subsequentruns[run],".RData"),"\n") - load(paste0(cfg_main$subsequentruns[run],".RData")) - # ...change the path_gdx_ref field of the subsequent run to the fulldata gdx of the current (preceding) run ... - cfg$files2export$start['input_ref.gdx'] <- paste0(cfg_main$remind_folder,"/",cfg_main$results_folder,"/fulldata.gdx") - save(cfg, file = paste0(cfg_main$subsequentruns[run],".RData")) - - # Subsequent runs will be started in submit.R using the RData files written above - # after the current run has finished. - cat("Starting subsequent run ",cfg_main$subsequentruns[run],"\n") - start_run(cfg) - } - # Set cfg back to original - cfg <- cfg_main -} - -# 3. Create script file that can be used later to restart the subsequent runs manually. -# In case there are no subsequent runs (or it's coupled runs), the file contains only -# a small message. - -subseq_start_file <- paste0(cfg$results_folder,"/start_subsequentruns.R") - -if(no_subsequent_runs){ - write("cat('\nNo subsequent run was set for this scenario\n')",file=subseq_start_file) -} else { - # go up to the main folder, where the cfg. files for subsequent runs are stored - filetext <- paste0("setwd('",cfg$remind_folder,"')\n") - filetext <- paste0(filetext,"source('scripts/start_functions.R')\n") - for(run in seq(1,length(cfg$subsequentruns))){ - filetext <- paste0(filetext,"\n") - filetext <- paste0(filetext,"load('",cfg$subsequentruns[run],".RData')\n") - filetext <- paste0(filetext,"cat('",cfg$subsequentruns[run],"')\n") - filetext <- paste0(filetext,"start_run(cfg)\n") - } - # Write the text to the file - write(filetext,file=subseq_start_file) -} - -#=================== END - Subsequent runs ======================== - -# Reload the REMIND run configuration -load(cfg$val_workspace) - -# Print REMIND runtime -cat("\n gams_runtime is ", gams_runtime, "\n") - -# Save runtime for REMIND validation -validation$technical$time$full.gms <- gams_runtime -save(validation, file = cfg$val_workspace) -# Remove unused variables -rm(gams_runtime, validation) - -# Copy important files into output_folder (after REMIND execution) -for (file in cfg$files2export$end) - file.copy(file, cfg$results_folder, overwrite = TRUE) - -# Postprocessing / Output Generation -output <- cfg$output -outputdir <- cfg$results_folder -sys.source("output.R",envir=new.env()) - diff --git a/scripts/run_submit/submit.cmd b/scripts/run_submit/submit.cmd deleted file mode 100644 index 0204d41..0000000 --- a/scripts/run_submit/submit.cmd +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -#--- Job Submission parameters ------ -#SBATCH --qos=medium -#SBATCH --job-name=__JOB_NAME__ -#SBATCH --output=log.txt -#SBATCH --tasks-per-node=2 -#SBATCH --mail-type=END -#------------------------------------------------ - -# report git revision info and changes in the files -git rev-parse --short HEAD -git status - -# start gams job -Rscript submit.R diff --git a/scripts/run_submit/submit_par.cmd b/scripts/run_submit/submit_par.cmd deleted file mode 100644 index efba220..0000000 --- a/scripts/run_submit/submit_par.cmd +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -#--- Job Submission parameters ------ -#SBATCH --qos=short -#SBATCH --job-name=__JOB_NAME__ -#SBATCH --output=log.txt -#SBATCH --nodes=1 -#SBATCH --tasks-per-node=12 -#SBATCH --mail-type=END -#------------------------------------------------ - -# report git revision info and changes in the files -git rev-parse --short HEAD -git status - -# start gams job -Rscript submit.R diff --git a/scripts/run_submit/submit_par16.cmd b/scripts/run_submit/submit_par16.cmd deleted file mode 100644 index 8018105..0000000 --- a/scripts/run_submit/submit_par16.cmd +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -#--- Job Submission parameters ------ -#SBATCH --qos=short -#SBATCH --job-name=__JOB_NAME__ -#SBATCH --output=log.txt -#SBATCH --nodes=1 -#SBATCH --tasks-per-node=16 -#SBATCH --mail-type=END -#------------------------------------------------ - -# report git revision info and changes in the files -git rev-parse --short HEAD -git status - -# start gams job -Rscript submit.R diff --git a/scripts/run_submit/submit_short.cmd b/scripts/run_submit/submit_short.cmd deleted file mode 100644 index da6cbea..0000000 --- a/scripts/run_submit/submit_short.cmd +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -#--- Job Submission parameters ------ -#SBATCH --qos=short -#SBATCH --job-name=__JOB_NAME__ -#SBATCH --output=log.txt -#SBATCH --mail-type=END -#------------------------------------------------ - -# report git revision info and changes in the files -git rev-parse --short HEAD -git status - -# start gams job -Rscript submit.R diff --git a/scripts/run_submit/run_compareScenarios.R b/scripts/utils/run_compareScenarios.R similarity index 100% rename from scripts/run_submit/run_compareScenarios.R rename to scripts/utils/run_compareScenarios.R diff --git a/start.R b/start.R deleted file mode 100644 index e4de544..0000000 --- a/start.R +++ /dev/null @@ -1,26 +0,0 @@ -# | (C) 2006-2019 Potsdam Institute for Climate Impact Research (PIK) -# | authors, and contributors see CITATION.cff file. This file is part -# | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -# | AGPL-3.0, you are granted additional permissions described in the -# | REMIND License Exception, version 1.0 (see LICENSE file). -# | Contact: remind@pik-potsdam.de - -########################################################## -#### Script to start a REMIND run #### -########################################################## - -library(lucode, quietly = TRUE,warn.conflicts =FALSE) -library(magclass, quietly = TRUE,warn.conflicts =FALSE) - -#Here the function start_run(cfg) is loaded which is needed to start REMIND runs -#The function needs information about the configuration of the run. This can be either supplied as a list of settings or as a file name of a config file -source("scripts/start_functions.R") - -#Load config-file -cfg_REMIND <- "default.cfg" -readArgs("cfg_REMIND") - -#start REMIND run -start_run(cfg_REMIND) -#rep = read.report("coupling.mif") -#start_reportrun(rep) diff --git a/start_bundle.R b/start_bundle.R deleted file mode 100644 index 75cb017..0000000 --- a/start_bundle.R +++ /dev/null @@ -1,126 +0,0 @@ -# | (C) 2006-2019 Potsdam Institute for Climate Impact Research (PIK) -# | authors, and contributors see CITATION.cff file. This file is part -# | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of -# | AGPL-3.0, you are granted additional permissions described in the -# | REMIND License Exception, version 1.0 (see LICENSE file). -# | Contact: remind@pik-potsdam.de -source("scripts/start_functions.R") - -require(lucode, quietly = TRUE, warn.conflicts = FALSE) - -.setgdxcopy <- function(needle, stack, new) { - # delete entries in stack that contain needle and append new - out <- c(stack[-grep(needle, stack)], new) - return(out) -} - -# check for config file parameter -config.file <- commandArgs(trailingOnly = TRUE)[1] -if ( is.na(config.file) # no parameter given - | -1 == file.access(config.file, mode = 4)) # if file can't be read - config.file <- "config/scenario_config.csv" - -cat(paste("reading config file", config.file, "\n")) - -# Read-in the switches table, use first column as row names -settings <- read.csv2(config.file, stringsAsFactors = FALSE, row.names = 1, - comment.char = "#", na.strings = "") - -# Select scenarios that are flagged to start -scenarios <- settings[settings$start==1,] - -if (length(grep("\\.",rownames(scenarios))) > 0) stop("One or more titles contain dots - GAMS would not tolerate this, and quit working at a point where you least expect it. Stopping now. ") - -# Modify and save cfg for all runs -for (scen in rownames(scenarios)) { - #source cfg file for each scenario to avoid duplication of gdx entries in files2export - source("config/default.cfg") - - # Have the log output written in a file (not on the screen) - cfg$logoption <- 2 - cfg$sequential <- NA - - # Edit run title - cfg$title <- scen - cat("\n", scen, "\n") - - # Edit main file of model - if( "model" %in% names(scenarios)){ - cfg$model <- scenarios[scen,"model"] - } - - # Edit regional aggregation - if( "regionmapping" %in% names(scenarios)){ - cfg$regionmapping <- scenarios[scen,"regionmapping"] - } - - # Edit input data revision - if( "revision" %in% names(scenarios)){ - cfg$revision <- scenarios[scen,"revision"] - } - - # Edit switches in default.cfg according to the values given in the scenarios table - for (switchname in intersect(names(cfg$gms), names(scenarios))) { - cfg$gms[[switchname]] <- scenarios[scen,switchname] - } - - # Set reporting script - if( "output" %in% names(scenarios)){ - cfg$output <- paste0("c(\"",gsub(",","\",\"",gsub(", ",",",scenarios[scen,"output"])),"\")") - } - - # check if full input.gdx path is provided and, if not, search for correct path - if (!substr(settings[scen,"path_gdx"], nchar(settings[scen,"path_gdx"])-3, nchar(settings[scen,"path_gdx"])) == ".gdx"){ - #if there is no correct scenario folder within the output folder path provided, take the config/input.gdx - if(length(grep(scen,list.files(path=settings[scen,"path_gdx"]),value=T))==0){ - settings[scen,"path_gdx"] <- "config/input.gdx" - #if there is only one instance of an output folder with that name, take the fulldata.gdx from this - } else if (length(grep(scen,list.files(path=settings[scen,"path_gdx"]),value=T))==1){ - settings[scen,"path_gdx"] <- paste0(settings[scen,"path_gdx"],"/", - grep(scen,list.files(path=settings[scen,"path_gdx"]),value=T),"/fulldata.gdx") - } else { - #if there are multiple instances, take the newest one - settings[scen,"path_gdx"] <- paste0(settings[scen,"path_gdx"],"/", - substr(grep(scen,list.files(path=settings[scen,"path_gdx"]),value=T),1, - nchar(grep(scen,list.files(path=settings[scen,"path_gdx"]),value=T))-19)[1], - max(substr(grep(scen,list.files(path=settings[scen,"path_gdx"]),value=T), - nchar(grep(scen,list.files(path=settings[scen,"path_gdx"]),value=T))-18, - nchar(grep(scen,list.files(path=settings[scen,"path_gdx"]),value=T)))),"/fulldata.gdx") - } - } - - # if the above has not created a path to a valid gdx, take config/input.gdx - if (!file.exists(settings[scen,"path_gdx"])){ - settings[scen,"path_gdx"] <- "config/input.gdx" - #if even this is not existent, stop - if (!file.exists(settings[scen,"path_gdx"])){ - stop("Cant find a gdx under path_gdx, please specify full path to gdx or else location of output folder that contains previous run") - } - } - - # Define path where the GDXs will be taken from - gdxlist <- c(input.gdx = settings[scen, "path_gdx"], - input_ref.gdx = settings[scen, "path_gdx_ref"], - input_bau.gdx = settings[scen, "path_gdx_bau"]) - - # Remove potential elements that contain ".gdx" and append gdxlist - cfg$files2export$start <- .setgdxcopy(".gdx", cfg$files2export$start, gdxlist) - - # add gdx information for subsequent runs - cfg$subsequentruns <- rownames(settings[settings$path_gdx_ref == scen & !is.na(settings$path_gdx_ref) & settings$start == 1,]) - cfg$RunsUsingTHISgdxAsBAU <- rownames(settings[settings$path_gdx_bau == scen & !is.na(settings$path_gdx_bau) & settings$start == 1,]) - - # save the cfg data for later start of subsequent runs (after preceding run finished) - cat("Writing cfg to file\n") - save(cfg,file=paste0(scen,".RData")) -} - -# Directly start runs that have a gdx file location given as path_gdx_ref or where this field is empty -for (scen in rownames(scenarios)) { - if (substr(settings[scen,"path_gdx_ref"], nchar(settings[scen,"path_gdx_ref"])-3, nchar(settings[scen,"path_gdx_ref"])) == ".gdx" - | is.na(settings[scen,"path_gdx_ref"])){ - cat("Starting: ",scen,"\n") - load(paste0(scen,".RData")) - start_run(cfg) - } -} -- GitLab