LPJmL simulations are submitted to SLURM using "config*.json" files written
by write_config(). write_config() returns a
tibble that can be used as an input (see x). It serves the details to
submit single or multiple (dependent/subsequent) model simulations.
submit_lpjml(
x,
model_path,
sim_path = NULL,
group = "",
sclass = "short",
ntasks = 256,
wtime = "",
blocking = "",
constraint = "",
slurm_options = list(),
no_submit = FALSE,
output_path = NULL
)A tibble with at least one column named "sim_name".
Each simulation gets a separate row. An optional run parameter
"dependency" is used for subsequent simulations (see details).
write_config() returns a tibble in the required
format. OR provide a character string (vector) with the file name of one or
multiple generated config file(s).
Character string providing the path to LPJmL
(equal to LPJROOT environment variable).
Character string defining path where all simulation data are
written, including output, restart and configuration files. If NULL,
model_path is used. See also write_config
Character string defining the user group for which the job is submitted.
Character string defining the job classification. Available
options at PIK: c("short", "medium", "long", "priority", "standby", "io")
More information at https://www.pik-potsdam.de/en. Defaults to "short".
Integer defining the number of tasks/threads. More information
at https://www.pik-potsdam.de/en and
https://slurm.schedmd.com/sbatch.html. Defaults to 256.
Character string defining the time limit. Setting a lower time
limit than the maximum runtime for sclass can reduce the wait time in the
SLURM job queue. More information at https://www.pik-potsdam.de/en and
https://slurm.schedmd.com/sbatch.html.
Integer defining the number of cores to be blocked. More information at https://www.pik-potsdam.de/en and https://slurm.schedmd.com/sbatch.html.
Character string defining constraints for node selection.
Use constraint = "haswell" to request nodes of the type haswell with 16
cores per node, constraint = "broadwell" to request nodes of the type
broadwell CPUs with 32 cores per node or constraint = "exclusive" to
reserve all CPUs of assigned nodes even if less are requested by ntasks.
Using exclusive should prevent interference of other batch jobs with
LPJmL. More information at https://www.pik-potsdam.de and
https://slurm.schedmd.com/sbatch.html.
A named list of further arguments to be passed to sbatch.
E.g. list(mail-user = "max.mustermann@pik-potsdam.de")
More information at https://www.pik-potsdam.de and
https://slurm.schedmd.com/sbatch.html
Logical. Set to TRUE to test if x set correctly or
FALSE to actually submit job to SLURM.
Argument is deprecated as of version 1.0; use sim_path instead.
See x, extended by columns "type", "job_id" and "status".
A tibble for x that has been generated by
write_config() and can look like the following examples can
supplied:
| sim_name |
| scen1_spinup |
| scen2_transient |
To perform subsequent or rather dependent simulations the optional run
parameter "dependency" needs to be provided within the initial
tibble supplied as param to write_config().
| sim_name | dependency |
| scen1_spinup | NA |
| scen2_transient | scen1 _spinup |
To use different SLURM settings for each run the optional SLURM options
"sclass", "ntasks", "wtime", "blocking"orconstraintcan also be supplied to the initial \link[tibble]{tibble} supplied asparam to [write_config()]. These overwrite the (default) SLURM arguments (sclass, ntasks, wtime, blockingor constraint)
supplied to submit_lpjml.
| sim_name | dependency | wtime |
| scen1_spinup | NA | "8:00:00" |
| scen2_transient | scen1 _spinup | "2:00:00" |
As a shortcut it is also possible to provide the config file
"config_*.json" as a character string or multiple config files as a
character string vector directly as the x argument to submit_lpjml.
With this approach, run parameters or SLURM options cannot be taken into
account.
if (FALSE) {
library(tibble)
model_path <- "./LPJmL_internal"
sim_path <-"./my_runs"
# Basic usage
my_params <- tibble(
sim_name = c("scen1", "scen2"),
random_seed = as.integer(c(42, 404)),
`pftpar[[1]]$name` = c("first_tree", NA),
`param$k_temp` = c(NA, 0.03),
new_phenology = c(TRUE, FALSE)
)
config_details <- write_config(my_params, model_path, sim_path)
run_details <- submit_lpjml(
x = config_details,
model_path = model_path,
sim_path = sim_path
)
run_details
# sim_name job_id status
# <chr> <int> <chr>
# 1 scen1 21235215 submitted
# 2 scen2 21235216 submitted
# With run parameter dependency and SLURM option wtime being
# set (also less other parameters than in previous example)
my_params <- tibble(
sim_name = c("scen1", "scen2"),
random_seed = as.integer(c(42, 404)),
dependency = c(NA, "scen1_spinup"),
wtime = c("8:00:00", "4:00:00"),
)
config_details2 <- write_config(my_params2, model_path, sim_path)
run_details2 <- submit_lpjml(config_details2, model_path, sim_path)
run_details2
# sim_name order dependency wtime type job_id status
# <chr> <dbl> <chr> <chr> <chr> <chr> <chr>
# 1 scen1_spinup 1 NA 8:00:00 simulation 22910240 submitted
# 2 scen1_transient 2 scen1_spinup 4:00:00 simulation 22910241 submitted
# Same but by using the pipe operator
library(magrittr)
run_details <- tibble(
sim_name = c("scen1_spinup", "scen1_transient"),
random_seed = as.integer(c(1, 42)),
dependency = c(NA, "scen1_spinup"),
wtime = c("8:00:00", "4:00:00"),
) %>%
write_config(model_path, sim_path) %>%
submit_lpjml(model_path, sim_path)
# Shortcut approach
run_details <- submit_lpjml(
x = "./config_scen1_transient.json",
model_path = model_path,
sim_path = sim_path
)
run_details <- submit_lpjml(
c("./config_scen1_spinup.json", "./config_scen1_transient.json"),
model_path,
sim_path
)
}