1   /* Copyright 2002-2024 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.models.earth.weather;
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.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  @Deprecated
35  public class GlobalPressureTemperature2ModelTest {
36  
37      private static double epsilon = 1.0e-12;
38  
39      @Test
40      public void testProvidedParameters() {
41  
42          Utils.setDataRoot("regular-data:potential:gpt-grid");
43          GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim4s4_gr", true));
44  
45          // Site Vienna: latitude:  48.20°N
46          //              longitude: 16.37°E
47          //              height:    156 m
48          //
49          // Date: 2 August 2012
50          //
51          // Expected outputs are given by the Department of Geodesy and Geoinformation of the Vienna University.
52          // Expected parameters : temperature -> 22.12 °C
53          //                       pressure    -> 1002.56 hPa
54          //                       e           -> 15.63 hPa
55          //                       ah          -> 0.0012647
56          //                       aw          -> 0.0005726
57          //
58          // We test the fiability of our implementation by comparing our output values with
59          // the ones obtained by the Vienna University.
60  
61          final double latitude  = FastMath.toRadians(48.20);
62          final double longitude = FastMath.toRadians(16.37);
63          final double height    = 156.0;
64          final AbsoluteDate date = AbsoluteDate.createMJDDate(56141, 0.0, TimeScalesFactory.getUTC());
65          final Geoid geoid = new Geoid(GravityFieldFactory.getNormalizedProvider(12, 12),
66                                        ReferenceEllipsoid.getWgs84(FramesFactory.getITRF(IERSConventions.IERS_2010, true)));
67          final GlobalPressureTemperature2Model model =
68                          new GlobalPressureTemperature2Model("gpt2_5_extract.grd", latitude, longitude, geoid);
69  
70          model.weatherParameters(height, date);
71  
72          final double a[]         = model.getA();
73          final double temperature = model.getTemperature() - 273.15;
74          final double pressure    = model.getPressure();
75          final double e           = model.getWaterVaporPressure();
76  
77          Assertions.assertEquals(22.12,     temperature, 2.3e-1);
78          Assertions.assertEquals(1002.56,   pressure,    7.4e-1);
79          Assertions.assertEquals(0.0012647, a[0],        1.1e-7);
80          Assertions.assertEquals(0.0005726, a[1],        8.6e-8);
81          Assertions.assertEquals(15.63,     e,           5.0e-2);
82  
83      }
84  
85      @Test
86      public void testEquality() {
87  
88          Utils.setDataRoot("regular-data:potential:gpt-grid");
89          GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim4s4_gr", true));
90  
91          // Commons parameters
92          final Geoid geoid = new Geoid(GravityFieldFactory.getNormalizedProvider(12, 12),
93                                        ReferenceEllipsoid.getWgs84(FramesFactory.getITRF(IERSConventions.IERS_2010, true)));
94  
95          final AbsoluteDate date = AbsoluteDate.createMJDDate(56141, 0.0, TimeScalesFactory.getUTC());
96          final double latitude   = FastMath.toRadians(45.0);
97          final double height     = 0.0;
98  
99          double longitude1;
100         GlobalPressureTemperature2Model model1;
101 
102         double longitude2;
103         GlobalPressureTemperature2Model model2;
104 
105         // Test longitude = 181° and longitude = -179°
106         longitude1 = FastMath.toRadians(181.0);
107         longitude2 = FastMath.toRadians(-179.0);
108 
109         model1 = new GlobalPressureTemperature2Model(latitude, longitude1, geoid);
110         model2 = new GlobalPressureTemperature2Model(latitude, longitude2, geoid);
111 
112         model1.weatherParameters(height, date);
113         model2.weatherParameters(height, date);
114 
115         Assertions.assertEquals(model1.getTemperature(),        model2.getTemperature(),        epsilon);
116         Assertions.assertEquals(model1.getPressure(),           model2.getPressure(),           epsilon);
117         Assertions.assertEquals(model1.getWaterVaporPressure(), model2.getWaterVaporPressure(), epsilon);
118         Assertions.assertEquals(model1.getA()[0],               model2.getA()[0],               epsilon);
119         Assertions.assertEquals(model1.getA()[1],               model2.getA()[1],               epsilon);
120 
121         // Test longitude = 180° and longitude = -180°
122         longitude1 = FastMath.toRadians(180.0);
123         longitude2 = FastMath.toRadians(-180.0);
124 
125         model1 = new GlobalPressureTemperature2Model(latitude, longitude1, geoid);
126         model2 = new GlobalPressureTemperature2Model(latitude, longitude2, geoid);
127 
128         model1.weatherParameters(height, date);
129         model2.weatherParameters(height, date);
130 
131         Assertions.assertEquals(model1.getTemperature(),        model2.getTemperature(),        epsilon);
132         Assertions.assertEquals(model1.getPressure(),           model2.getPressure(),           epsilon);
133         Assertions.assertEquals(model1.getWaterVaporPressure(), model2.getWaterVaporPressure(), epsilon);
134         Assertions.assertEquals(model1.getA()[0],               model2.getA()[0],               epsilon);
135         Assertions.assertEquals(model1.getA()[1],               model2.getA()[1],               epsilon);
136 
137         // Test longitude = 0° and longitude = 360°
138         longitude1 = FastMath.toRadians(0.0);
139         longitude2 = FastMath.toRadians(360.0);
140 
141         model1 = new GlobalPressureTemperature2Model(latitude, longitude1, geoid);
142         model2 = new GlobalPressureTemperature2Model(latitude, longitude2, geoid);
143 
144         model1.weatherParameters(height, date);
145         model2.weatherParameters(height, date);
146 
147         Assertions.assertEquals(model1.getTemperature(),        model2.getTemperature(),        epsilon);
148         Assertions.assertEquals(model1.getPressure(),           model2.getPressure(),           epsilon);
149         Assertions.assertEquals(model1.getWaterVaporPressure(), model2.getWaterVaporPressure(), epsilon);
150         Assertions.assertEquals(model1.getA()[0],               model2.getA()[0],               epsilon);
151         Assertions.assertEquals(model1.getA()[1],               model2.getA()[1],               epsilon);
152 
153     }
154 
155     @Test
156     public void testCorruptedFileBadData() {
157 
158         Utils.setDataRoot("regular-data:potential:gpt-grid");
159         GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim4s4_gr", true));
160 
161         final double latitude  = FastMath.toRadians(14.0);
162         final double longitude = FastMath.toRadians(67.5);
163 
164         // Date is not used here
165         final Geoid geoid = new Geoid(GravityFieldFactory.getNormalizedProvider(12, 12),
166                                       ReferenceEllipsoid.getWgs84(FramesFactory.getITRF(IERSConventions.IERS_2010, true)));
167 
168         final String fileName = "corrupted-bad-data-gpt3_15.grd";
169         try {
170         new GlobalPressureTemperature2Model(fileName, latitude, longitude, geoid);
171             Assertions.fail("An exception should have been thrown");
172         } catch (OrekitException oe) {
173             Assertions.assertEquals(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE, oe.getSpecifier());
174             Assertions.assertEquals(6, ((Integer) oe.getParts()[0]).intValue());
175             Assertions.assertTrue(((String) oe.getParts()[1]).endsWith(fileName));
176         }
177 
178     }
179 
180     @Test
181     public void testCorruptedIrregularGrid() {
182 
183         Utils.setDataRoot("regular-data:potential:gpt-grid");
184         GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim4s4_gr", true));
185 
186         final double latitude  = FastMath.toRadians(14.0);
187         final double longitude = FastMath.toRadians(68.5);
188 
189         // Date is not used here
190         final Geoid geoid = new Geoid(GravityFieldFactory.getNormalizedProvider(12, 12),
191                                       ReferenceEllipsoid.getWgs84(FramesFactory.getITRF(IERSConventions.IERS_2010, true)));
192 
193         final String fileName = "corrupted-irregular-grid-gpt3_15.grd";
194         try {
195         new GlobalPressureTemperature2Model(fileName, latitude, longitude, geoid);
196             Assertions.fail("An exception should have been thrown");
197         } catch (OrekitException oe) {
198             Assertions.assertEquals(OrekitMessages.IRREGULAR_OR_INCOMPLETE_GRID, oe.getSpecifier());
199             Assertions.assertTrue(((String) oe.getParts()[0]).endsWith(fileName));
200         }
201 
202     }
203 
204 }