pycontrails 0.39.6__tar.gz → 0.40.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pycontrails might be problematic. Click here for more details.
- {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/workflows/docs.yaml +17 -10
- pycontrails-0.40.1/.github/workflows/release.yaml +109 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/workflows/test.yaml +32 -18
- {pycontrails-0.39.6 → pycontrails-0.40.1}/.gitignore +3 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/CHANGELOG.md +42 -3
- {pycontrails-0.39.6 → pycontrails-0.40.1}/Makefile +2 -1
- {pycontrails-0.39.6/pycontrails.egg-info → pycontrails-0.40.1}/PKG-INFO +1 -1
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/_static/pycontrails.bib +63 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/conf.py +1 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/CoCiP.ipynb +4 -1
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/ECMWF.ipynb +33 -8
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/Flight.ipynb +1 -1
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/install.rst +12 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/_version.py +2 -2
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/flight.py +2 -2
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/interpolation.py +259 -169
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/met.py +177 -137
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/models.py +5 -4
- pycontrails-0.40.1/pycontrails/core/rgi_cython.c +30759 -0
- pycontrails-0.40.1/pycontrails/core/rgi_cython.pyx +184 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/vector.py +60 -61
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/ecmwf/era5.py +24 -5
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/ecmwf/hres.py +29 -5
- pycontrails-0.40.1/pycontrails/models/__init__.py +1 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/accf.py +1 -2
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/aircraft_performance.py +2 -2
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/cocip.py +68 -6
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocipgrid/cocip_grid.py +9 -3
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocipgrid/cocip_time_handling.py +3 -2
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/humidity_scaling.py +5 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/sac.py +1 -1
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/utils/temp.py +4 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1/pycontrails.egg-info}/PKG-INFO +1 -1
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails.egg-info/SOURCES.txt +3 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails.egg-info/requires.txt +1 -1
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails.egg-info/top_level.txt +0 -1
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pyproject.toml +3 -2
- pycontrails-0.40.1/setup.py +18 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/__init__.py +3 -4
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/conftest.py +4 -2
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_cache.py +8 -3
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_cocip.py +22 -17
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_cocip_grid.py +16 -10
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_cocip_grid_parity.py +5 -1
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_dtypes.py +50 -112
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_fleet.py +5 -1
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_grid_to_netcdf.py +16 -7
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_interpolation.py +161 -58
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_met.py +2 -2
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_models.py +2 -2
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_sac_issr.py +37 -21
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_utils.py +11 -1
- pycontrails-0.39.6/.github/workflows/release.yaml +0 -113
- pycontrails-0.39.6/tests/unit/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/pull_request_template.md +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/workflows/benchmark.yaml +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/workflows/doctest.yaml +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/.pre-commit-config.yaml +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/.zenodo.json +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/CONTRIBUTING.md +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/LICENSE +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/NOTICE +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/README.md +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/RELEASE.md +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/_static/css/style.css +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/_static/img/favicon.png +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/api.rst +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/changelog.rst +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/contributing.rst +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/develop.rst +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/ACCF.ipynb +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/Cache.ipynb +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/ISSR.ipynb +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/Meteorology.ipynb +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/SAC.ipynb +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/flight.csv +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples.rst +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/index.rst +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/literature.rst +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/tutorials/CoCiP.ipynb +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/tutorials/flight.csv +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/tutorials.rst +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/cache.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/coordinates.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/datalib.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/fleet.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/fuel.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/met_var.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/polygon.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/ecmwf/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/ecmwf/common.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/ecmwf/ifs.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/ecmwf/variables.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/gfs/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/gfs/gfs.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/gfs/variables.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/ext/bada/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/ext/cirium/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/cocip_params.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/cocip_uncertainty.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/contrail_properties.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/output/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/output/flight_summary.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/output/grid_cirrus.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/radiative_forcing.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/radiative_heating.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/wake_vortex.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/wind_shear.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocipgrid/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/emissions/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/emissions/black_carbon.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/emissions/emissions.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/emissions/ffm2.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/emissions/static/edb-gaseous-v28c-engines.csv +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/emissions/static/edb-nvpm-v28c-engines.csv +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/issr.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/pcc.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/pcr.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/tau_cirrus.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/physics/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/physics/constants.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/physics/geo.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/physics/jet.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/physics/thermo.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/physics/units.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/py.typed +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/utils/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/utils/iteration.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/utils/json.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/utils/synthetic_flight.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/utils/types.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails.egg-info/dependency_links.txt +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/setup.cfg +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/_deprecated.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/Makefile +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/README.md +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/benchmark.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/compare.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/data.md +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/output.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/review.ipynb +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip-fortran/README.md +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/north-atlantic-study/README.md +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/north-atlantic-study/support.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/north-atlantic-study/validate.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/fixtures/cocip-met.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/fixtures/cocip-met2.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/fixtures/ecmwf-met.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/fixtures/gfs-met.py +0 -0
- {pycontrails-0.39.6/pycontrails/models → pycontrails-0.40.1/tests/unit}/__init__.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-contrail-output.json +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-contrail-output2.json +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-flight-output.json +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-flight-output2.json +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-flight-statistics.json +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-output-contrail-edges.json +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-output-grid-cirrus-summary.json +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/flight-cocip2.csv +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/flight-meridian.csv +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/flight-metadata.json +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/flight.csv +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-accf-pl.nc +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-accf-sl.nc +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-ecmwf-pl.nc +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-ecmwf-sl.nc +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-era5-cocip1.nc +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-era5-cocip2.nc +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-gfs.nc +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/polygon-bug.nc +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/rad-era5-cocip1.nc +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/rad-era5-cocip2.nc +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/rad-gfs.nc +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_accf.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_cocip_radiative_forcing.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_cocip_uncertainty.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_coordinates.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_datalib.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_ecmwf.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_emissions.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_flight.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_fuel.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_geo.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_gfs.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_humidity_scaling.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_init.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_met_cache.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_pcc.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_polygons.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_tau_cirrus.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_thermo_sac.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_units.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_vector.py +0 -0
- {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_zarr.py +0 -0
|
@@ -18,23 +18,15 @@ on:
|
|
|
18
18
|
env:
|
|
19
19
|
PYCONTRAILS_CACHE_DIR: '${{ github.workspace }}/.cache/pycontrails'
|
|
20
20
|
|
|
21
|
-
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
|
22
|
-
permissions:
|
|
23
|
-
contents: read
|
|
24
|
-
pages: write
|
|
25
|
-
id-token: write
|
|
26
|
-
|
|
27
21
|
# Allow one concurrent deployment
|
|
28
22
|
concurrency:
|
|
29
23
|
group: "pages"
|
|
30
24
|
cancel-in-progress: true
|
|
31
25
|
|
|
26
|
+
|
|
32
27
|
jobs:
|
|
33
28
|
build:
|
|
34
29
|
runs-on: ubuntu-latest
|
|
35
|
-
environment:
|
|
36
|
-
name: github-pages
|
|
37
|
-
url: ${{ steps.deployment.outputs.page_url }}
|
|
38
30
|
|
|
39
31
|
steps:
|
|
40
32
|
- name: OS Dependencies
|
|
@@ -83,6 +75,21 @@ jobs:
|
|
|
83
75
|
with:
|
|
84
76
|
path: 'docs/_build/html/'
|
|
85
77
|
|
|
78
|
+
deploy:
|
|
79
|
+
needs: build
|
|
80
|
+
runs-on: ubuntu-latest
|
|
81
|
+
|
|
82
|
+
environment:
|
|
83
|
+
name: github-pages
|
|
84
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
85
|
+
|
|
86
|
+
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
|
87
|
+
permissions:
|
|
88
|
+
contents: read
|
|
89
|
+
pages: write
|
|
90
|
+
id-token: write
|
|
91
|
+
|
|
92
|
+
steps:
|
|
86
93
|
- name: Deploy to GitHub Pages
|
|
87
94
|
id: deployment
|
|
88
|
-
uses: actions/deploy-pages@
|
|
95
|
+
uses: actions/deploy-pages@v2
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# https://github.com/pypa/cibuildwheel/blob/main/examples/github-deploy.yml
|
|
2
|
+
|
|
3
|
+
name: Release
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
release:
|
|
7
|
+
types:
|
|
8
|
+
- published
|
|
9
|
+
branches:
|
|
10
|
+
- main
|
|
11
|
+
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
check-main-test-status:
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- name: OS Dependencies
|
|
19
|
+
run: sudo apt-get install -y curl jq
|
|
20
|
+
|
|
21
|
+
- uses: actions/checkout@v3
|
|
22
|
+
|
|
23
|
+
- name: Check main test status
|
|
24
|
+
run: make main-test-status
|
|
25
|
+
|
|
26
|
+
build_wheels:
|
|
27
|
+
name: Build wheels on ${{ matrix.os }}
|
|
28
|
+
runs-on: ${{ matrix.os }}
|
|
29
|
+
strategy:
|
|
30
|
+
fail-fast: false
|
|
31
|
+
matrix:
|
|
32
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
33
|
+
|
|
34
|
+
steps:
|
|
35
|
+
- uses: actions/checkout@v3
|
|
36
|
+
with:
|
|
37
|
+
fetch-depth: 0
|
|
38
|
+
|
|
39
|
+
# https://cibuildwheel.readthedocs.io/en/stable/options/#testing
|
|
40
|
+
- name: Build wheels
|
|
41
|
+
uses: pypa/cibuildwheel@v2.12.1
|
|
42
|
+
env:
|
|
43
|
+
CIBW_BUILD: cp39-* cp310-* cp311-*
|
|
44
|
+
CIBW_SKIP: '*-win32 *-manylinux_i686 *-musllinux*'
|
|
45
|
+
CIBW_BUILD_VERBOSITY: 3
|
|
46
|
+
CIBW_ARCHS_MACOS: x86_64 arm64
|
|
47
|
+
CIBW_TEST_SKIP: '*-macosx_arm64'
|
|
48
|
+
# Completely isolate tests to prevent cibuildwheel from importing the
|
|
49
|
+
# source instead of the wheel. This happens when tests/__init__.py is read.
|
|
50
|
+
CIBW_TEST_EXTRAS: "complete,dev"
|
|
51
|
+
CIBW_TEST_COMMAND: >
|
|
52
|
+
mv {project}/pycontrails {project}/pycontrails-bak &&
|
|
53
|
+
python -m pytest {project}/tests -vv &&
|
|
54
|
+
mv {project}/pycontrails-bak {project}/pycontrails
|
|
55
|
+
|
|
56
|
+
- uses: actions/upload-artifact@v3
|
|
57
|
+
with:
|
|
58
|
+
path: ./wheelhouse/*.whl
|
|
59
|
+
|
|
60
|
+
build_sdist:
|
|
61
|
+
name: Build source distribution
|
|
62
|
+
runs-on: ubuntu-latest
|
|
63
|
+
steps:
|
|
64
|
+
- uses: actions/checkout@v3
|
|
65
|
+
with:
|
|
66
|
+
fetch-depth: 0
|
|
67
|
+
|
|
68
|
+
- name: Build sdist
|
|
69
|
+
run: pipx run build --sdist
|
|
70
|
+
|
|
71
|
+
- uses: actions/upload-artifact@v3
|
|
72
|
+
with:
|
|
73
|
+
path: dist/*.tar.gz
|
|
74
|
+
|
|
75
|
+
upload_pypi_test:
|
|
76
|
+
needs: [build_wheels, build_sdist]
|
|
77
|
+
runs-on: ubuntu-latest
|
|
78
|
+
steps:
|
|
79
|
+
- uses: actions/download-artifact@v3
|
|
80
|
+
with:
|
|
81
|
+
name: artifact
|
|
82
|
+
path: dist
|
|
83
|
+
|
|
84
|
+
- name: Publish distribution 📦 to Test PyPI
|
|
85
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
86
|
+
with:
|
|
87
|
+
user: __token__
|
|
88
|
+
password: ${{ secrets.TEST_PYPI_API_TOKEN }}
|
|
89
|
+
repository-url: https://test.pypi.org/legacy/
|
|
90
|
+
verbose: true
|
|
91
|
+
verify-metadata: true
|
|
92
|
+
|
|
93
|
+
upload_pypi:
|
|
94
|
+
if: ${{ github.event_name == 'release' }}
|
|
95
|
+
needs: [build_wheels, build_sdist, check-main-test-status]
|
|
96
|
+
runs-on: ubuntu-latest
|
|
97
|
+
steps:
|
|
98
|
+
- uses: actions/download-artifact@v3
|
|
99
|
+
with:
|
|
100
|
+
name: artifact
|
|
101
|
+
path: dist
|
|
102
|
+
|
|
103
|
+
- name: Publish distribution 📦 to PyPI
|
|
104
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
105
|
+
with:
|
|
106
|
+
user: __token__
|
|
107
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
108
|
+
verbose: true
|
|
109
|
+
verify-metadata: true
|
|
@@ -37,7 +37,7 @@ jobs:
|
|
|
37
37
|
strategy:
|
|
38
38
|
fail-fast: false
|
|
39
39
|
matrix:
|
|
40
|
-
os: [ubuntu-latest
|
|
40
|
+
os: [ubuntu-latest, windows-latest]
|
|
41
41
|
pyversion: ['3.9', '3.10', '3.11']
|
|
42
42
|
runs-on: ${{ matrix.os }}
|
|
43
43
|
|
|
@@ -82,34 +82,48 @@ jobs:
|
|
|
82
82
|
mkdir -p ${{ env.BADA_CACHE_DIR }}
|
|
83
83
|
gcloud storage cp -r gs://contrails-301217-bada/bada/bada3 ${{ env.BADA_CACHE_DIR }}
|
|
84
84
|
gcloud storage cp -r gs://contrails-301217-bada/bada/bada4 ${{ env.BADA_CACHE_DIR }}
|
|
85
|
-
ls -
|
|
85
|
+
ls -l ${{ env.BADA_CACHE_DIR }}
|
|
86
86
|
|
|
87
87
|
- name: Install pycontrails (dev)
|
|
88
|
-
run:
|
|
88
|
+
run: |
|
|
89
|
+
pip install -U pip wheel
|
|
90
|
+
pip install -e .[dev,docs,ecmwf,gcp,gfs,jupyter,vis,zarr] --verbose
|
|
91
|
+
|
|
92
|
+
# In latest-windows, redirecting stdout to a file uses utf-16 encoding
|
|
93
|
+
# This gives an error when ssh tries to read the key
|
|
94
|
+
# Instead don't pre-create the known_hosts file
|
|
95
|
+
- name: Install pycontrails-bada - windows
|
|
96
|
+
if: ${{ matrix.os == 'windows-latest' }}
|
|
97
|
+
run: |
|
|
98
|
+
mkdir -p $HOME/.ssh/
|
|
99
|
+
gcloud secrets versions access latest --secret="contrails-301217-github-ssh-key" --out-file="$HOME/.ssh/id_rsa"
|
|
100
|
+
pip install "pycontrails-bada @ git+ssh://git@github.com/contrailcirrus/pycontrails-bada.git"
|
|
101
|
+
env:
|
|
102
|
+
GIT_SSH_COMMAND: "ssh -o StrictHostKeyChecking=no"
|
|
89
103
|
|
|
90
|
-
- name: Install pycontrails-bada
|
|
104
|
+
- name: Install pycontrails-bada - linux
|
|
105
|
+
if: ${{ matrix.os == 'ubuntu-latest' }}
|
|
91
106
|
run: |
|
|
92
|
-
mkdir -p
|
|
93
|
-
|
|
94
|
-
|
|
107
|
+
mkdir -p $HOME/.ssh/
|
|
108
|
+
ssh-keyscan github.com > $HOME/.ssh/known_hosts
|
|
109
|
+
gcloud secrets versions access latest --secret="contrails-301217-github-ssh-key" > $HOME/.ssh/id_rsa
|
|
110
|
+
chmod 600 $HOME/.ssh/id_rsa
|
|
95
111
|
pip install "pycontrails-bada @ git+ssh://git@github.com/contrailcirrus/pycontrails-bada.git"
|
|
96
112
|
|
|
97
113
|
- name: Show environment
|
|
98
114
|
run: |
|
|
99
115
|
pwd
|
|
100
|
-
ls -
|
|
101
|
-
|
|
116
|
+
ls -l .
|
|
117
|
+
ls -l pycontrails
|
|
102
118
|
python --version
|
|
103
|
-
which mypy
|
|
104
119
|
mypy --version
|
|
105
|
-
|
|
106
|
-
python -m pip check
|
|
120
|
+
pip list
|
|
107
121
|
|
|
108
122
|
- name: QC & Test
|
|
109
123
|
run: |
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
124
|
+
pip check
|
|
125
|
+
black pycontrails --check
|
|
126
|
+
ruff pycontrails tests
|
|
127
|
+
mypy pycontrails
|
|
128
|
+
pydocstyle pycontrails --verbose
|
|
129
|
+
pytest tests/unit -vv
|
|
@@ -1,13 +1,52 @@
|
|
|
1
1
|
|
|
2
2
|
# Changelog
|
|
3
3
|
|
|
4
|
+
## v0.40.1
|
|
5
|
+
|
|
6
|
+
#### Fixes
|
|
7
|
+
|
|
8
|
+
- Use [oldest-supported-numpy](https://pypi.org/project/oldest-supported-numpy/) for building pycontrails wheels. This allows pycontrails to be compatible with environments that use old versions of numpy. The [pycontrails v0.40.0 wheels](https://pypi.org/project/pycontrails/0.40.0/#files) are not compatible with numpy 1.22.
|
|
9
|
+
- Fix a unit test (`test_dtypes.py::test_issr_sac_grid_output`) that occasionally hangs.
|
|
10
|
+
|
|
11
|
+
## v0.40.0
|
|
12
|
+
|
|
13
|
+
Support scipy 1.10, improve interpolation performance, and fix many windows issues.
|
|
14
|
+
|
|
15
|
+
#### Features
|
|
16
|
+
|
|
17
|
+
- Improve interpolation performance by cythonizing linear interpolation. This extends the approach taken in [scipy 1.10](https://github.com/scipy/scipy/pull/17291). The pycontrails [cython routines](pycontrails/core/rgi_cython.pyx) allow for both float64 and float32 grids via cython fused types (the current scipy implementation assumes float64). In addition, interpolation up to dimension 4 is supported (the scipy implementation supports dimension 1 and 2).
|
|
18
|
+
- Officially support [scipy 1.10](https://scipy.github.io/devdocs/release/1.10.0-notes.html).
|
|
19
|
+
- Officially test on windows in the GitHub Actions CI.
|
|
20
|
+
- Build custom wheels for python 3.9, 3.10, and 3.11 for the following platforms:
|
|
21
|
+
- Linux (x86_64)
|
|
22
|
+
- macOS (arm64 and x86_64)
|
|
23
|
+
- Windows (x86_64)
|
|
24
|
+
|
|
25
|
+
#### Breaking changes
|
|
26
|
+
|
|
27
|
+
- Change `MetDataset` and `MetDataArray` conventions: underlying dimension coordinates are automatically promoted to float64.
|
|
28
|
+
- Change how datetime arrays are converted to floating values for interpolation. The new approach introduces small differences compared with the previous implementation. These differences are significant enough to see relative differences in CoCiP predictions on the order of 1e-4.
|
|
29
|
+
|
|
30
|
+
#### Fixes
|
|
31
|
+
|
|
32
|
+
- Unit tests no longer raise errors when the `pycontrails-bada` package is not installed. Instead, some tests are skipped.
|
|
33
|
+
- Fix many numpy casting issues encountered on windows.
|
|
34
|
+
- Fix temp file issues encountered on windows.
|
|
35
|
+
- Officially support changes in `xarray` 2023.04 and `pandas` 2.0.
|
|
36
|
+
|
|
37
|
+
#### Internals
|
|
38
|
+
|
|
39
|
+
- Make the `interpolation` module more aligned with [scipy 1.10 enhancements](https://docs.scipy.org/doc/scipy/release.1.10.0.html#scipy-interpolate-improvements) to the `RegularGridInterpolator`. In particular, grid coordinates now must be float64.
|
|
40
|
+
- Use [cibuildwheel](https://cibuildwheel.readthedocs.io/en/stable/) to build wheels for Linux, macOS (arm64 and x86_64), and Windows on [release](.github/workflows/release.yaml) in Github Actions. Allow this workflow to be triggered manually to test the release process without actually publishing to PyPI.
|
|
41
|
+
- Simplify interpolation with pre-computed indices (invoked with the model parameter `interpolation_use_indices`) via a `RGIArtifacts` interface.
|
|
42
|
+
- Overhaul much of the interpolation module to improve performance.
|
|
43
|
+
- Slight performance enhancements to the `met` module.
|
|
44
|
+
|
|
4
45
|
## v0.39.6
|
|
5
46
|
|
|
6
47
|
#### Features
|
|
7
48
|
|
|
8
|
-
- Add `geo.azimuth` and `geo.segment_azimuth` functions to calculate the azimuth
|
|
9
|
-
between coordinates.
|
|
10
|
-
Azimuth is the angle between coordinates relative to true north on the range [0, 360].
|
|
49
|
+
- Add `geo.azimuth` and `geo.segment_azimuth` functions to calculate the azimuth between coordinates. Azimuth is the angle between coordinates relative to true north on the interval `[0, 360)`.
|
|
11
50
|
|
|
12
51
|
#### Fixes
|
|
13
52
|
|
|
@@ -81,7 +81,7 @@ pytest:
|
|
|
81
81
|
pytest tests/unit
|
|
82
82
|
|
|
83
83
|
pydocstyle:
|
|
84
|
-
pydocstyle pycontrails --
|
|
84
|
+
pydocstyle pycontrails --verbose
|
|
85
85
|
|
|
86
86
|
pytest-cov:
|
|
87
87
|
pytest \
|
|
@@ -172,6 +172,7 @@ nb-execute: nb-black-check
|
|
|
172
172
|
nb-check-links:
|
|
173
173
|
python -m pytest --check-links \
|
|
174
174
|
--check-links-ignore "https://doi.org/10.1021/acs.est.9b05608" \
|
|
175
|
+
--check-links-ignore "https://doi.org/10.1021/acs.est.2c05781" \
|
|
175
176
|
--check-links-ignore "https://github.com/contrailcirrus/pycontrails-bada" \
|
|
176
177
|
docs/examples docs/tutorials
|
|
177
178
|
|
|
@@ -382,6 +382,22 @@
|
|
|
382
382
|
langid = {english}
|
|
383
383
|
}
|
|
384
384
|
|
|
385
|
+
@inproceedings{schumannContrailCirrusPrediction2010,
|
|
386
|
+
title = {A Contrail Cirrus Prediction Tool},
|
|
387
|
+
booktitle = {Proceedings of the 2nd {{International Conference}} on {{Transport}}, {{Atmosphere}} and {{Climate}} ({{TAC-2}})},
|
|
388
|
+
author = {Schumann, Ulrich},
|
|
389
|
+
editor = {Sausen, Robert and van Velthoven, Peter F. J. and Br{\"u}ning, Claus and Blum, Anja},
|
|
390
|
+
year = {2010},
|
|
391
|
+
volume = {2010--10},
|
|
392
|
+
pages = {69--74},
|
|
393
|
+
publisher = {{DLR}},
|
|
394
|
+
address = {{Aachen, Germany and Maastricht, The Netherlands}},
|
|
395
|
+
issn = {1434-8454},
|
|
396
|
+
urldate = {2023-04-16},
|
|
397
|
+
abstract = {An new ``Contrail Cirrus Prediction Tool'' (CoCiP) has been developed to simulate contrail cirrus resulting from a single flight as well as from a fleet of cruising aircraft, flight by flight, regionally or globally. The method predicts contrail cirrus for given air traffic and weather prediction data. The method describes the life cycle of each contrail individually using a Lagrangian Gaussian plume model with simple bulk contrail ice properties, without feedback to meteorology. Contrails are initiated when the Schmidt-Appleman criterion is satisfied and when the ambient atmosphere is humid enough to allow for contrail persistence. The initial plume properties reflect properties of the originating aircraft. The evolution of individual contrails of cruising aircraft is computed using wind, temperature, humidity, and ice water content from numerical weather prediction (NWP) output. The plume trajectory follows horizontal and vertical wind. The model simulates shear and turbulence driven spreading, ice water content as a function of ice supersaturation, and some ice particle loss processes (turbulent mixing, aggregation and sedimentation). Radiative cloud forcing is estimated for the sum of all contrails using radiative fluxes without contrails from NWP output. The tool is kept simple to allow for efficient contrail simulations. The method has been tested for case studies with some comparisons to observations. The most critical input parameter is the NWP humidity field. The results compare favourably with observations and support interpretations of insitu, satellite and lidar observed aviation impact on cirrus clouds. CoCiP can be used to predict and minimize the climate impact of contrails.},
|
|
398
|
+
langid = {english}
|
|
399
|
+
}
|
|
400
|
+
|
|
385
401
|
@article{schumannContrailCirrusPrediction2012,
|
|
386
402
|
title = {A Contrail Cirrus Prediction Model},
|
|
387
403
|
author = {Schumann, U.},
|
|
@@ -431,6 +447,23 @@
|
|
|
431
447
|
langid = {english}
|
|
432
448
|
}
|
|
433
449
|
|
|
450
|
+
@inproceedings{schumannDeterminationContrailsSatellite1990,
|
|
451
|
+
title = {Determination of {{Contrails}} from {{Satellite Data}} and {{Observational Results}}},
|
|
452
|
+
booktitle = {Air {{Traffic}} and the {{Environment}} \textemdash{} {{Background}}, {{Tendencies}} and {{Potential Global Atmospheric Effects}}},
|
|
453
|
+
author = {Schumann, U. and Wendling, P.},
|
|
454
|
+
editor = {Schumann, U.},
|
|
455
|
+
year = {1990},
|
|
456
|
+
series = {Lecture {{Notes}} in {{Engineering}}},
|
|
457
|
+
pages = {138--153},
|
|
458
|
+
publisher = {{Springer}},
|
|
459
|
+
address = {{Berlin, Heidelberg}},
|
|
460
|
+
doi = {10.1007/978-3-642-51686-3_9},
|
|
461
|
+
abstract = {Condensation trails (contrails) from air traffic in the upper troposphere may have an effect on the earth's climate. We first discuss the state of knowledge. Then some results of radiation transfer calculations are reported which help to estimate the order of magnitude of the effects of cirrus clouds and water vapour in comparison to doubling of the concentration of CO2. The main part of the paper describes the analysis of contrails from satellite data. Based on NOAA-AVHRR data we present results for a specific case where contrails covered a few percent of a region including southern Germany and the Alps. Preliminary results are reported for 99 further cases. A pattern recognition method is described to identify contrails and the related cloud cover automatically. Laser observations reflect contrail cross-sections which are several km in width and about 700 m thick. The optical thickness reaches values up to 1.},
|
|
462
|
+
isbn = {978-3-642-51686-3},
|
|
463
|
+
langid = {english},
|
|
464
|
+
keywords = {Advanced Very High Resolution Radiometer,Cloud Cover,Optical Thickness,Sunshine Duration}
|
|
465
|
+
}
|
|
466
|
+
|
|
434
467
|
@article{schumannEffectiveRadiusIce2011,
|
|
435
468
|
title = {Effective {{Radius}} of {{Ice Particles}} in {{Cirrus}} and {{Contrails}}},
|
|
436
469
|
author = {Schumann, U. and Mayer, B. and Gierens, K. and Unterstrasser, S. and Jessberger, P. and Petzold, A. and Voigt, C. and Gayet, J.-F.},
|
|
@@ -496,6 +529,19 @@
|
|
|
496
529
|
langid = {english}
|
|
497
530
|
}
|
|
498
531
|
|
|
532
|
+
@incollection{schumannPotentialReduceClimate2011a,
|
|
533
|
+
title = {Potential to Reduce the Climate Impact of Aviation by Flight Level Changes},
|
|
534
|
+
booktitle = {3rd {{AIAA Atmospheric Space Environments Conference}}},
|
|
535
|
+
author = {Schumann, Ulrich and Graf, Kaspar and Mannstein, Hermann},
|
|
536
|
+
year = {2011},
|
|
537
|
+
month = jun,
|
|
538
|
+
series = {Fluid {{Dynamics}} and {{Co-located Conferences}}},
|
|
539
|
+
publisher = {{American Institute of Aeronautics and Astronautics}},
|
|
540
|
+
doi = {10.2514/6.2011-3376},
|
|
541
|
+
urldate = {2023-04-16},
|
|
542
|
+
keywords = {Aviation,Base of Aircraft Data,Contrails,Cruise Altitude,Earth,Earth Atmosphere,Fuel Consumption,Greenhouse Effect,Numerical Weather Prediction,Optical Depth}
|
|
543
|
+
}
|
|
544
|
+
|
|
499
545
|
@article{schumannPropertiesIndividualContrails2017,
|
|
500
546
|
title = {Properties of Individual Contrails: A Compilation of Observations and Some Comparisons},
|
|
501
547
|
shorttitle = {Properties of Individual Contrails},
|
|
@@ -678,6 +724,23 @@
|
|
|
678
724
|
howpublished = {http://solardat.uoregon.edu/SolarRadiationBasics.html}
|
|
679
725
|
}
|
|
680
726
|
|
|
727
|
+
@article{voigtInsituObservationsYoung2010,
|
|
728
|
+
title = {In-Situ Observations of Young Contrails \textendash{} Overview and Selected Results from the {{CONCERT}} Campaign},
|
|
729
|
+
author = {Voigt, C. and Schumann, U. and Jurkat, T. and Sch{\"a}uble, D. and Schlager, H. and Petzold, A. and Gayet, J.-F. and Kr{\"a}mer, M. and Schneider, J. and Borrmann, S. and Schmale, J. and Jessberger, P. and Hamburger, T. and Lichtenstern, M. and Scheibe, M. and Gourbeyre, C. and Meyer, J. and K{\"u}bbeler, M. and Frey, W. and Kalesse, H. and Butler, T. and Lawrence, M. G. and Holz{\"a}pfel, F. and Arnold, F. and Wendisch, M. and D{\"o}pelheuer, A. and Gottschaldt, K. and Baumann, R. and Z{\"o}ger, M. and S{\"o}lch, I. and Rautenhaus, M. and D{\"o}rnbrack, A.},
|
|
730
|
+
year = {2010},
|
|
731
|
+
month = sep,
|
|
732
|
+
journal = {Atmospheric Chemistry and Physics},
|
|
733
|
+
volume = {10},
|
|
734
|
+
number = {18},
|
|
735
|
+
pages = {9039--9056},
|
|
736
|
+
publisher = {{Copernicus GmbH}},
|
|
737
|
+
issn = {1680-7316},
|
|
738
|
+
doi = {10.5194/acp-10-9039-2010},
|
|
739
|
+
urldate = {2023-04-16},
|
|
740
|
+
abstract = {Lineshaped contrails were detected with the research aircraft Falcon during the CONCERT \textendash{} CONtrail and Cirrus ExpeRimenT \textendash{} campaign in October/November 2008. The Falcon was equipped with a set of instruments to measure the particle size distribution, shape, extinction and chemical composition as well as trace gas mixing ratios of sulfur dioxide (SO2), reactive nitrogen and halogen species (NO, NOy, HNO3, HONO, HCl), ozone (O3) and carbon monoxide (CO). During 12 mission flights over Europe, numerous contrails, cirrus clouds and a volcanic aerosol layer were probed at altitudes between 8.5 and 11.6 km and at temperatures above 213 K. 22 contrails from 11 different aircraft were observed near and below ice saturation. The observed NO mixing ratios, ice crystal and soot number densities are compared to a process based contrail model. On 19 November 2008 the contrail from a CRJ-2 aircraft was penetrated in 10.1 km altitude at a temperature of 221 K. The contrail had mean ice crystal number densities of 125 cm-3 with effective radii reff of 2.6 {$\mu$}m. The presence of particles with r{$>$}50 {$\mu$}m in the less than 2 min old contrail suggests that natural cirrus crystals were entrained in the contrail. Mean HONO/NO (HONO/NOy) ratios of 0.037 (0.024) and the fuel sulfur conversion efficiency to H2SO4 (\εS{$\downarrow$}) of 2.9 \% observed in the CRJ-2 contrail are in the range of previous measurements in the gaseous aircraft exhaust. On 31 October 2010 aviation NO emissions could have contributed by more than 40\% to the regional scale NO levels in the mid-latitude lowest stratosphere. The CONCERT observations help to better quantify the climate impact from contrails and will be used to investigate the chemical processing of trace gases on contrails.},
|
|
741
|
+
langid = {english}
|
|
742
|
+
}
|
|
743
|
+
|
|
681
744
|
@article{wasiukAircraftPerformanceModel2015,
|
|
682
745
|
title = {An Aircraft Performance Model Implementation for the Estimation of Global and Regional Commercial Aviation Fuel Burn and Emissions},
|
|
683
746
|
author = {Wasiuk, D. K. and Lowenberg, M. H. and Shallcross, D. E.},
|
|
@@ -12,8 +12,11 @@
|
|
|
12
12
|
"\n",
|
|
13
13
|
"- Schumann, U. “A Contrail Cirrus Prediction Model.” Geoscientific Model Development 5, no. 3 (May 3, 2012): 543–80. https://doi.org/10.5194/gmd-5-543-2012.\n",
|
|
14
14
|
"- Schumann, U., B. Mayer, K. Graf, and H. Mannstein. “A Parametric Radiative Forcing Model for Contrail Cirrus.” Journal of Applied Meteorology and Climatology 51, no. 7 (July 2012): 1391–1406. https://doi.org/10.1175/JAMC-D-11-0242.1.\n",
|
|
15
|
+
"- Schumann, Ulrich, Robert Baumann, Darrel Baumgardner, Sarah T. Bedka, David P. Duda, Volker Freudenthaler, Jean-Francois Gayet, et al. 2017. “Properties of Individual Contrails: A Compilation of Observations and Some Comparisons.” Atmospheric Chemistry and Physics 17 (1): 403–38. https://doi.org/10.5194/acp-17-403-2017.\n",
|
|
15
16
|
"- Teoh, Roger, Ulrich Schumann, Arnab Majumdar, and Marc E. J. Stettler. “Mitigating the Climate Forcing of Aircraft Contrails by Small-Scale Diversions and Technology Adoption.” Environmental Science & Technology 54, no. 5 (March 3, 2020): 2941–50. https://doi.org/10.1021/acs.est.9b05608.\n",
|
|
16
|
-
"- Teoh, Roger, Ulrich Schumann, Edward Gryspeerdt, Marc Shapiro, Jarlath Molloy, George Koudis, Christiane Voigt, and Marc Stettler. “Aviation Contrail Climate Effects in the North Atlantic from 2016
|
|
17
|
+
"- Teoh, Roger, Ulrich Schumann, Edward Gryspeerdt, Marc Shapiro, Jarlath Molloy, George Koudis, Christiane Voigt, and Marc E. J. Stettler. 2022. “Aviation Contrail Climate Effects in the North Atlantic from 2016 to 2021.” Atmospheric Chemistry and Physics 22 (16): 10919–35. https://doi.org/10.5194/acp-22-10919-2022.\n",
|
|
18
|
+
"- Teoh, Roger, Ulrich Schumann, Christiane Voigt, Tobias Schripp, Marc Shapiro, Zebediah Engberg, Jarlath Molloy, George Koudis, and Marc E. J. Stettler. 2022. “Targeted Use of Sustainable Aviation Fuel to Maximize Climate Benefits.” Environmental Science & Technology, November. https://doi.org/10.1021/acs.est.2c05781.\n",
|
|
19
|
+
"\n"
|
|
17
20
|
]
|
|
18
21
|
},
|
|
19
22
|
{
|
|
@@ -14,9 +14,8 @@
|
|
|
14
14
|
"\n",
|
|
15
15
|
"Support provided for:\n",
|
|
16
16
|
"\n",
|
|
17
|
-
"- [ERA5](https://www.ecmwf.int/en/forecasts/dataset/ecmwf-reanalysis-v5) via the [Copernicus Data Store (CDS)](https://cds.climate.copernicus.eu/)
|
|
18
|
-
"- [HRES](https://confluence.ecmwf.int/display/FUG/HRES+-+High-Resolution+Forecast) and [ENS](https://confluence.ecmwf.int/display/FUG/ENS+-+Ensemble+Forecasts?src=contextnavpagetreemode) via [MARS](https://confluence.ecmwf.int/display/UDOC/MARS+user+documentation)
|
|
19
|
-
"- [IFS](https://www.ecmwf.int/en/publications/ifs-documentation) for locally downloaded files\n"
|
|
17
|
+
"- [ERA5](https://www.ecmwf.int/en/forecasts/dataset/ecmwf-reanalysis-v5) via the [Copernicus Data Store (CDS)](https://cds.climate.copernicus.eu/) using [cdsapi](https://github.com/ecmwf/cdsapi) or user provided files\n",
|
|
18
|
+
"- [HRES](https://confluence.ecmwf.int/display/FUG/HRES+-+High-Resolution+Forecast) and [ENS](https://confluence.ecmwf.int/display/FUG/ENS+-+Ensemble+Forecasts?src=contextnavpagetreemode) via [MARS](https://confluence.ecmwf.int/display/UDOC/MARS+user+documentation) using [ecmwf-api-client](https://github.com/ecmwf/ecmwf-api-client) or user provided files"
|
|
20
19
|
]
|
|
21
20
|
},
|
|
22
21
|
{
|
|
@@ -28,7 +27,7 @@
|
|
|
28
27
|
"### Access\n",
|
|
29
28
|
"\n",
|
|
30
29
|
"- Requires account with [Copernicus Data Portal](https://cds.climate.copernicus.eu/cdsapp#!/home)\n",
|
|
31
|
-
"-
|
|
30
|
+
"- Provide `url` and `key` credentials on input, or refer to the [CDS API Documentation](https://github.com/ecmwf/cdsapi#configure) for how to create `~/.cdsapirc` file to configure access.\n",
|
|
32
31
|
"\n",
|
|
33
32
|
"### Reference\n",
|
|
34
33
|
"\n",
|
|
@@ -82,6 +81,8 @@
|
|
|
82
81
|
" time=\"2022-03-01 00:00:00\",\n",
|
|
83
82
|
" variables=[\"t\", \"q\", \"u\", \"v\", \"w\", \"ciwc\", \"z\", \"cc\"], # supports CF name or short names\n",
|
|
84
83
|
" pressure_levels=[300, 250, 200],\n",
|
|
84
|
+
" # url=\"https://cds.climate.copernicus.eu/api/v2\",\n",
|
|
85
|
+
" # key=\"<key>\"\n",
|
|
85
86
|
")\n",
|
|
86
87
|
"era5"
|
|
87
88
|
]
|
|
@@ -123,6 +124,8 @@
|
|
|
123
124
|
" \"cc\",\n",
|
|
124
125
|
" ], # supports CF name or short names\n",
|
|
125
126
|
" pressure_levels=[300, 250, 200],\n",
|
|
127
|
+
" # url=\"https://cds.climate.copernicus.eu/api/v2\",\n",
|
|
128
|
+
" # key=\"<key>\"\n",
|
|
126
129
|
")\n",
|
|
127
130
|
"era5"
|
|
128
131
|
]
|
|
@@ -1412,7 +1415,12 @@
|
|
|
1412
1415
|
}
|
|
1413
1416
|
],
|
|
1414
1417
|
"source": [
|
|
1415
|
-
"era5 = ERA5(
|
|
1418
|
+
"era5 = ERA5(\n",
|
|
1419
|
+
" time=(\"2022-03-01 00:00:00\", \"2022-03-01 03:00:00\"),\n",
|
|
1420
|
+
" variables=[\"tsr\", \"ttr\"],\n",
|
|
1421
|
+
" # url=\"https://cds.climate.copernicus.eu/api/v2\",\n",
|
|
1422
|
+
" # key=\"<key>\"\n",
|
|
1423
|
+
")\n",
|
|
1416
1424
|
"era5"
|
|
1417
1425
|
]
|
|
1418
1426
|
},
|
|
@@ -2061,7 +2069,7 @@
|
|
|
2061
2069
|
"Users within ECMWF Member and Co-operating States may contact their Computing Representative to obtain access to MARS. \n",
|
|
2062
2070
|
"All other users may [request a username and password](https://accounts.ecmwf.int/auth/realms/ecmwf/protocol/openid-connect/registrations?client_id=apps&response_type=code&scope=openid%20email&redirect_uri=https://www.ecmwf.int) and then [get an api key](https://api.ecmwf.int/v1/key/).\n",
|
|
2063
2071
|
"\n",
|
|
2064
|
-
"
|
|
2072
|
+
"Provide `url`, `key`, and `email` credentials on input, or see [ECMWF API Client documentation](https://github.com/ecmwf/ecmwf-api-client#configure) to configure local `~/.ecmwfapirc` file:\n",
|
|
2065
2073
|
"\n",
|
|
2066
2074
|
"```json\n",
|
|
2067
2075
|
"{\n",
|
|
@@ -2073,7 +2081,7 @@
|
|
|
2073
2081
|
"\n",
|
|
2074
2082
|
"### Reference\n",
|
|
2075
2083
|
"\n",
|
|
2076
|
-
"- [HRES](https://confluence.ecmwf.int/display/FUG/HRES+-+High-Resolution+Forecast)
|
|
2084
|
+
"- [HRES](https://confluence.ecmwf.int/display/FUG/HRES+-+High-Resolution+Forecast) High resolution forecast\n",
|
|
2077
2085
|
"- [ENS](https://confluence.ecmwf.int/display/FUG/ENS+-+Ensemble+Forecasts?src=contextnavpagetreemode) Ensemble forecast"
|
|
2078
2086
|
]
|
|
2079
2087
|
},
|
|
@@ -2127,6 +2135,9 @@
|
|
|
2127
2135
|
" variables=[\"t\", \"q\", \"u\", \"v\", \"w\", \"z\"],\n",
|
|
2128
2136
|
" pressure_levels=[300, 250, 200],\n",
|
|
2129
2137
|
" grid=1,\n",
|
|
2138
|
+
" # url=\"https://api.ecmwf.int/v1\",\n",
|
|
2139
|
+
" # key=\"<key>\"\n",
|
|
2140
|
+
" # email=\"<email>\"\n",
|
|
2130
2141
|
")\n",
|
|
2131
2142
|
"hres"
|
|
2132
2143
|
]
|
|
@@ -3240,7 +3251,14 @@
|
|
|
3240
3251
|
"metadata": {},
|
|
3241
3252
|
"outputs": [],
|
|
3242
3253
|
"source": [
|
|
3243
|
-
"hres = HRES(
|
|
3254
|
+
"hres = HRES(\n",
|
|
3255
|
+
" time=time,\n",
|
|
3256
|
+
" variables=[\"tsr\", \"ttr\"],\n",
|
|
3257
|
+
" grid=1,\n",
|
|
3258
|
+
" # url=\"https://api.ecmwf.int/v1\",\n",
|
|
3259
|
+
" # key=\"<key>\"\n",
|
|
3260
|
+
" # email=\"<email>\"\n",
|
|
3261
|
+
")"
|
|
3244
3262
|
]
|
|
3245
3263
|
},
|
|
3246
3264
|
{
|
|
@@ -3934,6 +3952,9 @@
|
|
|
3934
3952
|
" variables=[\"t\", \"q\"],\n",
|
|
3935
3953
|
" pressure_levels=[300, 250, 200],\n",
|
|
3936
3954
|
" forecast_time=\"2022-03-25 12:00:00\",\n",
|
|
3955
|
+
" # url=\"https://api.ecmwf.int/v1\",\n",
|
|
3956
|
+
" # key=\"<key>\"\n",
|
|
3957
|
+
" # email=\"<email>\"\n",
|
|
3937
3958
|
")\n",
|
|
3938
3959
|
"hres"
|
|
3939
3960
|
]
|
|
@@ -3944,6 +3965,8 @@
|
|
|
3944
3965
|
"source": [
|
|
3945
3966
|
"## IFS\n",
|
|
3946
3967
|
"\n",
|
|
3968
|
+
"> In development\n",
|
|
3969
|
+
"\n",
|
|
3947
3970
|
"Integrated Forecasting System from ECMWF\n",
|
|
3948
3971
|
"\n",
|
|
3949
3972
|
"- [IFS Documentation](https://www.ecmwf.int/en/publications/ifs-documentation)\n",
|
|
@@ -4118,6 +4141,8 @@
|
|
|
4118
4141
|
" variables=variables,\n",
|
|
4119
4142
|
" pressure_levels=[300, 250, 150],\n",
|
|
4120
4143
|
" cachestore=gcp,\n",
|
|
4144
|
+
" # url=\"https://cds.climate.copernicus.eu/api/v2\",\n",
|
|
4145
|
+
" # key=\"<key>\"\n",
|
|
4121
4146
|
")"
|
|
4122
4147
|
]
|
|
4123
4148
|
},
|
|
@@ -56,6 +56,18 @@ See ``[project.optional-dependencies]`` in `pyproject.toml <https://github.com/c
|
|
|
56
56
|
for the latest optional dependencies.
|
|
57
57
|
|
|
58
58
|
|
|
59
|
+
Pre-built wheels
|
|
60
|
+
-----------------
|
|
61
|
+
|
|
62
|
+
Wheels for common platforms are available on `PyPI <https://pypi.org/project/pycontrails/>`__. Currently, wheels are available for:
|
|
63
|
+
|
|
64
|
+
- Linux (x86_64)
|
|
65
|
+
- macOS (x86_64 and arm64)
|
|
66
|
+
- Windows (x86_64)
|
|
67
|
+
|
|
68
|
+
It's possible to build the wheels from source using `Cython <https://cython.org/>`__ and a C compiler with the usual ``pip install`` process. The source distribution on PyPI includes the C files, so it's not necessary to have Cython installed to build from source.
|
|
69
|
+
|
|
70
|
+
|
|
59
71
|
Extensions
|
|
60
72
|
----------
|
|
61
73
|
|
|
@@ -1088,8 +1088,8 @@ class Flight(GeoVectorDataset):
|
|
|
1088
1088
|
>>> # Intersect and attach
|
|
1089
1089
|
>>> fl["air_temperature"] = fl.intersect_met(met['air_temperature'])
|
|
1090
1090
|
>>> fl["air_temperature"]
|
|
1091
|
-
array([235.
|
|
1092
|
-
234.
|
|
1091
|
+
array([235.94658, 235.55774, 235.56766, ..., 234.59956, 234.60406,
|
|
1092
|
+
234.60846], dtype=float32)
|
|
1093
1093
|
|
|
1094
1094
|
>>> # Length (in meters) of waypoints whose temperature exceeds 236K
|
|
1095
1095
|
>>> fl.length_met("air_temperature", threshold=236)
|