1   /* Copyright 2002-2021 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  package org.orekit.forces.radiation;
18  
19  import java.util.List;
20  
21  import org.hipparchus.CalculusFieldElement;
22  import org.hipparchus.geometry.euclidean.threed.FieldRotation;
23  import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
24  import org.hipparchus.geometry.euclidean.threed.Rotation;
25  import org.hipparchus.geometry.euclidean.threed.Vector3D;
26  import org.orekit.frames.Frame;
27  import org.orekit.time.AbsoluteDate;
28  import org.orekit.time.FieldAbsoluteDate;
29  import org.orekit.utils.ParameterDriver;
30  
31  /** Interface for spacecraft that are sensitive to radiation pressure forces.
32   *
33   * @see SolarRadiationPressure
34   * @author Luc Maisonobe
35   * @author Pascal Parraud
36   */
37  public interface RadiationSensitive {
38  
39      /** Parameter name for absorption coefficient. */
40      String ABSORPTION_COEFFICIENT = "absorption coefficient";
41  
42      /** Parameter name for reflection coefficient. */
43      String REFLECTION_COEFFICIENT = "reflection coefficient";
44  
45      /** Get the drivers for supported parameters.
46       * @return parameters drivers
47       * @since 8.0
48       */
49      List<ParameterDriver> getRadiationParametersDrivers();
50  
51      /** Compute the acceleration due to radiation pressure.
52       * @param date current date
53       * @param frame inertial reference frame for state (both orbit and attitude)
54       * @param position position of spacecraft in reference frame
55       * @param rotation orientation (attitude) of the spacecraft with respect to reference frame
56       * @param mass current mass
57       * @param flux radiation flux in the same inertial frame as spacecraft orbit
58       * @param parameters values of the force model parameters
59       * @return spacecraft acceleration in the same inertial frame as spacecraft orbit (m/s²)
60       */
61      Vector3D radiationPressureAcceleration(AbsoluteDate date, Frame frame, Vector3D position,
62                                             Rotation rotation, double mass, Vector3D flux,
63                                             double[] parameters);
64  
65      /** Compute the acceleration due to radiation pressure.
66       * @param date current date
67       * @param frame inertial reference frame for state (both orbit and attitude)
68       * @param position position of spacecraft in reference frame
69       * @param rotation orientation (attitude) of the spacecraft with respect to reference frame
70       * @param mass current mass
71       * @param flux radiation flux in the same inertial frame as spacecraft orbit
72       * @param parameters values of the force model parameters
73       * @param <T> extends CalculusFieldElement
74       * @return spacecraft acceleration in the same inertial frame as spacecraft orbit (m/s²)
75       */
76      <T extends CalculusFieldElement<T>> FieldVector3D<T> radiationPressureAcceleration(FieldAbsoluteDate<T> date, Frame frame, FieldVector3D<T> position,
77                                                                                     FieldRotation<T> rotation, T mass, FieldVector3D<T> flux,
78                                                                                     T[] parameters);
79  }