/* Copyright 2002-2017 CS Systèmes d'Information * Licensed to CS Systèmes d'Information (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.propagation.numerical; import org.hipparchus.geometry.euclidean.threed.Vector3D; import org.orekit.errors.OrekitException; import org.orekit.frames.Frame; /** Interface summing up the contribution of several forces into orbit and mass derivatives. * * <p>The aim of this interface is to gather the contributions of various perturbing * forces expressed as accelerations into one set of time-derivatives of * {@link org.orekit.orbits.Orbit} plus one mass derivatives. It implements Gauss * equations for different kind of parameters.</p> * <p>An implementation of this interface is automatically provided by {@link * org.orekit.propagation.integration.AbstractIntegratedPropagator integration-based * propagators}, which are either semi-analytical or numerical propagators. * </p> * @see org.orekit.forces.ForceModel * @see org.orekit.propagation.numerical.NumericalPropagator * @author Luc Maisonobe * @author Fabien Maussion * @author Véronique Pommier-Maurussane */ public interface TimeDerivativesEquations { /** Add the contribution of the Kepler evolution. * <p>Since the Kepler evolution is the most important, it should * be added after all the other ones, in order to improve * numerical accuracy.</p> * @param mu central body gravitational constant */ void addKeplerContribution(double mu); /** Add the contribution of an acceleration expressed in the inertial frame * (it is important to make sure this acceleration is defined in the * same frame as the orbit) . * @param x acceleration along the X axis (m/s²) * @param y acceleration along the Y axis (m/s²) * @param z acceleration along the Z axis (m/s²) */ void addXYZAcceleration(double x, double y, double z); /** Add the contribution of an acceleration expressed in some inertial frame. * @param gamma acceleration vector (m/s²) * @param frame frame in which acceleration is defined (must be an inertial frame) * @exception OrekitException if frame transforms cannot be computed */ void addAcceleration(Vector3D gamma, Frame frame) throws OrekitException; /** Add the contribution of the flow rate (dm/dt). * @param q the flow rate, must be negative (dm/dt) * @exception IllegalArgumentException if flow-rate is positive */ void addMassDerivative(double q); }