CFS#
NCEPβs Climate Forecast System (version 2) has been operational since 2011.
There are three products available
`product="time_series"<#time-series-product>`__`product="6_hourly"<#6-hourly-product>`__`product="monthly"<#monthly-product>`__
Some examples below
H = Herbie(
date,
model="cfs",
product="time_series",
member=1, # {1, 2, 3, 4}
variable="tmp2m", # the file's variable short name.
)
H = Herbie(
date,
model="cfs",
product="6_hourly",
kind="flxf", # {"flxf", "pgbf", "ocnf", "ipvf"}
member=1, # {1, 2, 3, 4}
fxx=12, # {0 ... (what's the max forecast hour??}
)
H = Herbie(
date,
model="cfs",
product="monthly_means",
kind="pgbf", # {"flxf", "pgbf", "ocnh", "ocnf", "ipvf"}
member=1, # {1, 2, 3, 4}
month=1, # {0 through 9 (I think)}
hour=None, # None for daily mean, or {0, 6, 12, 18}
)
[1]:
from herbie import Herbie
from herbie.toolbox import EasyMap, pc, ccrs
import matplotlib.pyplot as plt
Time Series product#
For reference of what variables are avaialble: https://www.nco.ncep.noaa.gov/pmb/products/cfs/#DAILY
Herbie expects the following arguments for CFS times series product:
member, an integer 1, 2, 3, or 4variable, a fileβs variable short name liketmp2m, orz500, etc.
[2]:
H = Herbie(
"2025-01-01",
model="cfs",
product="time_series",
member=1,
variable="tmp2m",
)
H
/home/blaylock/GITHUB/Herbie/herbie/models/cfs.py:139: UserWarning: Herbie's CFS templates are and subject to major changes. PRs are welcome to improve it.
warnings.warn(
/home/blaylock/GITHUB/Herbie/herbie/models/cfs.py:178: UserWarning: Variable tmp2m is not in the list of available time series variables. Expected one of {'wnd10m': 'Wind u and v at 10 m', 'wnd1000': 'Wind u and v at 1000 hPa', 'wnd925': 'Wind u and v at 925 hPa', 'wnd850': 'Wind u and v at 850 hPa', 'wnd500': 'Wind u and v at 500 hPa', 'wnd700': 'Wind u and v at 700 hPa', 'wnd250': 'Wind u and v at 250 hPa', 'wnd200': 'Wind u and v at 200 hPa', 'wndstrs': 'Stress at surface', 'prmsl': 'Pressure Reduced to MSL', 'pressfc': 'Surface Pressure', 'z1000': 'GeoPotential Height at 1000 hPa', 'z850': 'GeoPotential Height at 850 hPa', 'z700': 'GeoPotential Height at 700 hPa', 'z500': 'GeoPotential Height at 500 hPa', 'z200': 'GeoPotential Height at 200 hPa', 'tmpsfc': 'Temperature at the Surface', 'tmp2m': 'Temperature at 2 m', 'tmin': 'Minimum Temperature at 2 m', 'tmax': 'Maximum Temperature at 2 m', 't1000': 'Temperature at 1000 hPa', 't850': 'Temperature at 850 hPa', 't700': 'Temperature at 700 hPa', 't500': 'Temperature at 500 hPa', 't250': 'Temperature at 250 hPa', 't200': 'Temperature at 200 hPa', 't50': 'Temperature at 50 hPa', 't2': 'Temperature at 2 hPa', 'tmphy1': 'Temperature at hybrid level 1', 'q2m': 'Specific Humidity at 2 m', 'q925': 'Specific Humidity at 925 hPa', 'q850': 'Specific Humidity at 850 hPa', 'q700': 'Specific Humidity at 700 hPa', 'q500': 'Specific Humidity at 500 hPa', 'chi850': 'Velocity Potential at 850 hPa', 'chi200': 'Velocity Potential at 200 hPa', 'dlwsfc': 'Downward Longwave Radiation at the Surface', 'dswsfc': 'Downward Shortwave Radiation at the Surface', 'ulwsfc': 'Upward Longwave Radiation at the Surface', 'uswsfc': 'Upward Shortwave Radiation at the Surface', 'ulwtoa': 'Upward Longwave Radiation at the Top of the Atmosphere', 'uswtoa': 'Upward Shortwave Radiation at the Top of the Atmosphere', 'gflux': 'Ground Heat Flux', 'lhtfl': 'Latent Heat Net Flux at the Surface', 'shtfl': 'Sensible Heat Net Flux at the Surface', 'cprat': 'Convective Precipitation Rate', 'csdlf': 'Clear Sky Downward Longwave Flux', 'csdsf': 'Clear Sky Downward Solar Flux', 'csusf': 'Clear Sky Upward Solar Flux', 'icecon': 'Surface Ice Cover', 'icethk': 'Surface Ice Thickness', 'ipv450': 'Isentropic Potential Vorticity at 450 K', 'ipv550': 'Isentropic Potential Vorticity at 550 K', 'ipv650': 'Isentropic Potential Vorticity at 650 K', 'nddsf': 'Near IR Diffuse Downward Solar Flux', 'tcdcclm': 'Total Cloud Cover', 'prate': 'Total Precipitation Rate', 'psi200': 'Stream Function at 200 hPa', 'psi850': 'Stream Function at 850 hPa', 'pwat': 'Precipitable Water', 'runoff': 'Surface Runoff', 'snohf': 'Snowfall Rate Water Equivalent', 'soilm1': 'Vol. Soil Moisture Content, 0-10 cm Below Ground', 'soilm2': 'Vol. Soil Moisture Content, 10-40 cm Below Ground', 'soilm3': 'Vol. Soil Moisture Content, 40-100 cm Below Ground', 'soilm4': 'Vol. Soil Moisture Content, 100-200 cm Below Ground', 'soilt1': 'Soil Temperature, 0-0.1 m Below Ground', 'vddsf': 'Visible Diffuse Downward Solar Flux', 'vvel500': 'Vertical Velocity at 500 hPa', 'weasd': 'Water Equivalent of Accumulated Snow Depth', 'ocnmld': 'Mixed Layer Depth', 'ocnslh': 'Sea Level Height', 'ocnsild': 'Surface Isothermal Layer Depth', 'ocndt2.5c': 'Isothermal Layer Depth 2.5 Celsius', 'ocndt5c': 'Isothermal Layer Depth 5 Celsius', 'ocndt10c': 'Isothermal Layer Depth 10 Celsius', 'ocndt15c': 'Isothermal Layer Depth 15 Celsius', 'ocndt20c': 'Isothermal Layer Depth 20 Celsius', 'ocndt25c': 'Isothermal Layer Depth 25 Celsius', 'ocndt28c': 'Isothermal Layer Depth 28 Celsius', 'ocnsst': 'Temperature at depth 5 meters', 'ocnt15': 'Potential temperature 15 meters below', 'ocnheat': 'Heat Content', 'ocntchp': 'Tropical Cyclone Heat Potential', 'ocnsal5': 'Salinity at depth 5 meters', 'ocnsal15': 'Salinity at depth 15 meters', 'ocnu5': 'Zonal Current at depth 5 meters', 'ocnu15': 'Zonal Current at depth 15 meters', 'ocnv5': 'Meridional Current at depth 5 meters', 'ocnv15': 'Meridional Current at depth 15 meters', 'ocnvv55': 'Vertical Velocity at depth 55 meters'}
warnings.warn(
β
Found β model=cfs β product=time_series β 2025-Jan-01 00:00 UTC F00 β GRIB2 @ aws β IDX @ aws
[2]:
ββHerbie CFS model time_series product initialized 2025-Jan-01 00:00 UTC F00 β source=aws
[3]:
H.SOURCES
[3]:
{'aws': 'https://noaa-cfs-pds.s3.amazonaws.com/cfs.20250101/00/time_grib_01/tmp2m.01.2025010100.daily.grb2',
'nomads': 'https://nomads.ncep.noaa.gov/pub/data/nccf/com/cfs/prod/cfs.20250101/00/time_grib_01/tmp2m.01.2025010100.daily.grb2'}
[4]:
# What are the available time series variables values?
# You may import the dictionary of values or refer to
# https://www.nco.ncep.noaa.gov/pmb/products/cfs/
from herbie.models.cfs import time_series_variables
time_series_variables
[4]:
{'wnd10m': 'Wind u and v at 10 m',
'wnd1000': 'Wind u and v at 1000 hPa',
'wnd925': 'Wind u and v at 925 hPa',
'wnd850': 'Wind u and v at 850 hPa',
'wnd500': 'Wind u and v at 500 hPa',
'wnd700': 'Wind u and v at 700 hPa',
'wnd250': 'Wind u and v at 250 hPa',
'wnd200': 'Wind u and v at 200 hPa',
'wndstrs': 'Stress at surface',
'prmsl': 'Pressure Reduced to MSL',
'pressfc': 'Surface Pressure',
'z1000': 'GeoPotential Height at 1000 hPa',
'z850': 'GeoPotential Height at 850 hPa',
'z700': 'GeoPotential Height at 700 hPa',
'z500': 'GeoPotential Height at 500 hPa',
'z200': 'GeoPotential Height at 200 hPa',
'tmpsfc': 'Temperature at the Surface',
'tmp2m': 'Temperature at 2 m',
'tmin': 'Minimum Temperature at 2 m',
'tmax': 'Maximum Temperature at 2 m',
't1000': 'Temperature at 1000 hPa',
't850': 'Temperature at 850 hPa',
't700': 'Temperature at 700 hPa',
't500': 'Temperature at 500 hPa',
't250': 'Temperature at 250 hPa',
't200': 'Temperature at 200 hPa',
't50': 'Temperature at 50 hPa',
't2': 'Temperature at 2 hPa',
'tmphy1': 'Temperature at hybrid level 1',
'q2m': 'Specific Humidity at 2 m',
'q925': 'Specific Humidity at 925 hPa',
'q850': 'Specific Humidity at 850 hPa',
'q700': 'Specific Humidity at 700 hPa',
'q500': 'Specific Humidity at 500 hPa',
'chi850': 'Velocity Potential at 850 hPa',
'chi200': 'Velocity Potential at 200 hPa',
'dlwsfc': 'Downward Longwave Radiation at the Surface',
'dswsfc': 'Downward Shortwave Radiation at the Surface',
'ulwsfc': 'Upward Longwave Radiation at the Surface',
'uswsfc': 'Upward Shortwave Radiation at the Surface',
'ulwtoa': 'Upward Longwave Radiation at the Top of the Atmosphere',
'uswtoa': 'Upward Shortwave Radiation at the Top of the Atmosphere',
'gflux': 'Ground Heat Flux',
'lhtfl': 'Latent Heat Net Flux at the Surface',
'shtfl': 'Sensible Heat Net Flux at the Surface',
'cprat': 'Convective Precipitation Rate',
'csdlf': 'Clear Sky Downward Longwave Flux',
'csdsf': 'Clear Sky Downward Solar Flux',
'csusf': 'Clear Sky Upward Solar Flux',
'icecon': 'Surface Ice Cover',
'icethk': 'Surface Ice Thickness',
'ipv450': 'Isentropic Potential Vorticity at 450 K',
'ipv550': 'Isentropic Potential Vorticity at 550 K',
'ipv650': 'Isentropic Potential Vorticity at 650 K',
'nddsf': 'Near IR Diffuse Downward Solar Flux',
'tcdcclm': 'Total Cloud Cover',
'prate': 'Total Precipitation Rate',
'psi200': 'Stream Function at 200 hPa',
'psi850': 'Stream Function at 850 hPa',
'pwat': 'Precipitable Water',
'runoff': 'Surface Runoff',
'snohf': 'Snowfall Rate Water Equivalent',
'soilm1': 'Vol. Soil Moisture Content, 0-10 cm Below Ground',
'soilm2': 'Vol. Soil Moisture Content, 10-40 cm Below Ground',
'soilm3': 'Vol. Soil Moisture Content, 40-100 cm Below Ground',
'soilm4': 'Vol. Soil Moisture Content, 100-200 cm Below Ground',
'soilt1': 'Soil Temperature, 0-0.1 m Below Ground',
'vddsf': 'Visible Diffuse Downward Solar Flux',
'vvel500': 'Vertical Velocity at 500 hPa',
'weasd': 'Water Equivalent of Accumulated Snow Depth',
'ocnmld': 'Mixed Layer Depth',
'ocnslh': 'Sea Level Height',
'ocnsild': 'Surface Isothermal Layer Depth',
'ocndt2.5c': 'Isothermal Layer Depth 2.5 Celsius',
'ocndt5c': 'Isothermal Layer Depth 5 Celsius',
'ocndt10c': 'Isothermal Layer Depth 10 Celsius',
'ocndt15c': 'Isothermal Layer Depth 15 Celsius',
'ocndt20c': 'Isothermal Layer Depth 20 Celsius',
'ocndt25c': 'Isothermal Layer Depth 25 Celsius',
'ocndt28c': 'Isothermal Layer Depth 28 Celsius',
'ocnsst': 'Temperature at depth 5 meters',
'ocnt15': 'Potential temperature 15 meters below',
'ocnheat': 'Heat Content',
'ocntchp': 'Tropical Cyclone Heat Potential',
'ocnsal5': 'Salinity at depth 5 meters',
'ocnsal15': 'Salinity at depth 15 meters',
'ocnu5': 'Zonal Current at depth 5 meters',
'ocnu15': 'Zonal Current at depth 15 meters',
'ocnv5': 'Meridional Current at depth 5 meters',
'ocnv15': 'Meridional Current at depth 15 meters',
'ocnvv55': 'Vertical Velocity at depth 55 meters'}
[5]:
H = Herbie(
"2025-01-01",
model="cfs",
product="time_series",
member=1,
variable="wnd10m",
)
H.inventory()
/home/blaylock/GITHUB/Herbie/herbie/models/cfs.py:178: UserWarning: Variable wnd10m is not in the list of available time series variables. Expected one of {'wnd10m': 'Wind u and v at 10 m', 'wnd1000': 'Wind u and v at 1000 hPa', 'wnd925': 'Wind u and v at 925 hPa', 'wnd850': 'Wind u and v at 850 hPa', 'wnd500': 'Wind u and v at 500 hPa', 'wnd700': 'Wind u and v at 700 hPa', 'wnd250': 'Wind u and v at 250 hPa', 'wnd200': 'Wind u and v at 200 hPa', 'wndstrs': 'Stress at surface', 'prmsl': 'Pressure Reduced to MSL', 'pressfc': 'Surface Pressure', 'z1000': 'GeoPotential Height at 1000 hPa', 'z850': 'GeoPotential Height at 850 hPa', 'z700': 'GeoPotential Height at 700 hPa', 'z500': 'GeoPotential Height at 500 hPa', 'z200': 'GeoPotential Height at 200 hPa', 'tmpsfc': 'Temperature at the Surface', 'tmp2m': 'Temperature at 2 m', 'tmin': 'Minimum Temperature at 2 m', 'tmax': 'Maximum Temperature at 2 m', 't1000': 'Temperature at 1000 hPa', 't850': 'Temperature at 850 hPa', 't700': 'Temperature at 700 hPa', 't500': 'Temperature at 500 hPa', 't250': 'Temperature at 250 hPa', 't200': 'Temperature at 200 hPa', 't50': 'Temperature at 50 hPa', 't2': 'Temperature at 2 hPa', 'tmphy1': 'Temperature at hybrid level 1', 'q2m': 'Specific Humidity at 2 m', 'q925': 'Specific Humidity at 925 hPa', 'q850': 'Specific Humidity at 850 hPa', 'q700': 'Specific Humidity at 700 hPa', 'q500': 'Specific Humidity at 500 hPa', 'chi850': 'Velocity Potential at 850 hPa', 'chi200': 'Velocity Potential at 200 hPa', 'dlwsfc': 'Downward Longwave Radiation at the Surface', 'dswsfc': 'Downward Shortwave Radiation at the Surface', 'ulwsfc': 'Upward Longwave Radiation at the Surface', 'uswsfc': 'Upward Shortwave Radiation at the Surface', 'ulwtoa': 'Upward Longwave Radiation at the Top of the Atmosphere', 'uswtoa': 'Upward Shortwave Radiation at the Top of the Atmosphere', 'gflux': 'Ground Heat Flux', 'lhtfl': 'Latent Heat Net Flux at the Surface', 'shtfl': 'Sensible Heat Net Flux at the Surface', 'cprat': 'Convective Precipitation Rate', 'csdlf': 'Clear Sky Downward Longwave Flux', 'csdsf': 'Clear Sky Downward Solar Flux', 'csusf': 'Clear Sky Upward Solar Flux', 'icecon': 'Surface Ice Cover', 'icethk': 'Surface Ice Thickness', 'ipv450': 'Isentropic Potential Vorticity at 450 K', 'ipv550': 'Isentropic Potential Vorticity at 550 K', 'ipv650': 'Isentropic Potential Vorticity at 650 K', 'nddsf': 'Near IR Diffuse Downward Solar Flux', 'tcdcclm': 'Total Cloud Cover', 'prate': 'Total Precipitation Rate', 'psi200': 'Stream Function at 200 hPa', 'psi850': 'Stream Function at 850 hPa', 'pwat': 'Precipitable Water', 'runoff': 'Surface Runoff', 'snohf': 'Snowfall Rate Water Equivalent', 'soilm1': 'Vol. Soil Moisture Content, 0-10 cm Below Ground', 'soilm2': 'Vol. Soil Moisture Content, 10-40 cm Below Ground', 'soilm3': 'Vol. Soil Moisture Content, 40-100 cm Below Ground', 'soilm4': 'Vol. Soil Moisture Content, 100-200 cm Below Ground', 'soilt1': 'Soil Temperature, 0-0.1 m Below Ground', 'vddsf': 'Visible Diffuse Downward Solar Flux', 'vvel500': 'Vertical Velocity at 500 hPa', 'weasd': 'Water Equivalent of Accumulated Snow Depth', 'ocnmld': 'Mixed Layer Depth', 'ocnslh': 'Sea Level Height', 'ocnsild': 'Surface Isothermal Layer Depth', 'ocndt2.5c': 'Isothermal Layer Depth 2.5 Celsius', 'ocndt5c': 'Isothermal Layer Depth 5 Celsius', 'ocndt10c': 'Isothermal Layer Depth 10 Celsius', 'ocndt15c': 'Isothermal Layer Depth 15 Celsius', 'ocndt20c': 'Isothermal Layer Depth 20 Celsius', 'ocndt25c': 'Isothermal Layer Depth 25 Celsius', 'ocndt28c': 'Isothermal Layer Depth 28 Celsius', 'ocnsst': 'Temperature at depth 5 meters', 'ocnt15': 'Potential temperature 15 meters below', 'ocnheat': 'Heat Content', 'ocntchp': 'Tropical Cyclone Heat Potential', 'ocnsal5': 'Salinity at depth 5 meters', 'ocnsal15': 'Salinity at depth 15 meters', 'ocnu5': 'Zonal Current at depth 5 meters', 'ocnu15': 'Zonal Current at depth 15 meters', 'ocnv5': 'Meridional Current at depth 5 meters', 'ocnv15': 'Meridional Current at depth 15 meters', 'ocnvv55': 'Vertical Velocity at depth 55 meters'}
warnings.warn(
β
Found β model=cfs β product=time_series β 2025-Jan-01 00:00 UTC F00 β GRIB2 @ aws β IDX @ aws
[5]:
| grib_message | start_byte | end_byte | range | reference_time | valid_time | variable | level | forecast_time | search_this | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 0 | 59189.0 | 0-59189 | 2025-01-01 | 2025-01-01 | UGRD | 10 m above ground | 6 hour fcst | :UGRD:10 m above ground:6 hour fcst |
| 1 | 2 | 59190 | 118009.0 | 59190-118009 | 2025-01-01 | 2025-01-01 | UGRD | 10 m above ground | 12 hour fcst | :UGRD:10 m above ground:12 hour fcst |
| 2 | 3 | 118010 | 176851.0 | 118010-176851 | 2025-01-01 | 2025-01-01 | UGRD | 10 m above ground | 18 hour fcst | :UGRD:10 m above ground:18 hour fcst |
| 3 | 4 | 176852 | 235807.0 | 176852-235807 | 2025-01-01 | 2025-01-01 | UGRD | 10 m above ground | 24 hour fcst | :UGRD:10 m above ground:24 hour fcst |
| 4 | 5 | 235808 | 295010.0 | 235808-295010 | 2025-01-01 | 2025-01-01 | VGRD | 10 m above ground | 6 hour fcst | :VGRD:10 m above ground:6 hour fcst |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2427 | 2428 | 144814943 | 144875086.0 | 144814943-144875086 | 2025-01-01 | 2025-01-01 | VGRD | 10 m above ground | 7272 hour fcst | :VGRD:10 m above ground:7272 hour fcst |
| 2428 | 2429 | 144875087 | 144934966.0 | 144875087-144934966 | 2025-01-01 | 2025-01-01 | VGRD | 10 m above ground | 7278 hour fcst | :VGRD:10 m above ground:7278 hour fcst |
| 2429 | 2430 | 144934967 | 144994972.0 | 144934967-144994972 | 2025-01-01 | 2025-01-01 | VGRD | 10 m above ground | 7284 hour fcst | :VGRD:10 m above ground:7284 hour fcst |
| 2430 | 2431 | 144994973 | 145054851.0 | 144994973-145054851 | 2025-01-01 | 2025-01-01 | VGRD | 10 m above ground | 7290 hour fcst | :VGRD:10 m above ground:7290 hour fcst |
| 2431 | 2432 | 145054852 | NaN | 145054852- | 2025-01-01 | 2025-01-01 | VGRD | 10 m above ground | 7296 hour fcst | :VGRD:10 m above ground:7296 hour fcst |
2432 rows Γ 10 columns
[6]:
# Only get 6 hour forecast
H.inventory("[U,V]GRD:10 m.*:6 hour")
[6]:
| grib_message | start_byte | end_byte | range | reference_time | valid_time | variable | level | forecast_time | search_this | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 0 | 59189.0 | 0-59189 | 2025-01-01 | 2025-01-01 | UGRD | 10 m above ground | 6 hour fcst | :UGRD:10 m above ground:6 hour fcst |
| 4 | 5 | 235808 | 295010.0 | 235808-295010 | 2025-01-01 | 2025-01-01 | VGRD | 10 m above ground | 6 hour fcst | :VGRD:10 m above ground:6 hour fcst |
[7]:
ds = H.xarray("[U,V]GRD:10 m.*:6 hour")
# Calculate wind speed
ds["wind_speed"] = (ds.u10**2 + ds.v10**2) ** 0.5
ds
[7]:
<xarray.Dataset> Size: 880kB
Dimensions: (latitude: 190, longitude: 384)
Coordinates:
time datetime64[ns] 8B 2025-01-01
step timedelta64[ns] 8B 06:00:00
heightAboveGround float64 8B 10.0
* latitude (latitude) float64 2kB 89.28 88.34 ... -88.34 -89.28
* longitude (longitude) float64 3kB 0.0 0.9375 ... 358.1 359.1
valid_time datetime64[ns] 8B 2025-01-01T06:00:00
gribfile_projection object 8B None
Data variables:
u10 (latitude, longitude) float32 292kB 2.62 2.5 ... -3.2
v10 (latitude, longitude) float32 292kB -7.05 ... 1.77
wind_speed (latitude, longitude) float32 292kB 7.521 ... 3.657
Attributes:
GRIB_edition: 2
GRIB_centre: kwbc
GRIB_centreDescription: US National Weather Service - NCEP
GRIB_subCentre: 0
Conventions: CF-1.7
institution: US National Weather Service - NCEP
model: cfs
product: time_series
description: Climate Forecast System
remote_grib: https://noaa-cfs-pds.s3.amazonaws.com/cfs.202501...
local_grib: /home/blaylock/data/cfs/20250101/subset_6aef9f3c...
search: [U,V]GRD:10 m.*:6 hour[8]:
ds["wind_speed"].plot()
[8]:
<matplotlib.collections.QuadMesh at 0x7f3d33a557f0>
6 Hourly Product#
Herbie expects the following additional arguments for CFS 6-hourly product:
kind, which is flxf, pgbf, ocnf, or ipvfmember, an integer 1, 2, 3, or 4fxx, integer forecast lead time, in hours
[9]:
# What are the available product kind values?
# You may import the dictionary of values or refer to
# https://www.nco.ncep.noaa.gov/pmb/products/cfs/
from herbie.models.cfs import product_kind
product_kind
[9]:
{'flxf': 'CFS Surface, Radiative Fluxes',
'pgbf': 'CFS 3D Pressure Level, 1 degree resolution',
'ocnh': 'CFS 3D Ocean Data, 0.5 degree resolution',
'ocnf': 'CFS 3D Ocean Data, 1.0 degree resolution',
'ipvf': 'CFS 3D Isentropic Level, 1.0 degree resolution'}
[10]:
H = Herbie(
"2024-12-25",
model="cfs",
product="6_hourly",
kind="flxf",
member=1,
fxx=12,
)
# Show the grib file and index file location
H.grib, H.idx
/home/blaylock/GITHUB/Herbie/herbie/models/cfs.py:139: UserWarning: Herbie's CFS templates are and subject to major changes. PRs are welcome to improve it.
warnings.warn(
β
Found β model=cfs β product=6_hourly β 2024-Dec-25 00:00 UTC F12 β GRIB2 @ aws β IDX @ aws
[10]:
('https://noaa-cfs-pds.s3.amazonaws.com/cfs.20241225/00/6hrly_grib_01/flxf2024122512.01.2024122500.grb2',
'https://noaa-cfs-pds.s3.amazonaws.com/cfs.20241225/00/6hrly_grib_01/flxf2024122512.01.2024122500.grb2.idx')
[11]:
H.inventory()
[11]:
| grib_message | start_byte | end_byte | range | reference_time | valid_time | variable | level | forecast_time | search_this | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1.0 | 0 | 46418.0 | 0-46418 | 2024-12-25 | 2024-12-25 12:00:00 | UFLX | surface | 12 hour fcst | :UFLX:surface:12 hour fcst |
| 1 | 2.0 | 46419 | 92097.0 | 46419-92097 | 2024-12-25 | 2024-12-25 12:00:00 | VFLX | surface | 12 hour fcst | :VFLX:surface:12 hour fcst |
| 2 | 3.0 | 92098 | 129279.0 | 92098-129279 | 2024-12-25 | 2024-12-25 12:00:00 | SHTFL | surface | 12 hour fcst | :SHTFL:surface:12 hour fcst |
| 3 | 4.0 | 129280 | 169431.0 | 129280-169431 | 2024-12-25 | 2024-12-25 12:00:00 | LHTFL | surface | 12 hour fcst | :LHTFL:surface:12 hour fcst |
| 4 | 5.0 | 169432 | 252904.0 | 169432-252904 | 2024-12-25 | 2024-12-25 12:00:00 | TMP | surface | 12 hour fcst | :TMP:surface:12 hour fcst |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 98 | 97.0 | 3939672 | 3965411.0 | 3939672-3965411 | 2024-12-25 | 2024-12-25 12:00:00 | VBDSF | surface | 12 hour fcst | :VBDSF:surface:12 hour fcst |
| 99 | 98.0 | 3965412 | 3990233.0 | 3965412-3990233 | 2024-12-25 | 2024-12-25 12:00:00 | VDDSF | surface | 12 hour fcst | :VDDSF:surface:12 hour fcst |
| 100 | 99.0 | 3990234 | 4020806.0 | 3990234-4020806 | 2024-12-25 | 2024-12-25 12:00:00 | NBDSF | surface | 12 hour fcst | :NBDSF:surface:12 hour fcst |
| 101 | 100.0 | 4020807 | 4048869.0 | 4020807-4048869 | 2024-12-25 | 2024-12-25 12:00:00 | NDDSF | surface | 12 hour fcst | :NDDSF:surface:12 hour fcst |
| 102 | 101.0 | 4048870 | NaN | 4048870- | 2024-12-25 | 2024-12-25 12:00:00 | SRWEQ | surface | 12 hour fcst | :SRWEQ:surface:12 hour fcst |
103 rows Γ 10 columns
[12]:
H.inventory("TMP:2 m above")
[12]:
| grib_message | start_byte | end_byte | range | reference_time | valid_time | variable | level | forecast_time | search_this | |
|---|---|---|---|---|---|---|---|---|---|---|
| 37 | 37.0 | 1863350 | 1941530.0 | 1863350-1941530 | 2024-12-25 | 2024-12-25 12:00:00 | TMP | 2 m above ground | 12 hour fcst | :TMP:2 m above ground:12 hour fcst |
[13]:
ds = H.xarray("TMP:2 m above")
ax = EasyMap(crs=ds.herbie.crs).ax
art = ax.pcolormesh(ds.longitude, ds.latitude, ds.t2m, transform=pc)
plt.colorbar(
art,
ax=ax,
shrink=0.5,
pad=0.01,
orientation="horizontal",
label="Mean 2-m Temperature (K)",
)
ax.set_title(f"Initialized:{H.date:%Y-%m-%d}\nMember:{H.member} Forecast Hour:{H.fxx}")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[13], line 3
1 ds = H.xarray("TMP:2 m above")
----> 3 ax = EasyMap(crs=ds.herbie.crs).ax
4 art = ax.pcolormesh(ds.longitude, ds.latitude, ds.t2m, transform=pc)
6 plt.colorbar(
7 art,
8 ax=ax,
(...)
12 label="Mean 2-m Temperature (K)",
13 )
File ~/miniforge3/envs/herbie-dev/lib/python3.13/functools.py:1039, in cached_property.__get__(self, instance, owner)
1037 val = cache.get(self.attrname, _NOT_FOUND)
1038 if val is _NOT_FOUND:
-> 1039 val = self.func(instance)
1040 try:
1041 cache[self.attrname] = val
File ~/GITHUB/Herbie/herbie/accessors.py:150, in HerbieAccessor.crs(self)
147 variables = [i for i in list(ds) if len(ds[i].dims) > 0]
149 ds = ds.metpy.parse_cf(varname=variables)
--> 150 crs = ds.metpy_crs.item().to_cartopy()
151 return crs
File ~/miniforge3/envs/herbie-dev/lib/python3.13/site-packages/metpy/plots/mapping.py:87, in CFProjection.to_cartopy(self)
85 proj_handler = self.projection_registry[self.name]
86 except KeyError:
---> 87 raise ValueError(f'Unhandled projection: {self.name}') from None
89 return proj_handler(self._attrs, globe)
ValueError: Unhandled projection: unknown
Monthly Product#
Herbie expects the following additional arguments for CFS Monthly product:
kind, which is flxf, pgbf, ocnh, ocnf, or ipvfmember, an integer 1, 2, 3, or 4month, an integer representing the month forecast (1 through 9)hour, None for daily mean, or 0, 6, 12, or 18
[21]:
H = Herbie(
"2024-05-25",
model="cfs",
product="monthly_means",
kind="pgbf",
member=1,
month=1,
hour=None, # daily mean
)
/home/blaylock/GITHUB/Herbie/herbie/models/cfs.py:139: UserWarning: Herbie's CFS templates are and subject to major changes. PRs are welcome to improve it.
warnings.warn(
β
Found β model=cfs β product=monthly_means β 2024-May-25 00:00 UTC F00 β GRIB2 @ aws β IDX @ aws
[22]:
H.inventory()
[22]:
| grib_message | start_byte | end_byte | range | reference_time | valid_time | variable | level | forecast_time | search_this | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1.0 | 0 | 59628.0 | 0-59628 | 2024-05-25 | 2024-05-25 | PRES | mean sea level | 1-2 month ave fcst | :PRES:mean sea level:1-2 month ave fcst |
| 1 | 2.0 | 59629 | 81460.0 | 59629-81460 | 2024-05-25 | 2024-05-25 | HGT | 1 mb | 1-2 month ave fcst | :HGT:1 mb:1-2 month ave fcst |
| 2 | 3.0 | 81461 | 100657.0 | 81461-100657 | 2024-05-25 | 2024-05-25 | TMP | 1 mb | 1-2 month ave fcst | :TMP:1 mb:1-2 month ave fcst |
| 3 | 4.0 | 100658 | 104304.0 | 100658-104304 | 2024-05-25 | 2024-05-25 | RH | 1 mb | 1-2 month ave fcst | :RH:1 mb:1-2 month ave fcst |
| 4 | 5.0 | 104305 | 131107.0 | 104305-131107 | 2024-05-25 | 2024-05-25 | SPFH | 1 mb | 1-2 month ave fcst | :SPFH:1 mb:1-2 month ave fcst |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 519 | 473.0 | 23632602 | 23656841.0 | 23632602-23656841 | 2024-05-25 | 2024-05-25 | VPOT | 3 mb | 1-2 month ave fcst | :VPOT:3 mb:1-2 month ave fcst |
| 520 | 474.0 | 23656842 | 23674971.0 | 23656842-23674971 | 2024-05-25 | 2024-05-25 | STRM | 2 mb | 1-2 month ave fcst | :STRM:2 mb:1-2 month ave fcst |
| 521 | 475.0 | 23674972 | 23699670.0 | 23674972-23699670 | 2024-05-25 | 2024-05-25 | VPOT | 2 mb | 1-2 month ave fcst | :VPOT:2 mb:1-2 month ave fcst |
| 522 | 476.0 | 23699671 | 23717971.0 | 23699671-23717971 | 2024-05-25 | 2024-05-25 | STRM | 1 mb | 1-2 month ave fcst | :STRM:1 mb:1-2 month ave fcst |
| 523 | 477.0 | 23717972 | NaN | 23717972- | 2024-05-25 | 2024-05-25 | VPOT | 1 mb | 1-2 month ave fcst | :VPOT:1 mb:1-2 month ave fcst |
524 rows Γ 10 columns
[23]:
H.inventory("TMP:500")
[23]:
| grib_message | start_byte | end_byte | range | reference_time | valid_time | variable | level | forecast_time | search_this | |
|---|---|---|---|---|---|---|---|---|---|---|
| 207 | 187.0 | 8023672 | 8050166.0 | 8023672-8050166 | 2024-05-25 | 2024-05-25 | TMP | 500 mb | 1-2 month ave fcst | :TMP:500 mb:1-2 month ave fcst |
[24]:
ds = H.xarray("TMP:500 mb")
ds
[24]:
<xarray.Dataset> Size: 265kB
Dimensions: (latitude: 181, longitude: 360)
Coordinates:
time datetime64[ns] 8B 2024-05-25
step timedelta64[ns] 8B 60 days
isobaricInhPa float64 8B 500.0
* latitude (latitude) float64 1kB 90.0 89.0 88.0 ... -89.0 -90.0
* longitude (longitude) float64 3kB 0.0 1.0 2.0 ... 358.0 359.0
valid_time datetime64[ns] 8B 2024-07-24
gribfile_projection object 8B None
Data variables:
avg_t (latitude, longitude) float32 261kB 248.5 ... 228.8
Attributes:
GRIB_edition: 2
GRIB_centre: kwbc
GRIB_centreDescription: US National Weather Service - NCEP
GRIB_subCentre: 0
Conventions: CF-1.7
institution: US National Weather Service - NCEP
model: cfs
product: monthly_means
description: Climate Forecast System
remote_grib: https://noaa-cfs-pds.s3.amazonaws.com/cfs.202405...
local_grib: /home/blaylock/data/cfs/20240525/subset_07ef4109...
search: TMP:500 mb[25]:
ds.avg_t.plot()
[25]:
<matplotlib.collections.QuadMesh at 0x7f3d29467890>
[26]:
ax = EasyMap(crs=ds.herbie.crs).ax
art = ax.pcolormesh(ds.longitude, ds.latitude, ds.t, transform=pc)
plt.colorbar(
art,
ax=ax,
shrink=0.5,
pad=0.01,
orientation="horizontal",
label="Mean 2-m Temperature (K)",
)
ax.set_title(
f"Initialized:{H.date:%Y-%m-%d}\nMember:{H.member}; Month Forecast:{H.month}; Hour:{H.hour}"
)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[26], line 1
----> 1 ax = EasyMap(crs=ds.herbie.crs).ax
2 art = ax.pcolormesh(ds.longitude, ds.latitude, ds.t, transform=pc)
4 plt.colorbar(
5 art,
6 ax=ax,
(...)
10 label="Mean 2-m Temperature (K)",
11 )
File ~/miniforge3/envs/herbie-dev/lib/python3.13/functools.py:1039, in cached_property.__get__(self, instance, owner)
1037 val = cache.get(self.attrname, _NOT_FOUND)
1038 if val is _NOT_FOUND:
-> 1039 val = self.func(instance)
1040 try:
1041 cache[self.attrname] = val
File ~/GITHUB/Herbie/herbie/accessors.py:150, in HerbieAccessor.crs(self)
147 variables = [i for i in list(ds) if len(ds[i].dims) > 0]
149 ds = ds.metpy.parse_cf(varname=variables)
--> 150 crs = ds.metpy_crs.item().to_cartopy()
151 return crs
File ~/miniforge3/envs/herbie-dev/lib/python3.13/site-packages/metpy/plots/mapping.py:87, in CFProjection.to_cartopy(self)
85 proj_handler = self.projection_registry[self.name]
86 except KeyError:
---> 87 raise ValueError(f'Unhandled projection: {self.name}') from None
89 return proj_handler(self._attrs, globe)
ValueError: Unhandled projection: unknown
Monthly means by hour (0, 6, 12, or 18)#
[27]:
H = Herbie(
"2024-05-25",
model="cfs",
product="monthly_means",
kind="pgbf",
member=1,
month=2,
hour=6, # 2-3 month forecast average for 06z
)
print(H.grib)
H.inventory()
/home/blaylock/GITHUB/Herbie/herbie/models/cfs.py:139: UserWarning: Herbie's CFS templates are and subject to major changes. PRs are welcome to improve it.
warnings.warn(
β
Found β model=cfs β product=monthly_means β 2024-May-25 00:00 UTC F00 β GRIB2 @ aws β IDX @ aws
https://noaa-cfs-pds.s3.amazonaws.com/cfs.20240525/00/monthly_grib_01/pgbf.01.2024052500.202407.avrg.grib.06Z.grb2
[27]:
| grib_message | start_byte | end_byte | range | reference_time | valid_time | variable | level | forecast_time | search_this | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1.0 | 0 | 61046.0 | 0-61046 | 2024-05-25 | 2024-05-25 | PRES | mean sea level | 2-3 month ave fcst | :PRES:mean sea level:2-3 month ave fcst |
| 1 | 2.0 | 61047 | 85673.0 | 61047-85673 | 2024-05-25 | 2024-05-25 | HGT | 1 mb | 2-3 month ave fcst | :HGT:1 mb:2-3 month ave fcst |
| 2 | 3.0 | 85674 | 110975.0 | 85674-110975 | 2024-05-25 | 2024-05-25 | TMP | 1 mb | 2-3 month ave fcst | :TMP:1 mb:2-3 month ave fcst |
| 3 | 4.0 | 110976 | 115617.0 | 110976-115617 | 2024-05-25 | 2024-05-25 | RH | 1 mb | 2-3 month ave fcst | :RH:1 mb:2-3 month ave fcst |
| 4 | 5.0 | 115618 | 148871.0 | 115618-148871 | 2024-05-25 | 2024-05-25 | SPFH | 1 mb | 2-3 month ave fcst | :SPFH:1 mb:2-3 month ave fcst |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 519 | 473.0 | 25462570 | 25496004.0 | 25462570-25496004 | 2024-05-25 | 2024-05-25 | VPOT | 3 mb | 2-3 month ave fcst | :VPOT:3 mb:2-3 month ave fcst |
| 520 | 474.0 | 25496005 | 25515605.0 | 25496005-25515605 | 2024-05-25 | 2024-05-25 | STRM | 2 mb | 2-3 month ave fcst | :STRM:2 mb:2-3 month ave fcst |
| 521 | 475.0 | 25515606 | 25549621.0 | 25515606-25549621 | 2024-05-25 | 2024-05-25 | VPOT | 2 mb | 2-3 month ave fcst | :VPOT:2 mb:2-3 month ave fcst |
| 522 | 476.0 | 25549622 | 25566670.0 | 25549622-25566670 | 2024-05-25 | 2024-05-25 | STRM | 1 mb | 2-3 month ave fcst | :STRM:1 mb:2-3 month ave fcst |
| 523 | 477.0 | 25566671 | NaN | 25566671- | 2024-05-25 | 2024-05-25 | VPOT | 1 mb | 2-3 month ave fcst | :VPOT:1 mb:2-3 month ave fcst |
524 rows Γ 10 columns
[ ]: