Nothing
#' Internal function to provide parallel processing support to the
#' calibration assistant function.
#'
#' @param this.sim a numeric denoting which parameter combination to be tried.
#' @param dycd.wd working directory where input files (including the bat file)
#' to DYRESM-CAEDYM are stored.
#'
#' @importFrom parallel detectCores makeCluster stopCluster clusterExport
#' @importFrom R.utils copyDirectory
#### define function to run (and process?) the model on each core
run_iteration <- function(this.sim, dycd.wd) {
# which core to run it on?
core <- sim.cores[this.sim]
# id folder to use
dir.this <- paste0(dycd.wd,'/core', core)
# copy the parameters files from the base model folder into the
# iteration's folder
files.params <- list.files(path = dycd.wd,
pattern = '.*\\.(par|chm|bio|sed)$',
recursive = FALSE,
include.dirs = TRUE, full.names = TRUE)
file.copy(files.params, dir.this, overwrite = TRUE)
#---
# change the parameter values in the input files
#---
for(m in seq_len(ncol(para.df))){
change_input_file(input_file = paste0(dir.this, "/",
para.raw$Input_file[m]),
row_no = para.raw$Line_NO[m],
new_value = para.df[this.sim, m])
}
#---
# model simulation / run the .bat file
#---
user.wd <- getwd()
on.exit(setwd(user.wd))
setwd(dir.this)
bat.file <- list.files(pattern = ".bat")
shell(bat.file, intern = TRUE, wait=TRUE)
setwd(user.wd)
## verify that the sim has completed successfully
log <- file(paste0(dir.this, '/dy.log'))
open(log)
out <- scan(log, 10, what="char(0)", sep="\n", quiet=TRUE)
while(TRUE){
tmp <- scan(log,1,what="char(0)",sep="\n",quiet=TRUE)
if(length(tmp)==0) {close(log) ; break }
out <- c(out[-1],tmp)
}
if (!TRUE %in% grepl("END: LAKE SIMULATION",out)) {
warning(paste0("Simulation No.",
this.sim,
" did not complete successfully.\n"))
}
# copy the finished nc file for later processing (if needed)
file.copy(from = paste0(dir.this,"/DYsim.nc"),
to = paste0(dir.output,"/DYsim_",this.sim,".nc"))
# can also add additional model processing here and write to the output folder,
# to take advantage of parallel speed if wanted
} # end per core function
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.