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.errors.OrekitException;
36 import org.orekit.forces.AbstractForceModel;
37 import org.orekit.forces.ForceModel;
38 import org.orekit.frames.Frame;
39 import org.orekit.frames.FramesFactory;
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.AbsolutePVCoordinates;
46 import org.orekit.utils.PVCoordinates;
47 import org.orekit.utils.ParameterDriver;
48
49
50 @Deprecated
51 public class AbsolutePartialDerivativesEquationsTest {
52
53
54 private static final AbsoluteDate date = AbsoluteDate.J2000_EPOCH;
55
56 private static final Frame eci = FramesFactory.getGCRF();
57
58
59 private NumericalPropagator propagator;
60
61 private MockForceModel forceModel;
62
63 private PVCoordinates pv;
64
65 private SpacecraftState state;
66
67 private AbsolutePartialDerivativesEquations pde;
68
69
70
71
72 @Before
73 public void setUp() {
74 propagator = new NumericalPropagator(new DormandPrince54Integrator(1, 500, 0.001, 0.001));
75 forceModel = new MockForceModel();
76 propagator.addForceModel(forceModel);
77 pde = new AbsolutePartialDerivativesEquations("pde", propagator);
78 Vector3D p = new Vector3D(7378137, 0, 0);
79 Vector3D v = new Vector3D(0, 7500, 0);
80 pv = new PVCoordinates(p, v);
81 state = new SpacecraftState(new AbsolutePVCoordinates(eci,date,pv))
82 .addAdditionalState("pde", new double[2 * 3 * 6]);
83 pde.setInitialJacobians(state);
84
85 }
86
87
88
89
90 @Test
91 public void testComputeDerivativesStateVelocity() {
92
93 pde.derivatives(state);
94
95
96 MatcherAssert.assertThat(forceModel.accelerationDerivativesPosition.toVector3D(), is(pv.getPosition()));
97 MatcherAssert.assertThat(forceModel.accelerationDerivativesVelocity.toVector3D(), is(pv.getVelocity()));
98
99 }
100
101 @Test(expected=OrekitException.class)
102 public void testNotInitialized() {
103 new AbsolutePartialDerivativesEquations("partials", propagator).getMapper();
104 }
105
106
107 private static class MockForceModel extends AbstractForceModel {
108
109
110
111
112
113 public FieldVector3D<DerivativeStructure> accelerationDerivativesPosition;
114
115
116
117
118 public FieldVector3D<DerivativeStructure> accelerationDerivativesVelocity;
119
120
121 @Override
122 public boolean dependsOnPositionOnly() {
123 return false;
124 }
125
126 @Override
127 public <T extends CalculusFieldElement<T>> void
128 addContribution(FieldSpacecraftState<T> s,
129 FieldTimeDerivativesEquations<T> adder) {
130 }
131
132 @Override
133 public Vector3D acceleration(final SpacecraftState s, final double[] parameters)
134 {
135 return s.getPVCoordinates().getPosition();
136 }
137
138 @SuppressWarnings("unchecked")
139 @Override
140 public <T extends CalculusFieldElement<T>> FieldVector3D<T> acceleration(final FieldSpacecraftState<T> s,
141 final T[] parameters)
142 {
143 this.accelerationDerivativesPosition = (FieldVector3D<DerivativeStructure>) s.getPVCoordinates().getPosition();
144 this.accelerationDerivativesVelocity = (FieldVector3D<DerivativeStructure>) s.getPVCoordinates().getVelocity();
145 return s.getPVCoordinates().getPosition();
146 }
147
148 @Override
149 public Stream<EventDetector> getEventsDetectors() {
150 return Stream.empty();
151 }
152
153 @Override
154 public List<ParameterDriver> getParametersDrivers() {
155 return Collections.emptyList();
156 }
157
158 @Override
159 public <T extends CalculusFieldElement<T>> Stream<FieldEventDetector<T>> getFieldEventsDetectors(final Field<T> field) {
160 return Stream.empty();
161 }
162
163 }
164
165 }