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 EulerFieldIntegratorTest extends RungeKuttaFieldIntegratorAbstractTest {
27  
28      protected <T extends CalculusFieldElement<T>> FixedStepRungeKuttaFieldIntegrator<T>
29      createIntegrator(Field<T> field, T step) {
30          return new EulerFieldIntegrator<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(), 1.0e-15, 6.0e-5);
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.5, 1.0e-10);
55      }
56  
57      @Override
58      @Test
59      public void testSmallStep() {
60          doTestSmallStep(Binary64Field.getInstance(), 2.0e-4, 1.0e-3, 1.0e-12, "Euler");
61      }
62  
63      @Override
64      @Test
65      public void testBigStep() {
66          doTestBigStep(Binary64Field.getInstance(), 0.01, 0.2, 1.0e-12, "Euler");
67  
68      }
69  
70      @Override
71      @Test
72      public void testBackward() {
73          doTestBackward(Binary64Field.getInstance(), 0.45, 0.45, 1.0e-12, "Euler");
74      }
75  
76      @Override
77      @Test
78      public void testKepler() {
79          // Euler integrator is clearly not able to solve this problem
80          doTestKepler(Binary64Field.getInstance(), 881.176, 0.001);
81      }
82  
83      @Override
84      @Test
85      public void testStepSize() {
86          doTestStepSize(Binary64Field.getInstance(), 1.0e-12);
87      }
88  
89      @Override
90      @Test
91      public void testSingleStep() {
92          doTestSingleStep(Binary64Field.getInstance(), 0.21);
93      }
94  
95      @Override
96      @Test
97      public void testTooLargeFirstStep() {
98          doTestTooLargeFirstStep(Binary64Field.getInstance());
99      }
100 
101     @Override
102     @Test
103     public void testUnstableDerivative() {
104         doTestUnstableDerivative(Binary64Field.getInstance(), 1.0e-12);
105     }
106 
107     @Override
108     @Test
109     public void testDerivativesConsistency() {
110         doTestDerivativesConsistency(Binary64Field.getInstance(), 1.0e-10);
111     }
112 
113     @Override
114     @Test
115     public void testPartialDerivatives() {
116         doTestPartialDerivatives(0.085, new double[] { 0.47, 0.13, 0.019, 0.019, 0.13 });
117     }
118 
119     @Test
120     public void testSecondaryEquations() {
121         doTestSecondaryEquations(Binary64Field.getInstance(), 4.8e-3, 5.6e-13);
122     }
123 
124 }