From 6ffe1dcea0d6d7e5b0f76e1ddb7c0136d681ded9 Mon Sep 17 00:00:00 2001 From: S1DDHEY Date: Sun, 31 May 2026 22:04:10 +0530 Subject: [PATCH] fix restart config writing to use foreach instead of furrr --- .../assim.sequential/R/sda.enkf_MultiSite.R | 58 +++++++++++-------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/modules/assim.sequential/R/sda.enkf_MultiSite.R b/modules/assim.sequential/R/sda.enkf_MultiSite.R index 0a5e7a9b5c2..ed76fde2026 100644 --- a/modules/assim.sequential/R/sda.enkf_MultiSite.R +++ b/modules/assim.sequential/R/sda.enkf_MultiSite.R @@ -258,29 +258,41 @@ sda.enkf.multisite <- function(settings, PEcAn.logger::logger.info("The input_design is not found for write configuration function call.") return(0) } - out.configs <- conf.settings %>% - `class<-`(c("list")) %>% - furrr::future_map2(restart.list, function(settings, restart.arg) { - # Loading the model package - this is required bc of the furrr - library(paste0("PEcAn.",settings$model$type), character.only = TRUE) - # wrtting configs for each settings - this does not make a difference with the old code - # if we don't specify the input_design. - if (!exists("input_design")) { - input_design <- NULL - } - # wrtting configs for each settings - this does not make a difference with the old code - PEcAn.uncertainty::write.ensemble.configs( - input_design = input_design, - ensemble.size = nens, - defaults = defaults, - ensemble.samples = ensemble.samples, - settings = settings, - model = settings$model$type, - write.to.db = settings$database$bety$write, - restart = restart.arg - ) - }) %>% - stats::setNames(site.ids) + conf.settings <- conf.settings %>% + `class<-`(c("list")) + cl <- parallel::makeCluster(parallel::detectCores() - 1) + doSNOW::registerDoSNOW(cl) + temp.settings <- NULL + restart.arg <- NULL + out.configs <- foreach::foreach( + temp.settings = as.list(conf.settings), + restart.arg = restart.list, + .packages = c( + "Kendall", + "purrr", + "PEcAn.uncertainty", + paste0("PEcAn.", model), + "PEcAnAssimSequential" + ) + ) %dopar% { + # writing configs for each settings - this does not make a difference with the old code + # if we don't specify the input_design. + if (!exists("input_design")) { + input_design <- NULL + } + PEcAn.uncertainty::write.ensemble.configs( + input_design = input_design, + ensemble.size = nens, + defaults = defaults, + ensemble.samples = ensemble.samples, + settings = temp.settings, + model = temp.settings$model$type, + write.to.db = temp.settings$database$bety$write, + restart = restart.arg + ) + } %>% stats::setNames(site.ids) + parallel::stopCluster(cl) + foreach::registerDoSEQ() #now all build_X args are properly formatted for the function to return X reads <- build_X(out.configs = out.configs, settings = settings,