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