53 alpha_(kMaxX_, kMaxX_, 0.0),
54 d_p_(n_, kMaxX_, 0.0),
78 odes_.derivatives(
x,
y, dydx0_);
81 bool exitflag =
false;
83 if (relTol_[0] != epsOld_)
85 dxTry = xNew_ = -GREAT;
86 scalar eps1 = safe1*relTol_[0];
91 a_[
k + 1] = a_[
k] + nSeq_[
k + 1];
94 for (
label iq = 1; iq<kMaxX_; iq++)
99 pow(eps1, (a_[
k + 1] - a_[iq + 1])
100 /((a_[iq + 1] - a_[0] + 1.0)*(2*
k + 3)));
104 epsOld_ = relTol_[0];
109 a_[
k + 1] = a_[
k] + nSeq_[
k + 1];
112 for (kOpt_ = 1; kOpt_<kMaxX_ - 1; kOpt_++)
114 if (a_[kOpt_ + 1] > a_[kOpt_]*alpha_[kOpt_ - 1][kOpt_])
126 odes_.jacobian(
x,
y, dfdx_, dfdy_);
128 if (
x != xNew_ ||
h != dxTry)
136 scalar maxErr = SMALL;
142 for (
k=0;
k <= kMax_;
k++)
149 <<
"step size underflow"
153 SIMPR(
x, yTemp_, dydx0_, dfdx_, dfdy_,
h, nSeq_[
k], ySeq_);
154 scalar xest =
sqr(
h/nSeq_[
k]);
156 polyExtrapolate(
k, xest, ySeq_,
y, yErr_, x_p_, d_p_);
161 for (
label i=0; i<n_; i++)
166 mag(yErr_[i])/(absTol_[i] + relTol_[i]*
mag(yTemp_[i]))
170 err_[km] =
pow(maxErr/safe1, 1.0/(2*km + 3));
173 if (
k != 0 && (
k >= kOpt_ - 1 || first_))
181 if (
k == kMax_ ||
k == kOpt_ + 1)
183 red = safe2/err_[km];
186 else if (
k == kOpt_ && alpha_[kOpt_ - 1][kOpt_] < err_[km])
191 else if (kOpt_ == kMax_ && alpha_[km][kMax_ - 1] < err_[km])
193 red = alpha_[km][kMax_ - 1]*safe2/err_[km];
196 else if (alpha_[km][kOpt_] < err_[km])
198 red = alpha_[km][kOpt_ - 1]/err_[km];
209 red =
min(red, redMin);
210 red =
max(red, redMax);
217 scalar wrkmin = GREAT;
220 for (
label kk=0; kk<=km; kk++)
222 scalar fact =
max(err_[kk], scaleMX);
223 scalar work = fact*a_[kk + 1];
234 if (kOpt_ >=
k && kOpt_ != kMax_ && !reduct)
236 scalar fact =
max(scale/alpha_[kOpt_ - 1][kOpt_], scaleMX);
237 if (a_[kOpt_ + 1]*fact <= wrkmin)