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 }