1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.forces.gravity.potential;
18
19
20 import org.hipparchus.util.FastMath;
21 import org.hipparchus.util.Precision;
22 import org.junit.Assert;
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.orekit.Utils;
26 import org.orekit.errors.OrekitException;
27 import org.orekit.forces.gravity.potential.NormalizedSphericalHarmonicsProvider.NormalizedSphericalHarmonics;
28 import org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider.UnnormalizedSphericalHarmonics;
29 import org.orekit.time.AbsoluteDate;
30 import org.orekit.time.TimeScalesFactory;
31 import org.orekit.utils.Constants;
32
33 public class GRGSFormatReaderTest {
34
35 @Test
36 public void testAdditionalColumn() {
37 GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim5-c1.txt", true));
38 UnnormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getUnnormalizedProvider(5, 5);
39
40 Assert.assertEquals(TideSystem.UNKNOWN, provider.getTideSystem());
41 AbsoluteDate date = new AbsoluteDate("2011-05-01T01:02:03", TimeScalesFactory.getTT());
42
43 UnnormalizedSphericalHarmonics harmonics = provider.onDate(date);
44 int maxUlps = 2;
45 checkValue(harmonics.getUnnormalizedCnm(3, 0), date, 3, 0,
46 1997, 1, 1, 0.95857491635129E-06, 0.28175700027753E-11, maxUlps);
47 checkValue(harmonics.getUnnormalizedCnm(5, 5), date, 5, 5,
48 1997, 1, 1, 0.17481512311600E-06, 0.0, maxUlps);
49 checkValue(harmonics.getUnnormalizedSnm(4, 0), date, 4, 0,
50 1997, 1, 1, 0, 0, maxUlps);
51 checkValue(harmonics.getUnnormalizedSnm(4, 4), date, 4, 4,
52 1997, 1, 1, 0.30882755318300E-06, 0, maxUlps);
53 Assert.assertEquals(0.3986004415E+15 , provider.getMu(), 0);
54 Assert.assertEquals(0.6378136460E+07 , provider.getAe(), 0);
55
56 }
57
58 @Deprecated
59 @Test
60 public void testDeprecated() throws OrekitException {
61 GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim5-c1.txt", true));
62 UnnormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getUnnormalizedProvider(5, 5);
63 AbsoluteDate refDate = new AbsoluteDate("1997-01-01T12:00:00", TimeScalesFactory.getTT());
64 AbsoluteDate date = new AbsoluteDate("2011-05-01T01:02:03", TimeScalesFactory.getTT());
65 Assert.assertEquals(refDate, provider.getReferenceDate());
66 Assert.assertEquals(date.durationFrom(refDate), provider.getOffset(date), Precision.SAFE_MIN);
67 }
68
69 @Test
70 public void testRegular05cNormalized() {
71 GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim5_C1.dat", true));
72 NormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getNormalizedProvider(5, 5);
73 Assert.assertEquals(TideSystem.UNKNOWN, provider.getTideSystem());
74
75 AbsoluteDate refDate = new AbsoluteDate("1997-01-01T12:00:00", TimeScalesFactory.getTT());
76 AbsoluteDate date = new AbsoluteDate("2011-05-01T01:02:03", TimeScalesFactory.getTT());
77
78 double offset = date.durationFrom(refDate);
79 double offsetYear = offset / Constants.JULIAN_YEAR;
80 NormalizedSphericalHarmonics harmonics = provider.onDate(date);
81 Assert.assertEquals(0.95857491635129E-06 + offsetYear * 0.28175700027753E-11,
82 harmonics.getNormalizedCnm(3, 0), 1.0e-15);
83 Assert.assertEquals( 0.17481512311600E-06, harmonics.getNormalizedCnm(5, 5), 1.0e-15);
84 Assert.assertEquals( 0.0, harmonics.getNormalizedSnm(4, 0), 1.0e-15);
85 Assert.assertEquals( 0.30882755318300E-06, harmonics.getNormalizedSnm(4, 4), 1.0e-15);
86 Assert.assertEquals(0.3986004415E+15 , provider.getMu(), 0);
87 Assert.assertEquals(0.6378136460E+07 , provider.getAe(), 0);
88 }
89
90 @Test
91 public void testRegular05cUnnormalized() {
92 GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim5_C1.dat", true));
93 UnnormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getUnnormalizedProvider(5, 5);
94
95 AbsoluteDate date = new AbsoluteDate("2011-05-01T01:02:03", TimeScalesFactory.getTT());
96
97 UnnormalizedSphericalHarmonics harmonics = provider.onDate(date);
98 int maxUlps = 2;
99 checkValue(harmonics.getUnnormalizedCnm(3, 0), date, 3, 0,
100 1997, 1, 1, 0.95857491635129E-06, 0.28175700027753E-11, maxUlps);
101 checkValue(harmonics.getUnnormalizedCnm(5, 5), date, 5, 5,
102 1997, 1, 1, 0.17481512311600E-06, 0.0, maxUlps);
103 checkValue(harmonics.getUnnormalizedSnm(4, 0), date, 4, 0,
104 1997, 1, 1, 0, 0, maxUlps);
105 checkValue(harmonics.getUnnormalizedSnm(4, 4), date, 4, 4,
106 1997, 1, 1, 0.30882755318300E-06, 0, maxUlps);
107 Assert.assertEquals(0.3986004415E+15 , provider.getMu(), 0);
108 Assert.assertEquals(0.6378136460E+07 , provider.getAe(), 0);
109
110 }
111
112 @Test
113 public void testReadLimits() {
114 GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim5_C1.dat", true));
115 UnnormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getUnnormalizedProvider(3, 2);
116 UnnormalizedSphericalHarmonics harmonics = provider.onDate(new AbsoluteDate(1997, 1, 1, 12, 0, 0.0, TimeScalesFactory.getTT()));
117 try {
118 harmonics.getUnnormalizedCnm(3, 3);
119 Assert.fail("an exception should have been thrown");
120 } catch (OrekitException oe) {
121
122 } catch (Exception e) {
123 Assert.fail("wrong exception caught: " + e.getLocalizedMessage());
124 }
125 try {
126 harmonics.getUnnormalizedCnm(4, 2);
127 Assert.fail("an exception should have been thrown");
128 } catch (OrekitException oe) {
129
130 } catch (Exception e) {
131 Assert.fail("wrong exception caught: " + e.getLocalizedMessage());
132 }
133 harmonics.getUnnormalizedCnm(3, 2);
134 Assert.assertEquals(3, provider.getMaxDegree());
135 Assert.assertEquals(2, provider.getMaxOrder());
136 }
137
138 @Test(expected=OrekitException.class)
139 public void testCorruptedFile1() {
140 GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("corrupted-1-grim5.dat", false));
141 GravityFieldFactory.getUnnormalizedProvider(5, 5);
142 }
143
144 @Test(expected=OrekitException.class)
145 public void testCorruptedFile2() {
146 GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("corrupted-2-grim5.dat", false));
147 GravityFieldFactory.getUnnormalizedProvider(5, 5);
148 }
149
150 @Test(expected=OrekitException.class)
151 public void testCorruptedFile3() {
152 GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("corrupted-3-grim5.dat", false));
153 GravityFieldFactory.getUnnormalizedProvider(5, 5);
154 }
155
156 @Test(expected=OrekitException.class)
157 public void testCorruptedFile4() {
158 GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("corrupted-4-grim5.dat", false));
159 GravityFieldFactory.getUnnormalizedProvider(5, 5);
160 }
161
162 @Before
163 public void setUp() {
164 Utils.setDataRoot("potential:regular-data");
165 }
166
167 private void checkValue(final double value,
168 final AbsoluteDate date, final int n, final int m,
169 final int refYear, final int refMonth, final int refDay,
170 final double constant, final double trend,
171 final int maxUlps) {
172 double factor = GravityFieldFactory.getUnnormalizationFactors(n, m)[n][m];
173 AbsoluteDate refDate = new AbsoluteDate(refYear, refMonth, refDay, 12, 0, 0, TimeScalesFactory.getTT());
174 double dtYear = date.durationFrom(refDate) / Constants.JULIAN_YEAR;
175 double normalized = factor * (constant + trend * dtYear);
176 double epsilon = maxUlps * FastMath.ulp(normalized);
177 Assert.assertEquals(normalized, value, epsilon);
178 }
179
180 }