diff options
| author | Johannes Ranke <jranke@uni-bremen.de> | 2023-04-15 08:41:37 +0200 | 
|---|---|---|
| committer | Johannes Ranke <jranke@uni-bremen.de> | 2023-04-15 08:41:37 +0200 | 
| commit | f20a9d81cbcd514ed629b69364cd85a72ac06e95 (patch) | |
| tree | cdc0b1480c65a59bdc0862ee4807139a48a36d1f | |
| parent | 19016037302814387799426fc40b318ee54b07f0 (diff) | |
Make using predefined symbols optional
I got crashes under some circumstances when using symbols stored in the
mkinmod object. One such circumstance was the use of a moved DLL in
combination with parallel computing on a cluster. As I cannot exactly
define at the moment when this happens, it is better to make this
an opt in.
| -rw-r--r-- | R/mkinpredict.R | 13 | 
1 files changed, 11 insertions, 2 deletions
| diff --git a/R/mkinpredict.R b/R/mkinpredict.R index 957d5793..8fa41217 100644 --- a/R/mkinpredict.R +++ b/R/mkinpredict.R @@ -27,6 +27,8 @@  #' When using compiled code, only lsoda is supported.  #' @param use_compiled If set to \code{FALSE}, no compiled version of the  #' [mkinmod] model is used, even if is present. +#' @param use_symbols If set to \code{TRUE}, symbol info present in the  +#' [mkinmod] object is used if available for accessing compiled code  #' @param atol Absolute error tolerance, passed to the ode solver.  #' @param rtol Absolute error tolerance, passed to the ode solver.  #' @param maxsteps Maximum number of steps, passed to the ode solver. @@ -114,6 +116,7 @@ mkinpredict.mkinmod <- function(x,    outtimes = seq(0, 120, by = 0.1),    solution_type = "deSolve",    use_compiled = "auto", +  use_symbols = FALSE,    method.ode = "lsoda", atol = 1e-8, rtol = 1e-10, maxsteps = 20000L,    map_output = TRUE,    na_stop = TRUE, @@ -169,12 +172,18 @@ mkinpredict.mkinmod <- function(x,    }    if (solution_type == "deSolve") { -    if (!is.null(x$cf) & !is.null(x$symbols) & use_compiled[1] != FALSE) { +    if (!is.null(x$cf) & use_compiled[1] != FALSE) { + +      if (!is.null(x$symbols) & use_symbols[1] == TRUE) { +        lsoda_func <- x$symbols +      } else { +        lsoda_func <- "diffs" +      }        out <- deSolve::lsoda(          y = odeini,          times = outtimes, -        func = x$symbols, +        func = lsoda_func,          initfunc = "initpar",          dllname = x$dll_info[["name"]],          parms = odeparms[x$parms], # Order matters when using compiled models | 
