Hey everyone, im new to orekit and i have been trying to develop a numerical propagator for a LEO with really accuracy ( within hundredths of meters) after around 4 days of propagation . The existing code i have developed so far , the error builds up to around 15kms. If there are any suggestions on how i can improve the accuracy and bring down the error i would really appreciate it .
Here’s the details along with code snippets .
Input Frame TOD & Orbit Type Cartesian Orbit :
self.earth_frame = FramesFactory.getITRF(IERSConventions.IERS_2010, False)
self.earth = OneAxisEllipsoid(Constants.IERS2010_EARTH_EQUATORIAL_RADIUS,Constants.IERS2010_EARTH_FLATTENING, self.earth_frame)
self.tod_frame = FramesFactory.getTOD(IERSConventions.IERS_2010, True)
#Orbit Type and sattelite initial state
self.init_orbit = CartesianOrbit(self.pv_coord, self.tod_frame, self.startDate, self.mu)
self.init_state = SpacecraftState(self.init_orbit, self.mass)
#Setting up Integrator : Dormand Prince 853 Integrator ,Rangge Kutta 8th order
self.orbitType = OrbitType.CARTESIAN
Propagator Tolerances :
self.minStep = 0.001
self.maxstep = 60.0
self.initStep = 30.0
self.positionTolerance = 0.1e-3
self.tol = NumericalPropagator.tolerances(self.positionTolerance, self.init_orbit, self.orbitType)
self.integrator = DormandPrince853Integrator(self.minStep, self.maxstep,
JArray_double.cast_(self.tol[0]), # Double array of doubles needs to be casted in Python
JArray_double.cast_(self.tol[1]))
self.integrator.setInitialStepSize(self.initStep)
#Setting up Propagator
self.propagator_num = NumericalPropagator(self.integrator)
self.propagator_num.setOrbitType(self.orbitType)
self.propagator_num.setInitialState(self.init_state)
Models :
- Gravity Provider using Holmes Feather Stone (Deg 180, Oder 180)
- Occulting Body for Moon
- Third Body Attraction for Sun & Moon
- Atmospheric Drag and Solar Radiation Pressure
self.atmos = NRLMSISE00(self.cswl,self.sun,self.earth)
drag = IsotropicDrag(self.atmos_area, self.atmos_coeff)
self.atmos_drag = DragForce(self.atmos,drag)
self.propagator_num.addForceModel(self.atmos_drag)
#Solar Radiation Pressure
self.umbra = ConicallyShadowedLightFluxModel(Constants.SUN_RADIUS,self.sun, Constants.IERS2010_EARTH_EQUATORIAL_RADIUS)
self.srp_model = IsotropicRadiationSingleCoefficient(self.solar_area, self.solar_coeff)
self.solar_radiation = SolarRadiationPressure(self.sun,self.earth, self.srp_model)
self.propagator_num.addForceModel(self.solar_radiation)
t = [self.startDate.shiftedBy(float(dt)) \
for dt in np.arange(0, self.duration, self.step_time)]
self.prop_val = [self.propagator_num.propagate(tt) for tt in t]
Any Suggestions for improvements / Suggestions would really help.
Thanks in Advance.