10 const char *dimnms[3] = {
"name",
".id",
"time"};
25 SEXP
Snames, Pnames, Cnames;
35 PROTECT(skel = GET_SLOT(
object,install(
"skeleton")));
36 deltat = *(REAL(GET_SLOT(skel,install(
"delta.t"))));
37 t = *(REAL(AS_NUMERIC(t0)));
39 PROTECT(x0 = duplicate(x0));
41 dim = INTEGER(GET_DIM(x0));
45 dim = INTEGER(GET_DIM(
params));
46 npars = dim[0]; nrepp = dim[1];
47 PROTECT(repnames = GET_COLNAMES(GET_DIMNAMES(
params)));
49 PROTECT(times = AS_NUMERIC(times));
50 ntimes = LENGTH(times);
52 PROTECT(
Snames = GET_ROWNAMES(GET_DIMNAMES(x0)));
53 PROTECT(Pnames = GET_ROWNAMES(GET_DIMNAMES(
params)));
61 PROTECT(pompfun = GET_SLOT(skel,install(
"skel.fn")));
65 PROTECT(
args = GET_SLOT(
object,install(
"userdata")));
71 PROTECT(accumvars = GET_SLOT(
object,install(
"accumvars")));
72 nzeros = LENGTH(accumvars);
77 zidx = INTEGER(PROTECT(
matchnames(
Snames,accumvars,
"state variables"))); nprotect++;
88 fn,
args,
Snames,
nvars,
npars,
ncovars,ntimes,nrepp,
nreps,nzeros,
89 &covariate_table,zidx,REAL(
cov));
96 int *sidx, *pidx, *cidx;
99 *((
void **) (&ff)) = R_ExternalPtrAddr(
fn);
102 sidx = INTEGER(GET_SLOT(pompfun,install(
"stateindex")));
103 pidx = INTEGER(GET_SLOT(pompfun,install(
"paramindex")));
104 cidx = INTEGER(GET_SLOT(pompfun,install(
"covarindex")));
107 nvars,
npars,
ncovars,ntimes,nrepp,
nreps,nzeros,sidx,pidx,cidx,
108 &covariate_table,zidx,ff,
args,REAL(
cov));
152#define COMMON(X) (_pomp_vf_eval_block.common.X)
153#define RFUN(X) (_pomp_vf_eval_block.shared.R_fun.X)
154#define NAT(X) (_pomp_vf_eval_block.shared.native_code.X)
160 SEXP
Snames, Pnames, Cnames;
166 PROTECT(ob = GET_SLOT(
object,install(
"skeleton")));
167 PROTECT(pompfun = GET_SLOT(ob,install(
"skel.fn")));
169 PROTECT(
args = GET_SLOT(
object,install(
"userdata")));
173 if (!isNull(
COMMON(
object))) R_ReleaseObject(
COMMON(
object));
175 R_PreserveObject(
COMMON(
object));
178 dim = INTEGER(GET_DIM(x0));
182 dim = INTEGER(GET_DIM(
params));
193 PROTECT(
Snames = GET_ROWNAMES(GET_DIMNAMES(x0)));
194 PROTECT(Pnames = GET_ROWNAMES(GET_DIMNAMES(
params)));
216 R_PreserveObject(
RFUN(
fn));
228 PROTECT(
NAT(
sindex) = GET_SLOT(pompfun,install(
"stateindex")));
229 PROTECT(
NAT(
pindex) = GET_SLOT(pompfun,install(
"paramindex")));
230 PROTECT(
NAT(
cindex) = GET_SLOT(pompfun,install(
"covarindex")));
233 *((
void **) (&(
NAT(
fun)))) = R_ExternalPtrAddr(
fn);
251 err(
"in 'pomp_desolve_setup': unrecognized 'mode'");
260void pomp_vf_eval (
int *neq,
double *t,
double *y,
double *ydot,
double *yout,
int *ip)
285 err(
"in 'pomp_vf_eval': unrecognized 'mode'");
260void pomp_vf_eval (
int *neq,
double *t,
double *y,
double *ydot,
double *yout,
int *ip) {
…}
293 R_ReleaseObject(
COMMON(
object));
296 COMMON(
object) = R_NilValue;
308 R_ReleaseObject(
RFUN(
fn));
337 err(
"in 'pomp_desolve_takedown': unrecognized 'mode'");
void eval_skeleton_R(double *, double *, double *, double *, SEXP, SEXP, SEXP, int, int, int, int, int, int, int, lookup_table_t *, double *)
void eval_skeleton_native(double *, double *, double *, double *, int, int, int, int, int, int, int, int *, int *, int *, lookup_table_t *, pomp_skeleton *, SEXP, double *)
lookup_table_t make_covariate_table(SEXP, int *)
SEXP add_skel_args(SEXP, SEXP, SEXP, SEXP)
SEXP pomp_fun_handler(SEXP, SEXP, pompfunmode *, SEXP, SEXP, SEXP, SEXP)
void iterate_skeleton_R(double *, double, double, double *, double *, double *, SEXP, SEXP, SEXP, int, int, int, int, int, int, int, lookup_table_t *, int *, double *)
void iterate_skeleton_native(double *, double, double, double *, double *, double *, int, int, int, int, int, int, int, int *, int *, int *, lookup_table_t *, int *, pomp_skeleton *, SEXP, double *)
SEXP get_covariate_names(SEXP)
void pomp_skeleton(double *f, const double *x, const double *p, const int *stateindex, const int *parindex, const int *covindex, const double *covars, double t)
static R_INLINE void fixdimnames(SEXP x, const char **names, int n)
static R_INLINE void setrownames(SEXP x, SEXP names, int rank)
static R_INLINE SEXP matchnames(SEXP provided, SEXP needed, const char *where)
static R_INLINE void setcolnames(SEXP x, SEXP names)
static R_INLINE SEXP makearray(int rank, const int *dim)
static R_INLINE SEXP as_matrix(SEXP x)
struct @0::@2::@4 native_code
static R_INLINE SEXP ret_array(int nvars, int nreps, int ntimes, SEXP Snames, SEXP repnames)
void pomp_vf_eval(int *neq, double *t, double *y, double *ydot, double *yout, int *ip)
SEXP iterate_map(SEXP object, SEXP times, SEXP t0, SEXP x0, SEXP params, SEXP gnsi)
static struct @0 _pomp_vf_eval_block
SEXP pomp_desolve_setup(SEXP object, SEXP x0, SEXP params, SEXP gnsi)
lookup_table_t covar_table
SEXP pomp_desolve_takedown(void)