Hi Alegrand
You have not missed anything obvious at all, but there are some conversion issues here between python and java that are far from obvious.
The first one is the list of propagators. I am not sure how java lists work, but sometimes it is better to define lists as java lists first, and use them from there. See code below.
The second issue is of similar nature. The interpolator that is actually used in the handler is a private class and the conversion to the “specified” type that we would have in the java defintion of the method does not occur as we don’t have typed methods in Python (this is at least what I think is happening). So we need to cast this to what is expected. This is a bit odd and is very seldom needed practically, but seems to be in this case…
import orekit
orekit.initVM()
from orekit.pyhelpers import setup_orekit_curdir
setup_orekit_curdir()from math import radians, pi
from org.orekit.utils import Constants
from org.orekit.time import TimeScalesFactory, AbsoluteDate
from org.orekit.frames import FramesFactory
from org.orekit.propagation.sampling import PythonMultiSatStepHandler, OrekitStepInterpolator
from org.orekit.orbits import KeplerianOrbit, PositionAngle
from org.orekit.propagation.analytical import KeplerianPropagator
from org.orekit.propagation import PropagatorsParallelizer
from java.util import ArraysAE = Constants.WGS84_EARTH_EQUATORIAL_RADIUS
MU = Constants.WGS84_EARTH_MU
UTC = TimeScalesFactory.getUTC()
class SimpleStepHandler(PythonMultiSatStepHandler):
def init(self, states0, t): pass def handleStep(self, interpolators, isLast): for interpolator in interpolators: orbit = OrekitStepInterpolator.cast_(interpolator).getCurrentState().getOrbit() print(orbit)
ra = 500 * 1000
rp = 400 * 1000
i = radians(87.0)
omega = radians(90.0)
raan = radians(0.0)
lv = radians(0.0)
a = (ra + rp + 2*AE) / 2.0
e = 1.0 - (rp + AE) / a
epoch_date = AbsoluteDate(2004, 1, 1, 23, 30, 00.000, UTC)
inertial_frame = FramesFactory.getEME2000()
duration = 60.0 * 60 * 1
orbit1 = KeplerianOrbit(a, e, i, omega, raan, lv, PositionAngle.TRUE,
inertial_frame, epoch_date, MU)
orbit2 = KeplerianOrbit(a, e, i, omega, raan+pi, lv, PositionAngle.TRUE,
inertial_frame, epoch_date, MU)
prop1 = KeplerianPropagator(orbit1)
prop2 = KeplerianPropagator(orbit2)
step_handler = SimpleStepHandler()
parallelizer = PropagatorsParallelizer(Arrays.asList([prop1, prop2]), step_handler)
parallelizer.propagate(epoch_date, epoch_date.shiftedBy(duration))