def load_orekit(self): if KepOrbElem.vm is not None: return # Init vm KepOrbElem.vm = orekit.initVM() # Load orekit data path_to_file = None # search for file on pythonpath for paths in os.environ['PYTHONPATH'].split(os.pathsep): for root, dirs, files in os.walk(paths): if 'orekit-data.zip' in files: path_to_file = os.path.join(root, 'orekit-data.zip') if path_to_file is None: # desperate search on current directory setup_orekit_curdir() else: DM = DataProvidersManager.getInstance() datafile = File(path_to_file) crawler = ZipJarCrawler(datafile) DM.clearProviders() DM.addProvider(crawler) # create gravity provider KepOrbElem.provider = GravityFieldFactory.getUnnormalizedProvider(6, 6)
def init_jvm(): """Initialize Java virtual machine for Orekit. This method also loads the orekit-data.zip from the pythonpath or form the current directory and sets up the orekit DataProviers to access it (how to do so has been copied from setup_orekit_curdir()). """ orekit.initVM() path_to_file = None # search for file on pythonpath for paths in os.environ['PYTHONPATH'].split(os.pathsep): for root, dirs, files in os.walk(paths): if 'orekit-data.zip' in files: path_to_file = os.path.join(root, 'orekit-data.zip') if path_to_file is None: # desperate search on current directory setup_orekit_curdir() else: DM = DataProvidersManager.getInstance() datafile = File(path_to_file) crawler = ZipJarCrawler(datafile) DM.clearProviders() DM.addProvider(crawler)
starting from angles only observations Python 3.5 or above necessary @author: quamo """ #initialize orekit and JVM import orekit orekit.initVM() from orekit.pyhelpers import setup_orekit_curdir, absolutedate_to_datetime setup_orekit_curdir() # Math from math import radians, pi, degrees import pandas as pd import numpy as np import matplotlib.pyplot as plt # Geometry and Frames from org.hipparchus.geometry.euclidean.threed import Vector3D, SphericalCoordinates from org.orekit.data import DataProvidersManager, ZipJarCrawler from org.orekit.frames import FramesFactory, TopocentricFrame from org.orekit.bodies import OneAxisEllipsoid, GeodeticPoint, CelestialBodyFactory # Constants, Time and Coordinates
"""Trajectory simulation and object rendering module.""" import json import logging from datetime import datetime from pathlib import Path import numpy as np import orekit from orekit.pyhelpers import setup_orekit_curdir #################### orekit VM init #################### FILE_DIR = Path(__file__).parent.resolve() OREKIT_DATA_FILE = FILE_DIR / "orekit-data.zip" OREKIT_VM = orekit.initVM() # pylint: disable=no-member setup_orekit_curdir(str(OREKIT_DATA_FILE)) #################### orekit VM init #################### from org.orekit.time import ( AbsoluteDate, TimeScalesFactory ) # pylint: disable=import-error from org.orekit.frames import FramesFactory # pylint: disable=import-error from org.orekit.utils import ( Constants, PVCoordinates, AngularCoordinates ) # pylint: disable=import-error from org.hipparchus.geometry.euclidean.threed import ( Vector3D, Rotation, RotationOrder,
from astropy.tests.helper import assert_quantity_allclose from org.hipparchus.geometry.euclidean.threed import Vector3D from org.orekit.frames import FramesFactory from org.orekit.orbits import KeplerianOrbit, PositionAngle from org.orekit.time import AbsoluteDate from org.orekit.utils import Constants as C from org.orekit.utils import PVCoordinates from poliastro.bodies import Earth from poliastro.twobody import Orbit import orekit from orekit.pyhelpers import setup_orekit_curdir # Setup orekit virtual machine and associated data VM = orekit.initVM() setup_orekit_curdir("orekit-data.zip") def validate_rv2coe(): # Orbit initial state vectors rx_0, ry_0, rz_0 = -6045.0e3, -3490.0e3, 2500.0e3 vx_0, vy_0, vz_0 = -3.457e3, 6.618e3, 2.533e3 # Build the initial Orekit orbit k = C.IAU_2015_NOMINAL_EARTH_GM r0_vec = Vector3D(rx_0, ry_0, rz_0) v0_vec = Vector3D(vx_0, vy_0, vz_0) rv_0 = PVCoordinates(r0_vec, v0_vec) epoch_00 = AbsoluteDate.J2000_EPOCH gcrf_frame = FramesFactory.getGCRF() ss0_orekit = KeplerianOrbit(rv_0, gcrf_frame, epoch_00, k)
def __init__(self, orekit_data, settings=None, **kwargs): super(Orekit, self).__init__(settings=settings, **kwargs) if self.logger is not None: self.logger.debug(f'sorts.propagator.Orekit:init') if self.profiler is not None: self.profiler.start('Orekit:init') setup_orekit_curdir(filename=orekit_data) if self.logger is not None: self.logger.debug(f'Orekit:init:orekit-data = {orekit_data}') self.utc = TimeScalesFactory.getUTC() self.__settings = dict() self.__settings['SolarStrengthLevel'] = getattr( org.orekit.forces.drag.atmosphere.data. MarshallSolarActivityFutureEstimation.StrengthLevel, self.settings['solar_activity_strength']) self._tolerances = None if self.settings['constants_source'] == 'JPL-IAU': self.mu = Constants.JPL_SSD_EARTH_GM self.R_earth = Constants.IAU_2015_NOMINAL_EARTH_EQUATORIAL_RADIUS self.f_earth = (Constants.IAU_2015_NOMINAL_EARTH_EQUATORIAL_RADIUS - Constants.IAU_2015_NOMINAL_EARTH_POLAR_RADIUS ) / Constants.IAU_2015_NOMINAL_EARTH_POLAR_RADIUS else: self.mu = Constants.WGS84_EARTH_MU self.R_earth = Constants.WGS84_EARTH_EQUATORIAL_RADIUS self.f_earth = Constants.WGS84_EARTH_FLATTENING self.M_earth = self.mu / scipy.constants.G self.__params = None self._forces = {} if self.settings['radiation_pressure']: self._forces['radiation_pressure'] = None if self.settings['drag_force']: self._forces['drag_force'] = None if self.settings['earth_gravity'] == 'HolmesFeatherstone': provider = org.orekit.forces.gravity.potential.GravityFieldFactory.getNormalizedProvider( self.settings['gravity_order'][0], self.settings['gravity_order'][1]) holmesFeatherstone = org.orekit.forces.gravity.HolmesFeatherstoneAttractionModel( FramesFactory.getITRF(IERSConventions.IERS_2010, True), provider, ) self._forces['earth_gravity'] = holmesFeatherstone elif self.settings['earth_gravity'] == 'Newtonian': Newtonian = org.orekit.forces.gravity.NewtonianAttraction(self.mu) self._forces['earth_gravity'] = Newtonian else: raise Exception( 'Supplied Earth gravity model "{}" not recognized'.format( self.settings['earth_gravity'])) if self.settings['solarsystem_perturbers'] is not None: for body in self.settings['solarsystem_perturbers']: body_template = getattr(CelestialBodyFactory, 'get{}'.format(body)) body_instance = body_template() perturbation = org.orekit.forces.gravity.ThirdBodyAttraction( body_instance) self._forces['perturbation_{}'.format(body)] = perturbation if self.logger is not None: for key in self._forces: if self._forces[key] is not None: self.logger.debug( f'Orekit:init:_forces:{key} = {type(self._forces[key])}' ) else: self.logger.debug(f'Orekit:init:_forces:{key} = None') if self.profiler is not None: self.profiler.stop('Orekit:init')
# # SORTS++ # from propagator_base import PropagatorBase import dpt_tools as dpt # # Orekit # import orekit orekit.initVM() from orekit.pyhelpers import setup_orekit_curdir __prop_file = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-1]) setup_orekit_curdir(filename=__prop_file + '/data/orekit-data-master.zip') from org.orekit.propagation.numerical import NumericalPropagator from org.orekit.propagation import SpacecraftState from org.orekit.frames import FramesFactory from org.orekit.time import TimeScalesFactory, AbsoluteDate from org.orekit.orbits import KeplerianOrbit, EquinoctialOrbit, CartesianOrbit, PositionAngle from org.orekit.utils import Constants, IERSConventions, PVCoordinates from org.orekit.bodies import CelestialBodyFactory, OneAxisEllipsoid from org.orekit.python import PythonOrekitStepHandler import org from orekit import JArray_double utc = TimeScalesFactory.getUTC()