
Last chance! 50% off unlimited learning
Sale ends in
Calls a function, defined in a compiled language as a DLL
DLLfunc(func, times, y, parms, dllname,
initfunc = dllname, rpar = NULL, ipar = NULL, nout = 0,
outnames = NULL, forcings = NULL, initforc = NULL,
fcontrol = NULL)
the name of the function in the dynamically loaded shared library,
first value = the time at which the function needs to be evaluated,
the values of the dependent variables for which the function needs to be evaluated,
the parameters that are passed to the initialiser function,
a string giving the name of the shared library (without
extension) that contains the compiled function or subroutine definitions
referred to in func
,
if not NULL
, the name of the initialisation function
(which initialises values of parameters), as provided in dllname
.
See details.
a vector with double precision values passed to the
DLL-function func
and jacfunc
present in the DLL, via
argument rpar,
a vector with integer values passed to the dll-function
func
and jacfunc
present in the DLL, via function argument
ipar,
the number of output variables.
only used if dllname
is specified and
nout
> 0: the names of output variables calculated in the
compiled function func
, present in the shared library.
only used if dllname
is specified: a list with
the forcing function data sets, each present as a two-columned matrix,
with (time, value); interpolation outside the interval
[min(times
), max(times
)] is done by taking the value at
the closest data extreme.
See package vignette "compiledCode"
.
if not NULL
, the name of the forcing function
initialisation function, as provided in
dllname
. It MUST be present if forcings
has been given a
value.
See package vignette "compiledCode"
.
A list of control parameters for the forcing functions.
See package vignette "compiledCode"
.
a list containing:
the rate of change estimated by the function,
the ordinary output variables of the function.
This function is meant to help developing FORTRAN or C models that are
to be used to solve ordinary differential equations (ODE) in packages
deSolve
and/or rootSolve
.
ode
for a general interface to most of the ODE solvers
# NOT RUN {
## ==========================================================================
## ex. 1
## ccl4model
## ==========================================================================
## Parameter values and initial conditions
## see example(ccl4model) for a more comprehensive implementation
Parms <- c(0.182, 4.0, 4.0, 0.08, 0.04, 0.74, 0.05, 0.15, 0.32,
16.17, 281.48, 13.3, 16.17, 5.487, 153.8, 0.04321671,
0.4027255, 1000, 0.02, 1.0, 3.8)
yini <- c(AI = 21, AAM = 0, AT = 0, AF = 0, AL = 0, CLT = 0, AM = 0)
## the rate of change
DLLfunc(y = yini, dllname = "deSolve", func = "derivsccl4",
initfunc = "initccl4", parms = Parms, times = 1,
nout = 3, outnames = c("DOSE", "MASS", "CP") )
## ==========================================================================
## ex. 2
## SCOC model, in fortran - to see the FORTRAN code:
## ==========================================================================
## Forcing function "data"
Flux <- matrix(ncol = 2, byrow = TRUE, data = c(1, 0.654, 2, 0.167))
parms <- c(k = 0.01)
Yini <- 60
DLLfunc(y=Yini, times=1, func = "scocder",
parms = parms, dllname = "deSolve",
initforc = "scocforc", forcings = Flux,
initfunc = "scocpar", nout = 2,
outnames = c("Mineralisation","Depo"))
## correct value = dy = flux - k * y = 0.654 - 0.01 * 60
DLLfunc(y = Yini, times = 2, func = "scocder",
parms = parms, dllname = "deSolve",
initforc = "scocforc", forcings = Flux,
initfunc = "scocpar", nout = 2,
outnames = c("Mineralisation", "Depo"))
# }
Run the code above in your browser using DataLab