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