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