diff --git a/src/main/java/org/orekit/propagation/events/PositionAngleDetector.java b/src/main/java/org/orekit/propagation/events/PositionAngleDetector.java
index 3f6eec41df1d046c1b00ec1d5f4b7ed3840902f6..d26be12f959b3e87b523beb79aeefb39c0b032d9 100644
--- a/src/main/java/org/orekit/propagation/events/PositionAngleDetector.java
+++ b/src/main/java/org/orekit/propagation/events/PositionAngleDetector.java
@@ -32,7 +32,7 @@ import org.orekit.orbits.OrbitType;
import org.orekit.orbits.PositionAngle;
import org.orekit.propagation.SpacecraftState;
import org.orekit.propagation.events.handlers.EventHandler;
-import org.orekit.propagation.events.handlers.StopOnIncreasing;
+import org.orekit.propagation.events.handlers.StopOnEvent;
import org.orekit.time.AbsoluteDate;
import org.orekit.utils.TimeSpanMap;
@@ -81,6 +81,7 @@ public class PositionAngleDetector extends AbstractDetector This instance uses by default the {@link StopOnEvent} handler
* @param maxCheck maximal checking interval (s)
* @param threshold convergence threshold (s)
* @param orbitType orbit type defining the angle type
@@ -92,7 +93,7 @@ public class PositionAngleDetector extends AbstractDetector(),
+ this(maxCheck, threshold, DEFAULT_MAX_ITER, new StopOnEvent(),
orbitType, positionAngle, angle);
}
diff --git a/src/test/java/org/orekit/propagation/events/PositionAngleDetectorTest.java b/src/test/java/org/orekit/propagation/events/PositionAngleDetectorTest.java
index a06a12e13a40b92049f803aa75a83d3cf4b570bf..4d41bec81e31522b2f4cc8c6742180696597bd4f 100644
--- a/src/test/java/org/orekit/propagation/events/PositionAngleDetectorTest.java
+++ b/src/test/java/org/orekit/propagation/events/PositionAngleDetectorTest.java
@@ -17,6 +17,7 @@
package org.orekit.propagation.events;
import org.hipparchus.geometry.euclidean.threed.Vector3D;
+import org.hipparchus.ode.ODEIntegrator;
import org.hipparchus.ode.nonstiff.AdaptiveStepsizeIntegrator;
import org.hipparchus.ode.nonstiff.DormandPrince853Integrator;
import org.hipparchus.util.FastMath;
@@ -25,6 +26,7 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.orekit.Utils;
+import org.orekit.bodies.OneAxisEllipsoid;
import org.orekit.errors.OrekitIllegalArgumentException;
import org.orekit.errors.OrekitMessages;
import org.orekit.forces.ForceModel;
@@ -44,6 +46,7 @@ import org.orekit.propagation.EphemerisGenerator;
import org.orekit.propagation.Propagator;
import org.orekit.propagation.SpacecraftState;
import org.orekit.propagation.analytical.EcksteinHechlerPropagator;
+import org.orekit.propagation.analytical.KeplerianPropagator;
import org.orekit.propagation.events.EventsLogger.LoggedEvent;
import org.orekit.propagation.events.handlers.ContinueOnEvent;
import org.orekit.propagation.numerical.NumericalPropagator;
@@ -247,6 +250,75 @@ public class PositionAngleDetectorTest {
}
+
+ @Test
+ public void testIssue779() {
+
+ final TimeScale utc = TimeScalesFactory.getUTC();
+ final AbsoluteDate initialDate = new AbsoluteDate(2022, 05, 10, 00, 00, 00.000, utc);
+
+ // General orbit
+ double a = 24396159; // semi major axis in meters
+ double e = 0.72831215; // eccentricity
+ double i = FastMath.toRadians(7); // inclination
+ double omega = FastMath.toRadians(180); // perigee argument
+ double raan = FastMath.toRadians(261); // right ascension of ascending node
+ double lM = 0; // mean anomaly
+
+ Orbit orbit = new KeplerianOrbit(a, e, i, omega, raan, lM, PositionAngle.MEAN,
+ FramesFactory.getEME2000(), initialDate,
+ Constants.WGS84_EARTH_MU);
+
+
+
+
+ // Event detectors configurations
+ final double maxCheck = 600.0;
+ final double threshold = 1.0e-6;
+ final double angle = 90.0;
+
+
+ // First, configure a propagation with the default event handler (expected to stop on event)
+ Propagator np1 = new KeplerianPropagator(orbit);
+ PositionAngleDetector detectorDefault = new PositionAngleDetector(maxCheck,
+ threshold,
+ OrbitType.KEPLERIAN,
+ PositionAngle.MEAN,
+ FastMath.toRadians(angle));
+
+ // Create and add event logger
+ EventsLogger logger1 = new EventsLogger();
+ np1.addEventDetector(logger1.monitorDetector(detectorDefault));
+
+ // Propagate
+ np1.propagate(initialDate.shiftedBy(Constants.JULIAN_DAY));
+
+
+
+ // Then, repeat the test with a Continue On Event handler
+ Propagator np2 = new KeplerianPropagator(orbit);
+
+ // Create and configure the Continue On Event handler
+ PositionAngleDetector detectorContinue = new PositionAngleDetector(maxCheck,
+ threshold,
+ OrbitType.KEPLERIAN,
+ PositionAngle.MEAN,
+ FastMath.toRadians(angle)).
+ withHandler(new ContinueOnEvent<>());
+
+ // Create and add the event logger
+ EventsLogger logger2 = new EventsLogger();
+ np2.addEventDetector(logger2.monitorDetector(detectorContinue));
+
+ // Propagate
+ np2.propagate(initialDate.shiftedBy(Constants.JULIAN_DAY));
+
+ // Check test results
+ Assert.assertEquals(1, logger1.getLoggedEvents().size());
+ Assert.assertTrue(logger2.getLoggedEvents().size() > 1);
+ }
+
+
private void doTest(final OrbitType orbitType, final PositionAngle positionAngle,
final double angle, final double deltaT, final int expectedCrossings) {