Skip to content

Commit cb15a39

Browse files
MateusStanoCopilotGui-FernandesBRkhushalkottaruCopilot
authored
HOTFIX: Migrate Forecasts to UCAR THREDDS (#943)
* BUG: Fix hard-coded radius value for parachute added mass calculation (#889) * Fix hard-coded radius value for parachute added mass calculation Calculate radius from cd_s using a typical hemispherical parachute drag coefficient (1.4) when radius is not explicitly provided. This fixes drift distance calculations for smaller parachutes like drogues. Formula: R = sqrt(cd_s / (Cd * π)) Closes #860 Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Address code review: improve docstrings and add explicit None defaults Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Add CHANGELOG entry for PR #889 Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Update rocket.add_parachute to use radius=None for consistency Changed the default radius from 1.5 to None in the add_parachute method to match the Parachute class behavior. This ensures consistent automatic radius calculation from cd_s across both APIs. Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Refactor Parachute class to remove hard-coded radius value and introduce drag_coefficient parameter for radius estimation Fix hard-coded radius value for parachute added mass calculation Calculate radius from cd_s using a typical hemispherical parachute drag coefficient (1.4) when radius is not explicitly provided. This fixes drift distance calculations for smaller parachutes like drogues. Formula: R = sqrt(cd_s / (Cd * π)) Closes #860 Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Add CHANGELOG entry for PR #889 Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Refactor Parachute class to remove hard-coded radius value and introduce drag_coefficient parameter for radius estimation MNT: Extract noise initialization to fix pylint too-many-statements in Parachute.__init__ Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> * Refactor environment method access in controller test for clarity * fix pylint * fix comments * avoid breaking change with drag_coefficient * reafactors Parachute.__init__ method * fix tests --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br> * ENH: get changes from BUG: All NOAA NOMADS Dependent Atmosphere Models Broken Fixes #933 * ENH: Add guidelines for simulation safety, Sphinx documentation, and pytest standards (GitHub Copilot) (#937) * REL: bump version to 1.12 * ENH: Add explicit timeouts to ThrustCurve API requests and update changelog (#940) * Initial plan * ENH: Add explicit timeouts to ThrustCurve API requests Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com> * DOC: Add timeout fix PR to changelog Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com> * ENH: Restore power_off/on_drag as Function objects; add _input attributes for raw user input and update changelog (#941) * Initial plan * ENH: Restore power_off/on_drag as Function, add _input attributes for raw user input Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com> * DOC: Add PR #941 compatibility fix to changelog Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com> * Update rocketpy/rocket/rocket.py Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> * MNT: ruff pylint --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com> Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Co-authored-by: MateusStano <mateusstano@usp.br> * MNT: Remove unused imports and deprecated functions from mathutils/function.py * BUG: Readd SourceType enumeration for function source types and clean up imports * BUG: Fix incorrect Jacobian in `only_radial_burn` branch of `SolidMotor.evaluate_geometry` (#944) * Initial plan * BUG: Fix incorrect Jacobian in only_radial_burn branch of evaluate_geometry Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com> * ENH: move weathercocking_coeff to PointMassRockt * MNT: ruff * MNT: fix cyclic import * BUG: Add wraparound logic for wind direction in environment plots (#939) * chore: added personal toolkit files * update branch name in workflow * chore: update toolkit files * Fix: add wraparound logic for wind direction and related tests * style: fix ruff formatting * Remove unused import Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * refactor: move repetitive logic into helper method * fix: update test logic in test_environment * add changelog entry --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> * MNT: add numpy import to test_environment.py * MNT: rename constant for wraparound threshold in _break_direction_wraparound method * ENH: Adaptive Monte Carlo via Convergence Criteria (#922) * ENH: added a new function (simulate_convergence) * DOC: added a cell to show simulate_convergence function usage * TST: integration test for simulate_convergence * DOC: updated changelog for this PR * ENH: ran black to lint intg test file * new fixes thx to copilot comments * linted rocketpy/simulation/monte_carlo.py --------- Co-authored-by: Malmahrouqi3 <mohdsaid497566@gmail.com> * DOC: add latitude range in docs Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> * MNT: remove unnecessary pylint warning Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> * MNT: remove unnecessary pylint warning Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> * DOC: correctly link to WeatherModelMapping Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * DOCS: checked todo Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * ENH: address copilot comments * TST: improve tests * ENH: get changes from BUG: All NOAA NOMADS Dependent Atmosphere Models Broken Fixes #933 * BUG: Fix hard-coded radius value for parachute added mass calculation (#889) * Fix hard-coded radius value for parachute added mass calculation Calculate radius from cd_s using a typical hemispherical parachute drag coefficient (1.4) when radius is not explicitly provided. This fixes drift distance calculations for smaller parachutes like drogues. Formula: R = sqrt(cd_s / (Cd * π)) Closes #860 Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Address code review: improve docstrings and add explicit None defaults Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Add CHANGELOG entry for PR #889 Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Update rocket.add_parachute to use radius=None for consistency Changed the default radius from 1.5 to None in the add_parachute method to match the Parachute class behavior. This ensures consistent automatic radius calculation from cd_s across both APIs. Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Refactor Parachute class to remove hard-coded radius value and introduce drag_coefficient parameter for radius estimation Fix hard-coded radius value for parachute added mass calculation Calculate radius from cd_s using a typical hemispherical parachute drag coefficient (1.4) when radius is not explicitly provided. This fixes drift distance calculations for smaller parachutes like drogues. Formula: R = sqrt(cd_s / (Cd * π)) Closes #860 Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Add CHANGELOG entry for PR #889 Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Refactor Parachute class to remove hard-coded radius value and introduce drag_coefficient parameter for radius estimation MNT: Extract noise initialization to fix pylint too-many-statements in Parachute.__init__ Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> * Refactor environment method access in controller test for clarity * fix pylint * fix comments * avoid breaking change with drag_coefficient * reafactors Parachute.__init__ method * fix tests --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br> * ENH: Add guidelines for simulation safety, Sphinx documentation, and pytest standards (GitHub Copilot) (#937) * REL: bump version to 1.12 * BUG: Add wraparound logic for wind direction in environment plots (#939) * chore: added personal toolkit files * update branch name in workflow * chore: update toolkit files * Fix: add wraparound logic for wind direction and related tests * style: fix ruff formatting * Remove unused import Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * refactor: move repetitive logic into helper method * fix: update test logic in test_environment * add changelog entry --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> * MNT: add numpy import to test_environment.py * MNT: rename constant for wraparound threshold in _break_direction_wraparound method * DOC: add latitude range in docs Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> * MNT: remove unnecessary pylint warning Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> * MNT: remove unnecessary pylint warning Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> * ENH: address copilot comments * TST: improve tests * DOC: correctly link to WeatherModelMapping Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * DOCS: checked todo Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * ENH: Adaptive Monte Carlo via Convergence Criteria (#922) * ENH: added a new function (simulate_convergence) * DOC: added a cell to show simulate_convergence function usage * TST: integration test for simulate_convergence * DOC: updated changelog for this PR * ENH: ran black to lint intg test file * new fixes thx to copilot comments * linted rocketpy/simulation/monte_carlo.py --------- Co-authored-by: Malmahrouqi3 <mohdsaid497566@gmail.com> * DEV: remove unwanted changes from develop * DEV: Update for hotfix * TST: add tests * MNT: remove changes from develop again * MNT: Refactor longitude and latitude index functions * MNT: ruff --------- Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br> Co-authored-by: Khushal Kottaru <khushal.kottaru@gmail.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Mohammed S. Al-Mahrouqi <malmahrouqi3@gatech.edu> Co-authored-by: Malmahrouqi3 <mohdsaid497566@gmail.com>
1 parent 876ebcd commit cb15a39

17 files changed

Lines changed: 1427 additions & 434 deletions

File tree

CHANGELOG.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,27 @@ Attention: The newest changes should be on top -->
3232

3333
### Added
3434

35-
-
35+
-
3636

3737
### Changed
3838

3939
-
4040

4141
### Fixed
4242

43-
-
43+
-
44+
45+
## [v1.12.1] - 2026-04-03
46+
47+
### Fixed
48+
49+
- HOTFIX: Migrate Forecasts to UCAR THREDDS [#943](https://github.com/RocketPy-Team/RocketPy/pull/943)
4450

4551
## [v1.12.0] - 2026-03-08
4652

4753
### Added
4854

55+
- ENH: Air brakes controller functions now support 8-parameter signature [#854](https://github.com/RocketPy-Team/RocketPy/pull/854)
4956
- TST: Add acceptance tests for 3DOF flight simulation based on Bella Lui rocket [#914] (https://github.com/RocketPy-Team/RocketPy/pull/914_
5057
- ENH: Add background map auto download functionality to Monte Carlo plots [#896](https://github.com/RocketPy-Team/RocketPy/pull/896)
5158
- MNT: net thrust addition to 3 dof in flight class [#907] (https://github.com/RocketPy-Team/RocketPy/pull/907)

docs/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
author = "RocketPy Team"
2828

2929
# The full version, including alpha/beta/rc tags
30-
release = "1.12.0"
30+
release = "1.12.1"
3131

3232

3333
# -- General configuration ---------------------------------------------------

docs/user/compare_flights.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ This is done following the same steps as in the :ref:`firstsimulation` example.
2626

2727
.. jupyter-execute::
2828

29-
after_tomorrow = datetime.now() + timedelta(days=2)
30-
env = Environment(latitude=-23, longitude=-49, date=after_tomorrow)
29+
tomorrow = datetime.now() + timedelta(days=1)
30+
env = Environment(latitude=-23, longitude=-49, date=tomorrow)
3131
env.set_atmospheric_model(type="Forecast", file="GFS")
3232

3333
cesaroni_motor = SolidMotor(

docs/user/environment/1-atm-models/ensemble.rst

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
.. _ensemble_atmosphere:
2+
13
Ensemble
24
========
35

@@ -21,7 +23,21 @@ Ensemble Forecast
2123
Global Ensemble Forecast System (GEFS)
2224
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2325

24-
The ``GEFS`` model is a global ensemble forecast model ...
26+
.. danger::
27+
28+
**GEFS shortcut unavailable**: ``file="GEFS"`` is currently disabled in
29+
RocketPy because NOMADS OPeNDAP is deactivated for this endpoint.
30+
31+
.. note::
32+
33+
If you have a GEFS-compatible NetCDF or OPeNDAP dataset from another
34+
provider (or a local copy), you can still load it explicitly by passing the
35+
dataset path/URL in ``file`` and a compatible mapping in ``dictionary``.
36+
37+
38+
The ``GEFS`` model is a global ensemble forecast system useful for uncertainty
39+
analysis, but RocketPy's automatic ``file="GEFS"`` shortcut is temporarily
40+
disabled.
2541

2642

2743
.. code-block:: python
@@ -71,20 +87,16 @@ CMC Ensemble
7187
resulted in a change of the model's endpoint. Efforts are underway to \
7288
restore access to the CMC Ensemble model as swiftly as possible.
7389

74-
.. code-block:: python
90+
At the moment, there is no built-in ``file="CMC"`` shortcut in
91+
``Environment.set_atmospheric_model``.
7592

76-
env_cmc = Environment(
77-
date=date_info,
78-
latitude=-21.960641,
79-
longitude=-47.482122,
80-
elevation=640,
81-
)
82-
env_cmc.set_atmospheric_model(type="Ensemble", file="CMC")
83-
env_cmc.all_info()
93+
If you have a CMC-compatible NetCDF or OPeNDAP dataset, load it explicitly by
94+
passing the dataset path/URL in ``file`` and a matching mapping dictionary in
95+
``dictionary``.
8496

8597

8698
Ensemble Reanalysis
8799
-------------------
88100

89101
Ensemble reanalyses are also possible with RocketPy. See the
90-
:ref:`reanalysis_ensemble` section for more information.
102+
:ref:`reanalysis_ensemble` section for more information.

docs/user/environment/1-atm-models/forecast.rst

Lines changed: 9 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Global Forecast System (GFS)
2424

2525
Using the latest forecast from GFS is simple.
2626
Set the atmospheric model to ``forecast`` and specify that GFS is the file you want.
27-
Note that since data is downloaded from the NOMADS server, this line of code can
27+
Note that since data is downloaded from a remote OPeNDAP server, this line of code can
2828
take longer than usual.
2929

3030
.. jupyter-execute::
@@ -111,36 +111,15 @@ The same coordinates for SpacePort America will be used.
111111
High Resolution Window (HIRESW)
112112
-------------------------------
113113

114-
The High Resolution Window (HIRESW) model is a sophisticated weather forecasting
115-
system that operates at a high spatial resolution of approximately 3 km.
116-
It utilizes two main dynamical cores: the Advanced Research WRF (WRF-ARW) and
117-
the Finite Volume Cubed Sphere (FV3), each designed to enhance the accuracy of
118-
weather predictions.
114+
.. danger::
119115

120-
You can easily set up HIRESW in RocketPy by specifying the date, latitude, and
121-
longitude of your location. Let's use SpacePort America as an example.
116+
**HIRESW shortcut unavailable**: ``file="HIRESW"`` is currently disabled in
117+
RocketPy because NOMADS OPeNDAP is deactivated for this endpoint.
122118

123-
.. jupyter-execute::
124-
125-
env_hiresw = Environment(
126-
date=tomorrow,
127-
latitude=32.988528,
128-
longitude=-106.975056,
129-
)
119+
If you have a HIRESW-compatible dataset from another provider (or a local copy),
120+
you can still load it explicitly by passing the path/URL in ``file`` and an
121+
appropriate mapping in ``dictionary``.
130122

131-
env_hiresw.set_atmospheric_model(
132-
type="Forecast",
133-
file="HIRESW",
134-
dictionary="HIRESW",
135-
)
136-
137-
env_hiresw.plots.atmospheric_model()
138-
139-
.. note::
140-
141-
The HRES model is updated every 12 hours, providing forecasts with a \
142-
resolution of 3 km. The model can predict weather conditions up to 48 hours \
143-
in advance. RocketPy uses the CONUS domain with ARW core.
144123

145124

146125
Using Windy Atmosphere
@@ -248,6 +227,5 @@ Also, the servers may be down or may face high traffic.
248227

249228
.. seealso::
250229

251-
To see a complete list of available models on the NOAA's NOMADS server, visit
252-
`NOMADS <https://nomads.ncep.noaa.gov/>`_.
253-
230+
To browse available NCEP model collections on UCAR THREDDS, visit
231+
`THREDDS NCEP Catalog <https://thredds.ucar.edu/thredds/catalog/grib/NCEP/GFS/Global_0p25deg/catalog.html>`_.

docs/user/environment/1-atm-models/soundings.rst

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -57,31 +57,22 @@ This service allows users to download virtual soundings from numerical weather
5757
prediction models such as GFS, RAP, and NAM, and also real soundings from the
5858
Integrated Global Radiosonde Archive (IGRA).
5959

60-
These options can be retrieved as a text file in GSD format.
61-
By generating such a file through the link above, the file's URL can be used to
62-
import the atmospheric data into RocketPy.
63-
64-
We will use the same sounding station as we did for the Wyoming Soundings.
60+
These options can be retrieved as a text file in GSD format. However,
61+
RocketPy no longer provides a dedicated ``set_atmospheric_model`` type for
62+
NOAA RUC Soundings.
6563

6664
.. note::
6765

6866
Select ROABs as the initial data source, specify the station through its \
6967
WMO-ID, and opt for the ASCII (GSD format) button.
7068

71-
Initialize a new Environment instance:
72-
73-
.. code-block:: python
69+
If you need to use RUC-sounding-like data in RocketPy, convert it to one of the
70+
supported workflows:
7471

75-
url = r"https://rucsoundings.noaa.gov/get_raobs.cgi?data_source=RAOB&latest=latest&start_year=2019&start_month_name=Feb&start_mday=5&start_hour=12&start_min=0&n_hrs=1.0&fcst_len=shortest&airport=83779&text=Ascii%20text%20%28GSD%20format%29&hydrometeors=false&start=latest"
76-
77-
env = Environment()
78-
env.set_atmospheric_model(type="NOAARucSounding", file=url)
79-
env.plots.atmospheric_model()
72+
- Use :ref:`custom_atmosphere` after parsing the text data.
73+
- Use :ref:`reanalysis` or :ref:`forecast` with NetCDF/OPeNDAP sources.
8074

8175
.. note::
8276

8377
The leading `r` in the URL string is used to indicate a raw string, which \
84-
is useful when dealing with backslashes in URLs.
85-
86-
87-
78+
is useful when dealing with backslashes in URLs.

docs/user/environment/1-atm-models/standard_atmosphere.rst

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
.. _standard_atmosphere:
2+
13
Standard Atmosphere
24
===================
35

@@ -29,4 +31,4 @@ The International Standard Atmosphere can also be reset at any time by using the
2931

3032
.. jupyter-execute::
3133

32-
env.set_atmospheric_model(type="standard_atmosphere")
34+
env.set_atmospheric_model(type="standard_atmosphere")

docs/user/environment/3-further/other_apis.rst

Lines changed: 86 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
.. _environment_other_apis:
2+
13
Connecting to other APIs
24
========================
35

@@ -25,14 +27,19 @@ the following dimensions and variables:
2527
- Latitude
2628
- Longitude
2729
- Pressure Levels
30+
- Temperature (as a function of Time, Pressure Levels, Latitude and Longitude)
2831
- Geopotential Height (as a function of Time, Pressure Levels, Latitude and Longitude)
32+
- or Geopotential (as a function of Time, Pressure Levels, Latitude and Longitude)
2933
- Surface Geopotential Height (as a function of Time, Latitude and Longitude)
34+
(optional)
3035
- Wind - U Component (as a function of Time, Pressure Levels, Latitude and Longitude)
3136
- Wind - V Component (as a function of Time, Pressure Levels, Latitude and Longitude)
3237

38+
Some projected grids also require a ``projection`` key in the mapping.
39+
3340

34-
For example, let's imagine we want to use the HIRESW model from this endpoint:
35-
`https://nomads.ncep.noaa.gov/dods/hiresw/ <https://nomads.ncep.noaa.gov/dods/hiresw/>`_
41+
For example, let's imagine we want to use a forecast model available via an
42+
OPeNDAP endpoint.
3643

3744

3845
Looking through the variable list in the link above, we find the following correspondence:
@@ -72,15 +79,85 @@ Therefore, we can create an environment like this:
7279
dictionary=name_mapping,
7380
)
7481
82+
Built-in mapping dictionaries
83+
-----------------------------
84+
85+
Instead of a custom dictionary, you can pass a built-in mapping name in the
86+
``dictionary`` argument. Common options include:
87+
88+
- ``"ECMWF"``
89+
- ``"ECMWF_v0"``
90+
- ``"NOAA"``
91+
- ``"GFS"``
92+
- ``"NAM"``
93+
- ``"RAP"``
94+
- ``"HIRESW"`` (mapping available; latest-model shortcut currently disabled)
95+
- ``"GEFS"`` (mapping available; latest-model shortcut currently disabled)
96+
- ``"MERRA2"``
97+
- ``"CMC"`` (for compatible datasets loaded explicitly)
98+
99+
What a mapping name means
100+
^^^^^^^^^^^^^^^^^^^^^^^^^
101+
102+
- Base mapping names (for example ``"GFS"``, ``"NAM"`` and ``"RAP"``) map
103+
RocketPy weather keys to the current default variable naming used by the
104+
corresponding provider datasets.
105+
- These defaults are aligned with current shortcut workflows (for example,
106+
THREDDS-backed latest model sources) and may use projected coordinates
107+
(``x``/``y`` plus ``projection``) depending on the model.
108+
109+
Legacy mapping names
110+
^^^^^^^^^^^^^^^^^^^^
111+
112+
If you are loading archived or older NOMADS-style datasets, use the explicit
113+
legacy aliases:
114+
115+
- ``"GFS_LEGACY"``
116+
- ``"NAM_LEGACY"``
117+
- ``"NOAA_LEGACY"``
118+
- ``"RAP_LEGACY"``
119+
- ``"CMC_LEGACY"``
120+
- ``"GEFS_LEGACY"``
121+
- ``"HIRESW_LEGACY"``
122+
- ``"MERRA2_LEGACY"``
123+
124+
Legacy aliases primarily cover older variable naming patterns such as
125+
``lev``, ``tmpprs``, ``hgtprs``, ``ugrdprs`` and ``vgrdprs``.
126+
127+
.. note::
128+
129+
Mapping names are case-insensitive. For example,
130+
``"gfs_legacy"`` and ``"GFS_LEGACY"`` are equivalent.
131+
132+
For custom dictionaries, the canonical structure is:
133+
134+
.. code-block:: python
135+
136+
mapping = {
137+
"time": "time",
138+
"latitude": "lat",
139+
"longitude": "lon",
140+
"level": "lev",
141+
"temperature": "tmpprs",
142+
"surface_geopotential_height": "hgtsfc", # optional
143+
"geopotential_height": "hgtprs", # or geopotential
144+
"geopotential": None,
145+
"u_wind": "ugrdprs",
146+
"v_wind": "vgrdprs",
147+
}
148+
149+
.. important::
150+
151+
Ensemble datasets require an additional key for member selection:
152+
``"ensemble": "<your_member_dimension_name>"``.
153+
75154
.. caution::
76155

77-
Notice the ``file`` argument were suppressed in the code above. This is because \
78-
the URL depends on the date you are running the simulation. For example, as \
79-
it for now, a possible link could be: https://nomads.ncep.noaa.gov/dods/hiresw/hiresw20240803/hiresw_conusfv3_12z \
80-
(for the 3rd of August, 2024, at 12:00 UTC). \
81-
You should replace the date in the URL with the date you are running the simulation. \
82-
Different models may have different URL structures, so be sure to check the \
83-
documentation of the model you are using.
156+
The ``file`` argument was intentionally omitted in the example above. This is
157+
because the URL depends on the provider, dataset, and date you are running
158+
the simulation. Build the endpoint according to the provider specification
159+
and always validate that the target service is active before running your
160+
simulation workflow.
84161

85162

86163
Without OPeNDAP protocol
@@ -94,4 +171,3 @@ Environment class, for example:
94171

95172
- `Meteomatics <https://www.meteomatics.com/en/weather-api/>`_: `#545 <https://github.com/RocketPy-Team/RocketPy/issues/545>`_
96173
- `Open-Meteo <https://open-meteo.com/>`_: `#520 <https://github.com/RocketPy-Team/RocketPy/issues/520>`_
97-

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "rocketpy"
3-
version = "1.12.0"
3+
version = "1.12.1"
44
description="Advanced 6-DOF trajectory simulation for High-Power Rocketry."
55
dynamic = ["dependencies"]
66
readme = "README.md"

0 commit comments

Comments
 (0)