45 if (d->
t + 1.05 * d->
h >= d->
t_stop) {
50 }
else if (d->
t + 2 * d->
h > d->
t_stop) {
62 T1 sc, d0 = 0, d1 = 0, h;
63 for (i = 0; i < p->
nx_err; ++i) {
65 d0 += (d->
y[i] / sc) * (d->
y[i] / sc);
66 d1 += (f0[i] / sc) * (f0[i] / sc);
68 d0 = sqrt(d0 /
static_cast<T1
>(p->
nx_err));
69 d1 = sqrt(d1 /
static_cast<T1
>(p->
nx_err));
70 h = (d0 < 1e-5 || d1 < 1e-5) ? 1e-6 : 0.01 * d0 / d1;
80 casadi_int k, i, n, offset[3], n_err[3];
84 casadi_clear(e, p->
ny);
86 offset[0] = 0; offset[1] = p->
nx; offset[2] = p->
nx + p->
nz;
90 for (k = 0; k < 3; ++k) {
91 for (i = offset[k]; i < offset[k] + n_err[k]; ++i) {
92 ri = e[i] / (p->
abstol + p->
reltol * fmax(fabs(d->
y0[i]), fabs(d->
y[i])));
97 return n > 0 ? sqrt(sum /
static_cast<T1
>(n)) : 0;
101 template<
typename T1>
105 casadi_copy(d->
y0, p->
ny, d->
y);
114 template<
typename T1>
119 err = casadi_ivp_error_norm(d);
124 if (casadi_ivp_isfinite(err)) fac = fmax(p->
fac_min, p->
safety * pow(err, -1. / k));
125 casadi_ivp_reject(d, fac);
129 err = fmax(err, 1e-10);
140 template<
typename T1>
144 case IVP_CONTROL_INIT:
145 casadi_ivp_initial_step(d, d->
U);
146 casadi_ivp_step_size(d);
148 case IVP_CONTROL_SIZE:
149 casadi_ivp_step_size(d);
151 case IVP_CONTROL_TEST:
152 casadi_ivp_error_test(d);
154 case IVP_CONTROL_FAIL:
155 casadi_ivp_reject(d, 0.25);
T sum(const std::vector< T > &values)
sum
const casadi_ivp_prob< T1 > * prob
casadi_ivp_control_t control