1 /* Copyright 2002-2013 CS Systèmes d'Information
2 * Licensed to CS Systèmes d'Information (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 package org.orekit.propagation.numerical;
18
19 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
20 import org.orekit.errors.OrekitException;
21 import org.orekit.frames.Frame;
22
23 /** Interface summing up the contribution of several forces into orbit and mass derivatives.
24 *
25 * <p>The aim of this interface is to gather the contributions of various perturbing
26 * forces expressed as accelerations into one set of time-derivatives of
27 * {@link org.orekit.orbits.Orbit} plus one mass derivatives. It implements Gauss
28 * equations for different kind of parameters.</p>
29 * <p>An implementation of this interface is automatically provided by {@link
30 * org.orekit.propagation.integration.AbstractIntegratedPropagator integration-based
31 * propagators}, which are either semi-analytical or numerical propagators.
32 * </p>
33 * @see org.orekit.forces.ForceModel
34 * @see org.orekit.propagation.numerical.NumericalPropagator
35 * @author Luc Maisonobe
36 * @author Fabien Maussion
37 * @author Véronique Pommier-Maurussane
38 */
39 public interface TimeDerivativesEquations {
40
41 /** Add the contribution of the Kepler evolution.
42 * <p>Since the Kepler evolution is the most important, it should
43 * be added after all the other ones, in order to improve
44 * numerical accuracy.</p>
45 * @param mu central body gravitational constant
46 */
47 void addKeplerContribution(final double mu);
48
49 /** Add the contribution of an acceleration expressed in the inertial frame
50 * (it is important to make sure this acceleration is defined in the
51 * same frame as the orbit) .
52 * @param x acceleration along the X axis (m/s<sup>2</sup>)
53 * @param y acceleration along the Y axis (m/s<sup>2</sup>)
54 * @param z acceleration along the Z axis (m/s<sup>2</sup>)
55 */
56 void addXYZAcceleration(final double x, final double y, final double z);
57
58 /** Add the contribution of an acceleration expressed in some inertial frame.
59 * @param gamma acceleration vector (m/s<sup>2</sup>)
60 * @param frame frame in which acceleration is defined (must be an inertial frame)
61 * @exception OrekitException if frame transforms cannot be computed
62 */
63 void addAcceleration(final Vector3D gamma, final Frame frame) throws OrekitException;
64
65 /** Add the contribution of the flow rate (dm/dt).
66 * @param q the flow rate, must be negative (dm/dt)
67 * @exception IllegalArgumentException if flow-rate is positive
68 */
69 void addMassDerivative(final double q);
70
71
72 }