1   /* Copyright 2022-2026 Luc Maisonobe
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.files.rinex.navigation;
18  
19  import org.orekit.utils.units.Unit;
20  
21  /** Container for data contained in several ionosphere messages.
22   * @author Luc Maisonobe
23   * @since 14.0
24   */
25  public class IonosphereAij {
26  
27      /** Converter for Nequick-G aᵢ₀ parameter. */
28      public static final Unit SFU = Unit.SOLAR_FLUX_UNIT;
29  
30      /** Converter for Nequick-G aᵢ₁ parameter. */
31      public static final Unit SFU_PER_DEG = SFU.divide("sfu/deg", Unit.DEGREE);
32  
33      /** Converter for Nequick-G aᵢ₂ parameter. */
34      public static final Unit SFU_PER_DEG2 = SFU_PER_DEG.divide("sfu/deg²", Unit.DEGREE);
35  
36      /** aᵢ₀ (sfu). */
37      private double ai0;
38  
39      /** aᵢ₁ (sfu/rad). */
40      private double ai1;
41  
42      /** aᵢ₂ (sfu/rad²). */
43      private double ai2;
44  
45      /** Simple constructor. */
46      public IonosphereAij() {
47          // nothing to do
48      }
49  
50      /** Get aᵢ₀.
51       * <p>
52       * Beware Orekit uses SI units here.
53       * In order to retrieve the more traditional SFU, use
54       * {@code IonosphereNequickGMessage.SFU.fromSI(msg.getAi0())}
55       * </p>
56       * @return aᵢ₀ (W/m²/Hz)
57       * @see #SFU
58       */
59      public double getAi0() {
60          return ai0;
61      }
62  
63      /** Set aᵢ₀.
64       * <p>
65       * Beware Orekit uses SI units here.
66       * In order to use the more traditional SFU, use
67       * {@code msg.setAi0(IonosphereNequickGMessage.SFU.toSI(ai0))}
68       * </p>
69       * @param ai0 aᵢ₀ (W/m²/Hz)
70       * @see #SFU
71       */
72      public void setAi0(final double ai0) {
73          this.ai0 = ai0;
74      }
75  
76      /** Get aᵢ₁.
77       * <p>
78       * Beware Orekit uses SI units here.
79       * In order to retrieve the more traditional SFU/deg, use
80       * {@code IonosphereNequickGMessage.SFU_PAR_DEG.fromSI(msg.getAi1())}
81       * </p>
82       * @return aᵢ₁ (W/m²/Hz/rad)
83       * @see #SFU_PER_DEG
84       */
85      public double getAi1() {
86          return ai1;
87      }
88  
89      /** Set aᵢ₁.
90       * <p>
91       * Beware Orekit uses SI units here.
92       * In order to use the more traditional SFU/deg, use
93       * {@code msg.setAi1(IonosphereNequickGMessage.SFU_PER_DEG.toSI(ai1))}
94       * </p>
95       * @param ai1 aᵢ₁ (W/m²/Hz/rad)
96       * @see #SFU_PER_DEG
97       */
98      public void setAi1(final double ai1) {
99          this.ai1 = ai1;
100     }
101 
102     /** Get aᵢ₂.
103      * <p>
104      * Beware Orekit uses SI units here.
105      * In order to retrieve the more traditional SFU/deg², use
106      * {@code IonosphereNequickGMessage.SFU_PER_DEG_2.fromSI(msg.getAi2())}
107      * </p>
108      * @return aᵢ₂ (W/m²/Hz/rad²)
109      * @see #SFU_PER_DEG2
110      */
111     public double getAi2() {
112         return ai2;
113     }
114 
115     /** Set aᵢ₂.
116      * <p>
117      * Beware Orekit uses SI units here.
118      * In order to use the more traditional SFU/deg², use
119      * {@code msg.setAi2(IonosphereNequickGMessage.SFU_PER_DEG2.toSI(ai2))}
120      * </p>
121      * @param ai2 aᵢ₂ (W/m²/Hz/rad²)
122      * @see #SFU_PER_DEG2
123      */
124     public void setAi2(final double ai2) {
125         this.ai2 = ai2;
126     }
127 
128 }