1   /* Copyright 2002-2026 Airbus Defence and 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    * Airbus Defence and Space 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.propagation.analytical.intelsat;
18  
19  import org.hipparchus.CalculusFieldElement;
20  import org.orekit.time.FieldAbsoluteDate;
21  
22  /**
23   * This class is a container for a single set of Intelsat's 11 Elements data.
24   * <p>
25   * Intelsat's 11 elements are defined in ITU-R S.1525 standard.
26   * </p>
27   *
28   * @param <T> type of the field elements
29   * @author Bryan Cazabonne
30   * @since 12.1
31   */
32  public class FieldIntelsatElevenElements<T extends CalculusFieldElement<T>> {
33  
34      /**
35       * Elements epoch.
36       */
37      private final FieldAbsoluteDate<T> epoch;
38  
39      /**
40       * Mean longitude (East of Greenwich).
41       */
42      private final T lm0;
43  
44      /**
45       * Drift rate.
46       */
47      private final T lm1;
48  
49      /**
50       * Drift acceleration.
51       */
52      private final T lm2;
53  
54      /**
55       * Longitude oscillation-amplitude for the cosine term.
56       */
57      private final T lonC;
58  
59      /**
60       * Rate of change of longitude, for the cosine term.
61       */
62      private final T lonC1;
63  
64      /**
65       * Longitude oscillation-amplitude for the sine term.
66       */
67      private final T lonS;
68  
69      /**
70       * Rate of change of longitude, for the sine term.
71       */
72      private final T lonS1;
73  
74      /**
75       * Latitude oscillation-amplitude for the cosine term.
76       */
77      private final T latC;
78  
79      /**
80       * Rate of change of latitude, for the cosine term.
81       */
82      private final T latC1;
83  
84      /**
85       * Latitude oscillation-amplitude for the sine term.
86       */
87      private final T latS;
88  
89      /**
90       * Rate of change of latitude, for the sine term.
91       */
92      private final T latS1;
93  
94      /**
95       * Constructor.
96       *
97       * @param epoch elements epoch
98       * @param lm0   mean longitude (East of Greenwich) in degrees
99       * @param lm1   drift rate in degrees/day
100      * @param lm2   drift acceleration in degrees/day/day
101      * @param lonC  longitude oscillation-amplitude for the cosine term in degrees
102      * @param lonC1 rate of change of longitude, for the cosine term, in degrees/day
103      * @param lonS  longitude oscillation-amplitude for the sine term in degrees
104      * @param lonS1 rate of change of longitude, for the sine term, in degrees/day
105      * @param latC  latitude oscillation-amplitude for the cosine term in degrees
106      * @param latC1 rate of change of latitude, for the cosine term, in degrees/day
107      * @param latS  latitude oscillation-amplitude for the sine term in degrees
108      * @param latS1 rate of change of latitude, for the sine term, in degrees/day
109      */
110     public FieldIntelsatElevenElements(final FieldAbsoluteDate<T> epoch, final T lm0, final T lm1, final T lm2, final T lonC, final T lonC1, final T lonS, final T lonS1,
111                                        final T latC, final T latC1, final T latS, final T latS1) {
112         this.epoch = epoch;
113         this.lm0 = lm0;
114         this.lm1 = lm1;
115         this.lm2 = lm2;
116         this.lonC = lonC;
117         this.lonC1 = lonC1;
118         this.lonS = lonS;
119         this.lonS1 = lonS1;
120         this.latC = latC;
121         this.latC1 = latC1;
122         this.latS = latS;
123         this.latS1 = latS1;
124     }
125 
126     /**
127      * Get the elements epoch.
128      *
129      * @return elements epoch
130      */
131     public FieldAbsoluteDate<T> getEpoch() {
132         return epoch;
133     }
134 
135     /**
136      * Get the mean longitude (East of Greenwich).
137      *
138      * @return the mean longitude (East of Greenwich) in degrees
139      */
140     public T getLm0() {
141         return lm0;
142     }
143 
144     /**
145      * Get the drift rate.
146      *
147      * @return the drift rate in degrees/day
148      */
149     public T getLm1() {
150         return lm1;
151     }
152 
153     /**
154      * Get the drift acceleration.
155      *
156      * @return the drift acceleration in degrees/day/day
157      */
158     public T getLm2() {
159         return lm2;
160     }
161 
162     /**
163      * Get the longitude oscillation-amplitude for the cosine term.
164      *
165      * @return the longitude oscillation-amplitude for the cosine term in degrees
166      */
167     public T getLonC() {
168         return lonC;
169     }
170 
171     /**
172      * Get the rate of change of longitude, for the cosine term.
173      *
174      * @return the rate of change of longitude, for the cosine term, in degrees/day
175      */
176     public T getLonC1() {
177         return lonC1;
178     }
179 
180     /**
181      * Get the longitude oscillation-amplitude for the sine term.
182      *
183      * @return the longitude oscillation-amplitude for the sine term in degrees
184      */
185     public T getLonS() {
186         return lonS;
187     }
188 
189     /**
190      * Get the rate of change of longitude, for the sine term.
191      *
192      * @return the rate of change of longitude, for the sine term, in degrees/day
193      */
194     public T getLonS1() {
195         return lonS1;
196     }
197 
198     /**
199      * Get the latitude oscillation-amplitude for the cosine term.
200      *
201      * @return the latitude oscillation-amplitude for the cosine term in degrees
202      */
203     public T getLatC() {
204         return latC;
205     }
206 
207     /**
208      * Get the rate of change of latitude, for the cosine term.
209      *
210      * @return the rate of change of latitude, for the cosine term, in degrees/day
211      */
212     public T getLatC1() {
213         return latC1;
214     }
215 
216     /**
217      * Get the latitude oscillation-amplitude for the sine term.
218      *
219      * @return the latitude oscillation-amplitude for the sine term in degrees
220      */
221     public T getLatS() {
222         return latS;
223     }
224 
225     /**
226      * Get the rate of change of latitude, for the sine term.
227      *
228      * @return the rate of change of latitude, for the sine term, in degrees/day
229      */
230     public T getLatS1() {
231         return latS1;
232     }
233 }