This repository contains the flight trajectory optimizer module of OpenAP.
A more detailed user guide can be found on: https://openap.dev/top.
OpenAP.top uses cfgrib
for integrating wind data, cartopy
for plotting, and a few other libraries. I recommend using conda
to install these dependencies. Following is an example how I set it up on my computer for testing.
- Create a new conda environment (
openap-env
), which avoids messing up the base conda environment:
conda create -n openap-env python=3.10 -c conda-forge
- Use the
openap-env
environment
conda activate openap-env
- Install dependent libraries:
conda install cfgrib cartopy casadi scikit-learn -c conda-forge
- Install the most recent version of
openap
:
pip install --upgrade git+https://github.com/junzis/openap
- Install the most recent version of
openap-top
:
pip install --upgrade git+https://github.com/junzis/openap-top
Example code to generate a fuel optimal flight between two airports:
from openap import top
optimizer = top.CompleteFlight("A320", "EHAM", "LGAV", m0=0.85)
flight = optimizer.trajectory(objective="fuel")
You can specify different objective functions as:
flight = optimizer.trajectory(objective="ci:30")
flight = optimizer.trajectory(objective="gwp100")
flight = optimizer.trajectory(objective="gtp100")
The final flight
object is a pandas DataFrame. The following is an example:
To enable wind in your optimizer, you must first download meteorological data in grib
format from ECMWF, for example, the ERA5 data at https://doi.org/10.24381/cds.bd0915c6.
Then enable the wind for the defined optimizer.
Example code:
from openap import top
from openap.top import wind
optimizer = top.CompleteFlight("A320", "EHAM", "LGAV", m0=0.85)
fgrib = "path_to_the_wind_data.grib"
windfield = wind.read_grib(fgrib)
optimizer.enable_wind(windfield)
flight = optimizer.trajectory(objective="fuel")
If your grib file includes multiple timestamps, make sure to filter the correct time in the previous windfield
object (pandas DataFrame).