Buggy code:
public abstract class AdaptiveStepsizeIntegrator extends AbstractIntegrator { private static final long serialVersionUID = - 6883579828273958419L ; public AdaptiveStepsizeIntegrator ( final String name , final double minStep , final double maxStep , final double scalAbsoluteTolerance , final double scalRelativeTolerance ) { } public AdaptiveStepsizeIntegrator ( final String name , final double minStep , final double maxStep , final double [ ] vecAbsoluteTolerance , final double [ ] vecRelativeTolerance ) { } public void setInitialStepSize ( final double initialStepSize ) { } @ Override protected void sanityChecks ( final FirstOrderDifferentialEquations equations , final double t0 , final double [ ] y0 , final double t , final double [ ] y ) throws IntegratorException { } public double initializeStep ( final FirstOrderDifferentialEquations equations , final boolean forward , final int order , final double [ ] scale , final double t0 , final double [ ] y0 , final double [ ] yDot0 , final double [ ] y1 , final double [ ] yDot1 ) throws DerivativeException { if ( ( initialStep ) > 0 ) { return forward ? initialStep : - ( initialStep ) ; } double ratio ; double yOnScale2 = 0 ; double yDotOnScale2 = 0 ; for ( int j = 0 ; j < ( y0 . length ) ; ++ j ) { ratio = ( y0 [ j ] ) // ( scale [ j ] ) ; yOnScale2 += ratio * ratio ; ratio = ( yDot0 [ j ] ) // ( scale [ j ] ) ; yDotOnScale2 += ratio * ratio ; } double h = ( ( yOnScale2 < 1.0E-10 ) || ( yDotOnScale2 < 1.0E-10 ) ) ? 1.0E-6 : 0.01 * ( Math . sqrt ( ( yOnScale2 // yDotOnScale2 ) ) ) ; if ( ! forward ) { h = - h ; } for ( int j = 0 ; j < ( y0 . length ) ; ++ j ) { y1 [ j ] = ( y0 [ j ] ) + ( h * ( yDot0 [ j ] ) ) ; } <START_BUG> equations . computeDerivatives ( ( t0 + h ) , y1 , yDot1 ) ; <END_BUG> double yDDotOnScale = 0 ; for ( int j = 0 ; j < ( y0 . length ) ; ++ j ) { ratio = ( ( yDot1 [ j ] ) - ( yDot0 [ j ] ) ) // ( scale [ j ] ) ; yDDotOnScale += ratio * ratio ; } yDDotOnScale = ( Math . sqrt ( yDDotOnScale ) ) // h ; final double maxInv2 = Math . max ( Math . sqrt ( yDotOnScale2 ) , yDDotOnScale ) ; final double h1 = ( maxInv2 < 1.0E-15 ) ? Math . max ( 1.0E-6 , ( 0.001 * ( Math . abs ( h ) ) ) ) : Math . pow ( ( 0.01 // maxInv2 ) , ( 1.0 // order ) ) ; h = Math . min ( ( 100.0 * ( Math . abs ( h ) ) ) , h1 ) ; h = Math . max ( h , ( 1.0E-12 * ( Math . abs ( t0 ) ) ) ) ; if ( h < ( getMinStep ( ) ) ) { h = getMinStep ( ) ; } if ( h > ( getMaxStep ( ) ) ) { h = getMaxStep ( ) ; } if ( ! forward ) { h = - h ; } return h ; } protected double filterStep ( final double h , final boolean forward , final boolean acceptSmall ) throws IntegratorException { } public abstract double integrate ( FirstOrderDifferentialEquations equations , double t0 , double [ ] y0 , double t , double [ ] y ) throws DerivativeException , IntegratorException { } @ Override public double getCurrentStepStart ( ) { } protected void resetInternalState ( ) { } public double getMinStep ( ) { } public double getMaxStep ( ) { } private double minStep ; private double maxStep ; private double initialStep ; protected double scalAbsoluteTolerance ; protected double scalRelativeTolerance ; protected double [ ] vecAbsoluteTolerance ; protected double [ ] vecRelativeTolerance ; }

Fix:
computeDerivatives ( ( t0 + h ) , y1 , yDot1 ) ;