1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.control.indirect.adjoint.cost;
18
19 import org.hipparchus.geometry.euclidean.threed.Vector3D;
20 import org.junit.jupiter.api.Assertions;
21 import org.junit.jupiter.api.Test;
22 import org.junit.jupiter.params.ParameterizedTest;
23 import org.junit.jupiter.params.provider.ValueSource;
24
25 class CartesianFlightDurationCostTest {
26
27 private static final String ADJOINT_NAME = "adjoint";
28
29 @Test
30 void testGetHamiltonianContribution() {
31
32 final CartesianFlightDurationCost cost = new CartesianFlightDurationCost(ADJOINT_NAME, 1, 2);
33
34 final double contribution = cost.getHamiltonianContribution(new double[6], 1);
35
36 Assertions.assertEquals(-1, contribution);
37 }
38
39 @ParameterizedTest
40 @ValueSource(booleans = {false, true})
41 void testUpdateFieldAdjointDerivatives(final boolean withMass) {
42
43 final double massFlowRateFactor = withMass ? 1 : 0;
44 final CartesianFlightDurationCost cost = new CartesianFlightDurationCost(ADJOINT_NAME, massFlowRateFactor, 2);
45 final double[] adjoint = new double[withMass ? 7 : 6];
46 adjoint[3] = 1;
47 final double[] derivatives = new double[adjoint.length];
48
49 cost.updateAdjointDerivatives(adjoint, 1, derivatives);
50
51 for (int i = 0; i < 6; ++i) {
52 Assertions.assertEquals(0., derivatives[i]);
53 }
54 if (withMass) {
55 Assertions.assertNotEquals(0., derivatives[derivatives.length - 1]);
56 } else {
57 Assertions.assertEquals(0., derivatives[derivatives.length - 1]);
58 }
59 }
60
61 @Test
62 void testGetThrustAccelerationVector() {
63
64 final CartesianFlightDurationCost cost = new CartesianFlightDurationCost(ADJOINT_NAME, 1, 2);
65
66 final Vector3D contribution = cost.getThrustAccelerationVector(new double[] {0, 0, 0, 1, 2, 3}, 1);
67
68 Assertions.assertEquals(new Vector3D(1, 2, 3).normalize().scalarMultiply(cost.getMaximumThrustMagnitude()),
69 contribution);
70 }
71 }