DLLres: Evaluates a Residual Derivative Function Represented in a DLL

DLLresR Documentation

Evaluates a Residual Derivative Function Represented in a DLL

Description

Calls a residual function, F(t,y,y') of a DAE system (differential algebraic equations) defined in a compiled language as a DLL.

To be used for testing the implementation of DAE problems in compiled code

Usage

DLLres(res, times, y, dy, parms, dllname,
  initfunc = dllname, rpar = NULL, ipar = NULL, nout = 0,
  outnames = NULL, forcings = NULL, initforc = NULL,
  fcontrol = NULL)

Arguments

res

the name of the function in the dynamically loaded shared library,

times

first value = the time at which the function needs to be evaluated,

y

the values of the dependent variables for which the function needs to be evaluated,

dy

the derivative of the values of the dependent variables for which the function needs to be evaluated,

parms

the parameters that are passed to the initialiser function,

dllname

a string giving the name of the shared library (without extension) that contains the compiled function or subroutine definitions referred to in func,

initfunc

if not NULL, the name of the initialisation function (which initialises values of parameters), as provided in ‘dllname’. See details,

rpar

a vector with double precision values passed to the DLL-function func and jacfunc present in the DLL, via argument rpar,

ipar

a vector with integer values passed to the DLL-function func and jacfunc present in the DLL, via function argument ipar,

nout

the number of output variables.

outnames

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.

forcings

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

initforc

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

fcontrol

A list of control parameters for the forcing functions. See package vignette "compiledCode".

Details

This function is meant to help developing FORTRAN or C models that are to be used to solve differential algebraic equations (DAE) in package deSolve.

Value

a list containing:

res

the residual of derivative estimated by the function

var

the ordinary output variables of the function

Author(s)

Karline Soetaert <karline.soetaert@nioz.nl>

See Also

daspk to solve DAE problems

Examples

## =========================================================================
## Residuals from the daspk chemical model, production a forcing function
## =========================================================================
## Parameter values and initial conditions
## see example(daspk) for a more comprehensive implementation

pars <- c(K = 1, ka = 1e6, r = 1)

## Initial conc; D is in equilibrium with A,B
y <- c(A = 2, B = 3, D = 2 * 3/pars["K"])

## Initial rate of change
dy <- c(dA = 0, dB = 0, dD = 0)

## production increases with time
prod <- matrix(ncol = 2,
          data = c(seq(0, 100, by = 10), seq(0.1, 0.5, len = 11)))

DLLres(y = y, dy = dy, times = 5, res = "chemres",
          dllname = "deSolve", initfunc = "initparms",
          initforc = "initforcs", parms = pars, forcings = prod,
          nout = 2, outnames = c("CONC", "Prod"))


deSolve documentation built on Nov. 28, 2023, 1:11 a.m.