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
)

Arguments

x

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).

model_path

Character string providing the path to LPJmL (equal to LPJROOT environment variable).

sim_path

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

group

Character string defining the user group for which the job is submitted.

sclass

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".

ntasks

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.

wtime

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.

blocking

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.

constraint

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.

slurm_options

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

no_submit

Logical. Set to TRUE to test if x set correctly or FALSE to actually submit job to SLURM.

output_path

Argument is deprecated as of version 1.0; use sim_path instead.

Value

See x, extended by columns "type", "job_id" and "status".

Details

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_namedependency
scen1_spinupNA
scen2_transientscen1 _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_namedependencywtime
scen1_spinupNA"8:00:00"
scen2_transientscen1 _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.

Examples


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
)

}