1 /* Copyright 2013 Applied Defense Solutions, Inc.
2 * Licensed to CS Communication & Systèmes (CS) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * CS licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.orekit.propagation.events.handlers;
18
19 import org.hipparchus.CalculusFieldElement;
20 import org.hipparchus.ode.events.Action;
21 import org.orekit.propagation.FieldSpacecraftState;
22 import org.orekit.propagation.events.FieldEventDetector;
23 import org.orekit.time.FieldAbsoluteDate;
24
25
26 /** An interface defining how to handle events occurring during propagation..
27 *
28 * @author Hank Grabowski
29 *
30 * @param <T> type of the field element
31 * @since 6.1
32 */
33 public interface FieldEventHandler<T extends CalculusFieldElement<T>> {
34
35 /** Initialize event handler at the start of a propagation.
36 * <p>
37 * This method is called once at the start of the propagation. It
38 * may be used by the event handler to initialize some internal data
39 * if needed.
40 * </p>
41 * <p>
42 * The default implementation does nothing
43 * </p>
44 * @param initialState initial state
45 * @param target target date for the propagation
46 * @param detector event detector related to the event handler
47 * @since 11.1
48 */
49 default void init(FieldSpacecraftState<T> initialState, FieldAbsoluteDate<T> target, FieldEventDetector<T> detector) {
50 // nothing by default
51 }
52
53 /** Handle an event.
54 *
55 * @param s SpaceCraft state to be used in the evaluation
56 * @param detector object with appropriate type that can be used in determining correct return state
57 * @param increasing with the event occurred in an "increasing" or "decreasing" slope direction
58 * @return the Action that the calling detector should pass back to the evaluation system
59 *
60 */
61 Action eventOccurred(FieldSpacecraftState<T> s, FieldEventDetector<T> detector, boolean increasing);
62
63 /** Reset the state prior to continue propagation.
64 * <p>This method is called after the step handler has returned and
65 * before the next step is started, but only when {@link
66 * #eventOccurred} has itself returned the {@link Action#RESET_STATE}
67 * indicator. It allows the user to reset the state for the next step,
68 * without perturbing the step handler of the finishing step. If the
69 * {@link #eventOccurred} never returns the {@link Action#RESET_STATE}
70 * indicator, this function will never be called, and it is safe to simply return null.</p>
71 * <p>
72 * The default implementation simply return its argument.
73 * </p>
74 * @param detector object with appropriate type that can be used in determining correct return state
75 * @param oldState old state
76 * @return new state
77 */
78 default FieldSpacecraftState<T> resetState(FieldEventDetector<T> detector, FieldSpacecraftState<T> oldState) {
79 return oldState;
80 }
81
82
83 /**
84 * This method finalize event handler at the end of a propagation.
85 * <p>
86 * The default implementation does nothing
87 * </p>
88 * @param finalState state at propagation end
89 * @param detector event detector related to the event handler
90 * @since 12.2
91 */
92 default void finish(final FieldSpacecraftState<T> finalState, final FieldEventDetector<T> detector) {
93 // nothing by default
94 }
95
96 }