pycontrails 0.54.5__tar.gz → 0.54.6__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.54.5 → pycontrails-0.54.6}/CHANGELOG.md +21 -0
- {pycontrails-0.54.5/pycontrails.egg-info → pycontrails-0.54.6}/PKG-INFO +3 -4
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/ECMWF.ipynb +7 -7
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/_version.py +2 -2
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/aircraft_performance.py +34 -16
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/airports.py +3 -4
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/flight.py +2 -4
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/flightplan.py +11 -11
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/met_var.py +62 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/models.py +1 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/rgi_cython.c +192 -192
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/_met_utils/metsource.py +1 -1
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/ecmwf/era5.py +5 -6
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/ecmwf/era5_model_level.py +4 -5
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/ecmwf/ifs.py +1 -3
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/gfs/gfs.py +1 -3
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocip/cocip.py +78 -18
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocip/output_formats.py +1 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/dry_advection.py +51 -19
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/humidity_scaling/humidity_scaling.py +1 -1
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/pcc.py +1 -2
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/ps_model/ps_model.py +2 -30
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/ps_model/ps_operational_limits.py +2 -6
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/tau_cirrus.py +13 -6
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/physics/geo.py +3 -3
- {pycontrails-0.54.5 → pycontrails-0.54.6/pycontrails.egg-info}/PKG-INFO +3 -4
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails.egg-info/requires.txt +1 -2
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pyproject.toml +2 -3
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/benchmark/cocip/benchmark.py +2 -6
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/benchmark/north-atlantic-study/validate.py +3 -3
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/conftest.py +61 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_cache.py +1 -1
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_cocip.py +108 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_cocip_grid.py +52 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_dry_advection.py +38 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/.github/dependabot.yaml +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/.github/pull_request_template.md +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/.github/workflows/docs.yaml +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/.github/workflows/doctest.yaml +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/.github/workflows/release.yaml +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/.github/workflows/scorecard.yaml +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/.github/workflows/test.yaml +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/.gitignore +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/.pre-commit-config.yaml +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/.zenodo.json +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/CONTRIBUTING.md +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/LICENSE +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/Makefile +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/NOTICE +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/README.md +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/RELEASE.md +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/_static/css/style.css +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/_static/img/colab.png +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/_static/img/favicon.png +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/_static/img/logo-dark.png +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/_static/img/logo.png +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/_static/pycontrails.bib +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/api.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/changelog.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/conf.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/contributing.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/develop.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/flight.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/index.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/install.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/integrations/ACCF.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/integrations/APCEMM.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/literature.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/meteorology.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/models.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/ARCO-ERA5.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/AircraftPerformance.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/Cache.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/CoCiP.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/CoCiPGrid.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/Flight.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/GFS.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/GOES.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/ISSR.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/Landsat.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/Meteorology.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/SAC.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/Sentinel.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/advection.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/airports.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/data/.gitignore +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/data/flight-ap.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/data/flight-cocip.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/data/flight-fdr.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/data/flight-noisy.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/data/flight.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/data/iagos-flight-landsat.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/data/iagos-flight-sentinel.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/flightplan.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/model-levels.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/run-cocip-on-flight.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/run-cocip-with-fdr.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks/specific-humidity-interpolation.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/notebooks.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/observations.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/tutorials.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/docs/utilities.rst +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/cache.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/coordinates.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/fleet.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/fuel.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/interpolation.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/met.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/polygon.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/rgi_cython.pyx +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/core/vector.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/_leo_utils/search.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/_leo_utils/static/bq_roi_query.sql +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/_leo_utils/vis.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/ecmwf/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/ecmwf/arco_era5.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/ecmwf/common.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/ecmwf/hres.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/ecmwf/hres_model_level.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/ecmwf/model_levels.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/ecmwf/variables.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/gfs/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/gfs/variables.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/goes.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/landsat.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/sentinel.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/datalib/spire.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/ext/bada.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/ext/cirium.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/ext/empirical_grid.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/ext/synthetic_flight.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/accf.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/apcemm/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/apcemm/apcemm.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/apcemm/inputs.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/apcemm/static/apcemm_yaml_template.yaml +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/apcemm/utils.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocip/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocip/cocip_params.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocip/cocip_uncertainty.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocip/contrail_properties.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocip/radiative_forcing.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocip/radiative_heating.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocip/unterstrasser_wake_vortex.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocip/wake_vortex.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocip/wind_shear.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocipgrid/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocipgrid/cocip_grid.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/emissions/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/emissions/black_carbon.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/emissions/emissions.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/emissions/ffm2.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/emissions/static/default-engine-uids.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/humidity_scaling/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/issr.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/pcr.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/ps_model/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/ps_model/ps_aircraft_params.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/ps_model/ps_grid.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/ps_model/static/ps-aircraft-params-20240524.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/models/sac.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/physics/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/physics/constants.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/physics/jet.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/physics/static/iata-cargo-load-factors-20241115.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/physics/static/iata-passenger-load-factors-20241115.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/physics/thermo.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/physics/units.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/py.typed +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/utils/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/utils/dependencies.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/utils/iteration.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/utils/json.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/utils/temp.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails/utils/types.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails.egg-info/SOURCES.txt +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails.egg-info/dependency_links.txt +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/pycontrails.egg-info/top_level.txt +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/setup.cfg +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/setup.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/_deprecated.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/benchmark/cocip/Makefile +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/benchmark/cocip/README.md +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/benchmark/cocip/compare.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/benchmark/cocip/data.md +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/benchmark/cocip/output.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/benchmark/cocip/review.ipynb +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/benchmark/cocip-fortran/README.md +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/benchmark/north-atlantic-study/README.md +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/benchmark/north-atlantic-study/support.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/fixtures/cocip-met.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/fixtures/cocip-met2.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/fixtures/ecmwf-met.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/fixtures/gfs-met.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/__init__.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/cocip-contrail-output.json +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/cocip-contrail-output2.json +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/cocip-flight-output.json +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/cocip-flight-output2.json +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/cocip-output-contrail-edges.json +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/cocip-output-flts-20190101-eu.pq +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/flight-cocip2.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/flight-meridian.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/flight-metadata.json +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/flight-spire-data-cleaning.pq +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/flight.csv +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/flt-wypts-20190101-eu.pq +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/met-20190101-eu.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/met-accf-pl.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/met-accf-sl.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/met-ecmwf-lnsp.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/met-ecmwf-ml.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/met-ecmwf-pl.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/met-ecmwf-sl.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/met-era5-cocip1.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/met-era5-cocip2.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/met-gfs.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/polygon-bug.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/rad-20190101-eu.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/rad-era5-cocip1.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/rad-era5-cocip2.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/static/rad-gfs.nc +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_accf.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_airports.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_apcemm.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_cocip_grid_parity.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_cocip_radiative_forcing.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_cocip_uncertainty.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_coordinates.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_datalib_metsource.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_dtypes.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_ecmwf.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_emissions.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_fleet.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_flight.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_flightplan.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_fuel.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_geo.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_gfs.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_goes.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_grid_to_netcdf.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_humidity_scaling.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_init.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_interpolation.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_leo.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_met.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_met_cache.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_models.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_pcc.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_polygons.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_ps_model.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_sac_issr.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_spire.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_tau_cirrus.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_thermo_sac.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_units.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_unterstrasser_wake_vortex.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_utils.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_vector.py +0 -0
- {pycontrails-0.54.5 → pycontrails-0.54.6}/tests/unit/test_zarr.py +0 -0
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.54.6
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- Add support for generic (model-agnostic) meteorology data to `Cocip` and `CocipGrid`.
|
|
8
|
+
|
|
9
|
+
- Add two new parameters to the `DryAdvection` model.
|
|
10
|
+
- If the `verbose_outputs` parameter is enabled, additional wind-shear data is included in the output.
|
|
11
|
+
- If the `include_source_in_output` parameter is enabled, the source data with any of the intermediate artifacts (e.g., interpolated met data, wind-shear data, etc.) is included in the output.
|
|
12
|
+
|
|
13
|
+
Both parameters are disabled by default.
|
|
14
|
+
|
|
15
|
+
### Fixes
|
|
16
|
+
|
|
17
|
+
- Update the CDS URL referenced throughout pycontrails from ``https://cds-beta.climate.copernicus.eu`` to ``https://cds.climate.copernicus.eu``.
|
|
18
|
+
|
|
19
|
+
### Internals
|
|
20
|
+
|
|
21
|
+
- Suppress mypy `return-value` errors for functions in `geo.py` where mypy fails to correctly infer return types of numpy ufuncs applied to xarray objects.
|
|
22
|
+
- Change `AircraftPerformance` and downstream implementations for better support in running over `Fleet` sources. The runtime of `PSFlight` remains the same.
|
|
23
|
+
|
|
3
24
|
## v0.54.5
|
|
4
25
|
|
|
5
26
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: pycontrails
|
|
3
|
-
Version: 0.54.
|
|
3
|
+
Version: 0.54.6
|
|
4
4
|
Summary: Python library for modeling aviation climate impacts
|
|
5
5
|
Author-email: Breakthrough Energy <py@contrails.org>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -49,8 +49,7 @@ Requires-Dist: pyarrow>=5.0; extra == "dev"
|
|
|
49
49
|
Requires-Dist: pytest>=8.2; extra == "dev"
|
|
50
50
|
Requires-Dist: pytest-cov>=2.11; extra == "dev"
|
|
51
51
|
Requires-Dist: requests>=2.25; extra == "dev"
|
|
52
|
-
Requires-Dist: ruff
|
|
53
|
-
Requires-Dist: setuptools; extra == "dev"
|
|
52
|
+
Requires-Dist: ruff>=0.9.0; extra == "dev"
|
|
54
53
|
Provides-Extra: docs
|
|
55
54
|
Requires-Dist: doc8>=1.1; extra == "docs"
|
|
56
55
|
Requires-Dist: furo>=2023.3; extra == "docs"
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"\n",
|
|
17
17
|
"Support provided for:\n",
|
|
18
18
|
"\n",
|
|
19
|
-
"- [ERA5](https://www.ecmwf.int/en/forecasts/dataset/ecmwf-reanalysis-v5) via the [Copernicus Data Store
|
|
19
|
+
"- [ERA5](https://www.ecmwf.int/en/forecasts/dataset/ecmwf-reanalysis-v5) via the [Copernicus Data Store](https://cds.climate.copernicus.eu/) using [cdsapi](https://github.com/ecmwf/cdsapi) or user provided files\n",
|
|
20
20
|
"- [HRES](https://confluence.ecmwf.int/display/FUG/Section+2.1.1.2+Rationale+for+High+Resolution) and [ENS](https://confluence.ecmwf.int/display/FUG/Section+2.1.2.1+Medium+Range+Ensemble+forecasts) 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.\n",
|
|
21
21
|
"\n",
|
|
22
22
|
"For both ERA5 and HRES, we provide interfaces for accessing \"pressure-level data\" (fields pre-interpolated to a fixed set of pressure levels) or \"model-level data\" (fields retrieved on the native vertical grid and [interpolated after retrieval to an arbitrary set of pressure levels](model-levels.ipynb)). We recommend using model-level data when possible, as the resolution of pressure-level data is coarse relative to the vertical scale of ice-supersaturated regions.\n",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"\n",
|
|
33
33
|
"### Access\n",
|
|
34
34
|
"\n",
|
|
35
|
-
"- Requires account with [Copernicus Data Portal](https://cds
|
|
36
|
-
"- Provide `url` and `key` credentials on input, or refer to the [CDS API Documentation](https://cds
|
|
35
|
+
"- Requires account with [Copernicus Data Portal](https://cds.climate.copernicus.eu/)\n",
|
|
36
|
+
"- Provide `url` and `key` credentials on input, or refer to the [CDS API Documentation](https://cds.climate.copernicus.eu/how-to-api) for how to create `~/.cdsapirc` file to configure access.\n",
|
|
37
37
|
"\n",
|
|
38
38
|
"### Reference\n",
|
|
39
39
|
"\n",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
" time=\"2022-03-01 00:00:00\",\n",
|
|
88
88
|
" variables=[\"t\", \"q\", \"u\", \"v\", \"w\", \"ciwc\", \"z\", \"cc\"], # supports CF name or short names\n",
|
|
89
89
|
" pressure_levels=[200, 250, 300],\n",
|
|
90
|
-
" # url=\"https://cds
|
|
90
|
+
" # url=\"https://cds.climate.copernicus.eu/api\",\n",
|
|
91
91
|
" # key=\"<key>\"\n",
|
|
92
92
|
")\n",
|
|
93
93
|
"era5"
|
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
" \"cc\",\n",
|
|
133
133
|
" ], # supports CF name or short names\n",
|
|
134
134
|
" pressure_levels=[300, 250, 200],\n",
|
|
135
|
-
" # url=\"https://cds
|
|
135
|
+
" # url=\"https://cds.climate.copernicus.eu/api\",\n",
|
|
136
136
|
" # key=\"<key>\"\n",
|
|
137
137
|
")\n",
|
|
138
138
|
"era5"
|
|
@@ -1429,7 +1429,7 @@
|
|
|
1429
1429
|
"era5 = ERA5(\n",
|
|
1430
1430
|
" time=(\"2022-03-01 00:00:00\", \"2022-03-01 03:00:00\"),\n",
|
|
1431
1431
|
" variables=[\"tsr\", \"ttr\"],\n",
|
|
1432
|
-
" # url=\"https://cds
|
|
1432
|
+
" # url=\"https://cds.climate.copernicus.eu/api\",\n",
|
|
1433
1433
|
" # key=\"<key>\"\n",
|
|
1434
1434
|
")\n",
|
|
1435
1435
|
"era5"
|
|
@@ -6071,7 +6071,7 @@
|
|
|
6071
6071
|
" variables=variables,\n",
|
|
6072
6072
|
" pressure_levels=[300, 250, 150],\n",
|
|
6073
6073
|
" cachestore=gcp,\n",
|
|
6074
|
-
" # url=\"https://cds
|
|
6074
|
+
" # url=\"https://cds.climate.copernicus.eu/api\",\n",
|
|
6075
6075
|
" # key=\"<key>\"\n",
|
|
6076
6076
|
")"
|
|
6077
6077
|
]
|
|
@@ -96,22 +96,52 @@ class AircraftPerformance(Model):
|
|
|
96
96
|
|
|
97
97
|
source: Flight
|
|
98
98
|
|
|
99
|
-
@abc.abstractmethod
|
|
100
99
|
@overload
|
|
101
100
|
def eval(self, source: Fleet, **params: Any) -> Fleet: ...
|
|
102
101
|
|
|
103
|
-
@abc.abstractmethod
|
|
104
102
|
@overload
|
|
105
103
|
def eval(self, source: Flight, **params: Any) -> Flight: ...
|
|
106
104
|
|
|
107
|
-
@abc.abstractmethod
|
|
108
105
|
@overload
|
|
109
106
|
def eval(self, source: None = ..., **params: Any) -> NoReturn: ...
|
|
110
107
|
|
|
111
|
-
@abc.abstractmethod
|
|
112
108
|
def eval(self, source: Flight | None = None, **params: Any) -> Flight:
|
|
113
109
|
"""Evaluate the aircraft performance model.
|
|
114
110
|
|
|
111
|
+
Parameters
|
|
112
|
+
----------
|
|
113
|
+
source : Flight
|
|
114
|
+
Flight trajectory to evaluate. Can be a :class:`Flight` or :class:`Fleet`.
|
|
115
|
+
params : Any
|
|
116
|
+
Override :attr:`params` with keyword arguments.
|
|
117
|
+
|
|
118
|
+
Returns
|
|
119
|
+
-------
|
|
120
|
+
Flight
|
|
121
|
+
Flight trajectory with aircraft performance data.
|
|
122
|
+
"""
|
|
123
|
+
self.update_params(params)
|
|
124
|
+
self.set_source(source)
|
|
125
|
+
self.source = self.require_source_type(Flight)
|
|
126
|
+
self.downselect_met()
|
|
127
|
+
self.set_source_met()
|
|
128
|
+
self._cleanup_indices()
|
|
129
|
+
|
|
130
|
+
# Calculate true airspeed if not included on source
|
|
131
|
+
self.ensure_true_airspeed_on_source()
|
|
132
|
+
|
|
133
|
+
if isinstance(self.source, Fleet):
|
|
134
|
+
fls = [self.eval_flight(fl) for fl in self.source.to_flight_list()]
|
|
135
|
+
self.source = Fleet.from_seq(fls, attrs=self.source.attrs, broadcast_numeric=False)
|
|
136
|
+
return self.source
|
|
137
|
+
|
|
138
|
+
self.source = self.eval_flight(self.source)
|
|
139
|
+
return self.source
|
|
140
|
+
|
|
141
|
+
@abc.abstractmethod
|
|
142
|
+
def eval_flight(self, fl: Flight) -> Flight:
|
|
143
|
+
"""Evaluate the aircraft performance model on a single flight trajectory.
|
|
144
|
+
|
|
115
145
|
The implementing model adds the following fields to the source flight:
|
|
116
146
|
|
|
117
147
|
- ``aircraft_mass``: aircraft mass at each waypoint, [:math:`kg`]
|
|
@@ -128,18 +158,6 @@ class AircraftPerformance(Model):
|
|
|
128
158
|
- ``max_mach``: maximum Mach number
|
|
129
159
|
- ``max_altitude``: maximum altitude, [:math:`m`]
|
|
130
160
|
- ``total_fuel_burn``: total fuel burn, [:math:`kg`]
|
|
131
|
-
|
|
132
|
-
Parameters
|
|
133
|
-
----------
|
|
134
|
-
source : Flight
|
|
135
|
-
Flight trajectory to evaluate.
|
|
136
|
-
params : Any
|
|
137
|
-
Override :attr:`params` with keyword arguments.
|
|
138
|
-
|
|
139
|
-
Returns
|
|
140
|
-
-------
|
|
141
|
-
Flight
|
|
142
|
-
Flight trajectory with aircraft performance data.
|
|
143
161
|
"""
|
|
144
162
|
|
|
145
163
|
@override
|
|
@@ -162,7 +162,7 @@ def find_nearest_airport(
|
|
|
162
162
|
) & airports["latitude"].between((latitude - bbox), (latitude + bbox))
|
|
163
163
|
|
|
164
164
|
# Find the nearest airport from largest to smallest airport type
|
|
165
|
-
search_priority =
|
|
165
|
+
search_priority = ("large_airport", "medium_airport", "small_airport")
|
|
166
166
|
|
|
167
167
|
for airport_type in search_priority:
|
|
168
168
|
is_airport_type = airports["type"] == airport_type
|
|
@@ -171,7 +171,7 @@ def find_nearest_airport(
|
|
|
171
171
|
if len(nearest_airports) == 1:
|
|
172
172
|
return nearest_airports["icao_code"].values[0]
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
if len(nearest_airports) > 1:
|
|
175
175
|
distance = distance_to_airports(
|
|
176
176
|
nearest_airports,
|
|
177
177
|
longitude,
|
|
@@ -181,8 +181,7 @@ def find_nearest_airport(
|
|
|
181
181
|
i_nearest = np.argmin(distance)
|
|
182
182
|
return nearest_airports["icao_code"].values[i_nearest]
|
|
183
183
|
|
|
184
|
-
|
|
185
|
-
continue
|
|
184
|
+
continue
|
|
186
185
|
|
|
187
186
|
return None
|
|
188
187
|
|
|
@@ -891,7 +891,7 @@ class Flight(GeoVectorDataset):
|
|
|
891
891
|
"""
|
|
892
892
|
methods = "geodesic", "linear"
|
|
893
893
|
if fill_method not in methods:
|
|
894
|
-
raise ValueError(f
|
|
894
|
+
raise ValueError(f"Unknown `fill_method`. Supported methods: {', '.join(methods)}")
|
|
895
895
|
|
|
896
896
|
# STEP 0: If self is empty, return an empty flight
|
|
897
897
|
if not self:
|
|
@@ -1982,9 +1982,7 @@ def filter_altitude(
|
|
|
1982
1982
|
result[i0:i1] = altitude_filt[i0:i1]
|
|
1983
1983
|
|
|
1984
1984
|
# reapply Savitzky-Golay filter to smooth climb and descent
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
return result
|
|
1985
|
+
return _sg_filter(result, window_length=kernel_size)
|
|
1988
1986
|
|
|
1989
1987
|
|
|
1990
1988
|
def segment_duration(
|
|
@@ -21,24 +21,24 @@ def to_atc_plan(plan: dict[str, Any]) -> str:
|
|
|
21
21
|
--------
|
|
22
22
|
:func:`parse_atc_plan`
|
|
23
23
|
"""
|
|
24
|
-
ret = f
|
|
25
|
-
ret += f
|
|
24
|
+
ret = f"(FPL-{plan['callsign']}-{plan['flight_rules']}"
|
|
25
|
+
ret += f"{plan['type_of_flight']}\n"
|
|
26
26
|
ret += "-"
|
|
27
27
|
if "number_aircraft" in plan and plan["number_aircraft"] <= 10:
|
|
28
28
|
ret += plan["number_aircraft"]
|
|
29
|
-
ret += f
|
|
30
|
-
ret += f
|
|
31
|
-
ret += f
|
|
32
|
-
ret += f
|
|
33
|
-
ret += f
|
|
29
|
+
ret += f"{plan['type_of_aircraft']}/{plan['wake_category']}-"
|
|
30
|
+
ret += f"{plan['equipment']}/{plan['transponder']}\n"
|
|
31
|
+
ret += f"-{plan['departure_icao']}{plan['time']}\n"
|
|
32
|
+
ret += f"-{plan['speed_type']}{plan['speed']}{plan['level_type']}"
|
|
33
|
+
ret += f"{plan['level']} {plan['route']}\n"
|
|
34
34
|
if "destination_icao" in plan and "duration" in plan:
|
|
35
|
-
ret += f
|
|
35
|
+
ret += f"-{plan['destination_icao']}{plan['duration']}"
|
|
36
36
|
if "alt_icao" in plan:
|
|
37
|
-
ret += f
|
|
37
|
+
ret += f" {plan['alt_icao']}"
|
|
38
38
|
if "second_alt_icao" in plan:
|
|
39
|
-
ret += f
|
|
39
|
+
ret += f" {plan['second_alt_icao']}"
|
|
40
40
|
ret += "\n"
|
|
41
|
-
ret += f
|
|
41
|
+
ret += f"-{plan['other_info']})\n"
|
|
42
42
|
if "supplementary_info" in plan:
|
|
43
43
|
ret += " ".join([f"{i[0]}/{i[1]}" for i in plan["supplementary_info"].items()])
|
|
44
44
|
|
|
@@ -282,6 +282,35 @@ VerticalVelocity = MetVariable(
|
|
|
282
282
|
),
|
|
283
283
|
)
|
|
284
284
|
|
|
285
|
+
MassFractionOfCloudLiquidWaterInAir = MetVariable(
|
|
286
|
+
short_name="clw",
|
|
287
|
+
standard_name="mass_fraction_of_cloud_liquid_water_in_air",
|
|
288
|
+
long_name="Mass fraction of cloud liquid water in air",
|
|
289
|
+
units="kg kg**-1",
|
|
290
|
+
level_type="isobaricInhPa",
|
|
291
|
+
amip="clw",
|
|
292
|
+
description=("The mass fraction of cloud liquid water in moist air."),
|
|
293
|
+
)
|
|
294
|
+
|
|
295
|
+
MassFractionOfCloudIceInAir = MetVariable(
|
|
296
|
+
short_name="cli",
|
|
297
|
+
standard_name="mass_fraction_of_cloud_ice_in_air",
|
|
298
|
+
long_name="Mass fraction of cloud ice in air",
|
|
299
|
+
units="kg kg**-1",
|
|
300
|
+
level_type="isobaricInhPa",
|
|
301
|
+
amip="cli",
|
|
302
|
+
description=("The mass fraction of cloud ice in moist air."),
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
CloudAreaFractionInAtmosphereLayer = MetVariable(
|
|
306
|
+
short_name="cl",
|
|
307
|
+
standard_name="cloud_area_fraction_in_atmosphere_layer",
|
|
308
|
+
long_name="Cloud area fraction in atmosphere layer",
|
|
309
|
+
units="[0 - 1]",
|
|
310
|
+
level_type="isobaricInhPa",
|
|
311
|
+
description=("The fraction of the horizontal area of a grid cell that contains cloud."),
|
|
312
|
+
)
|
|
313
|
+
|
|
285
314
|
|
|
286
315
|
# ----
|
|
287
316
|
# Single level variables
|
|
@@ -305,3 +334,36 @@ SurfacePressure = MetVariable(
|
|
|
305
334
|
"Earth's surface represented at a fixed point."
|
|
306
335
|
),
|
|
307
336
|
)
|
|
337
|
+
|
|
338
|
+
TOANetDownwardShortwaveFlux = MetVariable(
|
|
339
|
+
short_name="rst",
|
|
340
|
+
standard_name="toa_net_downward_shortwave_flux",
|
|
341
|
+
long_name="TOA net downward shortwave flux",
|
|
342
|
+
units="W m**-2",
|
|
343
|
+
level_type="nominalTop",
|
|
344
|
+
amip="rst",
|
|
345
|
+
description=(
|
|
346
|
+
'"shortwave" means shortwave radiation. "toa" means top of atmosphere. '
|
|
347
|
+
'"Downward" indicates a vector component which is positive when directed '
|
|
348
|
+
"downward (negative upward). Net downward radiation is the difference "
|
|
349
|
+
"between radiation from above (downwelling) and radiation from below (upwelling). "
|
|
350
|
+
"In accordance with common usage in geophysical disciplines, "
|
|
351
|
+
'"flux" implies per unit area, called "flux density" in physics.'
|
|
352
|
+
),
|
|
353
|
+
)
|
|
354
|
+
|
|
355
|
+
TOAOutgoingLongwaveFlux = MetVariable(
|
|
356
|
+
short_name="rlut",
|
|
357
|
+
standard_name="toa_outgoing_longwave_flux",
|
|
358
|
+
long_name="TOA outgoing longwave_flux",
|
|
359
|
+
units="W m**-2",
|
|
360
|
+
level_type="nominalTop",
|
|
361
|
+
amip="rlut",
|
|
362
|
+
description=(
|
|
363
|
+
'"longwave" means longwave radiation. "toa" means top of atmosphere. '
|
|
364
|
+
"The TOA outgoing longwave flux is the upwelling thermal radiative flux, "
|
|
365
|
+
'often called the "outgoing longwave radiation" or "OLR". '
|
|
366
|
+
"In accordance with common usage in geophysical disciplines, "
|
|
367
|
+
'"flux" implies per unit area, called "flux density" in physics.'
|
|
368
|
+
),
|
|
369
|
+
)
|