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.util.FastMath;
20 import org.junit.jupiter.api.Assertions;
21 import org.junit.jupiter.params.ParameterizedTest;
22 import org.junit.jupiter.params.provider.ValueSource;
23
24 class LogarithmicBarrierCartesianFuelTest {
25
26 private static final String ADJOINT_NAME = "adjoint";
27
28 @ParameterizedTest
29 @ValueSource(doubles = {0., 0.1, 0.5, 0.9})
30 void testEvaluatePenaltyFunction(final double norm) {
31
32 final LogarithmicBarrierCartesianFuel penalizedCartesianFuel = new LogarithmicBarrierCartesianFuel(ADJOINT_NAME,
33 1., 2., 0.5);
34
35 final double actualPenalty = penalizedCartesianFuel.evaluatePenaltyFunction(norm);
36
37 Assertions.assertEquals(FastMath.log(norm) + FastMath.log(1 - norm), actualPenalty);
38 }
39
40 @ParameterizedTest
41 @ValueSource(booleans = {false, true})
42 void testUpdateFieldAdjointDerivatives(final boolean withMass) {
43
44 final double massFlowRateFactor = withMass ? 1 : 0;
45 final LogarithmicBarrierCartesianFuel cost = new LogarithmicBarrierCartesianFuel("adjoint", massFlowRateFactor, 2, 0.5);
46 final double[] adjoint = new double[withMass ? 7 : 6];
47 adjoint[3] = 1;
48 final double[] derivatives = new double[adjoint.length];
49
50 cost.updateAdjointDerivatives(adjoint, 1, derivatives);
51
52 for (int i = 0; i < 6; ++i) {
53 Assertions.assertEquals(0., derivatives[i]);
54 }
55 if (withMass) {
56 Assertions.assertNotEquals(0., derivatives[derivatives.length - 1]);
57 } else {
58 Assertions.assertEquals(0., derivatives[derivatives.length - 1]);
59 }
60 }
61 }