Maneuver.java
- /* Copyright 2002-2024 CS GROUP
- * Licensed to CS GROUP (CS) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * CS licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.orekit.files.ccsds.ndm.odm.opm;
- import java.util.Arrays;
- import org.hipparchus.geometry.euclidean.threed.Vector3D;
- import org.orekit.files.ccsds.definitions.FrameFacade;
- import org.orekit.files.ccsds.section.CommentsContainer;
- import org.orekit.time.AbsoluteDate;
- /** Maneuver in an OPM file.
- * @author sports
- * @since 6.1
- */
- public class Maneuver extends CommentsContainer {
- /** Epoch ignition. */
- private AbsoluteDate epochIgnition;
- /** Coordinate system for velocity increment vector, for absolute frames. */
- private FrameFacade referenceFrame;
- /** Duration (value is 0 for impulsive maneuver). */
- private double duration;
- /** Mass change during maneuver (value is < 0). */
- private double deltaMass;
- /** Velocity increment. */
- private double[] dV;
- /** Simple constructor.
- */
- public Maneuver() {
- duration = Double.NaN;
- deltaMass = Double.NaN;
- dV = new double[3];
- Arrays.fill(dV, Double.NaN);
- }
- /** {@inheritDoc} */
- @Override
- public void validate(final double version) {
- super.validate(version);
- checkNotNull(epochIgnition, ManeuverKey.MAN_EPOCH_IGNITION.name());
- checkNotNull(referenceFrame, ManeuverKey.MAN_REF_FRAME.name());
- checkNotNaN(duration, ManeuverKey.MAN_DURATION.name());
- checkNotNaN(deltaMass, ManeuverKey.MAN_DELTA_MASS.name());
- checkNotNaN(dV[0], ManeuverKey.MAN_DV_1.name());
- checkNotNaN(dV[1], ManeuverKey.MAN_DV_2.name());
- checkNotNaN(dV[2], ManeuverKey.MAN_DV_3.name());
- }
- /** Get epoch ignition.
- * @return epoch ignition
- */
- public AbsoluteDate getEpochIgnition() {
- return epochIgnition;
- }
- /** Set epoch ignition.
- * @param epochIgnition epoch ignition
- */
- public void setEpochIgnition(final AbsoluteDate epochIgnition) {
- this.epochIgnition = epochIgnition;
- }
- /** Get Coordinate system for velocity increment vector.
- * @return coordinate system for velocity increment vector
- */
- public FrameFacade getReferenceFrame() {
- return referenceFrame;
- }
- /** Set Coordinate system for velocity increment vector.
- * @param referenceFrame coordinate system for velocity increment vector
- */
- public void setReferenceFrame(final FrameFacade referenceFrame) {
- this.referenceFrame = referenceFrame;
- }
- /** Get duration (value is 0 for impulsive maneuver).
- * @return duration (value is 0 for impulsive maneuver)
- */
- public double getDuration() {
- return duration;
- }
- /** Set duration (value is 0 for impulsive maneuver).
- * @param duration duration (value is 0 for impulsive maneuver)
- */
- public void setDuration(final double duration) {
- this.duration = duration;
- }
- /** Get mass change during maneuver (value is < 0).
- * @return mass change during maneuver (value is < 0)
- */
- public double getDeltaMass() {
- return deltaMass;
- }
- /** Set mass change during maneuver (value is < 0).
- * @param deltaMass mass change during maneuver (value is < 0)
- */
- public void setDeltaMass(final double deltaMass) {
- this.deltaMass = deltaMass;
- }
- /** Get velocity increment.
- * @return velocity increment
- */
- public Vector3D getDV() {
- return new Vector3D(dV);
- }
- /** Set velocity increment component.
- * @param i component index
- * @param dVi velocity increment component
- */
- public void setDV(final int i, final double dVi) {
- dV[i] = dVi;
- }
- /** Check if maneuver has been completed.
- * @return true if maneuver has been completed
- */
- public boolean completed() {
- return !(epochIgnition == null ||
- referenceFrame == null ||
- Double.isNaN(duration + deltaMass + dV[0] + dV[1] + dV[2]));
- }
- }