This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
Greetings! Thanks for linking to the code, that helped. Looking at your current code, it looks like it is assembling 3D arrays of temperature and absolute vorticity out of individual GRIB messages using pygrib. The first change is that potential_vorticity_baroclinic calculates some additional terms not in the original code, so it needs the full u and v wind components rather than the absolute vorticity field. I'm not sure how those are listed in pygrib, but you'd need to replace the code that looks for absolute vorticity with code to find those. The second change is to make sure you attach unit information to your fields, like: from metpy.units import units pot_temp = np.array(pot_temp) * units.Kelvin levs = np.array(levs) * units.hPa You could also use MetPy to calculate potential temperature from your temperature data with: import metpy.calc as mpcalc from metpy.units import units # Assume temp is list of all temperature 2D fields in Kelvin pot_temp = mpcalc.potential_temperature(levs, temp * units.K) The third change is that you need some information about the lat/lon grid so that metpy can properly calculate horizontal derivatives: dx, dy = mpcalc.lat_lon_grid_deltas(longitude, latitude) Then, the call to calculate PV would look like: pv = mpcalc.potential_vorticity_baroclinic(levs, pot_temp, u, v, dx=dx, dy=dy, latitude=latitude) You might also consider using xarray + cfgrib rather than pygrib to open up the GRIB data. That would give you xarray DataArrays to work with right away--and MetPy can then get things like units, coordinates automatically. Hope that helps, Ryan > Hi Ryan, > > Thanks for getting back to me! I am trying to use the > potential_vorticity_baroclinic. The script is I am trying to replace is > here: > https://github.com/dtcenter/METplus/blob/develop/parm/use_cases/model_applications/medium_range/TCStat_SeriesAnalysis_fcstGFS_obsGFS_FeatureRelative_SeriesByLead_PyEmbed_Multiple_Diagnostics/gfs_pv_fcst.py > > The variables needed for this script are: > Levels required: all pressure levels <= 100mb > - Absolute Vorticity > - Temperature > > > Please let me know if you have any questions or have trouble accessing the > link I provided. > Ticket Details =================== Ticket ID: PHR-160601 Department: Support Python Priority: Low Status: Closed =================== NOTE: All email exchanges with Unidata User Support are recorded in the Unidata inquiry tracking system and then made publicly available through the web. If you do not want to have your interactions made available in this way, you must let us know in each email you send to us.