in commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/ode/nonstiff/DormandPrince54FieldStepInterpolator.java [125:246]
protected FieldODEStateAndDerivative<T> computeInterpolatedStateAndDerivatives(final FieldEquationsMapper<T> mapper,
final T time, final T theta,
final T thetaH, final T oneMinusThetaH) {
// interpolate
final T one = time.getField().getOne();
final T eta = one.subtract(theta);
final T twoTheta = theta.multiply(2);
final T dot2 = one.subtract(twoTheta);
final T dot3 = theta.multiply(theta.multiply(-3).add(2));
final T dot4 = twoTheta.multiply(theta.multiply(twoTheta.subtract(3)).add(1));
final T[] interpolatedState;
final T[] interpolatedDerivatives;
if (getGlobalPreviousState() != null && theta.getReal() <= 0.5) {
final T f1 = thetaH;
final T f2 = f1.multiply(eta);
final T f3 = f2.multiply(theta);
final T f4 = f3.multiply(eta);
final T coeff0 = f1.multiply(a70).
subtract(f2.multiply(a70.subtract(1))).
add(f3.multiply(a70.multiply(2).subtract(1))).
add(f4.multiply(d0));
final T coeff1 = time.getField().getZero();
final T coeff2 = f1.multiply(a72).
subtract(f2.multiply(a72)).
add(f3.multiply(a72.multiply(2))).
add(f4.multiply(d2));
final T coeff3 = f1.multiply(a73).
subtract(f2.multiply(a73)).
add(f3.multiply(a73.multiply(2))).
add(f4.multiply(d3));
final T coeff4 = f1.multiply(a74).
subtract(f2.multiply(a74)).
add(f3.multiply(a74.multiply(2))).
add(f4.multiply(d4));
final T coeff5 = f1.multiply(a75).
subtract(f2.multiply(a75)).
add(f3.multiply(a75.multiply(2))).
add(f4.multiply(d5));
final T coeff6 = f4.multiply(d6).subtract(f3);
final T coeffDot0 = a70.
subtract(dot2.multiply(a70.subtract(1))).
add(dot3.multiply(a70.multiply(2).subtract(1))).
add(dot4.multiply(d0));
final T coeffDot1 = time.getField().getZero();
final T coeffDot2 = a72.
subtract(dot2.multiply(a72)).
add(dot3.multiply(a72.multiply(2))).
add(dot4.multiply(d2));
final T coeffDot3 = a73.
subtract(dot2.multiply(a73)).
add(dot3.multiply(a73.multiply(2))).
add(dot4.multiply(d3));
final T coeffDot4 = a74.
subtract(dot2.multiply(a74)).
add(dot3.multiply(a74.multiply(2))).
add(dot4.multiply(d4));
final T coeffDot5 = a75.
subtract(dot2.multiply(a75)).
add(dot3.multiply(a75.multiply(2))).
add(dot4.multiply(d5));
final T coeffDot6 = dot4.multiply(d6).subtract(dot3);
interpolatedState = previousStateLinearCombination(coeff0, coeff1, coeff2, coeff3,
coeff4, coeff5, coeff6);
interpolatedDerivatives = derivativeLinearCombination(coeffDot0, coeffDot1, coeffDot2, coeffDot3,
coeffDot4, coeffDot5, coeffDot6);
} else {
final T f1 = oneMinusThetaH.negate();
final T f2 = oneMinusThetaH.multiply(theta);
final T f3 = f2.multiply(theta);
final T f4 = f3.multiply(eta);
final T coeff0 = f1.multiply(a70).
subtract(f2.multiply(a70.subtract(1))).
add(f3.multiply(a70.multiply(2).subtract(1))).
add(f4.multiply(d0));
final T coeff1 = time.getField().getZero();
final T coeff2 = f1.multiply(a72).
subtract(f2.multiply(a72)).
add(f3.multiply(a72.multiply(2))).
add(f4.multiply(d2));
final T coeff3 = f1.multiply(a73).
subtract(f2.multiply(a73)).
add(f3.multiply(a73.multiply(2))).
add(f4.multiply(d3));
final T coeff4 = f1.multiply(a74).
subtract(f2.multiply(a74)).
add(f3.multiply(a74.multiply(2))).
add(f4.multiply(d4));
final T coeff5 = f1.multiply(a75).
subtract(f2.multiply(a75)).
add(f3.multiply(a75.multiply(2))).
add(f4.multiply(d5));
final T coeff6 = f4.multiply(d6).subtract(f3);
final T coeffDot0 = a70.
subtract(dot2.multiply(a70.subtract(1))).
add(dot3.multiply(a70.multiply(2).subtract(1))).
add(dot4.multiply(d0));
final T coeffDot1 = time.getField().getZero();
final T coeffDot2 = a72.
subtract(dot2.multiply(a72)).
add(dot3.multiply(a72.multiply(2))).
add(dot4.multiply(d2));
final T coeffDot3 = a73.
subtract(dot2.multiply(a73)).
add(dot3.multiply(a73.multiply(2))).
add(dot4.multiply(d3));
final T coeffDot4 = a74.
subtract(dot2.multiply(a74)).
add(dot3.multiply(a74.multiply(2))).
add(dot4.multiply(d4));
final T coeffDot5 = a75.
subtract(dot2.multiply(a75)).
add(dot3.multiply(a75.multiply(2))).
add(dot4.multiply(d5));
final T coeffDot6 = dot4.multiply(d6).subtract(dot3);
interpolatedState = currentStateLinearCombination(coeff0, coeff1, coeff2, coeff3,
coeff4, coeff5, coeff6);
interpolatedDerivatives = derivativeLinearCombination(coeffDot0, coeffDot1, coeffDot2, coeffDot3,
coeffDot4, coeffDot5, coeffDot6);
}
return new FieldODEStateAndDerivative<>(time, interpolatedState, interpolatedDerivatives);
}