1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.events.functions;
18
19 import org.hipparchus.CalculusFieldElement;
20 import org.orekit.propagation.FieldSpacecraftState;
21 import org.orekit.propagation.SpacecraftState;
22
23
24
25
26
27
28
29 public interface EventFunctionModifier extends EventFunction {
30
31 EventFunction getBaseFunction();
32
33 @Override
34 default double value(final SpacecraftState state) {
35 return getBaseFunction().value(state);
36 }
37
38 @Override
39 default <T extends CalculusFieldElement<T>> T value(final FieldSpacecraftState<T> fieldState) {
40 return getBaseFunction().value(fieldState);
41 }
42
43 @Override
44 default boolean dependsOnTimeOnly() {
45 return getBaseFunction().dependsOnTimeOnly();
46 }
47
48 @Override
49 default boolean dependsOnMainVariablesOnly() {
50 return getBaseFunction().dependsOnMainVariablesOnly();
51 }
52
53 static EventFunctionModifier addReal(final EventFunction eventFunction, final double increment) {
54 return new EventFunctionModifier() {
55 @Override
56 public EventFunction getBaseFunction() {
57 return eventFunction;
58 }
59
60 @Override
61 public double value(final SpacecraftState state) {
62 return eventFunction.value(state) + increment;
63 }
64
65 @Override
66 public <T extends CalculusFieldElement<T>> T value(final FieldSpacecraftState<T> fieldState) {
67 return eventFunction.value(fieldState).add(increment);
68 }
69 };
70 }
71
72 static <S extends CalculusFieldElement<S>> EventFunctionModifier addFieldValue(final EventFunction eventFunction,
73 final S increment) {
74 return new EventFunctionModifier() {
75 @Override
76 public EventFunction getBaseFunction() {
77 return eventFunction;
78 }
79
80 @Override
81 public double value(final SpacecraftState state) {
82 return eventFunction.value(state) + increment.getReal();
83 }
84
85 @Override
86 @SuppressWarnings("unchecked")
87 public <T extends CalculusFieldElement<T>> T value(final FieldSpacecraftState<T> fieldState) {
88 final T g = eventFunction.value(fieldState);
89 if (g.getField().equals(increment.getField())) {
90 return (T) ((S) g).add(increment);
91 } else {
92 return g.add(increment.getReal());
93 }
94 }
95 };
96 }
97 }