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.Test;
24 import org.orekit.Utils;
25 import org.orekit.errors.OrekitException;
26 import org.orekit.forces.gravity.potential.NormalizedSphericalHarmonicsProvider.NormalizedSphericalHarmonics;
27 import org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider.UnnormalizedSphericalHarmonics;
28 import org.orekit.time.AbsoluteDate;
29 import org.orekit.time.TimeScalesFactory;
30 import org.orekit.utils.Constants;
31
32 public class SHMFormatReaderTest {
33
34 @Test
35 public void testReadLimits() {
36 Utils.setDataRoot("potential");
37 GravityFieldFactory.addPotentialCoefficientsReader(new SHMFormatReader("eigen_cg03c_coef", false));
38 UnnormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getUnnormalizedProvider(3, 2);
39 UnnormalizedSphericalHarmonics harmonics = provider.onDate(new AbsoluteDate(1997, 1, 1, 12, 0, 0.0, TimeScalesFactory.getTT()));
40 try {
41 harmonics.getUnnormalizedCnm(3, 3);
42 Assert.fail("an exception should have been thrown");
43 } catch (OrekitException oe) {
44
45 } catch (Exception e) {
46 Assert.fail("wrong exception caught: " + e.getLocalizedMessage());
47 }
48 try {
49 harmonics.getUnnormalizedCnm(4, 2);
50 Assert.fail("an exception should have been thrown");
51 } catch (OrekitException oe) {
52
53 } catch (Exception e) {
54 Assert.fail("wrong exception caught: " + e.getLocalizedMessage());
55 }
56 harmonics.getUnnormalizedCnm(3, 2);
57 Assert.assertEquals(3, provider.getMaxDegree());
58 Assert.assertEquals(2, provider.getMaxOrder());
59 }
60
61 @Deprecated
62 @Test
63 public void testDeprecated() throws OrekitException {
64 Utils.setDataRoot("potential");
65 GravityFieldFactory.addPotentialCoefficientsReader(new SHMFormatReader("eigen_cg03c_coef", false));
66 NormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getNormalizedProvider(5, 5);
67 AbsoluteDate refDate = new AbsoluteDate("1997-01-01T12:00:00", TimeScalesFactory.getTT());
68 Assert.assertEquals(refDate, provider.getReferenceDate());
69 AbsoluteDate date = new AbsoluteDate("2011-05-01T01:02:03", TimeScalesFactory.getTT());
70 Assert.assertEquals(date.durationFrom(refDate), provider.getOffset(date), Precision.SAFE_MIN);
71 }
72
73 @Test
74 public void testRegular03cNormalized() {
75 Utils.setDataRoot("potential");
76 GravityFieldFactory.addPotentialCoefficientsReader(new SHMFormatReader("eigen_cg03c_coef", false));
77 NormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getNormalizedProvider(5, 5);
78 Assert.assertEquals(TideSystem.TIDE_FREE, provider.getTideSystem());
79
80 AbsoluteDate refDate = new AbsoluteDate("1997-01-01T12:00:00", TimeScalesFactory.getTT());
81 AbsoluteDate date = new AbsoluteDate("2011-05-01T01:02:03", TimeScalesFactory.getTT());
82
83 NormalizedSphericalHarmonics harmonics = provider.onDate(date);
84 double offset = date.durationFrom(refDate);
85 double offsetYear = offset / Constants.JULIAN_YEAR;
86 Assert.assertEquals(0.957201462136e-06 + offsetYear * 0.490000000000e-11,
87 harmonics.getNormalizedCnm(3, 0), 1.0e-15);
88 Assert.assertEquals( 0.174786174485e-06, harmonics.getNormalizedCnm(5, 5), 1.0e-15);
89 Assert.assertEquals( 0.0, harmonics.getNormalizedSnm(4, 0), 1.0e-15);
90 Assert.assertEquals( 0.308834784975e-06, harmonics.getNormalizedSnm(4, 4), 1.0e-15);
91 Assert.assertEquals(0.3986004415E+15 , provider.getMu(), 0);
92 Assert.assertEquals(0.6378136460E+07 , provider.getAe(), 0);
93
94 }
95
96 @Test
97 public void testRegular03cUnnormalized() {
98 Utils.setDataRoot("potential");
99 GravityFieldFactory.addPotentialCoefficientsReader(new SHMFormatReader("eigen_cg03c_coef", false));
100 UnnormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getUnnormalizedProvider(5, 5);
101 Assert.assertEquals(TideSystem.TIDE_FREE, provider.getTideSystem());
102
103 AbsoluteDate date = new AbsoluteDate("2011-05-01T01:02:03", TimeScalesFactory.getTT());
104
105 UnnormalizedSphericalHarmonics harmonics = provider.onDate(date);
106 int maxUlps = 2;
107 checkValue(harmonics.getUnnormalizedCnm(3, 0), date, 3, 0,
108 1997, 1, 1, 0.957201462136e-06, 0.490000000000e-11, maxUlps);
109 checkValue(harmonics.getUnnormalizedCnm(5, 5), date, 5, 5,
110 1997, 1, 1, 0.174786174485e-06, 0.0, maxUlps);
111 checkValue(harmonics.getUnnormalizedSnm(4, 0), date, 4, 0,
112 1997, 1, 1, 0, 0, maxUlps);
113 checkValue(harmonics.getUnnormalizedSnm(4, 4), date, 4, 4,
114 1997, 1, 1, 0.308834784975e-06, 0, maxUlps);
115 Assert.assertEquals(0.3986004415E+15 , provider.getMu(), 0);
116 Assert.assertEquals(0.6378136460E+07 , provider.getAe(), 0);
117
118 }
119
120 @Test
121 public void testReadCompressed01c() {
122 Utils.setDataRoot("potential");
123 GravityFieldFactory.addPotentialCoefficientsReader(new SHMFormatReader("compressed-eigen-cg01c_coef", false));
124 UnnormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getUnnormalizedProvider(5, 5);
125 Assert.assertEquals(TideSystem.TIDE_FREE, provider.getTideSystem());
126
127 AbsoluteDate date = new AbsoluteDate("2011-05-01T01:02:03", TimeScalesFactory.getTT());
128
129 UnnormalizedSphericalHarmonics harmonics = provider.onDate(date);
130 int maxUlps = 2;
131 checkValue(harmonics.getUnnormalizedCnm(3, 0), date, 3, 0,
132 1997, 1, 1, 0.957187536534E-06, 0.490000000000E-11, maxUlps);
133 checkValue(harmonics.getUnnormalizedCnm(5, 5), date, 5, 5,
134 1997, 1, 1, 0.174787189024E-06, 0.0, maxUlps);
135 checkValue(harmonics.getUnnormalizedSnm(4, 0), date, 4, 0,
136 1997, 1, 1, 0, 0, maxUlps);
137 checkValue(harmonics.getUnnormalizedSnm(4, 4), date, 4, 4,
138 1997, 1, 1, 0.308834848269E-06, 0, maxUlps);
139 Assert.assertEquals(0.3986004415E+15 , provider.getMu(), 0);
140 Assert.assertEquals(0.6378136460E+07 , provider.getAe(), 0);
141
142 }
143
144 @Test(expected=OrekitException.class)
145 public void testCorruptedFile1() {
146 Utils.setDataRoot("potential");
147 GravityFieldFactory.addPotentialCoefficientsReader(new SHMFormatReader("corrupted-1-eigen_coef", false));
148 GravityFieldFactory.getUnnormalizedProvider(5, 5);
149 }
150
151 @Test(expected=OrekitException.class)
152 public void testCorruptedFile2() {
153 Utils.setDataRoot("potential");
154 GravityFieldFactory.addPotentialCoefficientsReader(new SHMFormatReader("corrupted-2-eigen_coef", false));
155 GravityFieldFactory.getUnnormalizedProvider(5, 5);
156 }
157
158 @Test(expected=OrekitException.class)
159 public void testCorruptedFile3() {
160 Utils.setDataRoot("potential");
161 GravityFieldFactory.addPotentialCoefficientsReader(new SHMFormatReader("corrupted-3-eigen_coef", false));
162 GravityFieldFactory.getUnnormalizedProvider(5, 5);
163 }
164
165 @Test(expected=OrekitException.class)
166 public void testCorruptedFile4() {
167 Utils.setDataRoot("potential");
168 GravityFieldFactory.addPotentialCoefficientsReader(new SHMFormatReader("corrupted-4-eigen_coef", false));
169 GravityFieldFactory.getUnnormalizedProvider(5, 5);
170 }
171
172 @Test
173 public void testZeroTide() {
174 Utils.setDataRoot("potential");
175 GravityFieldFactory.addPotentialCoefficientsReader(new SHMFormatReader("dummy_unknown_tide_shm", false));
176 Assert.assertEquals(TideSystem.UNKNOWN,
177 GravityFieldFactory.getUnnormalizedProvider(5, 5).getTideSystem());
178 }
179
180 private void checkValue(final double value,
181 final AbsoluteDate date, final int n, final int m,
182 final int refYear, final int refMonth, final int refDay,
183 final double constant, final double trend,
184 final int maxUlps)
185 {
186 double factor = GravityFieldFactory.getUnnormalizationFactors(n, m)[n][m];
187 AbsoluteDate refDate = new AbsoluteDate(refYear, refMonth, refDay, 12, 0, 0, TimeScalesFactory.getTT());
188 double dtYear = date.durationFrom(refDate) / Constants.JULIAN_YEAR;
189 double normalized = factor * (constant + trend * dtYear);
190 double epsilon = maxUlps * FastMath.ulp(normalized);
191 Assert.assertEquals(normalized, value, epsilon);
192 }
193
194 }