20{
21
25 SEXP
Snames, Pnames, Cnames;
26 SEXP skel, pompfun;
27 SEXP accumvars;
28 SEXP repnames;
29 int *zidx = 0;
31 int *dim;
33 double deltat, t;
34
35 PROTECT(skel = GET_SLOT(object,install("skeleton")));
36 deltat = *(REAL(GET_SLOT(skel,install("delta.t"))));
37 t = *(REAL(AS_NUMERIC(t0)));
38
39 PROTECT(x0 = duplicate(x0));
41 dim = INTEGER(GET_DIM(x0));
43
45 dim = INTEGER(GET_DIM(
params));
46 npars = dim[0]; nrepp = dim[1];
47 PROTECT(repnames = GET_COLNAMES(GET_DIMNAMES(
params)));
48
49 PROTECT(times = AS_NUMERIC(times));
50 ntimes = LENGTH(times);
51
52 PROTECT(
Snames = GET_ROWNAMES(GET_DIMNAMES(x0)));
53 PROTECT(Pnames = GET_ROWNAMES(GET_DIMNAMES(
params)));
55
56
59
60
61 PROTECT(pompfun = GET_SLOT(skel,install("skel.fn")));
63
64
65 PROTECT(
args = GET_SLOT(
object,install(
"userdata")));
66
67
69
70
71 PROTECT(accumvars = GET_SLOT(object,install("accumvars")));
72 nzeros = LENGTH(accumvars);
73
74 int nprotect = 15;
75
76 if (nzeros > 0) {
77 zidx = INTEGER(PROTECT(
matchnames(
Snames,accumvars,
"state variables"))); nprotect++;
78 }
79
80
82
84
86
88 fn,
args,
Snames,
nvars,
npars,
ncovars,ntimes,nrepp,
nreps,nzeros,
89 &covariate_table,zidx,REAL(
cov));
90
91 }
92
93 break;
94
96 int *sidx, *pidx, *cidx;
98
99 *((
void **) (&ff)) = R_ExternalPtrAddr(
fn);
100
101
102 sidx = INTEGER(GET_SLOT(pompfun,install("stateindex")));
103 pidx = INTEGER(GET_SLOT(pompfun,install("paramindex")));
104 cidx = INTEGER(GET_SLOT(pompfun,install("covarindex")));
105
107 nvars,
npars,
ncovars,ntimes,nrepp,
nreps,nzeros,sidx,pidx,cidx,
108 &covariate_table,zidx,ff,
args,REAL(
cov));
109
110 }
111
112 break;
113
114 default:
115
116 break;
117
118 }
119
120 UNPROTECT(nprotect);
122}
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 SEXP matchnames(SEXP provided, SEXP needed, const char *where)
static R_INLINE SEXP as_matrix(SEXP x)
static R_INLINE SEXP ret_array(int nvars, int nreps, int ntimes, SEXP Snames, SEXP repnames)