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.propagation.integration;
18
19 import org.hipparchus.analysis.differentiation.Gradient;
20 import org.hipparchus.geometry.euclidean.threed.FieldRotation;
21 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
22
23 /** Converter for states and parameters arrays.
24 * @author Luc Maisonobe
25 * @author Bryan Cazabonne
26 * @since 10.2
27 */
28 public abstract class AbstractGradientConverter {
29
30 /** Dimension of the state. */
31 private final int freeStateParameters;
32
33 /** Simple constructor.
34 * @param freeStateParameters number of free parameters
35 */
36 protected AbstractGradientConverter(final int freeStateParameters) {
37 this.freeStateParameters = freeStateParameters;
38 }
39
40 /** Get the number of free state parameters.
41 * @return number of free state parameters
42 */
43 public int getFreeStateParameters() {
44 return freeStateParameters;
45 }
46
47 /** Add zero derivatives.
48 * @param original original scalar
49 * @param freeParameters total number of free parameters in the gradient
50 * @return extended scalar
51 */
52 protected Gradient extend(final Gradient original, final int freeParameters) {
53 final double[] originalDerivatives = original.getGradient();
54 final double[] extendedDerivatives = new double[freeParameters];
55 System.arraycopy(originalDerivatives, 0, extendedDerivatives, 0, originalDerivatives.length);
56 return new Gradient(original.getValue(), extendedDerivatives);
57 }
58
59 /** Add zero derivatives.
60 * @param original original vector
61 * @param freeParameters total number of free parameters in the gradient
62 * @return extended vector
63 */
64 protected FieldVector3D<Gradient> extend(final FieldVector3D<Gradient> original, final int freeParameters) {
65 return new FieldVector3D<>(extend(original.getX(), freeParameters),
66 extend(original.getY(), freeParameters),
67 extend(original.getZ(), freeParameters));
68 }
69
70 /** Add zero derivatives.
71 * @param original original rotation
72 * @param freeParameters total number of free parameters in the gradient
73 * @return extended rotation
74 */
75 protected FieldRotation<Gradient> extend(final FieldRotation<Gradient> original, final int freeParameters) {
76 return new FieldRotation<>(extend(original.getQ0(), freeParameters),
77 extend(original.getQ1(), freeParameters),
78 extend(original.getQ2(), freeParameters),
79 extend(original.getQ3(), freeParameters),
80 false);
81 }
82 }