View Javadoc
1   /*
2    * Licensed to the Hipparchus project under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The Hipparchus project licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      https://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.hipparchus.ode.nonstiff;
19  
20  
21  import org.hipparchus.CalculusFieldElement;
22  import org.hipparchus.Field;
23  import org.hipparchus.util.Binary64Field;
24  import org.junit.jupiter.api.Test;
25  
26  class ClassicalRungeKuttaFieldIntegratorTest extends RungeKuttaFieldIntegratorAbstractTest {
27  
28      protected <T extends CalculusFieldElement<T>> FixedStepRungeKuttaFieldIntegrator<T>
29      createIntegrator(Field<T> field, T step) {
30          return new ClassicalRungeKuttaFieldIntegrator<T>(field, step);
31      }
32  
33      @Override
34      @Test
35      public void testNonFieldIntegratorConsistency() {
36          doTestNonFieldIntegratorConsistency(Binary64Field.getInstance());
37      }
38  
39      @Override
40      @Test
41      public void testMissedEndEvent() {
42          doTestMissedEndEvent(Binary64Field.getInstance(), 5.0e-6, 1.0e-9);
43      }
44  
45      @Override
46      @Test
47      public void testSanityChecks() {
48          doTestSanityChecks(Binary64Field.getInstance());
49      }
50  
51      @Override
52      @Test
53      public void testDecreasingSteps() {
54          doTestDecreasingSteps(Binary64Field.getInstance(), 1.0, 1.0, 1.0e-10);
55      }
56  
57      @Override
58      @Test
59      public void testSmallStep() {
60          doTestSmallStep(Binary64Field.getInstance(), 2.0e-13, 4.0e-12, 1.0e-12, "classical Runge-Kutta");
61      }
62  
63      @Override
64      @Test
65      public void testBigStep() {
66          doTestBigStep(Binary64Field.getInstance(), 0.0004, 0.005, 1.0e-12, "classical Runge-Kutta");
67  
68      }
69  
70      @Override
71      @Test
72      public void testBackward() {
73          doTestBackward(Binary64Field.getInstance(), 5.0e-10, 7.0e-10, 1.0e-12, "classical Runge-Kutta");
74      }
75  
76      @Override
77      @Test
78      public void testKepler() {
79          doTestKepler(Binary64Field.getInstance(), 5.82e-3, 1.0e-5);
80      }
81  
82      @Override
83      @Test
84      public void testStepSize() {
85          doTestStepSize(Binary64Field.getInstance(), 1.0e-12);
86      }
87  
88      @Override
89      @Test
90      public void testSingleStep() {
91          doTestSingleStep(Binary64Field.getInstance(), 9.3e-9);
92      }
93  
94      @Override
95      @Test
96      public void testTooLargeFirstStep() {
97          doTestTooLargeFirstStep(Binary64Field.getInstance());
98      }
99  
100     @Override
101     @Test
102     public void testUnstableDerivative() {
103         doTestUnstableDerivative(Binary64Field.getInstance(), 1.0e-12);
104     }
105 
106     @Override
107     @Test
108     public void testDerivativesConsistency() {
109         doTestDerivativesConsistency(Binary64Field.getInstance(), 1.0e-10);
110     }
111 
112     @Override
113     @Test
114     public void testPartialDerivatives() {
115         doTestPartialDerivatives(3.2e-10, new double[] { 2.1e-9, 5.9e-10, 7.0e-11, 7.0e-11, 5.9e-10 });
116     }
117 
118     @Test
119     public void testSecondaryEquations() {
120         doTestSecondaryEquations(Binary64Field.getInstance(), 1.1e-12, 5.6e-13);
121     }
122 
123 }