From 3d45ea57ab9759c30b96153b94d135cd7c493de5 Mon Sep 17 00:00:00 2001
From: petrush <petrus.hyvonen@sscspace.com>
Date: Wed, 23 Nov 2016 16:38:10 +0100
Subject: [PATCH] Added example of numerical propagator.

---
 examples/Example numerical prop.ipynb | 284 ++++++++++++++++++++++++++
 1 file changed, 284 insertions(+)
 create mode 100644 examples/Example numerical prop.ipynb

diff --git a/examples/Example numerical prop.ipynb b/examples/Example numerical prop.ipynb
new file mode 100644
index 0000000..16d9724
--- /dev/null
+++ b/examples/Example numerical prop.ipynb	
@@ -0,0 +1,284 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Numerical Propagation Example"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Populating the interactive namespace from numpy and matplotlib\n"
+     ]
+    }
+   ],
+   "source": [
+    "%pylab inline"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "import orekit\n",
+    "orekit.initVM()\n",
+    "\n",
+    "from orekit.pyhelpers import setup_orekit_curdir\n",
+    "setup_orekit_curdir()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "from java.util import Arrays\n",
+    "from orekit import JArray_double"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Do the orekit imports"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "from org.orekit.bodies import  OneAxisEllipsoid\n",
+    "from org.orekit.frames import  FramesFactory\n",
+    "from org.orekit.data import DataProvidersManager, ZipJarCrawler\n",
+    "from org.orekit.time import TimeScalesFactory, AbsoluteDate\n",
+    "from org.orekit.orbits import KeplerianOrbit\n",
+    "from org.orekit.utils import Constants\n",
+    "from org.orekit.propagation.analytical import EcksteinHechlerPropagator\n",
+    "from org.orekit.propagation.analytical.tle import TLEPropagator\n",
+    "from org.orekit.propagation.conversion import FiniteDifferencePropagatorConverter\n",
+    "from org.orekit.propagation.conversion import TLEPropagatorBuilder\n",
+    "from datetime import datetime\n",
+    "from org.orekit.propagation import SpacecraftState\n",
+    "from org.orekit.orbits import OrbitType, PositionAngle\n",
+    "from org.orekit.propagation.numerical import NumericalPropagator\n",
+    "from org.hipparchus.ode.nonstiff import DormandPrince853Integrator\n",
+    "from org.orekit.forces.gravity.potential import GravityFieldFactory\n",
+    "from org.orekit.forces.gravity import HolmesFeatherstoneAttractionModel\n",
+    "from org.orekit.utils import IERSConventions"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "import matplotlib.dates as mdates\n",
+    "from math import radians\n",
+    "import numpy as np\n",
+    "import matplotlib.pyplot as plt"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "# Some Constants\n",
+    "ae = Constants.WGS84_EARTH_EQUATORIAL_RADIUS\n",
+    "mu = Constants.WGS84_EARTH_MU\n",
+    "utc = TimeScalesFactory.getUTC()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Initial osculating orbit"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "ra = 814 * 1000         # km Apogee!\n",
+    "rp = 786 * 1000         # km Perigee!\n",
+    "i = radians(98.55)      # inclination\n",
+    "omega = radians(90.0)   # perigee argument\n",
+    "raan = radians(5.1917)  # right ascension of ascending node\n",
+    "lv = radians(0.0567634)    # True anomaly\n",
+    "epochDate = AbsoluteDate(2012, 01, 26, 16, 00, 00.000, utc)\n",
+    "\n",
+    "a = (rp + ra + 2 * ae) / 2.0    # semi major axis in km\n",
+    "e = 1.0 - (rp + ae) / a\n",
+    "\n",
+    "#Inertial frame where the satellite is defined\n",
+    "inertialFrame = FramesFactory.getEME2000()\n",
+    "\n",
+    "#Orbit construction as Keplerian\n",
+    "initialOrbit = KeplerianOrbit(a, e, i, omega, raan, lv,\n",
+    "                              PositionAngle.TRUE,\n",
+    "                              inertialFrame, epochDate, mu)\n",
+    "satellite_mass = 100.0 # kg\n",
+    "initialState = SpacecraftState(initialOrbit, satellite_mass) "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Set up propagator"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "minStep = 0.001;\n",
+    "maxstep = 1000.0;\n",
+    "initStep = 60.0"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "positionTolerance = 1.0 \n",
+    "orbitType = OrbitType.CARTESIAN\n",
+    "tol = NumericalPropagator.tolerances(positionTolerance, initialOrbit, orbitType)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "integrator = DormandPrince853Integrator(minStep, maxstep, \n",
+    "    JArray_double.cast_(tol[0]),  # Double array of doubles needs to be casted in Python\n",
+    "    JArray_double.cast_(tol[1]))\n",
+    "integrator.setInitialStepSize(initStep)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "propagator_num = NumericalPropagator(integrator)\n",
+    "propagator_num.setOrbitType(orbitType)\n",
+    "propagator_num.setInitialState(initialState)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "itrf    = FramesFactory.getITRF(IERSConventions.IERS_2010, True) # International Terrestrial Reference Frame, earth fixed\n",
+    "earth = OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS,\n",
+    "                         Constants.WGS84_EARTH_FLATTENING,\n",
+    "                         itrf)\n",
+    "gravityProvider = GravityFieldFactory.getNormalizedProvider(8, 8)\n",
+    "propagator_num.addForceModel(HolmesFeatherstoneAttractionModel(earth.getBodyFrame(), gravityProvider))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Propagate orbit numerically"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "## Create time vector\n",
+    "startDate = AbsoluteDate(2012, 01, 26, 11, 00, 00.000, utc)\n",
+    "\n",
+    "#Overall duration in seconds for extrapolation\n",
+    "duration = 86400 * 3 \n",
+    "step_time = 60 * 3\n",
+    "\n",
+    "# Time array in orekit AbsoluteDate format\n",
+    "t = [startDate.shiftedBy(float(dt)) \\\n",
+    "        for dt in np.arange(0, duration, step_time)]\n",
+    "\n",
+    "state = [propagator_num.propagate(tt) for tt in t]\n",
+    "pv_org = [propagator_num.propagate(tt).getPVCoordinates() for tt in t]"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python [default]",
+   "language": "python",
+   "name": "python2"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 2
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython2",
+   "version": "2.7.12"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
-- 
GitLab