1   /* Copyright 2022-2025 Thales Alenia Space
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.troposphere.iturp834;
18  
19  import org.hipparchus.util.Binary64Field;
20  import org.junit.jupiter.api.Test;
21  import org.orekit.data.DataContext;
22  import org.orekit.data.DataSource;
23  import org.orekit.models.earth.troposphere.AbstractPathDelayTest;
24  import org.orekit.models.earth.troposphere.CanonicalSaastamoinenModel;
25  import org.orekit.models.earth.troposphere.ConstantAzimuthalGradientProvider;
26  import org.orekit.models.earth.troposphere.ConstantViennaAProvider;
27  import org.orekit.models.earth.troposphere.ModifiedSaastamoinenModel;
28  import org.orekit.models.earth.troposphere.TroposphericModelUtils;
29  import org.orekit.models.earth.troposphere.ViennaACoefficients;
30  import org.orekit.models.earth.troposphere.ViennaOne;
31  import org.orekit.models.earth.troposphere.ViennaThree;
32  import org.orekit.models.earth.weather.GlobalPressureTemperature2;
33  import org.orekit.models.earth.weather.PressureTemperatureHumidityProvider;
34  import org.orekit.time.TimeScale;
35  import org.orekit.time.TimeScalesFactory;
36  
37  import java.io.IOException;
38  import java.net.URISyntaxException;
39  import java.net.URL;
40  
41  public class ITURP834PathDelayTest extends AbstractPathDelayTest<ITURP834PathDelay> {
42  
43      protected ITURP834PathDelay buildTroposphericModel(final PressureTemperatureHumidityProvider provider) {
44          return new ITURP834PathDelay(provider, TimeScalesFactory.getUTC());
45      }
46  
47      @Test
48      @Override
49      public void testDelay() {
50          doTestDelay(defaultDate, defaultPoint, defaultTrackingCoordinates,
51                      new ITURP834WeatherParametersProvider(TimeScalesFactory.getUTC()),
52                      2.07738, 0.05483, 3.36742, 0.088969, 3.456389);
53      }
54  
55      @Test
56      @Override
57      public void testFieldDelay() {
58          doTestDelay(Binary64Field.getInstance(),
59                      defaultDate, defaultPoint, defaultTrackingCoordinates,
60                      new ITURP834WeatherParametersProvider(TimeScalesFactory.getUTC()),
61                      2.07738, 0.05483, 3.36742, 0.088969, 3.456389);
62      }
63  
64      @Test
65      @Override
66      public void testFixedHeight() {
67          doTestFixedHeight(new ITURP834WeatherParametersProvider(TimeScalesFactory.getUTC()));
68      }
69  
70      @Test
71      @Override
72      public void testFieldFixedHeight() {
73          doTestFieldFixedHeight(Binary64Field.getInstance(),
74                                 new ITURP834WeatherParametersProvider(TimeScalesFactory.getUTC()));
75      }
76  
77      @Test
78      @Override
79      public void testFixedElevation() {
80          doTestFixedElevation(new ITURP834WeatherParametersProvider(TimeScalesFactory.getUTC()));
81      }
82  
83      @Test
84      @Override
85      public void testFieldFixedElevation() {
86          doTestFieldFixedElevation(Binary64Field.getInstance(),
87                                    new ITURP834WeatherParametersProvider(TimeScalesFactory.getUTC()));
88      }
89  
90      @Test
91      public void testVsVienna1WithCanonicalSaastamoinenAndGPT2() throws IOException, URISyntaxException {
92          final TimeScale utc = TimeScalesFactory.getUTC();
93          final URL url = ITURP834PathDelayTest.class.getClassLoader().getResource("gpt-grid/gpt2_5.grd");
94          final PressureTemperatureHumidityProvider gpt2 = new GlobalPressureTemperature2(new DataSource(url.toURI()),
95                                                                                          DataContext.getDefault().getTimeScales());
96          doTestVsOtherModel(new ViennaOne(new ConstantViennaAProvider(new ViennaACoefficients(0.00127683, 0.00060955)),
97                                           new ConstantAzimuthalGradientProvider(null),
98                                           new CanonicalSaastamoinenModel(gpt2),
99                                           utc),
100                            buildTroposphericModel(new ITURP834WeatherParametersProvider(TimeScalesFactory.getUTC())),
101                            0.017, 0.019, 0.144, 0.191);
102     }
103 
104     @Test
105     public void testVsVienna3WithModifiedSaastamoinenAndGPT3() {
106         final TimeScale utc = TimeScalesFactory.getUTC();
107         doTestVsOtherModel(new ViennaThree(new ConstantViennaAProvider(new ViennaACoefficients(0.00127683, 0.00060955)),
108                                            new ConstantAzimuthalGradientProvider(null),
109                                            new ModifiedSaastamoinenModel(TroposphericModelUtils.STANDARD_ATMOSPHERE_PROVIDER),
110                                            utc),
111                            buildTroposphericModel(new ITURP834WeatherParametersProvider(TimeScalesFactory.getUTC())),
112                            0.017, 0.008, 0.098, 0.076);
113     }
114 
115 }