1   /* Copyright 2002-2024 CS GROUP
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  
18  package org.orekit.files.ccsds.ndm.odm.ocm;
19  
20  import java.util.Collections;
21  import java.util.List;
22  
23  import org.orekit.bodies.CelestialBodies;
24  import org.orekit.files.ccsds.definitions.BodyFacade;
25  import org.orekit.files.ccsds.section.CommentsContainer;
26  import org.orekit.time.AbsoluteDate;
27  
28  /** Perturbation parameters.
29   * @author Luc Maisonobe
30   * @since 11.0
31   */
32  public class Perturbations extends CommentsContainer {
33  
34      /** Name of atmospheric model. */
35      private String atmosphericModel;
36  
37      /** Gravity model name. */
38      private String gravityModel;
39  
40      /** Degree of the gravity model. */
41      private int gravityDegree;
42  
43      /** Order of the gravity model. */
44      private int gravityOrder;
45  
46      /** Oblate spheroid equatorial radius of central body. */
47      private double equatorialRadius;
48  
49      /** Gravitational coefficient of attracting body. */
50      private double gm;
51  
52      /** N-body perturbation bodies. */
53      private List<BodyFacade> nBodyPerturbations;
54  
55      /** Central body angular rotation rate. */
56      private double centralBodyRotation;
57  
58      /** Central body oblate spheroid oblateness. */
59      private double oblateFlattening;
60  
61      /** Ocean tides model. */
62      private String oceanTidesModel;
63  
64      /** Solid tides model. */
65      private String solidTidesModel;
66  
67      /** Reduction theory used for precession and nutation modeling. */
68      private String reductionTheory;
69  
70      /** Albedo model. */
71      private String albedoModel;
72  
73      /** Albedo grid size. */
74      private int albedoGridSize;
75  
76      /** Shadow model used for solar radiation pressure. */
77      private ShadowModel shadowModel;
78  
79      /** Celestial bodies casting shadow. */
80      private List<BodyFacade> shadowBodies;
81  
82      /** Solar Radiation Pressure model. */
83      private String srpModel;
84  
85      /** Space Weather data source. */
86      private String spaceWeatherSource;
87  
88      /** Epoch of the Space Weather data. */
89      private AbsoluteDate spaceWeatherEpoch;
90  
91      /** Interpolation method for Space Weather data. */
92      private String interpMethodSW;
93  
94      /** Fixed (time invariant) value of the planetary 3-hour-range geomagnetic index Kₚ. */
95      private double fixedGeomagneticKp;
96  
97      /** Fixed (time invariant) value of the planetary 3-hour-range geomagnetic index aₚ. */
98      private double fixedGeomagneticAp;
99  
100     /** Fixed (time invariant) value of the planetary 1-hour-range geomagnetic index Dst. */
101     private double fixedGeomagneticDst;
102 
103     /** Fixed (time invariant) value of the Solar Flux Unit daily proxy F10.7. */
104     private double fixedF10P7;
105 
106     /** Fixed (time invariant) value of the Solar Flux Unit 81-day running center-average proxy F10.7. */
107     private double fixedF10P7Mean;
108 
109     /** Fixed (time invariant) value of the Solar Flux daily proxy M10.7. */
110     private double fixedM10P7;
111 
112     /** Fixed (time invariant) value of the Solar Flux 81-day running center-average proxy M10.7. */
113     private double fixedM10P7Mean;
114 
115     /** Fixed (time invariant) value of the Solar Flux daily proxy S10.7. */
116     private double fixedS10P7;
117 
118     /** Fixed (time invariant) value of the Solar Flux 81-day running center-average proxy S10.7. */
119     private double fixedS10P7Mean;
120 
121     /** Fixed (time invariant) value of the Solar Flux daily proxy Y10.7. */
122     private double fixedY10P7;
123 
124     /** Fixed (time invariant) value of the Solar Flux 81-day running center-average proxy Y10.7. */
125     private double fixedY10P7Mean;
126 
127     /** Simple constructor.
128      * @param celestialBodies factory for celestial bodies
129      */
130     public Perturbations(final CelestialBodies celestialBodies) {
131         // we don't call the setXxx() methods in order to avoid
132         // calling refuseFurtherComments as a side effect
133         equatorialRadius    = Double.NaN;
134         gm                  = Double.NaN;
135         centralBodyRotation = Double.NaN;
136         oblateFlattening    = Double.NaN;
137         fixedGeomagneticKp  = Double.NaN;
138         fixedGeomagneticAp  = Double.NaN;
139         fixedGeomagneticDst = Double.NaN;
140         fixedF10P7          = Double.NaN;
141         fixedF10P7Mean      = Double.NaN;
142         fixedM10P7          = Double.NaN;
143         fixedM10P7Mean      = Double.NaN;
144         fixedS10P7          = Double.NaN;
145         fixedS10P7Mean      = Double.NaN;
146         fixedY10P7          = Double.NaN;
147         fixedY10P7Mean      = Double.NaN;
148         shadowBodies = Collections.singletonList(new BodyFacade(celestialBodies.getEarth().getName(),
149                                                                 celestialBodies.getEarth()));
150     }
151 
152     /** Get name of atmospheric model.
153      * @return name of atmospheric model
154      */
155     public String getAtmosphericModel() {
156         return atmosphericModel;
157     }
158 
159     /** Set name of atmospheric model.
160      * @param atmosphericModel name of atmospheric model
161      */
162     public void setAtmosphericModel(final String atmosphericModel) {
163         this.atmosphericModel = atmosphericModel;
164     }
165 
166     /** Get gravity model name.
167      * @return gravity model name
168      */
169     public String getGravityModel() {
170         return gravityModel;
171     }
172 
173     /** Get degree of the gravity model.
174      * @return degree of the gravity model
175      */
176     public int getGravityDegree() {
177         return gravityDegree;
178     }
179 
180     /** Get order of the gravity model.
181      * @return order of the gravity model
182      */
183     public int getGravityOrder() {
184         return gravityOrder;
185     }
186 
187     /** Set gravity model.
188      * @param name name of the model
189      * @param degree degree of the model
190      * @param order order of the model
191      */
192     public void setGravityModel(final String name, final int degree, final int order) {
193         this.gravityModel  = name;
194         this.gravityDegree = degree;
195         this.gravityOrder  = order;
196     }
197 
198     /** Get oblate spheroid equatorial radius of central body.
199      * @return oblate spheroid equatorial radius of central body
200      */
201     public double getEquatorialRadius() {
202         return equatorialRadius;
203     }
204 
205     /** Set oblate spheroid equatorial radius of central body.
206      * @param equatorialRadius oblate spheroid equatorial radius of central body
207      */
208     public void setEquatorialRadius(final double equatorialRadius) {
209         this.equatorialRadius = equatorialRadius;
210     }
211 
212     /** Get gravitational coefficient of attracting body.
213      * @return gravitational coefficient of attracting body
214      */
215     public double getGm() {
216         return gm;
217     }
218 
219     /** Set gravitational coefficient of attracting body.
220      * @param gm gravitational coefficient of attracting body
221      */
222     public void setGm(final double gm) {
223         this.gm = gm;
224     }
225 
226     /** Get n-body perturbation bodies.
227      * @return n-body perturbation bodies
228      */
229     public List<BodyFacade> getNBodyPerturbations() {
230         return nBodyPerturbations;
231     }
232 
233     /** Set n-body perturbation bodies.
234      * @param nBody n-body perturbation bodies
235      */
236     public void setNBodyPerturbations(final List<BodyFacade> nBody) {
237         this.nBodyPerturbations = nBody;
238     }
239 
240     /** Get central body angular rotation rate.
241      * @return central body angular rotation rate
242      */
243     public double getCentralBodyRotation() {
244         return centralBodyRotation;
245     }
246 
247     /** Set central body angular rotation rate.
248      * @param centralBodyRotation central body angular rotation rate
249      */
250     public void setCentralBodyRotation(final double centralBodyRotation) {
251         this.centralBodyRotation = centralBodyRotation;
252     }
253 
254     /** Get central body oblate spheroid oblateness.
255      * @return central body oblate spheroid oblateness
256      */
257     public double getOblateFlattening() {
258         return oblateFlattening;
259     }
260 
261     /** Set central body oblate spheroid oblateness.
262      * @param oblateFlattening central body oblate spheroid oblateness
263      */
264     public void setOblateFlattening(final double oblateFlattening) {
265         this.oblateFlattening = oblateFlattening;
266     }
267 
268     /** Get ocean tides model.
269      * @return ocean tides model
270      */
271     public String getOceanTidesModel() {
272         return oceanTidesModel;
273     }
274 
275     /** Set ocean tides model.
276      * @param oceanTidesModel ocean tides model
277      */
278     public void setOceanTidesModel(final String oceanTidesModel) {
279         this.oceanTidesModel = oceanTidesModel;
280     }
281 
282     /** Get solid tides model.
283      * @return solid tides model
284      */
285     public String getSolidTidesModel() {
286         return solidTidesModel;
287     }
288 
289     /** Set solid tides model.
290      * @param solidTidesModel solid tides model
291      */
292     public void setSolidTidesModel(final String solidTidesModel) {
293         this.solidTidesModel = solidTidesModel;
294     }
295 
296     /** Get reduction theory used for precession and nutation modeling.
297      * @return reduction theory used for precession and nutation modeling
298      */
299     public String getReductionTheory() {
300         return reductionTheory;
301     }
302 
303     /** Set reduction theory used for precession and nutation modeling.
304      * @param reductionTheory reduction theory used for precession and nutation modeling
305      */
306     public void setReductionTheory(final String reductionTheory) {
307         this.reductionTheory = reductionTheory;
308     }
309 
310     /** Get albedo model.
311      * @return albedo model
312      */
313     public String getAlbedoModel() {
314         return albedoModel;
315     }
316 
317     /** Set albedo model.
318      * @param albedoModel albedo model
319      */
320     public void setAlbedoModel(final String albedoModel) {
321         this.albedoModel = albedoModel;
322     }
323 
324     /** Get albedo grid size.
325      * @return albedo grid size
326      */
327     public int getAlbedoGridSize() {
328         return albedoGridSize;
329     }
330 
331     /** Set albedo grid size.
332      * @param albedoGridSize albedo grid size
333      */
334     public void setAlbedoGridSize(final int albedoGridSize) {
335         this.albedoGridSize = albedoGridSize;
336     }
337 
338     /** Get shadow model used for solar radiation pressure.
339      * @return shadow model used for solar radiation pressure
340      */
341     public ShadowModel getShadowModel() {
342         return shadowModel;
343     }
344 
345     /** Set shadow model used for solar radiation pressure.
346      * @param shadowModel shadow model used for solar radiation pressure
347      */
348     public void setShadowModel(final ShadowModel shadowModel) {
349         this.shadowModel = shadowModel;
350     }
351 
352     /** Get celestial bodies casting shadows.
353      * @return celestial bodies casting shadows
354      */
355     public List<BodyFacade> getShadowBodies() {
356         return shadowBodies;
357     }
358 
359     /** Set celestial bodies casting shadows.
360      * @param shadowBodies celestial bodies casting shadows
361      */
362     public void setShadowBodies(final List<BodyFacade> shadowBodies) {
363         this.shadowBodies = shadowBodies;
364     }
365 
366     /** Get Solar Radiation Pressure model.
367      * @return Solar Radiation Pressure model
368      */
369     public String getSrpModel() {
370         return srpModel;
371     }
372 
373     /** Set Solar Radiation Pressure model.
374      * @param srpModel Solar Radiation Pressure model
375      */
376     public void setSrpModel(final String srpModel) {
377         this.srpModel = srpModel;
378     }
379 
380     /** Get Space Weather data source.
381      * @return Space Weather data source
382      */
383     public String getSpaceWeatherSource() {
384         return spaceWeatherSource;
385     }
386 
387     /** Set Space Weather data source.
388      * @param spaceWeatherSource Space Weather data source
389      */
390     public void setSpaceWeatherSource(final String spaceWeatherSource) {
391         this.spaceWeatherSource = spaceWeatherSource;
392     }
393 
394     /** Get epoch of the Space Weather data.
395      * @return epoch of the Space Weather data
396      */
397     public AbsoluteDate getSpaceWeatherEpoch() {
398         return spaceWeatherEpoch;
399     }
400 
401     /** Set epoch of the Space Weather data.
402      * @param spaceWeatherEpoch epoch of the Space Weather data
403      */
404     public void setSpaceWeatherEpoch(final AbsoluteDate spaceWeatherEpoch) {
405         this.spaceWeatherEpoch = spaceWeatherEpoch;
406     }
407 
408     /** Get the interpolation method for Space Weather data.
409      * @return interpolation method for Space Weather data
410      */
411     public String getInterpMethodSW() {
412         return interpMethodSW;
413     }
414 
415     /** Set the interpolation method for Space Weather data.
416      * @param interpMethodSW interpolation method for Space Weather data
417      */
418     public void setInterpMethodSW(final String interpMethodSW) {
419         refuseFurtherComments();
420         this.interpMethodSW = interpMethodSW;
421     }
422 
423     /** Get fixed (time invariant) value of the planetary 3-hour-range geomagnetic index Kₚ.
424      * @return fixed (time invariant) value of the planetary 3-hour-range geomagnetic index Kₚ
425      */
426     public double getFixedGeomagneticKp() {
427         return fixedGeomagneticKp;
428     }
429 
430     /** Set fixed (time invariant) value of the planetary 3-hour-range geomagnetic index Kₚ.
431      * @param fixedGeomagneticKp fixed (time invariant) value of the planetary 3-hour-range geomagnetic index Kₚ
432      */
433     public void setFixedGeomagneticKp(final double fixedGeomagneticKp) {
434         this.fixedGeomagneticKp = fixedGeomagneticKp;
435     }
436 
437     /** Get fixed (time invariant) value of the planetary 3-hour-range geomagnetic index aₚ.
438      * @return fixed (time invariant) value of the planetary 3-hour-range geomagnetic index aₚ
439      */
440     public double getFixedGeomagneticAp() {
441         return fixedGeomagneticAp;
442     }
443 
444     /** Set fixed (time invariant) value of the planetary 3-hour-range geomagnetic index aₚ.
445      * @param fixedGeomagneticAp fixed (time invariant) value of the planetary 3-hour-range geomagnetic index aₚ
446      */
447     public void setFixedGeomagneticAp(final double fixedGeomagneticAp) {
448         this.fixedGeomagneticAp = fixedGeomagneticAp;
449     }
450 
451     /** Get fixed (time invariant) value of the planetary 1-hour-range geomagnetic index Dst.
452      * @return fixed (time invariant) value of the planetary 1-hour-range geomagnetic index Dst
453      */
454     public double getFixedGeomagneticDst() {
455         return fixedGeomagneticDst;
456     }
457 
458     /** Set fixed (time invariant) value of the planetary 1-hour-range geomagnetic index Dst.
459      * @param fixedGeomagneticDst fixed (time invariant) value of the planetary 1-hour-range geomagnetic index Dst
460      */
461     public void setFixedGeomagneticDst(final double fixedGeomagneticDst) {
462         this.fixedGeomagneticDst = fixedGeomagneticDst;
463     }
464 
465     /** Get fixed (time invariant) value of the Solar Flux Unit daily proxy F10.7.
466      * @return fixed (time invariant) value of the Solar Flux Unit daily proxy F10.7
467      */
468     public double getFixedF10P7() {
469         return fixedF10P7;
470     }
471 
472     /** Set fixed (time invariant) value of the Solar Flux Unit daily proxy F10.7.
473      * @param fixedF10P7 fixed (time invariant) value of the Solar Flux Unit daily proxy F10.7
474      */
475     public void setFixedF10P7(final double fixedF10P7) {
476         this.fixedF10P7 = fixedF10P7;
477     }
478 
479     /** Get fixed (time invariant) value of the Solar Flux Unit 81-day running center-average proxy F10.7.
480      * @return fixed (time invariant) value of the Solar Flux Unit 81-day running center-average proxy F10.7
481      */
482     public double getFixedF10P7Mean() {
483         return fixedF10P7Mean;
484     }
485 
486     /** Set fixed (time invariant) value of the Solar Flux Unit 81-day running center-average proxy F10.7.
487      * @param fixedF10P7Mean fixed (time invariant) value of the Solar Flux Unit 81-day running center-average proxy F10.7
488      */
489     public void setFixedF10P7Mean(final double fixedF10P7Mean) {
490         this.fixedF10P7Mean = fixedF10P7Mean;
491     }
492 
493     /** Get fixed (time invariant) value of the Solar Flux daily proxy M10.7.
494      * @return fixed (time invariant) value of the Solar Flux daily proxy M10.7
495      */
496     public double getFixedM10P7() {
497         return fixedM10P7;
498     }
499 
500     /** Set fixed (time invariant) value of the Solar Flux daily proxy M10.7.
501      * @param fixedM10P7 fixed (time invariant) value of the Solar Flux daily proxy M10.7
502      */
503     public void setFixedM10P7(final double fixedM10P7) {
504         this.fixedM10P7 = fixedM10P7;
505     }
506 
507     /** Get fixed (time invariant) value of the Solar Flux 81-day running center-average proxy M10.7.
508      * @return fixed (time invariant) value of the Solar Flux 81-day running center-average proxy M10.7
509      */
510     public double getFixedM10P7Mean() {
511         return fixedM10P7Mean;
512     }
513 
514     /** Set fixed (time invariant) value of the Solar Flux 81-day running center-average proxy M10.7.
515      * @param fixedM10P7Mean fixed (time invariant) value of the Solar Flux 81-day running center-average proxy M10.7
516      */
517     public void setFixedM10P7Mean(final double fixedM10P7Mean) {
518         this.fixedM10P7Mean = fixedM10P7Mean;
519     }
520 
521     /** Get fixed (time invariant) value of the Solar Flux daily proxy S10.7.
522      * @return fixed (time invariant) value of the Solar Flux daily proxy S10.7
523      */
524     public double getFixedS10P7() {
525         return fixedS10P7;
526     }
527 
528     /** Set fixed (time invariant) value of the Solar Flux daily proxy S10.7.
529      * @param fixedS10P7 fixed (time invariant) value of the Solar Flux daily proxy S10.7
530      */
531     public void setFixedS10P7(final double fixedS10P7) {
532         this.fixedS10P7 = fixedS10P7;
533     }
534 
535     /** Get fixed (time invariant) value of the Solar Flux 81-day running center-average proxy S10.7.
536      * @return fixed (time invariant) value of the Solar Flux 81-day running center-average proxy S10.7
537      */
538     public double getFixedS10P7Mean() {
539         return fixedS10P7Mean;
540     }
541 
542     /** Set fixed (time invariant) value of the Solar Flux 81-day running center-average proxy S10.7.
543      * @param fixedS10P7Mean fixed (time invariant) value of the Solar Flux 81-day running center-average proxy S10.7
544      */
545     public void setFixedS10P7Mean(final double fixedS10P7Mean) {
546         this.fixedS10P7Mean = fixedS10P7Mean;
547     }
548 
549     /** Get fixed (time invariant) value of the Solar Flux daily proxy Y10.7.
550      * @return fixed (time invariant) value of the Solar Flux daily proxy Y10.7
551      */
552     public double getFixedY10P7() {
553         return fixedY10P7;
554     }
555 
556     /** Set fixed (time invariant) value of the Solar Flux daily proxy Y10.7.
557      * @param fixedY10P7 fixed (time invariant) value of the Solar Flux daily proxy Y10.7
558      */
559     public void setFixedY10P7(final double fixedY10P7) {
560         this.fixedY10P7 = fixedY10P7;
561     }
562 
563     /** Get fixed (time invariant) value of the Solar Flux 81-day running center-average proxy Y10.7.
564      * @return fixed (time invariant) value of the Solar Flux 81-day running center-average proxy Y10.7
565      */
566     public double getFixedY10P7Mean() {
567         return fixedY10P7Mean;
568     }
569 
570     /** Set fixed (time invariant) value of the Solar Flux 81-day running center-average proxy Y10.7.
571      * @param fixedY10P7Mean fixed (time invariant) value of the Solar Flux 81-day running center-average proxy Y10.7
572      */
573     public void setFixedY10P7Mean(final double fixedY10P7Mean) {
574         this.fixedY10P7Mean = fixedY10P7Mean;
575     }
576 
577 }