1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.models.earth.weather;
18
19 import org.hipparchus.util.FastMath;
20 import org.junit.Assert;
21 import org.junit.Test;
22 import org.orekit.Utils;
23 import org.orekit.errors.OrekitException;
24 import org.orekit.errors.OrekitMessages;
25 import org.orekit.forces.gravity.potential.GRGSFormatReader;
26 import org.orekit.forces.gravity.potential.GravityFieldFactory;
27 import org.orekit.frames.FramesFactory;
28 import org.orekit.models.earth.Geoid;
29 import org.orekit.models.earth.ReferenceEllipsoid;
30 import org.orekit.time.AbsoluteDate;
31 import org.orekit.time.TimeScalesFactory;
32 import org.orekit.utils.IERSConventions;
33
34 public class GlobalPressureTemperature2ModelTest {
35
36 private static double epsilon = 1.0e-12;
37
38 @Test
39 public void testWeatherParameters() {
40
41 Utils.setDataRoot("regular-data:potential:gpt2-grid");
42 GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim4s4_gr", true));
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 final double latitude = FastMath.toRadians(48.20);
61 final double longitude = FastMath.toRadians(16.37);
62 final double height = 156.0;
63 final AbsoluteDate date = AbsoluteDate.createMJDDate(56141, 0.0, TimeScalesFactory.getUTC());
64 final Geoid geoid = new Geoid(GravityFieldFactory.getNormalizedProvider(12, 12),
65 ReferenceEllipsoid.getWgs84(FramesFactory.getITRF(IERSConventions.IERS_2010, true)));
66 final GlobalPressureTemperature2Model model =
67 new GlobalPressureTemperature2Model("gpt2_5_extract.grd", latitude, longitude, geoid);
68
69 model.weatherParameters(height, date);
70
71 final double a[] = model.getA();
72 final double temperature = model.getTemperature() - 273.15;
73 final double pressure = model.getPressure();
74 final double e = model.getWaterVaporPressure();
75
76 Assert.assertEquals(22.12, temperature, 2.3e-1);
77 Assert.assertEquals(1002.56, pressure, 5.1e-1);
78 Assert.assertEquals(0.0012647, a[0], 1.1e-7);
79 Assert.assertEquals(0.0005726, a[1], 8.6e-8);
80 Assert.assertEquals(15.63, e, 5.0e-2);
81
82 }
83
84 @Test
85 public void testEquality() {
86
87 Utils.setDataRoot("regular-data:potential:gpt2-grid");
88 GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim4s4_gr", true));
89
90
91 final Geoid geoid = new Geoid(GravityFieldFactory.getNormalizedProvider(12, 12),
92 ReferenceEllipsoid.getWgs84(FramesFactory.getITRF(IERSConventions.IERS_2010, true)));
93
94 final AbsoluteDate date = AbsoluteDate.createMJDDate(56141, 0.0, TimeScalesFactory.getUTC());
95 final double latitude = FastMath.toRadians(45.0);
96 final double height = 0.0;
97
98 double longitude1;
99 GlobalPressureTemperature2Model model1;
100
101 double longitude2;
102 GlobalPressureTemperature2Model model2;
103
104
105 longitude1 = FastMath.toRadians(181.0);
106 longitude2 = FastMath.toRadians(-179.0);
107
108 model1 = new GlobalPressureTemperature2Model(latitude, longitude1, geoid);
109 model2 = new GlobalPressureTemperature2Model(latitude, longitude2, geoid);
110
111 model1.weatherParameters(height, date);
112 model2.weatherParameters(height, date);
113
114 Assert.assertEquals(model1.getTemperature(), model2.getTemperature(), epsilon);
115 Assert.assertEquals(model1.getPressure(), model2.getPressure(), epsilon);
116 Assert.assertEquals(model1.getWaterVaporPressure(), model2.getWaterVaporPressure(), epsilon);
117 Assert.assertEquals(model1.getA()[0], model2.getA()[0], epsilon);
118 Assert.assertEquals(model1.getA()[1], model2.getA()[1], epsilon);
119
120
121 longitude1 = FastMath.toRadians(180.0);
122 longitude2 = FastMath.toRadians(-180.0);
123
124 model1 = new GlobalPressureTemperature2Model(latitude, longitude1, geoid);
125 model2 = new GlobalPressureTemperature2Model(latitude, longitude2, geoid);
126
127 model1.weatherParameters(height, date);
128 model2.weatherParameters(height, date);
129
130 Assert.assertEquals(model1.getTemperature(), model2.getTemperature(), epsilon);
131 Assert.assertEquals(model1.getPressure(), model2.getPressure(), epsilon);
132 Assert.assertEquals(model1.getWaterVaporPressure(), model2.getWaterVaporPressure(), epsilon);
133 Assert.assertEquals(model1.getA()[0], model2.getA()[0], epsilon);
134 Assert.assertEquals(model1.getA()[1], model2.getA()[1], epsilon);
135
136
137 longitude1 = FastMath.toRadians(0.0);
138 longitude2 = FastMath.toRadians(360.0);
139
140 model1 = new GlobalPressureTemperature2Model(latitude, longitude1, geoid);
141 model2 = new GlobalPressureTemperature2Model(latitude, longitude2, geoid);
142
143 model1.weatherParameters(height, date);
144 model2.weatherParameters(height, date);
145
146 Assert.assertEquals(model1.getTemperature(), model2.getTemperature(), epsilon);
147 Assert.assertEquals(model1.getPressure(), model2.getPressure(), epsilon);
148 Assert.assertEquals(model1.getWaterVaporPressure(), model2.getWaterVaporPressure(), epsilon);
149 Assert.assertEquals(model1.getA()[0], model2.getA()[0], epsilon);
150 Assert.assertEquals(model1.getA()[1], model2.getA()[1], epsilon);
151
152 }
153
154 @Test
155 public void testCorruptedFileBadData() {
156
157 Utils.setDataRoot("regular-data:potential:gpt2-grid");
158 GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim4s4_gr", true));
159
160 final double latitude = FastMath.toRadians(14.0);
161 final double longitude = FastMath.toRadians(67.5);
162
163
164 final Geoid geoid = new Geoid(GravityFieldFactory.getNormalizedProvider(12, 12),
165 ReferenceEllipsoid.getWgs84(FramesFactory.getITRF(IERSConventions.IERS_2010, true)));
166
167 final String fileName = "corrupted-bad-data-gpt2_5.grd";
168 try {
169 new GlobalPressureTemperature2Model(fileName, latitude, longitude, geoid);
170 Assert.fail("An exception should have been thrown");
171 } catch (OrekitException oe) {
172 Assert.assertEquals(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE, oe.getSpecifier());
173 Assert.assertEquals(6, ((Integer) oe.getParts()[0]).intValue());
174 Assert.assertTrue(((String) oe.getParts()[1]).endsWith(fileName));
175 }
176
177 }
178
179 @Test
180 public void testCorruptedIrregularGrid() {
181
182 Utils.setDataRoot("regular-data:potential:gpt2-grid");
183 GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim4s4_gr", true));
184
185 final double latitude = FastMath.toRadians(14.0);
186 final double longitude = FastMath.toRadians(68.5);
187
188
189 final Geoid geoid = new Geoid(GravityFieldFactory.getNormalizedProvider(12, 12),
190 ReferenceEllipsoid.getWgs84(FramesFactory.getITRF(IERSConventions.IERS_2010, true)));
191
192 final String fileName = "corrupted-irregular-grid-gpt2_5.grd";
193 try {
194 new GlobalPressureTemperature2Model(fileName, latitude, longitude, geoid);
195 Assert.fail("An exception should have been thrown");
196 } catch (OrekitException oe) {
197 Assert.assertEquals(OrekitMessages.IRREGULAR_OR_INCOMPLETE_GRID, oe.getSpecifier());
198 Assert.assertTrue(((String) oe.getParts()[0]).endsWith(fileName));
199 }
200
201 }
202
203 }