1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.numerical;
18
19 import static org.hamcrest.CoreMatchers.is;
20
21 import java.util.Collections;
22 import java.util.List;
23 import java.util.stream.Stream;
24
25 import org.hamcrest.MatcherAssert;
26 import org.hipparchus.Field;
27 import org.hipparchus.CalculusFieldElement;
28 import org.hipparchus.analysis.differentiation.DerivativeStructure;
29 import org.hipparchus.geometry.euclidean.threed.FieldRotation;
30 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
31 import org.hipparchus.geometry.euclidean.threed.Vector3D;
32 import org.hipparchus.ode.nonstiff.DormandPrince54Integrator;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.orekit.forces.AbstractForceModel;
36 import org.orekit.forces.ForceModel;
37 import org.orekit.frames.Frame;
38 import org.orekit.frames.FramesFactory;
39 import org.orekit.orbits.CartesianOrbit;
40 import org.orekit.propagation.FieldSpacecraftState;
41 import org.orekit.propagation.SpacecraftState;
42 import org.orekit.propagation.events.EventDetector;
43 import org.orekit.propagation.events.FieldEventDetector;
44 import org.orekit.time.AbsoluteDate;
45 import org.orekit.utils.Constants;
46 import org.orekit.utils.PVCoordinates;
47 import org.orekit.utils.ParameterDriver;
48
49
50 @Deprecated
51 public class PartialDerivativesEquationsTest {
52
53
54 private static final AbsoluteDate date = AbsoluteDate.J2000_EPOCH;
55
56 private static final double gm = Constants.EIGEN5C_EARTH_MU;
57
58 private static final Frame eci = FramesFactory.getGCRF();
59
60
61 private NumericalPropagator propagator;
62
63 private MockForceModel forceModel;
64
65 private PVCoordinates pv;
66
67 private SpacecraftState state;
68
69 private PartialDerivativesEquations pde;
70
71
72
73
74 @Before
75 public void setUp() {
76 propagator = new NumericalPropagator(new DormandPrince54Integrator(1, 500, 0.001, 0.001));
77 forceModel = new MockForceModel();
78 propagator.addForceModel(forceModel);
79 pde = new PartialDerivativesEquations("pde", propagator);
80 Vector3D p = new Vector3D(7378137, 0, 0);
81 Vector3D v = new Vector3D(0, 7500, 0);
82 pv = new PVCoordinates(p, v);
83 state = new SpacecraftState(new CartesianOrbit(pv, eci, date, gm))
84 .addAdditionalState("pde", new double[2 * 3 * 6]);
85 pde.setInitialJacobians(state);
86
87 }
88
89
90
91
92 @Test
93 public void testDerivativesStateVelocity() {
94
95 pde.derivatives(state);
96
97
98 MatcherAssert.assertThat(forceModel.accelerationDerivativesPosition.toVector3D(), is(pv.getPosition()));
99 MatcherAssert.assertThat(forceModel.accelerationDerivativesVelocity.toVector3D(), is(pv.getVelocity()));
100
101 }
102
103
104 private static class MockForceModel extends AbstractForceModel {
105
106
107
108
109
110 public FieldVector3D<DerivativeStructure> accelerationDerivativesPosition;
111
112
113
114
115 public FieldVector3D<DerivativeStructure> accelerationDerivativesVelocity;
116
117
118 @Override
119 public boolean dependsOnPositionOnly() {
120 return false;
121 }
122
123 @Override
124 public <T extends CalculusFieldElement<T>> void
125 addContribution(FieldSpacecraftState<T> s,
126 FieldTimeDerivativesEquations<T> adder) {
127 }
128
129 @Override
130 public Vector3D acceleration(final SpacecraftState s, final double[] parameters)
131 {
132 return s.getPVCoordinates().getPosition();
133 }
134
135 @SuppressWarnings("unchecked")
136 @Override
137 public <T extends CalculusFieldElement<T>> FieldVector3D<T> acceleration(final FieldSpacecraftState<T> s,
138 final T[] parameters)
139 {
140 this.accelerationDerivativesPosition = (FieldVector3D<DerivativeStructure>) s.getPVCoordinates().getPosition();
141 this.accelerationDerivativesVelocity = (FieldVector3D<DerivativeStructure>) s.getPVCoordinates().getVelocity();
142 return s.getPVCoordinates().getPosition();
143 }
144
145 @Override
146 public Stream<EventDetector> getEventsDetectors() {
147 return Stream.empty();
148 }
149
150 @Override
151 public List<ParameterDriver> getParametersDrivers() {
152 return Collections.emptyList();
153 }
154
155 @Override
156 public <T extends CalculusFieldElement<T>> Stream<FieldEventDetector<T>> getFieldEventsDetectors(final Field<T> field) {
157 return Stream.empty();
158 }
159
160 }
161
162 }