1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.models.earth.troposphere;
18
19 import org.hipparchus.util.FastMath;
20 import org.junit.jupiter.api.Assertions;
21 import org.junit.jupiter.api.Test;
22 import org.orekit.Utils;
23 import org.orekit.errors.OrekitException;
24 import org.orekit.errors.OrekitMessages;
25 import org.orekit.time.DateTimeComponents;
26
27 public class ViennaModelCoefficientsLoaderTest {
28
29 private static double epsilon = 5.0e-16;
30
31 @Test
32
33
34
35
36 public void testRegularFileVienna1() {
37
38 Utils.setDataRoot("vmf1-tropospheric-coefficients");
39
40 final double latitude = FastMath.toRadians(14.0);
41 final double longitude = FastMath.toRadians(67.5);
42 ViennaModelCoefficientsLoader tropoLoader = new ViennaModelCoefficientsLoader(latitude, longitude, ViennaModelType.VIENNA_ONE);
43 DateTimeComponents dateTimeComponents = new DateTimeComponents(2018, 11, 19, 18, 0, 0.0);
44 tropoLoader.loadViennaCoefficients(dateTimeComponents);
45
46 final double a[] = tropoLoader.getA();
47 final double delays[] = tropoLoader.getZenithDelay();
48
49 Assertions.assertEquals(0.00127935, a[0], epsilon);
50 Assertions.assertEquals(0.00064084, a[1], epsilon);
51
52 Assertions.assertEquals(2.3131, delays[0], epsilon);
53 Assertions.assertEquals(0.3086, delays[1], epsilon);
54
55 Assertions.assertEquals("VMFG_20181119.H18", tropoLoader.getSupportedNames());
56 }
57
58 @Test
59
60
61
62
63 public void testRegularFile5x5Vienna3() {
64
65 Utils.setDataRoot("vmf3-5x5-tropospheric-coefficients");
66
67 final double latitude = FastMath.toRadians(77.5);
68 final double longitude = FastMath.toRadians(2.5);
69 ViennaModelCoefficientsLoader tropoLoader = new ViennaModelCoefficientsLoader(latitude, longitude, ViennaModelType.VIENNA_THREE);
70 DateTimeComponents dateTimeComponents = new DateTimeComponents(2018, 11, 25, 0, 0, 0.0);
71 tropoLoader.loadViennaCoefficients(dateTimeComponents);
72
73 final double a[] = tropoLoader.getA();
74 final double delays[] = tropoLoader.getZenithDelay();
75
76 Assertions.assertEquals(0.00117002, a[0], epsilon);
77 Assertions.assertEquals(0.00045484, a[1], epsilon);
78
79 Assertions.assertEquals(2.3203, delays[0], epsilon);
80 Assertions.assertEquals(0.0191, delays[1], epsilon);
81
82 Assertions.assertEquals("VMF3_20181125.H00", tropoLoader.getSupportedNames());
83 }
84
85 @Test
86
87
88
89
90 public void testRegularFile1x1Vienna3() {
91
92 Utils.setDataRoot("vmf3-1x1-tropospheric-coefficients");
93
94 final double latitude = FastMath.toRadians(19.5);
95 final double longitude = FastMath.toRadians(276.5);
96 ViennaModelCoefficientsLoader tropoLoader = new ViennaModelCoefficientsLoader(latitude, longitude, ViennaModelType.VIENNA_THREE);
97 DateTimeComponents dateTimeComponents = new DateTimeComponents(2018, 11, 25, 0, 0, 0.0);
98 tropoLoader.loadViennaCoefficients(dateTimeComponents);
99
100 final double a[] = tropoLoader.getA();
101 final double delays[] = tropoLoader.getZenithDelay();
102
103 Assertions.assertEquals(0.00127606, a[0], epsilon);
104 Assertions.assertEquals(0.00056388, a[1], epsilon);
105
106 Assertions.assertEquals(2.3117, delays[0], epsilon);
107 Assertions.assertEquals(0.2239, delays[1], epsilon);
108
109 Assertions.assertEquals("VMF3_20181125.H00", tropoLoader.getSupportedNames());
110 }
111
112 @Test
113 public void testEquality() {
114
115
116 Utils.setDataRoot("vmf3-1x1-tropospheric-coefficients");
117 DateTimeComponents dateTimeComponents = new DateTimeComponents(2018, 11, 25, 0, 0, 0.0);
118
119 final double latitude = FastMath.toRadians(45.0);
120
121 double longitude1;
122 ViennaModelCoefficientsLoader model1;
123
124 double longitude2;
125 ViennaModelCoefficientsLoader model2;
126
127
128 longitude1 = FastMath.toRadians(181.0);
129 longitude2 = FastMath.toRadians(-179.0);
130
131 model1 = new ViennaModelCoefficientsLoader(latitude, longitude1, ViennaModelType.VIENNA_THREE);
132 model2 = new ViennaModelCoefficientsLoader(latitude, longitude2, ViennaModelType.VIENNA_THREE);
133
134 model1.loadViennaCoefficients(dateTimeComponents);
135 model2.loadViennaCoefficients(dateTimeComponents);
136
137 Assertions.assertEquals(model1.getA()[0], model2.getA()[0], epsilon);
138 Assertions.assertEquals(model1.getA()[1], model2.getA()[1], epsilon);
139 Assertions.assertEquals(model1.getZenithDelay()[0], model2.getZenithDelay()[0], epsilon);
140 Assertions.assertEquals(model1.getZenithDelay()[1], model2.getZenithDelay()[1], epsilon);
141
142
143 longitude1 = FastMath.toRadians(180.0);
144 longitude2 = FastMath.toRadians(-180.0);
145
146 model1 = new ViennaModelCoefficientsLoader(latitude, longitude1, ViennaModelType.VIENNA_THREE);
147 model2 = new ViennaModelCoefficientsLoader(latitude, longitude2, ViennaModelType.VIENNA_THREE);
148
149 model1.loadViennaCoefficients(dateTimeComponents);
150 model2.loadViennaCoefficients(dateTimeComponents);
151
152 Assertions.assertEquals(model1.getA()[0], model2.getA()[0], epsilon);
153 Assertions.assertEquals(model1.getA()[1], model2.getA()[1], epsilon);
154 Assertions.assertEquals(model1.getZenithDelay()[0], model2.getZenithDelay()[0], epsilon);
155 Assertions.assertEquals(model1.getZenithDelay()[1], model2.getZenithDelay()[1], epsilon);
156
157
158 longitude1 = FastMath.toRadians(0.0);
159 longitude2 = FastMath.toRadians(360.0);
160
161 model1 = new ViennaModelCoefficientsLoader(latitude, longitude1, ViennaModelType.VIENNA_THREE);
162 model2 = new ViennaModelCoefficientsLoader(latitude, longitude2, ViennaModelType.VIENNA_THREE);
163
164 model1.loadViennaCoefficients(dateTimeComponents);
165 model2.loadViennaCoefficients(dateTimeComponents);
166
167 Assertions.assertEquals(model1.getA()[0], model2.getA()[0], epsilon);
168 Assertions.assertEquals(model1.getA()[1], model2.getA()[1], epsilon);
169 Assertions.assertEquals(model1.getZenithDelay()[0], model2.getZenithDelay()[0], epsilon);
170 Assertions.assertEquals(model1.getZenithDelay()[1], model2.getZenithDelay()[1], epsilon);
171
172 }
173
174 @Test
175
176
177
178 public void testCorruptedFileBadData() {
179
180 final double latitude = FastMath.toRadians(14.0);
181 final double longitude = FastMath.toRadians(67.5);
182
183 Utils.setDataRoot("vmf1-tropospheric-coefficients");
184 final String fileName = "corrupted-bad-data-VMFG_20181119.H18";
185 ViennaModelCoefficientsLoader tropoLoader =
186 new ViennaModelCoefficientsLoader(fileName, latitude, longitude, ViennaModelType.VIENNA_ONE);
187
188 try {
189 tropoLoader.loadViennaCoefficients();
190 Assertions.fail("An exception should have been thrown");
191
192 } catch (OrekitException oe) {
193 Assertions.assertEquals(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE, oe.getSpecifier());
194 }
195 }
196
197 @Test
198
199
200
201 public void testAbsentFile() {
202
203 Utils.setDataRoot("vmf1-tropospheric-coefficients");
204 final double latitude = FastMath.toRadians(14.0);
205 final double longitude = FastMath.toRadians(67.5);
206 ViennaModelCoefficientsLoader tropoLoader = new ViennaModelCoefficientsLoader(latitude, longitude, ViennaModelType.VIENNA_ONE);
207 DateTimeComponents dateTimeComponents = new DateTimeComponents(2018, 11, 19, 1, 0, 0);
208
209 try {
210 tropoLoader.loadViennaCoefficients(dateTimeComponents);
211 Assertions.fail("An exception should have been thrown");
212
213 } catch (OrekitException oe) {
214 Assertions.assertEquals(OrekitMessages.VIENNA_ACOEF_OR_ZENITH_DELAY_NOT_AVAILABLE_FOR_DATE,
215 oe.getSpecifier());
216 Assertions.assertEquals(dateTimeComponents.toString(),
217 (String) oe.getParts()[0]);
218 }
219 }
220
221 }