1   /* Copyright 2002-2022 CS GROUP
2    * Licensed to CS GROUP (CS) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * CS 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    *   http://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  package org.orekit.propagation.semianalytical.dsst;
18  
19  import java.io.IOException;
20  import java.text.ParseException;
21  import java.util.Arrays;
22  
23  import org.hipparchus.Field;
24  import org.hipparchus.CalculusFieldElement;
25  import org.hipparchus.util.Decimal64Field;
26  import org.hipparchus.util.FastMath;
27  import org.hipparchus.util.MathArrays;
28  import org.junit.Assert;
29  import org.junit.Before;
30  import org.junit.Test;
31  import org.orekit.Utils;
32  import org.orekit.frames.Frame;
33  import org.orekit.frames.FramesFactory;
34  import org.orekit.orbits.FieldEquinoctialOrbit;
35  import org.orekit.orbits.PositionAngle;
36  import org.orekit.propagation.FieldSpacecraftState;
37  import org.orekit.propagation.semianalytical.dsst.forces.DSSTForceModel;
38  import org.orekit.propagation.semianalytical.dsst.forces.DSSTNewtonianAttraction;
39  import org.orekit.propagation.semianalytical.dsst.utilities.FieldAuxiliaryElements;
40  import org.orekit.time.FieldAbsoluteDate;
41  import org.orekit.time.TimeScalesFactory;
42  
43  public class FieldDSSTNewtonianAttractionTest {
44  
45      private static final double eps  = 1.0e-19;
46  
47      @Test
48      public void testGetMeanElementRate() {
49          doTestGetMeanElementRate(Decimal64Field.getInstance());
50      }
51  
52      private <T extends CalculusFieldElement<T>> void doTestGetMeanElementRate(final Field<T> field) {
53          
54          final T zero = field.getZero();
55          
56          final Frame earthFrame = FramesFactory.getEME2000();
57          
58          final FieldAbsoluteDate<T> date = new FieldAbsoluteDate<>(field, 2007, 04, 16, 0, 46, 42.400,
59                                                                    TimeScalesFactory.getUTC());
60          
61          final double mu = 3.986004415E14;
62          final FieldEquinoctialOrbit<T> orbit = new FieldEquinoctialOrbit<>(zero.add(2.655989E7),
63                                                                             zero.add(2.719455286199036E-4),
64                                                                             zero.add(0.0041543085910249414),
65                                                                             zero.add(-0.3412974060023717),
66                                                                             zero.add(0.3960084733107685),
67                                                                             zero.add(FastMath.toRadians(44.2377)),
68                                                                             PositionAngle.MEAN,
69                                                                             earthFrame,
70                                                                             date,
71                                                                             zero.add(mu));
72          
73          final FieldSpacecraftState<T> state = new FieldSpacecraftState<>(orbit);
74          
75          final FieldAuxiliaryElements<T> auxiliaryElements = new FieldAuxiliaryElements<>(state.getOrbit(), 1);
76          
77          final DSSTForceModel newton = new DSSTNewtonianAttraction(mu);
78  
79          final T[] elements = MathArrays.buildArray(field, 7);
80          Arrays.fill(elements, zero);
81          
82          final T[] daidt = newton.getMeanElementRate(state, auxiliaryElements, newton.getParameters(field));
83          for (int i = 0; i < daidt.length; i++) {
84              elements[i] = daidt[i];
85          }
86          
87          Assert.assertEquals(0.0,                   elements[0].getReal(), eps);
88          Assert.assertEquals(0.0,                   elements[1].getReal(), eps);
89          Assert.assertEquals(0.0,                   elements[2].getReal(), eps);
90          Assert.assertEquals(0.0,                   elements[3].getReal(), eps);
91          Assert.assertEquals(0.0,                   elements[4].getReal(), eps);
92          Assert.assertEquals(1.4585773985530907E-4, elements[5].getReal(), eps);
93  
94      }
95  
96      @Before
97      public void setUp() throws IOException, ParseException {
98          Utils.setDataRoot("regular-data");
99      }
100 
101 }