submit_lpjml: Submit LPJmL model simulation to SLURM

View source: R/submit_lpjml.R

submit_lpjmlR Documentation

Submit LPJmL model simulation to SLURM

Description

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.

Usage

submit_lpjml(
  x,
  model_path,
  sim_path = NULL,
  group = "lpjml",
  sclass = "short",
  ntasks = 256,
  wtime = "",
  blocking = "",
  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. Defaults to "lpjml".

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

blocking

Integer defining the number of cores to be blocked. More information at https://www.pik-potsdam.de/en and https://slurm.schedmd.com.

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.

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_name dependency
scen1_spinup NA
scen2_transient scen1 _spinup

To use different SLURM settings for each run the optional SLURM options "sclass", "ntask", "wtime" or "blocking" can also be supplied to the initial tibble supplied as param to write_config(). These overwrite the (default) SLURM arguments (sclass, ntask, wtime or blocking) 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.

Value

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

Examples


## Not run: 
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
)


## End(Not run)


lpjmlkit documentation built on March 31, 2023, 9:35 p.m.