You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
BUG: All NOAA NOMADS Dependent Atmosphere Models Broken #933
The Bad: The files come in a format called "GRIB2." RocketPy usually uses "NetCDF." Reading GRIB2 files seems difficult and ive read that it can be cumbersome to do it on windows
It seems that using Siphon is the way to go here, but I might be missing an easier way to fix the issue
What happened: NOAA terminated OpenDAP access on nomads.ncep.noaa.gov effective Feb 24, 2026 (SCN25-81). All RocketPy fetchers in fetchers.py call netCDF4.Dataset(opendap_url) which no longer works.
How: Use siphon library to query Unidata's THREDDS server (thredds.ucar.edu), which mirrors NOAA data and returns netCDF4 via NCSS (NetCDF Subset Service).
python
from siphon.catalog import TDSCatalog
cat = TDSCatalog('https://thredds.ucar.edu/thredds/catalog/grib/NCEP/GFS/Global_0p25deg/catalog.xml')ncss =list(cat.datasets.values())[0].subset()query = ncss.query()query.lonlat_point(lon, lat)# or lonlat_box for 2x2 gridquery.time(datetime)query.accept('netcdf4')query.variables('Temperature_isobaric','u-component_of_wind_isobaric',...)data = ncss.get_data(query)# returns netCDF4.Dataset
Verified available on THREDDS:
GFS 0.25° ✅ (grib/NCEP/GFS/Global_0p25deg)
NAM CONUS 12km ✅ (grib/NCEP/NAM/CONUS_12km)
RAP CONUS 13km ✅ (grib/NCEP/RAP/CONUS_13km)
GEFS — needs verification (likely available)
HIRESW — needs verification
New dependency:siphon (pure Python: requests, protobuf, beautifulsoup4)
Criteria | Rating
-- | --
Refactor scope | Small — returns netCDF4, same interface as before
New dependencies | Light — siphon is pure Python, pip-installable everywhere
Windows support | Excellent — no C libraries needed
Server reliability | Medium — single server (thredds.ucar.edu), run by Unidata/NSF
Model coverage | Good — GFS, NAM, RAP confirmed; GEFS/HIRESW likely
Data subsetting | Yes — NCSS supports point/box queries, variable/level selection
Maintenance | Good — maintained by Unidata (same team behind netCDF4)
Recommendation
For RocketPy's use case (single-point atmospheric profiles for rocket simulation):
Primary recommendation: Option 1 (Siphon + THREDDS) as an optional dependency rocketpy[forecast]
Rationale:
Minimal disruption — returns netCDF4, so process_forecast_reanalysis() needs only variable name mapping updates
Pure Python — installs via pip install siphon on all platforms, no C library issues
Lightweight — doesn't bloat RocketPy with weather-specific heavy deps
Good enough reliability — Unidata THREDDS has been running reliably for years; used by pvlib, MetPy, and many other projects
Clean API — catalog-based discovery instead of URL guessing
If reliability is a top concern, consider Option 5 (Hybrid) with GRIB filter fallback, accepting the cfgrib dependency cost.
If NOAA-official matters most, go with Option 2 (GRIB Filter + cfgrib), accepting the larger refactor and C library dependency.
I have been looking into using the Monte Carlo simulations functionality in RocketPy recently, and was wondering what the current "expected" way of creating stochastic weather models is?
The example code listed here returns a ValueError that "NOMADS OPeNDAP is deactivated" as expected due to the deactivation.
It also states: "Please use another ensemble source or provide a compatible dataset path/URL explicitly."
Is there any other valid and working ensemble source currently? Or should I look into downloading files locally and then using these?
Activity
Gui-FernandesBR commentedon Mar 8, 2026
This is my claude's review:
Context
What happened: NOAA terminated OpenDAP access on
nomads.ncep.noaa.goveffective Feb 24, 2026 (SCN25-81). All RocketPy fetchers infetchers.pycallnetCDF4.Dataset(opendap_url)which no longer works.Affected models: GFS, NAM, RAP, HIRESW, GEFS (all 5 active NOMADS-based models)
NOAA's recommended migration paths:
https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?...(returns GRIB2 subsets)https://nomads.ncep.noaa.gov/pub/data/nccf/com/(full GRIB2 files)Current RocketPy deps: numpy, scipy, matplotlib, netCDF4, requests, pytz, simplekml, dill
Current Architecture (what breaks)
Key files:
rocketpy/environment/fetchers.py(lines 95-406) — 6 broken fetchersrocketpy/environment/environment.py(line 1675) —process_forecast_reanalysis()consumes netCDF4.Datasetrocketpy/environment/weather_model_mapping.py— variable name mappings (tmpprs,ugrdprs, etc.)rocketpy/environment/tools.py— helpers (find_time_index, bilinear_interpolation, etc.)Option Analysis
Option 1: Siphon + Unidata THREDDS
How: Use
siphonlibrary to query Unidata's THREDDS server (thredds.ucar.edu), which mirrors NOAA data and returns netCDF4 via NCSS (NetCDF Subset Service).Verified available on THREDDS:
grib/NCEP/GFS/Global_0p25deg)grib/NCEP/NAM/CONUS_12km)grib/NCEP/RAP/CONUS_13km)New dependency:
siphon(pure Python: requests, protobuf, beautifulsoup4)Recommendation
For RocketPy's use case (single-point atmospheric profiles for rocket simulation):
Primary recommendation: Option 1 (Siphon + THREDDS) as an optional dependency
rocketpy[forecast]Rationale:
process_forecast_reanalysis()needs only variable name mapping updatespip install siphonon all platforms, no C library issuesIf reliability is a top concern, consider Option 5 (Hybrid) with GRIB filter fallback, accepting the cfgrib dependency cost.
If NOAA-official matters most, go with Option 2 (GRIB Filter + cfgrib), accepting the larger refactor and C library dependency.
Implementation Sketch (for chosen approach)
If Siphon is chosen:
pyproject.toml:fetchers.py:netCDF4.Dataset(opendap_url)with Siphon NCSS queriesweather_model_mapping.py:Temperature_isobaricvstmpprs)environment.py:If GRIB Filter is chosen:
cfgrib,eccodes,xarrayOpen Questions for Decision
BUG: All NOAA NOMADS Dependent Atmosphere Models Broken
ENH: get changes from BUG: All NOAA NOMADS Dependent Atmosphere Model…
ENH: get changes from BUG: All NOAA NOMADS Dependent Atmosphere Model…
HOTFIX: Migrate Forecasts to UCAR THREDDS (RocketPy-Team#943)
Atam3r commentedon May 3, 2026
I have been looking into using the Monte Carlo simulations functionality in RocketPy recently, and was wondering what the current "expected" way of creating stochastic weather models is?
The example code listed here returns a ValueError that "NOMADS OPeNDAP is deactivated" as expected due to the deactivation.
It also states: "Please use another ensemble source or provide a compatible dataset path/URL explicitly."
Is there any other valid and working ensemble source currently? Or should I look into downloading files locally and then using these?