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 org.hipparchus.geometry.euclidean.threed.Vector3D;
21 import org.orekit.files.ccsds.definitions.OnOff;
22 import org.orekit.time.AbsoluteDate;
23 import org.orekit.time.TimeStamped;
24
25 /** Maneuver entry.
26 * @author Luc Maisonobe
27 * @since 11.0
28 */
29 public class OrbitManeuver implements TimeStamped {
30
31 /** Maneuver date. */
32 private AbsoluteDate date;
33
34 /** Duration. */
35 private double duration;
36
37 /** Mass change. */
38 private double deltaMass;
39
40 /** Acceleration. */
41 private double[] acceleration;
42
43 /** Interpolation mode between current and next acceleration line. */
44 private OnOff accelerationInterpolation;
45
46 /** One σ percent error on acceleration magnitude. */
47 private double accelerationMagnitudeSigma;
48
49 /** One σ angular off-nominal acceleration direction. */
50 private double accelerationDirectionSigma;
51
52 /** Velocity increment. */
53 private double[] dV;
54
55 /** One σ percent error on ΔV magnitude. */
56 private double dvMagSigma;
57
58 /** One σ angular off-nominal ΔV direction. */
59 private double dvDirSigma;
60
61 /** Thrust. */
62 private double[] thrust;
63
64 /** Thrust efficiency η typically between 0.0 and 1.0. */
65 private double thrustEfficiency;
66
67 /** Interpolation mode between current and next acceleration line. */
68 private OnOff thrustInterpolation;
69
70 /** Thrust specific impulse. */
71 private double thrustIsp;
72
73 /** One σ percent error on thrust magnitude. */
74 private double thrustMagnitudeSigma;
75
76 /** One σ angular off-nominal thrust direction. */
77 private double thrustDirectionSigma;
78
79 /** Identifier of resulting "child" object deployed from this host. */
80 private String deployId;
81
82 /** Velocity increment of deployed "child" object. */
83 private double[] deployDv;
84
85 /** Decrement in host mass as a result of deployment (shall be ≤ 0). */
86 private double deployMass;
87
88 /** One σ percent error on deployment ΔV magnitude. */
89 private double deployDvSigma;
90
91 /** One σ angular off-nominal deployment vector direction. */
92 private double deployDirSigma;
93
94 /** Ratio of child-to-host ΔV vectors. */
95 private double deployDvRatio;
96
97 /** Typical (50th percentile) product of drag coefficient times cross-sectional area of deployed "child" object. */
98 private double deployDvCda;
99
100 /** Build an uninitialized maneuver.
101 */
102 public OrbitManeuver() {
103 acceleration = new double[3];
104 dV = new double[3];
105 thrust = new double[3];
106 deployDv = new double[3];
107 }
108
109 /** {@inheritDoc} */
110 @Override
111 public AbsoluteDate getDate() {
112 return date;
113 }
114
115 /** Set date.
116 * @param date maneuver date
117 */
118 public void setDate(final AbsoluteDate date) {
119 this.date = date;
120 }
121
122 /** Get duration.
123 * @return duration
124 */
125 public double getDuration() {
126 return duration;
127 }
128
129 /** Set duration.
130 * @param duration duration
131 */
132 public void setDuration(final double duration) {
133 this.duration = duration;
134 }
135
136 /** Get mass change.
137 * @return mass change
138 */
139 public double getDeltaMass() {
140 return deltaMass;
141 }
142
143 /** Set mass change.
144 * @param deltaMass mass change
145 */
146 public void setDeltaMass(final double deltaMass) {
147 this.deltaMass = deltaMass;
148 }
149
150 /** Get acceleration.
151 * @return acceleration
152 */
153 public Vector3D getAcceleration() {
154 return new Vector3D(acceleration);
155 }
156
157 /** Set acceleration component.
158 * @param i component index
159 * @param ai i<sup>th</sup> component of acceleration
160 */
161 public void setAcceleration(final int i, final double ai) {
162 acceleration[i] = ai;
163 }
164
165 /** Get interpolation mode between current and next acceleration line.
166 * @return interpolation mode between current and next acceleration line
167 */
168 public OnOff getAccelerationInterpolation() {
169 return accelerationInterpolation;
170 }
171
172 /** Set interpolation mode between current and next acceleration line.
173 * @param accelerationInterpolation interpolation mode between current and next acceleration line
174 */
175 public void setAccelerationInterpolation(final OnOff accelerationInterpolation) {
176 this.accelerationInterpolation = accelerationInterpolation;
177 }
178
179 /** Get one σ percent error on acceleration magnitude.
180 * @return one σ percent error on acceleration magnitude
181 */
182 public double getAccelerationMagnitudeSigma() {
183 return accelerationMagnitudeSigma;
184 }
185
186 /** Set one σ percent error on acceleration magnitude.
187 * @param accelerationMagnitudeSigma one σ percent error on acceleration magnitude
188 */
189 public void setAccelerationMagnitudeSigma(final double accelerationMagnitudeSigma) {
190 this.accelerationMagnitudeSigma = accelerationMagnitudeSigma;
191 }
192
193 /** Get one σ angular off-nominal acceleration direction.
194 * @return one σ angular off-nominal acceleration direction
195 */
196 public double getAccelerationDirectionSigma() {
197 return accelerationDirectionSigma;
198 }
199
200 /** Set one σ angular off-nominal acceleration direction.
201 * @param accelerationDirectionSigma one σ angular off-nominal acceleration direction
202 */
203 public void setAccelerationDirectionSigma(final double accelerationDirectionSigma) {
204 this.accelerationDirectionSigma = accelerationDirectionSigma;
205 }
206
207 /** Get velocity increment.
208 * @return velocity increment
209 */
210 public Vector3D getDv() {
211 return new Vector3D(dV);
212 }
213
214 /** Set velocity increment component.
215 * @param i component index
216 * @param dVi i<sup>th</sup> component of velocity increment
217 */
218 public void setDv(final int i, final double dVi) {
219 dV[i] = dVi;
220 }
221
222 /** Get one σ percent error on ΔV magnitude.
223 * @return one σ percent error on ΔV magnitude
224 */
225 public double getDvMagSigma() {
226 return dvMagSigma;
227 }
228
229 /** Set one σ percent error on ΔV magnitude.
230 * @param dvMagSigma one σ percent error on ΔV magnitude
231 */
232 public void setDvMagSigma(final double dvMagSigma) {
233 this.dvMagSigma = dvMagSigma;
234 }
235
236 /** Get one σ angular off-nominal ΔV direction.
237 * @return one σ angular off-nominal ΔV direction
238 */
239 public double getDvDirSigma() {
240 return dvDirSigma;
241 }
242
243 /** Set one σ angular off-nominal ΔV direction.
244 * @param dvDirSigma one σ angular off-nominal ΔV direction
245 */
246 public void setDvDirSigma(final double dvDirSigma) {
247 this.dvDirSigma = dvDirSigma;
248 }
249
250 /** Get thrust.
251 * @return thrust
252 */
253 public Vector3D getThrust() {
254 return new Vector3D(thrust);
255 }
256
257 /** Set thrust component.
258 * @param i component index
259 * @param ti i<sup>th</sup> component of thrust
260 */
261 public void setThrust(final int i, final double ti) {
262 thrust[i] = ti;
263 }
264
265 /** Get thrust efficiency η.
266 * @return thrust efficiency η (typically between 0.0 and 1.0)
267 */
268 public double getThrustEfficiency() {
269 return thrustEfficiency;
270 }
271
272 /** Set thrust efficiency η.
273 * @param thrustEfficiency thrust efficiency η (typically between 0.0 and 1.0)
274 */
275 public void setThrustEfficiency(final double thrustEfficiency) {
276 this.thrustEfficiency = thrustEfficiency;
277 }
278
279 /** Get interpolation mode between current and next thrust line.
280 * @return interpolation mode between current and next thrust line
281 */
282 public OnOff getThrustInterpolation() {
283 return thrustInterpolation;
284 }
285
286 /** Set interpolation mode between current and next thrust line.
287 * @param thrustInterpolation interpolation mode between current and next thrust line
288 */
289 public void setThrustInterpolation(final OnOff thrustInterpolation) {
290 this.thrustInterpolation = thrustInterpolation;
291 }
292
293 /** Get thrust specific impulse.
294 * @return thrust specific impulse
295 */
296 public double getThrustIsp() {
297 return thrustIsp;
298 }
299
300 /** Set thrust specific impulse.
301 * @param thrustIsp thrust specific impulse
302 */
303 public void setThrustIsp(final double thrustIsp) {
304 this.thrustIsp = thrustIsp;
305 }
306
307 /** Get one σ percent error on thrust magnitude.
308 * @return one σ percent error on thrust magnitude
309 */
310 public double getThrustMagnitudeSigma() {
311 return thrustMagnitudeSigma;
312 }
313
314 /** Set one σ percent error on thrust magnitude.
315 * @param thrustMagnitudeSigma one σ percent error on thrust magnitude
316 */
317 public void setThrustMagnitudeSigma(final double thrustMagnitudeSigma) {
318 this.thrustMagnitudeSigma = thrustMagnitudeSigma;
319 }
320
321 /** Get one σ angular off-nominal thrust direction.
322 * @return one σ angular off-nominal thrust direction
323 */
324 public double getThrustDirectionSigma() {
325 return thrustDirectionSigma;
326 }
327
328 /** Set one σ angular off-nominal thrust direction.
329 * @param thrustDirectionSigma one σ angular off-nominal thrust direction
330 */
331 public void setThrustDirectionSigma(final double thrustDirectionSigma) {
332 this.thrustDirectionSigma = thrustDirectionSigma;
333 }
334
335 /** Get identifier of resulting "child" object deployed from this host.
336 * @return identifier of resulting "child" object deployed from this host
337 */
338 public String getDeployId() {
339 return deployId;
340 }
341
342 /** Set identifier of resulting "child" object deployed from this host.
343 * @param deployId identifier of resulting "child" object deployed from this host
344 */
345 public void setDeployId(final String deployId) {
346 this.deployId = deployId;
347 }
348
349 /** Get velocity increment of deployed "child" object.
350 * @return velocity increment of deployed "child" object
351 */
352 public Vector3D getDeployDv() {
353 return new Vector3D(deployDv);
354 }
355
356 /** Set velocity increment component of deployed "child" object.
357 * @param i component index
358 * @param deployDvi i<sup>th</sup> component of velocity increment of deployed "child" object
359 */
360 public void setDeployDv(final int i, final double deployDvi) {
361 deployDv[i] = deployDvi;
362 }
363
364 /** Get decrement in host mass as a result of deployment.
365 * @return decrement in host mass as a result of deployment (shall be ≤ 0)
366 */
367 public double getDeployMass() {
368 return deployMass;
369 }
370
371 /** Set decrement in host mass as a result of deployment.
372 * @param deployMass decrement in host mass as a result of deployment (shall be ≤ 0)
373 */
374 public void setDeployMass(final double deployMass) {
375 this.deployMass = deployMass;
376 }
377
378 /** Get one σ percent error on deployment ΔV magnitude.
379 * @return one σ percent error on deployment ΔV magnitude
380 */
381 public double getDeployDvSigma() {
382 return deployDvSigma;
383 }
384
385 /** Set one σ percent error on deployment ΔV magnitude.
386 * @param deployDvSigma one σ percent error on deployment ΔV magnitude
387 */
388 public void setDeployDvSigma(final double deployDvSigma) {
389 this.deployDvSigma = deployDvSigma;
390 }
391
392 /** Get one σ angular off-nominal deployment vector direction.
393 * @return one σ angular off-nominal deployment vector direction
394 */
395 public double getDeployDirSigma() {
396 return deployDirSigma;
397 }
398
399 /** Set one σ angular off-nominal deployment vector direction.
400 * @param deployDirSigma one σ angular off-nominal deployment vector direction
401 */
402 public void setDeployDirSigma(final double deployDirSigma) {
403 this.deployDirSigma = deployDirSigma;
404 }
405
406 /** Get ratio of child-to-host ΔV vectors.
407 * @return ratio of child-to-host ΔV vectors
408 */
409 public double getDeployDvRatio() {
410 return deployDvRatio;
411 }
412
413 /** Set ratio of child-to-host ΔV vectors.
414 * @param deployDvRatio ratio of child-to-host ΔV vectors
415 */
416 public void setDeployDvRatio(final double deployDvRatio) {
417 this.deployDvRatio = deployDvRatio;
418 }
419
420 /** Get typical (50th percentile) product of drag coefficient times cross-sectional area of deployed "child" object.
421 * @return typical (50th percentile) product of drag coefficient times cross-sectional area of deployed "child" object
422 */
423 public double getDeployDvCda() {
424 return deployDvCda;
425 }
426
427 /** Set typical (50th percentile) product of drag coefficient times cross-sectional area of deployed "child" object.
428 * @param deployDvCda typical (50th percentile) product of drag coefficient times cross-sectional area of deployed "child" object
429 */
430 public void setDeployDvCda(final double deployDvCda) {
431 this.deployDvCda = deployDvCda;
432 }
433
434 }