deploy: e13726cf63
BIN
_images/Forecast_Model_Vertical_Sounding_24_0.png
Normal file
After Width: | Height: | Size: 182 KiB |
BIN
_images/Forecast_Model_Vertical_Sounding_27_1.png
Normal file
After Width: | Height: | Size: 160 KiB |
BIN
_images/Forecast_Model_Vertical_Sounding_27_3.png
Normal file
After Width: | Height: | Size: 158 KiB |
BIN
_images/Forecast_Model_Vertical_Sounding_27_5.png
Normal file
After Width: | Height: | Size: 182 KiB |
Before Width: | Height: | Size: 182 KiB |
Before Width: | Height: | Size: 162 KiB |
Before Width: | Height: | Size: 159 KiB |
Before Width: | Height: | Size: 161 KiB |
|
@ -2,50 +2,83 @@
|
||||||
Forecast Model Vertical Sounding
|
Forecast Model Vertical Sounding
|
||||||
================================
|
================================
|
||||||
`Notebook <http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Forecast_Model_Vertical_Sounding.ipynb>`_
|
`Notebook <http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Forecast_Model_Vertical_Sounding.ipynb>`_
|
||||||
The ModelSounding class allows us to create a vertical sounding through
|
Python-AWIPS Tutorial Notebook
|
||||||
any available AWIPS model with isobaric levels.
|
|
||||||
|
|
||||||
- A Shapely Point geometry is used to select longitude and latitude:
|
--------------
|
||||||
from shapely.geometry import Point point = Point(-104.67,39.87)
|
|
||||||
|
|
||||||
- Parameters ``['T','DpT','uW','vW']`` are requested for all isobaric
|
Objectives
|
||||||
levels available for the selected model.
|
==========
|
||||||
|
|
||||||
- There is a single-record query performed for ``level = "0.0FHAG"`` to
|
- Use python-awips to connect to an edex server
|
||||||
determine the surface pressure level.
|
- Request data using the `ModelSounding
|
||||||
|
class <http://unidata.github.io/python-awips/api/ModelSounding.html>`__
|
||||||
|
in addition to using the normal `DataAccess
|
||||||
|
class <http://unidata.github.io/python-awips/api/DataAccessLayer.html>`__
|
||||||
|
- Create and compare vertical sounding from different AWIPS model data
|
||||||
|
with isobaric levels
|
||||||
|
- Use `Shapely Point
|
||||||
|
geometry <https://shapely.readthedocs.io/en/stable/reference/shapely.Point.html>`__
|
||||||
|
to define a point
|
||||||
|
- Convert between units when necessary
|
||||||
|
- Use MetPy to create
|
||||||
|
`SkewT <https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.SkewT.html>`__
|
||||||
|
and
|
||||||
|
`Hodograph <https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.Hodograph.html>`__
|
||||||
|
plots
|
||||||
|
|
||||||
- Pay attention to units when switching models. This notebook was
|
--------------
|
||||||
written for the NAM 40km AWIPS model where temperature and dewpoint
|
|
||||||
are returned as Kelvin and wind components as m/s.
|
1 Imports
|
||||||
|
---------
|
||||||
|
|
||||||
|
The imports below are used throughout the notebook. Note the first
|
||||||
|
import is coming directly from python-awips and allows us to connect to
|
||||||
|
an EDEX server. The subsequent imports are for data manipulation and
|
||||||
|
visualization.
|
||||||
|
|
||||||
.. code:: ipython3
|
.. code:: ipython3
|
||||||
|
|
||||||
%matplotlib inline
|
|
||||||
from awips.dataaccess import DataAccessLayer, ModelSounding
|
from awips.dataaccess import DataAccessLayer, ModelSounding
|
||||||
from awips import ThriftClient
|
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from metpy.plots import SkewT, Hodograph
|
from metpy.plots import SkewT, Hodograph
|
||||||
from metpy.units import units
|
from metpy.units import units
|
||||||
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
|
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
|
||||||
from math import sqrt
|
from math import sqrt
|
||||||
from datetime import datetime, timedelta
|
from shapely.geometry import Point
|
||||||
from shapely.geometry import Point, Polygon
|
|
||||||
import shapely.wkb
|
`Top <https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html>`__
|
||||||
import timeit
|
|
||||||
model="NAM40"
|
--------------
|
||||||
parms = ['T','DpT','uW','vW']
|
|
||||||
|
2 EDEX Connection
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
First we establish a connection to Unidata’s public EDEX server. This
|
||||||
|
sets the proper server on the **DataAccessLayer**, which we will use
|
||||||
|
numerous times throughout the notebook.
|
||||||
|
|
||||||
|
.. code:: ipython3
|
||||||
|
|
||||||
server = 'edex-cloud.unidata.ucar.edu'
|
server = 'edex-cloud.unidata.ucar.edu'
|
||||||
DataAccessLayer.changeEDEXHost(server)
|
DataAccessLayer.changeEDEXHost(server)
|
||||||
|
|
||||||
# note the order is LON,lat and not lat,LON
|
`Top <https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html>`__
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
3 Define Useful Variables
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
The plotting in this notebook needs a model name, a location point
|
||||||
|
(defined by latitude and longitude), and the most recent time range with
|
||||||
|
the initial forecast run.
|
||||||
|
|
||||||
|
.. code:: ipython3
|
||||||
|
|
||||||
|
# Note the order is Lon,Lat and not Lat,Lon
|
||||||
point = Point(-104.67,39.87)
|
point = Point(-104.67,39.87)
|
||||||
|
model="NAM40"
|
||||||
inc = 0.005
|
|
||||||
bbox=[point.y-inc, point.y+inc, point.x-inc, point.x+inc]
|
|
||||||
polygon = Polygon([(bbox[0],bbox[2]),(bbox[0],bbox[3]),
|
|
||||||
(bbox[1],bbox[3]),(bbox[1],bbox[2]),
|
|
||||||
(bbox[0],bbox[2])])
|
|
||||||
|
|
||||||
# Get latest forecast cycle run
|
# Get latest forecast cycle run
|
||||||
timeReq = DataAccessLayer.newDataRequest("grid")
|
timeReq = DataAccessLayer.newDataRequest("grid")
|
||||||
|
@ -54,276 +87,332 @@ any available AWIPS model with isobaric levels.
|
||||||
times = DataAccessLayer.getAvailableTimes(timeReq)
|
times = DataAccessLayer.getAvailableTimes(timeReq)
|
||||||
fcstRun = DataAccessLayer.getForecastRun(cycles[-2], times)
|
fcstRun = DataAccessLayer.getForecastRun(cycles[-2], times)
|
||||||
|
|
||||||
print("Using " + model + " forecast time " + str(fcstRun[0]))
|
timeRange = [fcstRun[0]]
|
||||||
|
|
||||||
|
print("Using " + model + " forecast time " + str(timeRange))
|
||||||
|
|
||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
Using NAM40 forecast time 2023-05-17 12:00:00
|
Using NAM40 forecast time [<DataTime instance: 2023-07-25 12:00:00 >]
|
||||||
|
|
||||||
|
|
||||||
.. code:: ipython3
|
`Top <https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html>`__
|
||||||
|
|
||||||
p,t,d,u,v = [],[],[],[],[]
|
|
||||||
use_parms = ['T','DpT','uW','vW','P']
|
|
||||||
use_level = "0.0FHAG"
|
|
||||||
sndObject = ModelSounding.getSounding(model, use_parms,
|
|
||||||
["0.0FHAG"], point, timeRange=[fcstRun[0]])
|
|
||||||
if len(sndObject) > 0:
|
|
||||||
for time in sndObject._dataDict:
|
|
||||||
p.append(float(sndObject._dataDict[time][use_level]['P']))
|
|
||||||
t.append(float(sndObject._dataDict[time][use_level]['T']))
|
|
||||||
d.append(float(sndObject._dataDict[time][use_level]['DpT']))
|
|
||||||
u.append(float(sndObject._dataDict[time][use_level]['uW']))
|
|
||||||
v.append(float(sndObject._dataDict[time][use_level]['vW']))
|
|
||||||
print("Found surface record at " + "%.1f" % p[0] + "MB")
|
|
||||||
else:
|
|
||||||
raise ValueError("sndObject returned empty for query ["
|
|
||||||
+ ', '.join(str(x) for x in (model, use_parms, point, use_level)) +"]")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. parsed-literal::
|
|
||||||
|
|
||||||
Found surface record at 830.1MB
|
|
||||||
|
|
||||||
|
|
||||||
.. code:: ipython3
|
|
||||||
|
|
||||||
|
|
||||||
# Get isobaric levels with our requested parameters
|
|
||||||
levelReq = DataAccessLayer.newDataRequest("grid", envelope=point)
|
|
||||||
levelReq.setLocationNames(model)
|
|
||||||
levelReq.setParameters('T','DpT','uW','vW')
|
|
||||||
availableLevels = DataAccessLayer.getAvailableLevels(levelReq)
|
|
||||||
|
|
||||||
# Clean levels list of unit string (MB, FHAG, etc.)
|
|
||||||
levels = []
|
|
||||||
for lvl in availableLevels:
|
|
||||||
name=str(lvl)
|
|
||||||
if 'MB' in name and '_' not in name:
|
|
||||||
# If this level is above (less than in mb) our 0.0FHAG record
|
|
||||||
if float(name.replace('MB','')) < p[0]:
|
|
||||||
levels.append(lvl)
|
|
||||||
|
|
||||||
# Get Sounding
|
|
||||||
sndObject = ModelSounding.getSounding(model, parms, levels, point,
|
|
||||||
timeRange=[fcstRun[0]])
|
|
||||||
|
|
||||||
if not len(sndObject) > 0:
|
|
||||||
raise ValueError("sndObject returned empty for query ["
|
|
||||||
+ ', '.join(str(x) for x in (model, parms, point, levels)) +"]")
|
|
||||||
|
|
||||||
for time in sndObject._dataDict:
|
|
||||||
for lvl in sndObject._dataDict[time].levels():
|
|
||||||
for parm in sndObject._dataDict[time][lvl].parameters():
|
|
||||||
if parm == "T":
|
|
||||||
t.append(float(sndObject._dataDict[time][lvl][parm]))
|
|
||||||
elif parm == "DpT":
|
|
||||||
d.append(float(sndObject._dataDict[time][lvl][parm]))
|
|
||||||
elif parm == 'uW':
|
|
||||||
u.append(float(sndObject._dataDict[time][lvl][parm]))
|
|
||||||
elif parm == 'vW':
|
|
||||||
v.append(float(sndObject._dataDict[time][lvl][parm]))
|
|
||||||
else:
|
|
||||||
print("WHAT IS THIS")
|
|
||||||
print(sndObject._dataDict[time][lvl][parm])
|
|
||||||
# Pressure is our requested level rather than a returned parameter
|
|
||||||
p.append(float(lvl.replace('MB','')))
|
|
||||||
|
|
||||||
# convert to numpy.array()
|
|
||||||
p = np.array(p, dtype=float)
|
|
||||||
t = (np.array(t, dtype=float) - 273.15) * units.degC
|
|
||||||
d = (np.array(d, dtype=float) - 273.15) * units.degC
|
|
||||||
u = (np.array(u, dtype=float) * units('m/s')).to('knots')
|
|
||||||
v = (np.array(v, dtype=float) * units('m/s')).to('knots')
|
|
||||||
w = np.sqrt(u**2 + v**2)
|
|
||||||
|
|
||||||
print("Using " + str(len(levels)) + " levels between " +
|
|
||||||
str("%.1f" % max(p)) + " and " + str("%.1f" % min(p)) + "MB")
|
|
||||||
|
|
||||||
|
|
||||||
.. parsed-literal::
|
|
||||||
|
|
||||||
Using 32 levels between 830.1 and 50.0MB
|
|
||||||
|
|
||||||
|
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
Skew-T/Log-P
|
4 Function: get_surface_data()
|
||||||
------------
|
------------------------------
|
||||||
|
|
||||||
|
This function is used to get the initial forecast model data for surface
|
||||||
|
height. This is done separately from the rest of the heights to
|
||||||
|
determine the surface pressure. It uses the
|
||||||
|
`ModelSounding <http://unidata.github.io/python-awips/api/ModelSounding.html>`__
|
||||||
|
data object from python-awips to retrieve all the relevant information.
|
||||||
|
|
||||||
|
This function takes the model name, location, and time as attributes,
|
||||||
|
and returns arrays for pressure, temperature, dewpoint, and the u and v
|
||||||
|
wind components.
|
||||||
|
|
||||||
.. code:: ipython3
|
.. code:: ipython3
|
||||||
|
|
||||||
plt.rcParams['figure.figsize'] = (12, 14)
|
def get_surface_data(modelName, location, time):
|
||||||
|
""" model name, location, and timeRange desire """
|
||||||
# Skew-T
|
|
||||||
skew = SkewT(rotation=45)
|
|
||||||
skew.plot(p, t, 'r', linewidth=2)
|
|
||||||
skew.plot(p, d, 'g', linewidth=2)
|
|
||||||
skew.plot_barbs(p, u, v)
|
|
||||||
skew.plot_dry_adiabats()
|
|
||||||
skew.plot_moist_adiabats()
|
|
||||||
skew.plot_mixing_lines(linestyle=':')
|
|
||||||
|
|
||||||
skew.ax.set_ylim(1000, np.min(p))
|
|
||||||
skew.ax.set_xlim(-50, 40)
|
|
||||||
|
|
||||||
# Title
|
|
||||||
plt.title( model + " (" + str(point) + ") " + str(time.getRefTime()))
|
|
||||||
|
|
||||||
# Hodograph
|
|
||||||
ax_hod = inset_axes(skew.ax, '40%', '40%', loc=2)
|
|
||||||
h = Hodograph(ax_hod, component_range=max(w.magnitude))
|
|
||||||
h.add_grid(increment=20)
|
|
||||||
h.plot_colormapped(u, v, w)
|
|
||||||
|
|
||||||
# Dotted line at 0C isotherm
|
|
||||||
l = skew.ax.axvline(0, color='c', linestyle='-', linewidth=1)
|
|
||||||
|
|
||||||
plt.show()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. image:: Forecast_Model_Vertical_Sounding_files/Forecast_Model_Vertical_Sounding_5_0.png
|
|
||||||
|
|
||||||
|
|
||||||
Model Sounding Comparison
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
.. code:: ipython3
|
|
||||||
|
|
||||||
models = ["RAP13", "GFS20", "NAM40"]
|
|
||||||
parms = ['T','DpT','uW','vW']
|
|
||||||
|
|
||||||
for modelName in models:
|
|
||||||
timeReq = DataAccessLayer.newDataRequest("grid")
|
|
||||||
timeReq.setLocationNames(modelName)
|
|
||||||
cycles = DataAccessLayer.getAvailableTimes(timeReq, True)
|
|
||||||
times = DataAccessLayer.getAvailableTimes(timeReq)
|
|
||||||
fcstRun = DataAccessLayer.getForecastRun(cycles[-1], times)
|
|
||||||
print("Using " + modelName + " forecast time " + str(fcstRun[0]))
|
|
||||||
|
|
||||||
p,t,d,u,v = [],[],[],[],[]
|
# request data and sort response
|
||||||
|
pressure,temp,dpt,ucomp,vcomp = [],[],[],[],[]
|
||||||
use_parms = ['T','DpT','uW','vW','P']
|
use_parms = ['T','DpT','uW','vW','P']
|
||||||
use_level = "0.0FHAG"
|
use_level = "0.0FHAG"
|
||||||
|
|
||||||
sndObject = ModelSounding.getSounding(modelName, use_parms,
|
sndObject = ModelSounding.getSounding(modelName, use_parms, [use_level], location, time)
|
||||||
[use_level], point, timeRange=[fcstRun[0]])
|
|
||||||
if len(sndObject) > 0:
|
if len(sndObject) > 0:
|
||||||
for time in sndObject._dataDict:
|
for time in sndObject._dataDict:
|
||||||
p.append(float(sndObject._dataDict[time][use_level]['P']))
|
pressure.append(float(sndObject._dataDict[time][use_level]['P']))
|
||||||
t.append(float(sndObject._dataDict[time][use_level]['T']))
|
temp.append(float(sndObject._dataDict[time][use_level]['T']))
|
||||||
d.append(float(sndObject._dataDict[time][use_level]['DpT']))
|
dpt.append(float(sndObject._dataDict[time][use_level]['DpT']))
|
||||||
u.append(float(sndObject._dataDict[time][use_level]['uW']))
|
ucomp.append(float(sndObject._dataDict[time][use_level]['uW']))
|
||||||
v.append(float(sndObject._dataDict[time][use_level]['vW']))
|
vcomp.append(float(sndObject._dataDict[time][use_level]['vW']))
|
||||||
print("Found surface record at " + "%.1f" % p[0] + "MB")
|
print("Found surface record at " + "%.1f" % pressure[0] + "MB")
|
||||||
else:
|
else:
|
||||||
raise ValueError("sndObject returned empty for query ["
|
raise ValueError("sndObject returned empty for query ["
|
||||||
+ ', '.join(str(x) for x in (modelName, use_parms, point, use_level)) +"]")
|
+ ', '.join(str(x) for x in (modelName, use_parms, point, use_level)) +"]")
|
||||||
|
|
||||||
|
# return information for plotting
|
||||||
|
return pressure,temp,dpt,ucomp,vcomp
|
||||||
|
|
||||||
|
Top
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
5 Function: get_levels_data()
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
This function is similar to *get_surface_data()*, except it gets data
|
||||||
|
values for presure heights above the surface. It uses the
|
||||||
|
`ModelSounding <http://unidata.github.io/python-awips/api/ModelSounding.html>`__
|
||||||
|
data object from python-awips to retrieve all the relevant information.
|
||||||
|
|
||||||
|
It takes the model name, location, and time (similar to the other
|
||||||
|
function), and also takes the instantiated pressure, temperature,
|
||||||
|
dewpoint, and wind vector arrays.
|
||||||
|
|
||||||
|
It returns the fully populated pressure, temperature, dewpoint,
|
||||||
|
u-component, v-component, and computed wind arrays.
|
||||||
|
|
||||||
|
.. code:: ipython3
|
||||||
|
|
||||||
|
def get_levels_data(modelName, location, time, pressure, temp, dpt, ucomp, vcomp):
|
||||||
|
|
||||||
# Get isobaric levels with our requested parameters
|
# Get isobaric levels with our requested parameters
|
||||||
|
parms = ['T','DpT','uW','vW']
|
||||||
levelReq = DataAccessLayer.newDataRequest("grid", envelope=point)
|
levelReq = DataAccessLayer.newDataRequest("grid", envelope=point)
|
||||||
levelReq.setLocationNames(modelName)
|
levelReq.setLocationNames(model)
|
||||||
levelReq.setParameters('T','DpT','uW','vW')
|
levelReq.setParameters(*(parms))
|
||||||
availableLevels = DataAccessLayer.getAvailableLevels(levelReq)
|
availableLevels = DataAccessLayer.getAvailableLevels(levelReq)
|
||||||
|
|
||||||
# Clean levels list of unit string (MB, FHAG, etc.)
|
# Clean levels list of unit string (MB, FHAG, etc.)
|
||||||
levels = []
|
levels = []
|
||||||
for lvl in availableLevels:
|
for lvl in availableLevels:
|
||||||
name=str(lvl)
|
name=str(lvl)
|
||||||
if 'MB' in name and '_' not in name:
|
if 'MB' in name and '_' not in name:
|
||||||
# If this level is above (less than in mb) our 0.0FHAG record
|
# If this level is above (less than in mb) our 0.0FHAG record
|
||||||
if float(name.replace('MB','')) < p[0]:
|
if float(name.replace('MB','')) < pressure[0]:
|
||||||
levels.append(lvl)
|
levels.append(lvl)
|
||||||
|
|
||||||
# Get Sounding
|
# Get Sounding
|
||||||
sndObject = ModelSounding.getSounding(modelName, parms, levels, point,
|
sndObject = ModelSounding.getSounding(modelName, parms, levels, location, time)
|
||||||
timeRange=[fcstRun[0]])
|
|
||||||
if not len(sndObject) > 0:
|
if not len(sndObject) > 0:
|
||||||
raise ValueError("sndObject returned empty for query ["
|
raise ValueError("sndObject returned empty for query ["
|
||||||
+ ', '.join(str(x) for x in (modelName, parms, point, levels)) +"]")
|
+ ', '.join(str(x) for x in (model, parms, point, levels)) +"]")
|
||||||
|
|
||||||
for time in sndObject._dataDict:
|
for time in sndObject._dataDict:
|
||||||
for lvl in sndObject._dataDict[time].levels():
|
for lvl in sndObject._dataDict[time].levels():
|
||||||
for parm in sndObject._dataDict[time][lvl].parameters():
|
for parm in sndObject._dataDict[time][lvl].parameters():
|
||||||
if parm == "T":
|
if parm == "T":
|
||||||
t.append(float(sndObject._dataDict[time][lvl][parm]))
|
temp.append(float(sndObject._dataDict[time][lvl][parm]))
|
||||||
elif parm == "DpT":
|
elif parm == "DpT":
|
||||||
d.append(float(sndObject._dataDict[time][lvl][parm]))
|
dpt.append(float(sndObject._dataDict[time][lvl][parm]))
|
||||||
elif parm == 'uW':
|
elif parm == 'uW':
|
||||||
u.append(float(sndObject._dataDict[time][lvl][parm]))
|
ucomp.append(float(sndObject._dataDict[time][lvl][parm]))
|
||||||
elif parm == 'vW':
|
elif parm == 'vW':
|
||||||
v.append(float(sndObject._dataDict[time][lvl][parm]))
|
vcomp.append(float(sndObject._dataDict[time][lvl][parm]))
|
||||||
else:
|
else:
|
||||||
print("WHAT IS THIS")
|
print("WHAT IS THIS")
|
||||||
print(sndObject._dataDict[time][lvl][parm])
|
print(sndObject._dataDict[time][lvl][parm])
|
||||||
# Pressure is our requested level rather than a returned parameter
|
# Pressure is our requested level rather than a returned parameter
|
||||||
p.append(float(lvl.replace('MB','')))
|
pressure.append(float(lvl.replace('MB','')))
|
||||||
|
|
||||||
# convert to numpy.array()
|
# convert to numpy.array()
|
||||||
p = np.array(p, dtype=float)
|
pressure = np.array(pressure, dtype=float)
|
||||||
t = (np.array(t, dtype=float) - 273.15) * units.degC
|
temp = (np.array(temp, dtype=float) - 273.15) * units.degC
|
||||||
d = (np.array(d, dtype=float) - 273.15) * units.degC
|
dpt = (np.array(dpt, dtype=float) - 273.15) * units.degC
|
||||||
u = (np.array(u, dtype=float) * units('m/s')).to('knots')
|
ucomp = (np.array(ucomp, dtype=float) * units('m/s')).to('knots')
|
||||||
v = (np.array(v, dtype=float) * units('m/s')).to('knots')
|
vcomp = (np.array(vcomp, dtype=float) * units('m/s')).to('knots')
|
||||||
w = np.sqrt(u**2 + v**2)
|
wind = np.sqrt(ucomp**2 + vcomp**2)
|
||||||
|
|
||||||
print("Using " + str(len(levels)) + " levels between " +
|
print("Using " + str(len(levels)) + " levels between " +
|
||||||
str("%.1f" % max(p)) + " and " + str("%.1f" % min(p)) + "MB")
|
str("%.1f" % max(pressure)) + " and " + str("%.1f" % min(pressure)) + "MB")
|
||||||
|
return pressure,temp,dpt,ucomp,vcomp,wind
|
||||||
|
|
||||||
|
`Top <https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html>`__
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
6 Function: plot_skewT()
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Since we’re plotting many different models for comparison, all that code
|
||||||
|
was used to create this function.
|
||||||
|
|
||||||
|
The function takes the model name, reference time, and the pressure,
|
||||||
|
temperature, dewpoint, u-component, v-component, and wind arrays. It
|
||||||
|
plots a skewT and hodograph using metpy.
|
||||||
|
|
||||||
|
.. code:: ipython3
|
||||||
|
|
||||||
|
def plot_skewT(modelName, pressure, temp, dpt, ucomp, vcomp, wind, refTime):
|
||||||
|
plt.rcParams['figure.figsize'] = (12, 14)
|
||||||
|
|
||||||
# Skew-T
|
# Skew-T
|
||||||
plt.rcParams['figure.figsize'] = (12, 14)
|
|
||||||
skew = SkewT(rotation=45)
|
skew = SkewT(rotation=45)
|
||||||
skew.plot(p, t, 'r', linewidth=2)
|
skew.plot(pressure, temp, 'r', linewidth=2)
|
||||||
skew.plot(p, d, 'g', linewidth=2)
|
skew.plot(pressure, dpt, 'g', linewidth=2)
|
||||||
skew.plot_barbs(p, u, v)
|
skew.plot_barbs(pressure, ucomp, vcomp)
|
||||||
skew.plot_dry_adiabats()
|
skew.plot_dry_adiabats()
|
||||||
skew.plot_moist_adiabats()
|
skew.plot_moist_adiabats()
|
||||||
skew.plot_mixing_lines(linestyle=':')
|
skew.plot_mixing_lines(linestyle=':')
|
||||||
skew.ax.set_ylim(1000, 100)
|
|
||||||
|
skew.ax.set_ylim(1000, np.min(pressure))
|
||||||
skew.ax.set_xlim(-50, 40)
|
skew.ax.set_xlim(-50, 40)
|
||||||
|
|
||||||
# Title
|
# Title
|
||||||
plt.title( modelName + " (" + str(point) + ") " + str(time.getRefTime()))
|
plt.title(modelName + " (" + str(point) + ") " + str(refTime))
|
||||||
|
|
||||||
# Hodograph
|
# Hodograph
|
||||||
ax_hod = inset_axes(skew.ax, '40%', '40%', loc=2)
|
ax_hod = inset_axes(skew.ax, '40%', '40%', loc=2)
|
||||||
h = Hodograph(ax_hod, component_range=max(w.magnitude))
|
h = Hodograph(ax_hod, component_range=max(wind.magnitude))
|
||||||
h.add_grid(increment=20)
|
h.add_grid(increment=20)
|
||||||
h.plot_colormapped(u, v, w)
|
h.plot_colormapped(ucomp, vcomp, wind)
|
||||||
|
|
||||||
# Dotted line at 0C isotherm
|
# Dotted line at 0C isotherm
|
||||||
l = skew.ax.axvline(0, color='c', linestyle='-', linewidth=1)
|
l = skew.ax.axvline(0, color='c', linestyle='-', linewidth=1)
|
||||||
|
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
|
`Top <https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html>`__
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
7 Retrieve Necessary Plotting Data
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
First we get the initial data at surface level using the
|
||||||
|
get_surface_data function, and then pass those initial data arrays onto
|
||||||
|
the get_levels_data request to finish populating for additional heights
|
||||||
|
needed for Skew-T plots. We want to keep track of the pressure,
|
||||||
|
temeperature, dewpoint, u-component, v-component, and wind arrays so we
|
||||||
|
store them in variables to use later on.
|
||||||
|
|
||||||
|
.. code:: ipython3
|
||||||
|
|
||||||
|
p,t,d,u,v = get_surface_data(model,point,timeRange)
|
||||||
|
|
||||||
|
p,t,d,u,v,w = get_levels_data(model,point,timeRange,p,t,d,u,v)
|
||||||
|
|
||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
Using RAP13 forecast time 2023-05-17 20:00:00
|
Found surface record at 833.2MB
|
||||||
|
Using 32 levels between 833.2 and 50.0MB
|
||||||
|
|
||||||
|
|
||||||
|
`Top <https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html>`__
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
8 Skew-T/Log-P
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Here we use our plot_skewT function to generate our skewT & hodograph
|
||||||
|
charts for the data we retreived so far. This is where the pressure,
|
||||||
|
temperature, dewpoint, and wind data is needed.
|
||||||
|
|
||||||
|
.. code:: ipython3
|
||||||
|
|
||||||
|
plot_skewT(model, p, t, d, u, v, w, timeRange[0])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.. image:: Forecast_Model_Vertical_Sounding_files/Forecast_Model_Vertical_Sounding_24_0.png
|
||||||
|
|
||||||
|
|
||||||
|
`Top <https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html>`__
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
9 Model Sounding Comparison
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Now that we know how to retreive and plot the data for one model, we can
|
||||||
|
run a loop to retreive data for various models and plot them for
|
||||||
|
comparison. In this example we’ll also plot RAP13 and GFS20 data to
|
||||||
|
compare with NAM40.
|
||||||
|
|
||||||
|
This is also where our functions become so important, because we can
|
||||||
|
easily recall all that logic and keep this for-loop fairly simple.
|
||||||
|
|
||||||
|
.. code:: ipython3
|
||||||
|
|
||||||
|
models = ["RAP13", "GFS20", "NAM40"]
|
||||||
|
|
||||||
|
for modelName in models:
|
||||||
|
timeReq = DataAccessLayer.newDataRequest("grid")
|
||||||
|
timeReq.setLocationNames(modelName)
|
||||||
|
cycles = DataAccessLayer.getAvailableTimes(timeReq, True)
|
||||||
|
times = DataAccessLayer.getAvailableTimes(timeReq)
|
||||||
|
fr = DataAccessLayer.getForecastRun(cycles[-1], times)
|
||||||
|
print("Using " + modelName + " forecast time " + str(fr[0]))
|
||||||
|
tr = [fr[0]]
|
||||||
|
|
||||||
|
p,t,d,u,v = get_surface_data(modelName,point,tr)
|
||||||
|
p,t,d,u,v,w = get_levels_data(modelName,point,tr,p,t,d,u,v)
|
||||||
|
|
||||||
|
# Skew-T
|
||||||
|
plot_skewT(modelName,p,t,d,u,v,w,tr[0])
|
||||||
|
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
|
||||||
|
Using RAP13 forecast time 2023-07-25 19:00:00
|
||||||
|
Found surface record at 839.4MB
|
||||||
|
Using 32 levels between 839.4 and 100.0MB
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.. image:: Forecast_Model_Vertical_Sounding_files/Forecast_Model_Vertical_Sounding_27_1.png
|
||||||
|
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
|
||||||
|
Using GFS20 forecast time 2023-07-25 12:00:00
|
||||||
|
Found surface record at 842.5MB
|
||||||
|
Using 32 levels between 842.5 and 100.0MB
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.. image:: Forecast_Model_Vertical_Sounding_files/Forecast_Model_Vertical_Sounding_27_3.png
|
||||||
|
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
|
||||||
|
Using NAM40 forecast time 2023-07-25 18:00:00
|
||||||
Found surface record at 833.8MB
|
Found surface record at 833.8MB
|
||||||
Using 30 levels between 833.8 and 100.0MB
|
Using 32 levels between 833.8 and 50.0MB
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. image:: Forecast_Model_Vertical_Sounding_files/Forecast_Model_Vertical_Sounding_7_1.png
|
.. image:: Forecast_Model_Vertical_Sounding_files/Forecast_Model_Vertical_Sounding_27_5.png
|
||||||
|
|
||||||
|
|
||||||
.. parsed-literal::
|
`Top <https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html>`__
|
||||||
|
|
||||||
Using GFS20 forecast time 2023-05-17 12:00:00
|
--------------
|
||||||
Found surface record at 839.9MB
|
|
||||||
Using 22 levels between 839.9 and 100.0MB
|
|
||||||
|
|
||||||
|
10 See Also
|
||||||
|
-----------
|
||||||
|
|
||||||
|
10.1 Related Notebooks
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. image:: Forecast_Model_Vertical_Sounding_files/Forecast_Model_Vertical_Sounding_7_3.png
|
- `Grid Levels and
|
||||||
|
Parameters <https://unidata.github.io/python-awips/examples/generated/Grid_Levels_and_Parameters.html>`__
|
||||||
|
- `Upper Air BUFR
|
||||||
|
Soundings <http://unidata.github.io/python-awips/examples/generated/Upper_Air_BUFR_Soundings.html>`__
|
||||||
|
- `Model Sounding
|
||||||
|
Data <http://unidata.github.io/python-awips/examples/generated/Model_Sounding_Data.html>`__
|
||||||
|
|
||||||
|
10.2 Additional Documentation
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. parsed-literal::
|
**python-awips:**
|
||||||
|
|
||||||
Using NAM40 forecast time 2023-05-17 18:00:00
|
- `awips.DataAccessLayer <http://unidata.github.io/python-awips/api/DataAccessLayer.html>`__
|
||||||
Found surface record at 829.4MB
|
- `awips.ModelSounding <https://unidata.github.io/python-awips/api/ModelSounding.html>`__
|
||||||
Using 32 levels between 829.4 and 50.0MB
|
|
||||||
|
|
||||||
|
**matplotlib:**
|
||||||
|
|
||||||
|
- `matplotlib.pyplot <https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.html>`__
|
||||||
|
|
||||||
.. image:: Forecast_Model_Vertical_Sounding_files/Forecast_Model_Vertical_Sounding_7_5.png
|
**MetPy**
|
||||||
|
|
||||||
|
- `metpy.wind_speed <https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.wind_speed.html>`__
|
||||||
|
- `metpy.wind_direction <https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.wind_direction.html>`__
|
||||||
|
- `metpy.vapor_pressure <https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.vapor_pressure.html>`__
|
||||||
|
- `metpy.dewpoint <https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.dewpoint.html>`__
|
||||||
|
- `metpy.skewt <https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.SkewT.html>`__
|
||||||
|
- `metpy.hodograph <https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.Hodograph.html>`__
|
||||||
|
|
||||||
|
`Top <https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html>`__
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
|
@ -53,8 +53,19 @@
|
||||||
<li class="toctree-l2"><a class="reference internal" href="Colored_Surface_Temperature_Plot.html">Colored Surface Temperature Plot</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="Colored_Surface_Temperature_Plot.html">Colored Surface Temperature Plot</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="Colorized_Grid_Data.html">Colorized Grid Data</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="Colorized_Grid_Data.html">Colorized Grid Data</a></li>
|
||||||
<li class="toctree-l2 current"><a class="current reference internal" href="#">Forecast Model Vertical Sounding</a><ul>
|
<li class="toctree-l2 current"><a class="current reference internal" href="#">Forecast Model Vertical Sounding</a><ul>
|
||||||
<li class="toctree-l3"><a class="reference internal" href="#skew-t-log-p">Skew-T/Log-P</a></li>
|
<li class="toctree-l3"><a class="reference internal" href="#objectives">Objectives</a><ul>
|
||||||
<li class="toctree-l3"><a class="reference internal" href="#model-sounding-comparison">Model Sounding Comparison</a></li>
|
<li class="toctree-l4"><a class="reference internal" href="#imports">1 Imports</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#edex-connection">2 EDEX Connection</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#define-useful-variables">3 Define Useful Variables</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#function-get-surface-data">4 Function: get_surface_data()</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#function-get-levels-data">5 Function: get_levels_data()</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#function-plot-skewt">6 Function: plot_skewT()</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#retrieve-necessary-plotting-data">7 Retrieve Necessary Plotting Data</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#skew-t-log-p">8 Skew-T/Log-P</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#model-sounding-comparison">9 Model Sounding Comparison</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#see-also">10 See Also</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="GOES_CIRA_Product_Writer.html">GOES CIRA Product Writer</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="GOES_CIRA_Product_Writer.html">GOES CIRA Product Writer</a></li>
|
||||||
|
@ -103,45 +114,68 @@
|
||||||
<section id="forecast-model-vertical-sounding">
|
<section id="forecast-model-vertical-sounding">
|
||||||
<h1>Forecast Model Vertical Sounding<a class="headerlink" href="#forecast-model-vertical-sounding" title="Permalink to this heading"></a></h1>
|
<h1>Forecast Model Vertical Sounding<a class="headerlink" href="#forecast-model-vertical-sounding" title="Permalink to this heading"></a></h1>
|
||||||
<p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Forecast_Model_Vertical_Sounding.ipynb">Notebook</a>
|
<p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Forecast_Model_Vertical_Sounding.ipynb">Notebook</a>
|
||||||
The ModelSounding class allows us to create a vertical sounding through
|
Python-AWIPS Tutorial Notebook</p>
|
||||||
any available AWIPS model with isobaric levels.</p>
|
<hr class="docutils" />
|
||||||
|
<section id="objectives">
|
||||||
|
<h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this heading"></a></h2>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><p>A Shapely Point geometry is used to select longitude and latitude:
|
<li><p>Use python-awips to connect to an edex server</p></li>
|
||||||
from shapely.geometry import Point point = Point(-104.67,39.87)</p></li>
|
<li><p>Request data using the <a class="reference external" href="http://unidata.github.io/python-awips/api/ModelSounding.html">ModelSounding
|
||||||
<li><p>Parameters <code class="docutils literal notranslate"><span class="pre">['T','DpT','uW','vW']</span></code> are requested for all isobaric
|
class</a>
|
||||||
levels available for the selected model.</p></li>
|
in addition to using the normal <a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html">DataAccess
|
||||||
<li><p>There is a single-record query performed for <code class="docutils literal notranslate"><span class="pre">level</span> <span class="pre">=</span> <span class="pre">"0.0FHAG"</span></code> to
|
class</a></p></li>
|
||||||
determine the surface pressure level.</p></li>
|
<li><p>Create and compare vertical sounding from different AWIPS model data
|
||||||
<li><p>Pay attention to units when switching models. This notebook was
|
with isobaric levels</p></li>
|
||||||
written for the NAM 40km AWIPS model where temperature and dewpoint
|
<li><p>Use <a class="reference external" href="https://shapely.readthedocs.io/en/stable/reference/shapely.Point.html">Shapely Point
|
||||||
are returned as Kelvin and wind components as m/s.</p></li>
|
geometry</a>
|
||||||
|
to define a point</p></li>
|
||||||
|
<li><p>Convert between units when necessary</p></li>
|
||||||
|
<li><p>Use MetPy to create
|
||||||
|
<a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.SkewT.html">SkewT</a>
|
||||||
|
and
|
||||||
|
<a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.Hodograph.html">Hodograph</a>
|
||||||
|
plots</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="o">%</span><span class="k">matplotlib</span> inline
|
<hr class="docutils" />
|
||||||
<span class="kn">from</span> <span class="nn">awips.dataaccess</span> <span class="kn">import</span> <span class="n">DataAccessLayer</span><span class="p">,</span> <span class="n">ModelSounding</span>
|
<section id="imports">
|
||||||
<span class="kn">from</span> <span class="nn">awips</span> <span class="kn">import</span> <span class="n">ThriftClient</span>
|
<h3>1 Imports<a class="headerlink" href="#imports" title="Permalink to this heading"></a></h3>
|
||||||
|
<p>The imports below are used throughout the notebook. Note the first
|
||||||
|
import is coming directly from python-awips and allows us to connect to
|
||||||
|
an EDEX server. The subsequent imports are for data manipulation and
|
||||||
|
visualization.</p>
|
||||||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">awips.dataaccess</span> <span class="kn">import</span> <span class="n">DataAccessLayer</span><span class="p">,</span> <span class="n">ModelSounding</span>
|
||||||
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
|
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
|
||||||
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
||||||
<span class="kn">from</span> <span class="nn">metpy.plots</span> <span class="kn">import</span> <span class="n">SkewT</span><span class="p">,</span> <span class="n">Hodograph</span>
|
<span class="kn">from</span> <span class="nn">metpy.plots</span> <span class="kn">import</span> <span class="n">SkewT</span><span class="p">,</span> <span class="n">Hodograph</span>
|
||||||
<span class="kn">from</span> <span class="nn">metpy.units</span> <span class="kn">import</span> <span class="n">units</span>
|
<span class="kn">from</span> <span class="nn">metpy.units</span> <span class="kn">import</span> <span class="n">units</span>
|
||||||
<span class="kn">from</span> <span class="nn">mpl_toolkits.axes_grid1.inset_locator</span> <span class="kn">import</span> <span class="n">inset_axes</span>
|
<span class="kn">from</span> <span class="nn">mpl_toolkits.axes_grid1.inset_locator</span> <span class="kn">import</span> <span class="n">inset_axes</span>
|
||||||
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">sqrt</span>
|
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">sqrt</span>
|
||||||
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span>
|
<span class="kn">from</span> <span class="nn">shapely.geometry</span> <span class="kn">import</span> <span class="n">Point</span>
|
||||||
<span class="kn">from</span> <span class="nn">shapely.geometry</span> <span class="kn">import</span> <span class="n">Point</span><span class="p">,</span> <span class="n">Polygon</span>
|
</pre></div>
|
||||||
<span class="kn">import</span> <span class="nn">shapely.wkb</span>
|
</div>
|
||||||
<span class="kn">import</span> <span class="nn">timeit</span>
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
|
||||||
<span class="n">model</span><span class="o">=</span><span class="s2">"NAM40"</span>
|
</section>
|
||||||
<span class="n">parms</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'T'</span><span class="p">,</span><span class="s1">'DpT'</span><span class="p">,</span><span class="s1">'uW'</span><span class="p">,</span><span class="s1">'vW'</span><span class="p">]</span>
|
<hr class="docutils" />
|
||||||
<span class="n">server</span> <span class="o">=</span> <span class="s1">'edex-cloud.unidata.ucar.edu'</span>
|
<section id="edex-connection">
|
||||||
|
<h3>2 EDEX Connection<a class="headerlink" href="#edex-connection" title="Permalink to this heading"></a></h3>
|
||||||
|
<p>First we establish a connection to Unidata’s public EDEX server. This
|
||||||
|
sets the proper server on the <strong>DataAccessLayer</strong>, which we will use
|
||||||
|
numerous times throughout the notebook.</p>
|
||||||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">server</span> <span class="o">=</span> <span class="s1">'edex-cloud.unidata.ucar.edu'</span>
|
||||||
<span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">changeEDEXHost</span><span class="p">(</span><span class="n">server</span><span class="p">)</span>
|
<span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">changeEDEXHost</span><span class="p">(</span><span class="n">server</span><span class="p">)</span>
|
||||||
|
</pre></div>
|
||||||
<span class="c1"># note the order is LON,lat and not lat,LON</span>
|
</div>
|
||||||
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
|
||||||
|
</section>
|
||||||
|
<hr class="docutils" />
|
||||||
|
<section id="define-useful-variables">
|
||||||
|
<h3>3 Define Useful Variables<a class="headerlink" href="#define-useful-variables" title="Permalink to this heading"></a></h3>
|
||||||
|
<p>The plotting in this notebook needs a model name, a location point
|
||||||
|
(defined by latitude and longitude), and the most recent time range with
|
||||||
|
the initial forecast run.</p>
|
||||||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Note the order is Lon,Lat and not Lat,Lon</span>
|
||||||
<span class="n">point</span> <span class="o">=</span> <span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mf">104.67</span><span class="p">,</span><span class="mf">39.87</span><span class="p">)</span>
|
<span class="n">point</span> <span class="o">=</span> <span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mf">104.67</span><span class="p">,</span><span class="mf">39.87</span><span class="p">)</span>
|
||||||
|
<span class="n">model</span><span class="o">=</span><span class="s2">"NAM40"</span>
|
||||||
<span class="n">inc</span> <span class="o">=</span> <span class="mf">0.005</span>
|
|
||||||
<span class="n">bbox</span><span class="o">=</span><span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">y</span><span class="o">-</span><span class="n">inc</span><span class="p">,</span> <span class="n">point</span><span class="o">.</span><span class="n">y</span><span class="o">+</span><span class="n">inc</span><span class="p">,</span> <span class="n">point</span><span class="o">.</span><span class="n">x</span><span class="o">-</span><span class="n">inc</span><span class="p">,</span> <span class="n">point</span><span class="o">.</span><span class="n">x</span><span class="o">+</span><span class="n">inc</span><span class="p">]</span>
|
|
||||||
<span class="n">polygon</span> <span class="o">=</span> <span class="n">Polygon</span><span class="p">([(</span><span class="n">bbox</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">bbox</span><span class="p">[</span><span class="mi">2</span><span class="p">]),(</span><span class="n">bbox</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">bbox</span><span class="p">[</span><span class="mi">3</span><span class="p">]),</span>
|
|
||||||
<span class="p">(</span><span class="n">bbox</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">bbox</span><span class="p">[</span><span class="mi">3</span><span class="p">]),(</span><span class="n">bbox</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">bbox</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span>
|
|
||||||
<span class="p">(</span><span class="n">bbox</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">bbox</span><span class="p">[</span><span class="mi">2</span><span class="p">])])</span>
|
|
||||||
|
|
||||||
<span class="c1"># Get latest forecast cycle run</span>
|
<span class="c1"># Get latest forecast cycle run</span>
|
||||||
<span class="n">timeReq</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s2">"grid"</span><span class="p">)</span>
|
<span class="n">timeReq</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s2">"grid"</span><span class="p">)</span>
|
||||||
|
@ -150,242 +184,280 @@ are returned as Kelvin and wind components as m/s.</p></li>
|
||||||
<span class="n">times</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">timeReq</span><span class="p">)</span>
|
<span class="n">times</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">timeReq</span><span class="p">)</span>
|
||||||
<span class="n">fcstRun</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getForecastRun</span><span class="p">(</span><span class="n">cycles</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">],</span> <span class="n">times</span><span class="p">)</span>
|
<span class="n">fcstRun</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getForecastRun</span><span class="p">(</span><span class="n">cycles</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">],</span> <span class="n">times</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Using "</span> <span class="o">+</span> <span class="n">model</span> <span class="o">+</span> <span class="s2">" forecast time "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">fcstRun</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
|
<span class="n">timeRange</span> <span class="o">=</span> <span class="p">[</span><span class="n">fcstRun</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Using "</span> <span class="o">+</span> <span class="n">model</span> <span class="o">+</span> <span class="s2">" forecast time "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">timeRange</span><span class="p">))</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="n">NAM40</span> <span class="n">forecast</span> <span class="n">time</span> <span class="mi">2023</span><span class="o">-</span><span class="mi">05</span><span class="o">-</span><span class="mi">17</span> <span class="mi">12</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">00</span>
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="n">NAM40</span> <span class="n">forecast</span> <span class="n">time</span> <span class="p">[</span><span class="o"><</span><span class="n">DataTime</span> <span class="n">instance</span><span class="p">:</span> <span class="mi">2023</span><span class="o">-</span><span class="mi">07</span><span class="o">-</span><span class="mi">25</span> <span class="mi">12</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">00</span> <span class="o">></span><span class="p">]</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span> <span class="o">=</span> <span class="p">[],[],[],[],[]</span>
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
|
||||||
<span class="n">use_parms</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'T'</span><span class="p">,</span><span class="s1">'DpT'</span><span class="p">,</span><span class="s1">'uW'</span><span class="p">,</span><span class="s1">'vW'</span><span class="p">,</span><span class="s1">'P'</span><span class="p">]</span>
|
|
||||||
<span class="n">use_level</span> <span class="o">=</span> <span class="s2">"0.0FHAG"</span>
|
|
||||||
<span class="n">sndObject</span> <span class="o">=</span> <span class="n">ModelSounding</span><span class="o">.</span><span class="n">getSounding</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">use_parms</span><span class="p">,</span>
|
|
||||||
<span class="p">[</span><span class="s2">"0.0FHAG"</span><span class="p">],</span> <span class="n">point</span><span class="p">,</span> <span class="n">timeRange</span><span class="o">=</span><span class="p">[</span><span class="n">fcstRun</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
|
|
||||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sndObject</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
||||||
<span class="k">for</span> <span class="n">time</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">:</span>
|
|
||||||
<span class="n">p</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'P'</span><span class="p">]))</span>
|
|
||||||
<span class="n">t</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'T'</span><span class="p">]))</span>
|
|
||||||
<span class="n">d</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'DpT'</span><span class="p">]))</span>
|
|
||||||
<span class="n">u</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'uW'</span><span class="p">]))</span>
|
|
||||||
<span class="n">v</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'vW'</span><span class="p">]))</span>
|
|
||||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Found surface record at "</span> <span class="o">+</span> <span class="s2">"</span><span class="si">%.1f</span><span class="s2">"</span> <span class="o">%</span> <span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"MB"</span><span class="p">)</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"sndObject returned empty for query ["</span>
|
|
||||||
<span class="o">+</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">use_parms</span><span class="p">,</span> <span class="n">point</span><span class="p">,</span> <span class="n">use_level</span><span class="p">))</span> <span class="o">+</span><span class="s2">"]"</span><span class="p">)</span>
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Found</span> <span class="n">surface</span> <span class="n">record</span> <span class="n">at</span> <span class="mf">830.1</span><span class="n">MB</span>
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Get isobaric levels with our requested parameters</span>
|
|
||||||
<span class="n">levelReq</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s2">"grid"</span><span class="p">,</span> <span class="n">envelope</span><span class="o">=</span><span class="n">point</span><span class="p">)</span>
|
|
||||||
<span class="n">levelReq</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
|
|
||||||
<span class="n">levelReq</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s1">'T'</span><span class="p">,</span><span class="s1">'DpT'</span><span class="p">,</span><span class="s1">'uW'</span><span class="p">,</span><span class="s1">'vW'</span><span class="p">)</span>
|
|
||||||
<span class="n">availableLevels</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableLevels</span><span class="p">(</span><span class="n">levelReq</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="c1"># Clean levels list of unit string (MB, FHAG, etc.)</span>
|
|
||||||
<span class="n">levels</span> <span class="o">=</span> <span class="p">[]</span>
|
|
||||||
<span class="k">for</span> <span class="n">lvl</span> <span class="ow">in</span> <span class="n">availableLevels</span><span class="p">:</span>
|
|
||||||
<span class="n">name</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">lvl</span><span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="s1">'MB'</span> <span class="ow">in</span> <span class="n">name</span> <span class="ow">and</span> <span class="s1">'_'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
|
|
||||||
<span class="c1"># If this level is above (less than in mb) our 0.0FHAG record</span>
|
|
||||||
<span class="k">if</span> <span class="nb">float</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'MB'</span><span class="p">,</span><span class="s1">''</span><span class="p">))</span> <span class="o"><</span> <span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
|
|
||||||
<span class="n">levels</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lvl</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="c1"># Get Sounding</span>
|
|
||||||
<span class="n">sndObject</span> <span class="o">=</span> <span class="n">ModelSounding</span><span class="o">.</span><span class="n">getSounding</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">parms</span><span class="p">,</span> <span class="n">levels</span><span class="p">,</span> <span class="n">point</span><span class="p">,</span>
|
|
||||||
<span class="n">timeRange</span><span class="o">=</span><span class="p">[</span><span class="n">fcstRun</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
|
|
||||||
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">sndObject</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"sndObject returned empty for query ["</span>
|
|
||||||
<span class="o">+</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">parms</span><span class="p">,</span> <span class="n">point</span><span class="p">,</span> <span class="n">levels</span><span class="p">))</span> <span class="o">+</span><span class="s2">"]"</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="k">for</span> <span class="n">time</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">:</span>
|
|
||||||
<span class="k">for</span> <span class="n">lvl</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">]</span><span class="o">.</span><span class="n">levels</span><span class="p">():</span>
|
|
||||||
<span class="k">for</span> <span class="n">parm</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">]</span><span class="o">.</span><span class="n">parameters</span><span class="p">():</span>
|
|
||||||
<span class="k">if</span> <span class="n">parm</span> <span class="o">==</span> <span class="s2">"T"</span><span class="p">:</span>
|
|
||||||
<span class="n">t</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
|
|
||||||
<span class="k">elif</span> <span class="n">parm</span> <span class="o">==</span> <span class="s2">"DpT"</span><span class="p">:</span>
|
|
||||||
<span class="n">d</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
|
|
||||||
<span class="k">elif</span> <span class="n">parm</span> <span class="o">==</span> <span class="s1">'uW'</span><span class="p">:</span>
|
|
||||||
<span class="n">u</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
|
|
||||||
<span class="k">elif</span> <span class="n">parm</span> <span class="o">==</span> <span class="s1">'vW'</span><span class="p">:</span>
|
|
||||||
<span class="n">v</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"WHAT IS THIS"</span><span class="p">)</span>
|
|
||||||
<span class="nb">print</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">])</span>
|
|
||||||
<span class="c1"># Pressure is our requested level rather than a returned parameter</span>
|
|
||||||
<span class="n">p</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">lvl</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'MB'</span><span class="p">,</span><span class="s1">''</span><span class="p">)))</span>
|
|
||||||
|
|
||||||
<span class="c1"># convert to numpy.array()</span>
|
|
||||||
<span class="n">p</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span>
|
|
||||||
<span class="n">t</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">-</span> <span class="mf">273.15</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">degC</span>
|
|
||||||
<span class="n">d</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">-</span> <span class="mf">273.15</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">degC</span>
|
|
||||||
<span class="n">u</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="p">(</span><span class="s1">'m/s'</span><span class="p">))</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'knots'</span><span class="p">)</span>
|
|
||||||
<span class="n">v</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="p">(</span><span class="s1">'m/s'</span><span class="p">))</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'knots'</span><span class="p">)</span>
|
|
||||||
<span class="n">w</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">u</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="n">v</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Using "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">levels</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" levels between "</span> <span class="o">+</span>
|
|
||||||
<span class="nb">str</span><span class="p">(</span><span class="s2">"</span><span class="si">%.1f</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">max</span><span class="p">(</span><span class="n">p</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" and "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="s2">"</span><span class="si">%.1f</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">min</span><span class="p">(</span><span class="n">p</span><span class="p">))</span> <span class="o">+</span> <span class="s2">"MB"</span><span class="p">)</span>
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="mi">32</span> <span class="n">levels</span> <span class="n">between</span> <span class="mf">830.1</span> <span class="ow">and</span> <span class="mf">50.0</span><span class="n">MB</span>
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
<hr class="docutils" />
|
|
||||||
<section id="skew-t-log-p">
|
|
||||||
<h2>Skew-T/Log-P<a class="headerlink" href="#skew-t-log-p" title="Permalink to this heading"></a></h2>
|
|
||||||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">plt</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">'figure.figsize'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">14</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="c1"># Skew-T</span>
|
|
||||||
<span class="n">skew</span> <span class="o">=</span> <span class="n">SkewT</span><span class="p">(</span><span class="n">rotation</span><span class="o">=</span><span class="mi">45</span><span class="p">)</span>
|
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="s1">'g'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">plot_barbs</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
|
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">plot_dry_adiabats</span><span class="p">()</span>
|
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">plot_moist_adiabats</span><span class="p">()</span>
|
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">plot_mixing_lines</span><span class="p">(</span><span class="n">linestyle</span><span class="o">=</span><span class="s1">':'</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="mi">1000</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">p</span><span class="p">))</span>
|
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span> <span class="mi">40</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="c1"># Title</span>
|
|
||||||
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span> <span class="n">model</span> <span class="o">+</span> <span class="s2">" ("</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">point</span><span class="p">)</span> <span class="o">+</span> <span class="s2">") "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">getRefTime</span><span class="p">()))</span>
|
|
||||||
|
|
||||||
<span class="c1"># Hodograph</span>
|
|
||||||
<span class="n">ax_hod</span> <span class="o">=</span> <span class="n">inset_axes</span><span class="p">(</span><span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="p">,</span> <span class="s1">'40%'</span><span class="p">,</span> <span class="s1">'40%'</span><span class="p">,</span> <span class="n">loc</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
|
||||||
<span class="n">h</span> <span class="o">=</span> <span class="n">Hodograph</span><span class="p">(</span><span class="n">ax_hod</span><span class="p">,</span> <span class="n">component_range</span><span class="o">=</span><span class="nb">max</span><span class="p">(</span><span class="n">w</span><span class="o">.</span><span class="n">magnitude</span><span class="p">))</span>
|
|
||||||
<span class="n">h</span><span class="o">.</span><span class="n">add_grid</span><span class="p">(</span><span class="n">increment</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
|
|
||||||
<span class="n">h</span><span class="o">.</span><span class="n">plot_colormapped</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">w</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="c1"># Dotted line at 0C isotherm</span>
|
|
||||||
<span class="n">l</span> <span class="o">=</span> <span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'c'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">'-'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
<img alt="../../_images/Forecast_Model_Vertical_Sounding_5_0.png" src="../../_images/Forecast_Model_Vertical_Sounding_5_0.png" />
|
|
||||||
</section>
|
</section>
|
||||||
<section id="model-sounding-comparison">
|
<hr class="docutils" />
|
||||||
<h2>Model Sounding Comparison<a class="headerlink" href="#model-sounding-comparison" title="Permalink to this heading"></a></h2>
|
<section id="function-get-surface-data">
|
||||||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">models</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"RAP13"</span><span class="p">,</span> <span class="s2">"GFS20"</span><span class="p">,</span> <span class="s2">"NAM40"</span><span class="p">]</span>
|
<h3>4 Function: get_surface_data()<a class="headerlink" href="#function-get-surface-data" title="Permalink to this heading"></a></h3>
|
||||||
<span class="n">parms</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'T'</span><span class="p">,</span><span class="s1">'DpT'</span><span class="p">,</span><span class="s1">'uW'</span><span class="p">,</span><span class="s1">'vW'</span><span class="p">]</span>
|
<p>This function is used to get the initial forecast model data for surface
|
||||||
|
height. This is done separately from the rest of the heights to
|
||||||
|
determine the surface pressure. It uses the
|
||||||
|
<a class="reference external" href="http://unidata.github.io/python-awips/api/ModelSounding.html">ModelSounding</a>
|
||||||
|
data object from python-awips to retrieve all the relevant information.</p>
|
||||||
|
<p>This function takes the model name, location, and time as attributes,
|
||||||
|
and returns arrays for pressure, temperature, dewpoint, and the u and v
|
||||||
|
wind components.</p>
|
||||||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">get_surface_data</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span>
|
||||||
|
<span class="w"> </span><span class="sd">""" model name, location, and timeRange desire """</span>
|
||||||
|
|
||||||
<span class="k">for</span> <span class="n">modelName</span> <span class="ow">in</span> <span class="n">models</span><span class="p">:</span>
|
<span class="c1"># request data and sort response</span>
|
||||||
<span class="n">timeReq</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s2">"grid"</span><span class="p">)</span>
|
<span class="n">pressure</span><span class="p">,</span><span class="n">temp</span><span class="p">,</span><span class="n">dpt</span><span class="p">,</span><span class="n">ucomp</span><span class="p">,</span><span class="n">vcomp</span> <span class="o">=</span> <span class="p">[],[],[],[],[]</span>
|
||||||
<span class="n">timeReq</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="n">modelName</span><span class="p">)</span>
|
|
||||||
<span class="n">cycles</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">timeReq</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
|
||||||
<span class="n">times</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">timeReq</span><span class="p">)</span>
|
|
||||||
<span class="n">fcstRun</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getForecastRun</span><span class="p">(</span><span class="n">cycles</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">times</span><span class="p">)</span>
|
|
||||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Using "</span> <span class="o">+</span> <span class="n">modelName</span> <span class="o">+</span> <span class="s2">" forecast time "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">fcstRun</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
|
|
||||||
|
|
||||||
<span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span> <span class="o">=</span> <span class="p">[],[],[],[],[]</span>
|
|
||||||
<span class="n">use_parms</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'T'</span><span class="p">,</span><span class="s1">'DpT'</span><span class="p">,</span><span class="s1">'uW'</span><span class="p">,</span><span class="s1">'vW'</span><span class="p">,</span><span class="s1">'P'</span><span class="p">]</span>
|
<span class="n">use_parms</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'T'</span><span class="p">,</span><span class="s1">'DpT'</span><span class="p">,</span><span class="s1">'uW'</span><span class="p">,</span><span class="s1">'vW'</span><span class="p">,</span><span class="s1">'P'</span><span class="p">]</span>
|
||||||
<span class="n">use_level</span> <span class="o">=</span> <span class="s2">"0.0FHAG"</span>
|
<span class="n">use_level</span> <span class="o">=</span> <span class="s2">"0.0FHAG"</span>
|
||||||
|
|
||||||
<span class="n">sndObject</span> <span class="o">=</span> <span class="n">ModelSounding</span><span class="o">.</span><span class="n">getSounding</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">use_parms</span><span class="p">,</span>
|
<span class="n">sndObject</span> <span class="o">=</span> <span class="n">ModelSounding</span><span class="o">.</span><span class="n">getSounding</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">use_parms</span><span class="p">,</span> <span class="p">[</span><span class="n">use_level</span><span class="p">],</span> <span class="n">location</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
|
||||||
<span class="p">[</span><span class="n">use_level</span><span class="p">],</span> <span class="n">point</span><span class="p">,</span> <span class="n">timeRange</span><span class="o">=</span><span class="p">[</span><span class="n">fcstRun</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
|
|
||||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sndObject</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sndObject</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||||
<span class="k">for</span> <span class="n">time</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">time</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">:</span>
|
||||||
<span class="n">p</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'P'</span><span class="p">]))</span>
|
<span class="n">pressure</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'P'</span><span class="p">]))</span>
|
||||||
<span class="n">t</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'T'</span><span class="p">]))</span>
|
<span class="n">temp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'T'</span><span class="p">]))</span>
|
||||||
<span class="n">d</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'DpT'</span><span class="p">]))</span>
|
<span class="n">dpt</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'DpT'</span><span class="p">]))</span>
|
||||||
<span class="n">u</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'uW'</span><span class="p">]))</span>
|
<span class="n">ucomp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'uW'</span><span class="p">]))</span>
|
||||||
<span class="n">v</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'vW'</span><span class="p">]))</span>
|
<span class="n">vcomp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">'vW'</span><span class="p">]))</span>
|
||||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Found surface record at "</span> <span class="o">+</span> <span class="s2">"</span><span class="si">%.1f</span><span class="s2">"</span> <span class="o">%</span> <span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"MB"</span><span class="p">)</span>
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Found surface record at "</span> <span class="o">+</span> <span class="s2">"</span><span class="si">%.1f</span><span class="s2">"</span> <span class="o">%</span> <span class="n">pressure</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"MB"</span><span class="p">)</span>
|
||||||
<span class="k">else</span><span class="p">:</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"sndObject returned empty for query ["</span>
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"sndObject returned empty for query ["</span>
|
||||||
<span class="o">+</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">use_parms</span><span class="p">,</span> <span class="n">point</span><span class="p">,</span> <span class="n">use_level</span><span class="p">))</span> <span class="o">+</span><span class="s2">"]"</span><span class="p">)</span>
|
<span class="o">+</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">use_parms</span><span class="p">,</span> <span class="n">point</span><span class="p">,</span> <span class="n">use_level</span><span class="p">))</span> <span class="o">+</span><span class="s2">"]"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># return information for plotting</span>
|
||||||
|
<span class="k">return</span> <span class="n">pressure</span><span class="p">,</span><span class="n">temp</span><span class="p">,</span><span class="n">dpt</span><span class="p">,</span><span class="n">ucomp</span><span class="p">,</span><span class="n">vcomp</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Top</p>
|
||||||
|
</section>
|
||||||
|
<hr class="docutils" />
|
||||||
|
<section id="function-get-levels-data">
|
||||||
|
<h3>5 Function: get_levels_data()<a class="headerlink" href="#function-get-levels-data" title="Permalink to this heading"></a></h3>
|
||||||
|
<p>This function is similar to <em>get_surface_data()</em>, except it gets data
|
||||||
|
values for presure heights above the surface. It uses the
|
||||||
|
<a class="reference external" href="http://unidata.github.io/python-awips/api/ModelSounding.html">ModelSounding</a>
|
||||||
|
data object from python-awips to retrieve all the relevant information.</p>
|
||||||
|
<p>It takes the model name, location, and time (similar to the other
|
||||||
|
function), and also takes the instantiated pressure, temperature,
|
||||||
|
dewpoint, and wind vector arrays.</p>
|
||||||
|
<p>It returns the fully populated pressure, temperature, dewpoint,
|
||||||
|
u-component, v-component, and computed wind arrays.</p>
|
||||||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">get_levels_data</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">time</span><span class="p">,</span> <span class="n">pressure</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span> <span class="n">dpt</span><span class="p">,</span> <span class="n">ucomp</span><span class="p">,</span> <span class="n">vcomp</span><span class="p">):</span>
|
||||||
|
|
||||||
<span class="c1"># Get isobaric levels with our requested parameters</span>
|
<span class="c1"># Get isobaric levels with our requested parameters</span>
|
||||||
|
<span class="n">parms</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'T'</span><span class="p">,</span><span class="s1">'DpT'</span><span class="p">,</span><span class="s1">'uW'</span><span class="p">,</span><span class="s1">'vW'</span><span class="p">]</span>
|
||||||
<span class="n">levelReq</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s2">"grid"</span><span class="p">,</span> <span class="n">envelope</span><span class="o">=</span><span class="n">point</span><span class="p">)</span>
|
<span class="n">levelReq</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s2">"grid"</span><span class="p">,</span> <span class="n">envelope</span><span class="o">=</span><span class="n">point</span><span class="p">)</span>
|
||||||
<span class="n">levelReq</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="n">modelName</span><span class="p">)</span>
|
<span class="n">levelReq</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
|
||||||
<span class="n">levelReq</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s1">'T'</span><span class="p">,</span><span class="s1">'DpT'</span><span class="p">,</span><span class="s1">'uW'</span><span class="p">,</span><span class="s1">'vW'</span><span class="p">)</span>
|
<span class="n">levelReq</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">parms</span><span class="p">))</span>
|
||||||
<span class="n">availableLevels</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableLevels</span><span class="p">(</span><span class="n">levelReq</span><span class="p">)</span>
|
<span class="n">availableLevels</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableLevels</span><span class="p">(</span><span class="n">levelReq</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># Clean levels list of unit string (MB, FHAG, etc.)</span>
|
<span class="c1"># Clean levels list of unit string (MB, FHAG, etc.)</span>
|
||||||
<span class="n">levels</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">levels</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
<span class="k">for</span> <span class="n">lvl</span> <span class="ow">in</span> <span class="n">availableLevels</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">lvl</span> <span class="ow">in</span> <span class="n">availableLevels</span><span class="p">:</span>
|
||||||
<span class="n">name</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">lvl</span><span class="p">)</span>
|
<span class="n">name</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">lvl</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="s1">'MB'</span> <span class="ow">in</span> <span class="n">name</span> <span class="ow">and</span> <span class="s1">'_'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
|
<span class="k">if</span> <span class="s1">'MB'</span> <span class="ow">in</span> <span class="n">name</span> <span class="ow">and</span> <span class="s1">'_'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
|
||||||
<span class="c1"># If this level is above (less than in mb) our 0.0FHAG record</span>
|
<span class="c1"># If this level is above (less than in mb) our 0.0FHAG record</span>
|
||||||
<span class="k">if</span> <span class="nb">float</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'MB'</span><span class="p">,</span><span class="s1">''</span><span class="p">))</span> <span class="o"><</span> <span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
|
<span class="k">if</span> <span class="nb">float</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'MB'</span><span class="p">,</span><span class="s1">''</span><span class="p">))</span> <span class="o"><</span> <span class="n">pressure</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
|
||||||
<span class="n">levels</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lvl</span><span class="p">)</span>
|
<span class="n">levels</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lvl</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># Get Sounding</span>
|
<span class="c1"># Get Sounding</span>
|
||||||
<span class="n">sndObject</span> <span class="o">=</span> <span class="n">ModelSounding</span><span class="o">.</span><span class="n">getSounding</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">parms</span><span class="p">,</span> <span class="n">levels</span><span class="p">,</span> <span class="n">point</span><span class="p">,</span>
|
<span class="n">sndObject</span> <span class="o">=</span> <span class="n">ModelSounding</span><span class="o">.</span><span class="n">getSounding</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">parms</span><span class="p">,</span> <span class="n">levels</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
|
||||||
<span class="n">timeRange</span><span class="o">=</span><span class="p">[</span><span class="n">fcstRun</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">sndObject</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">sndObject</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"sndObject returned empty for query ["</span>
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"sndObject returned empty for query ["</span>
|
||||||
<span class="o">+</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">parms</span><span class="p">,</span> <span class="n">point</span><span class="p">,</span> <span class="n">levels</span><span class="p">))</span> <span class="o">+</span><span class="s2">"]"</span><span class="p">)</span>
|
<span class="o">+</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">parms</span><span class="p">,</span> <span class="n">point</span><span class="p">,</span> <span class="n">levels</span><span class="p">))</span> <span class="o">+</span><span class="s2">"]"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="k">for</span> <span class="n">time</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">time</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">:</span>
|
||||||
<span class="k">for</span> <span class="n">lvl</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">]</span><span class="o">.</span><span class="n">levels</span><span class="p">():</span>
|
<span class="k">for</span> <span class="n">lvl</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">]</span><span class="o">.</span><span class="n">levels</span><span class="p">():</span>
|
||||||
<span class="k">for</span> <span class="n">parm</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">]</span><span class="o">.</span><span class="n">parameters</span><span class="p">():</span>
|
<span class="k">for</span> <span class="n">parm</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">]</span><span class="o">.</span><span class="n">parameters</span><span class="p">():</span>
|
||||||
<span class="k">if</span> <span class="n">parm</span> <span class="o">==</span> <span class="s2">"T"</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">parm</span> <span class="o">==</span> <span class="s2">"T"</span><span class="p">:</span>
|
||||||
<span class="n">t</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
|
<span class="n">temp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
|
||||||
<span class="k">elif</span> <span class="n">parm</span> <span class="o">==</span> <span class="s2">"DpT"</span><span class="p">:</span>
|
<span class="k">elif</span> <span class="n">parm</span> <span class="o">==</span> <span class="s2">"DpT"</span><span class="p">:</span>
|
||||||
<span class="n">d</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
|
<span class="n">dpt</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
|
||||||
<span class="k">elif</span> <span class="n">parm</span> <span class="o">==</span> <span class="s1">'uW'</span><span class="p">:</span>
|
<span class="k">elif</span> <span class="n">parm</span> <span class="o">==</span> <span class="s1">'uW'</span><span class="p">:</span>
|
||||||
<span class="n">u</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
|
<span class="n">ucomp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
|
||||||
<span class="k">elif</span> <span class="n">parm</span> <span class="o">==</span> <span class="s1">'vW'</span><span class="p">:</span>
|
<span class="k">elif</span> <span class="n">parm</span> <span class="o">==</span> <span class="s1">'vW'</span><span class="p">:</span>
|
||||||
<span class="n">v</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
|
<span class="n">vcomp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
|
||||||
<span class="k">else</span><span class="p">:</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"WHAT IS THIS"</span><span class="p">)</span>
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"WHAT IS THIS"</span><span class="p">)</span>
|
||||||
<span class="nb">print</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">])</span>
|
<span class="nb">print</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">])</span>
|
||||||
<span class="c1"># Pressure is our requested level rather than a returned parameter</span>
|
<span class="c1"># Pressure is our requested level rather than a returned parameter</span>
|
||||||
<span class="n">p</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">lvl</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'MB'</span><span class="p">,</span><span class="s1">''</span><span class="p">)))</span>
|
<span class="n">pressure</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">lvl</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'MB'</span><span class="p">,</span><span class="s1">''</span><span class="p">)))</span>
|
||||||
|
|
||||||
<span class="c1"># convert to numpy.array()</span>
|
<span class="c1"># convert to numpy.array()</span>
|
||||||
<span class="n">p</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span>
|
<span class="n">pressure</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">pressure</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span>
|
||||||
<span class="n">t</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">-</span> <span class="mf">273.15</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">degC</span>
|
<span class="n">temp</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">temp</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">-</span> <span class="mf">273.15</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">degC</span>
|
||||||
<span class="n">d</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">-</span> <span class="mf">273.15</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">degC</span>
|
<span class="n">dpt</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">dpt</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">-</span> <span class="mf">273.15</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">degC</span>
|
||||||
<span class="n">u</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="p">(</span><span class="s1">'m/s'</span><span class="p">))</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'knots'</span><span class="p">)</span>
|
<span class="n">ucomp</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">ucomp</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="p">(</span><span class="s1">'m/s'</span><span class="p">))</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'knots'</span><span class="p">)</span>
|
||||||
<span class="n">v</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="p">(</span><span class="s1">'m/s'</span><span class="p">))</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'knots'</span><span class="p">)</span>
|
<span class="n">vcomp</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">vcomp</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="p">(</span><span class="s1">'m/s'</span><span class="p">))</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'knots'</span><span class="p">)</span>
|
||||||
<span class="n">w</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">u</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="n">v</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
|
<span class="n">wind</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">ucomp</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="n">vcomp</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Using "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">levels</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" levels between "</span> <span class="o">+</span>
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Using "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">levels</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" levels between "</span> <span class="o">+</span>
|
||||||
<span class="nb">str</span><span class="p">(</span><span class="s2">"</span><span class="si">%.1f</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">max</span><span class="p">(</span><span class="n">p</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" and "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="s2">"</span><span class="si">%.1f</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">min</span><span class="p">(</span><span class="n">p</span><span class="p">))</span> <span class="o">+</span> <span class="s2">"MB"</span><span class="p">)</span>
|
<span class="nb">str</span><span class="p">(</span><span class="s2">"</span><span class="si">%.1f</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">max</span><span class="p">(</span><span class="n">pressure</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" and "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="s2">"</span><span class="si">%.1f</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">min</span><span class="p">(</span><span class="n">pressure</span><span class="p">))</span> <span class="o">+</span> <span class="s2">"MB"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">pressure</span><span class="p">,</span><span class="n">temp</span><span class="p">,</span><span class="n">dpt</span><span class="p">,</span><span class="n">ucomp</span><span class="p">,</span><span class="n">vcomp</span><span class="p">,</span><span class="n">wind</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
|
||||||
|
</section>
|
||||||
|
<hr class="docutils" />
|
||||||
|
<section id="function-plot-skewt">
|
||||||
|
<h3>6 Function: plot_skewT()<a class="headerlink" href="#function-plot-skewt" title="Permalink to this heading"></a></h3>
|
||||||
|
<p>Since we’re plotting many different models for comparison, all that code
|
||||||
|
was used to create this function.</p>
|
||||||
|
<p>The function takes the model name, reference time, and the pressure,
|
||||||
|
temperature, dewpoint, u-component, v-component, and wind arrays. It
|
||||||
|
plots a skewT and hodograph using metpy.</p>
|
||||||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">plot_skewT</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">pressure</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span> <span class="n">dpt</span><span class="p">,</span> <span class="n">ucomp</span><span class="p">,</span> <span class="n">vcomp</span><span class="p">,</span> <span class="n">wind</span><span class="p">,</span> <span class="n">refTime</span><span class="p">):</span>
|
||||||
|
<span class="n">plt</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">'figure.figsize'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">14</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># Skew-T</span>
|
<span class="c1"># Skew-T</span>
|
||||||
<span class="n">plt</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">'figure.figsize'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">14</span><span class="p">)</span>
|
|
||||||
<span class="n">skew</span> <span class="o">=</span> <span class="n">SkewT</span><span class="p">(</span><span class="n">rotation</span><span class="o">=</span><span class="mi">45</span><span class="p">)</span>
|
<span class="n">skew</span> <span class="o">=</span> <span class="n">SkewT</span><span class="p">(</span><span class="n">rotation</span><span class="o">=</span><span class="mi">45</span><span class="p">)</span>
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
<span class="n">skew</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">pressure</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="s1">'g'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
<span class="n">skew</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">pressure</span><span class="p">,</span> <span class="n">dpt</span><span class="p">,</span> <span class="s1">'g'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">plot_barbs</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
|
<span class="n">skew</span><span class="o">.</span><span class="n">plot_barbs</span><span class="p">(</span><span class="n">pressure</span><span class="p">,</span> <span class="n">ucomp</span><span class="p">,</span> <span class="n">vcomp</span><span class="p">)</span>
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">plot_dry_adiabats</span><span class="p">()</span>
|
<span class="n">skew</span><span class="o">.</span><span class="n">plot_dry_adiabats</span><span class="p">()</span>
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">plot_moist_adiabats</span><span class="p">()</span>
|
<span class="n">skew</span><span class="o">.</span><span class="n">plot_moist_adiabats</span><span class="p">()</span>
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">plot_mixing_lines</span><span class="p">(</span><span class="n">linestyle</span><span class="o">=</span><span class="s1">':'</span><span class="p">)</span>
|
<span class="n">skew</span><span class="o">.</span><span class="n">plot_mixing_lines</span><span class="p">(</span><span class="n">linestyle</span><span class="o">=</span><span class="s1">':'</span><span class="p">)</span>
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="mi">1000</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
||||||
|
<span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="mi">1000</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">pressure</span><span class="p">))</span>
|
||||||
<span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span> <span class="mi">40</span><span class="p">)</span>
|
<span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span> <span class="mi">40</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># Title</span>
|
<span class="c1"># Title</span>
|
||||||
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span> <span class="n">modelName</span> <span class="o">+</span> <span class="s2">" ("</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">point</span><span class="p">)</span> <span class="o">+</span> <span class="s2">") "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">getRefTime</span><span class="p">()))</span>
|
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="n">modelName</span> <span class="o">+</span> <span class="s2">" ("</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">point</span><span class="p">)</span> <span class="o">+</span> <span class="s2">") "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">refTime</span><span class="p">))</span>
|
||||||
|
|
||||||
<span class="c1"># Hodograph</span>
|
<span class="c1"># Hodograph</span>
|
||||||
<span class="n">ax_hod</span> <span class="o">=</span> <span class="n">inset_axes</span><span class="p">(</span><span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="p">,</span> <span class="s1">'40%'</span><span class="p">,</span> <span class="s1">'40%'</span><span class="p">,</span> <span class="n">loc</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
<span class="n">ax_hod</span> <span class="o">=</span> <span class="n">inset_axes</span><span class="p">(</span><span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="p">,</span> <span class="s1">'40%'</span><span class="p">,</span> <span class="s1">'40%'</span><span class="p">,</span> <span class="n">loc</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||||
<span class="n">h</span> <span class="o">=</span> <span class="n">Hodograph</span><span class="p">(</span><span class="n">ax_hod</span><span class="p">,</span> <span class="n">component_range</span><span class="o">=</span><span class="nb">max</span><span class="p">(</span><span class="n">w</span><span class="o">.</span><span class="n">magnitude</span><span class="p">))</span>
|
<span class="n">h</span> <span class="o">=</span> <span class="n">Hodograph</span><span class="p">(</span><span class="n">ax_hod</span><span class="p">,</span> <span class="n">component_range</span><span class="o">=</span><span class="nb">max</span><span class="p">(</span><span class="n">wind</span><span class="o">.</span><span class="n">magnitude</span><span class="p">))</span>
|
||||||
<span class="n">h</span><span class="o">.</span><span class="n">add_grid</span><span class="p">(</span><span class="n">increment</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
|
<span class="n">h</span><span class="o">.</span><span class="n">add_grid</span><span class="p">(</span><span class="n">increment</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
|
||||||
<span class="n">h</span><span class="o">.</span><span class="n">plot_colormapped</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">w</span><span class="p">)</span>
|
<span class="n">h</span><span class="o">.</span><span class="n">plot_colormapped</span><span class="p">(</span><span class="n">ucomp</span><span class="p">,</span> <span class="n">vcomp</span><span class="p">,</span> <span class="n">wind</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># Dotted line at 0C isotherm</span>
|
<span class="c1"># Dotted line at 0C isotherm</span>
|
||||||
<span class="n">l</span> <span class="o">=</span> <span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'c'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">'-'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
<span class="n">l</span> <span class="o">=</span> <span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'c'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">'-'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
|
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="n">RAP13</span> <span class="n">forecast</span> <span class="n">time</span> <span class="mi">2023</span><span class="o">-</span><span class="mi">05</span><span class="o">-</span><span class="mi">17</span> <span class="mi">20</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">00</span>
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
|
||||||
|
</section>
|
||||||
|
<hr class="docutils" />
|
||||||
|
<section id="retrieve-necessary-plotting-data">
|
||||||
|
<h3>7 Retrieve Necessary Plotting Data<a class="headerlink" href="#retrieve-necessary-plotting-data" title="Permalink to this heading"></a></h3>
|
||||||
|
<p>First we get the initial data at surface level using the
|
||||||
|
get_surface_data function, and then pass those initial data arrays onto
|
||||||
|
the get_levels_data request to finish populating for additional heights
|
||||||
|
needed for Skew-T plots. We want to keep track of the pressure,
|
||||||
|
temeperature, dewpoint, u-component, v-component, and wind arrays so we
|
||||||
|
store them in variables to use later on.</p>
|
||||||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span> <span class="o">=</span> <span class="n">get_surface_data</span><span class="p">(</span><span class="n">model</span><span class="p">,</span><span class="n">point</span><span class="p">,</span><span class="n">timeRange</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span><span class="p">,</span><span class="n">w</span> <span class="o">=</span> <span class="n">get_levels_data</span><span class="p">(</span><span class="n">model</span><span class="p">,</span><span class="n">point</span><span class="p">,</span><span class="n">timeRange</span><span class="p">,</span><span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span><span class="p">)</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Found</span> <span class="n">surface</span> <span class="n">record</span> <span class="n">at</span> <span class="mf">833.2</span><span class="n">MB</span>
|
||||||
|
<span class="n">Using</span> <span class="mi">32</span> <span class="n">levels</span> <span class="n">between</span> <span class="mf">833.2</span> <span class="ow">and</span> <span class="mf">50.0</span><span class="n">MB</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
|
||||||
|
</section>
|
||||||
|
<hr class="docutils" />
|
||||||
|
<section id="skew-t-log-p">
|
||||||
|
<h3>8 Skew-T/Log-P<a class="headerlink" href="#skew-t-log-p" title="Permalink to this heading"></a></h3>
|
||||||
|
<p>Here we use our plot_skewT function to generate our skewT & hodograph
|
||||||
|
charts for the data we retreived so far. This is where the pressure,
|
||||||
|
temperature, dewpoint, and wind data is needed.</p>
|
||||||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">plot_skewT</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">timeRange</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<img alt="../../_images/Forecast_Model_Vertical_Sounding_24_0.png" src="../../_images/Forecast_Model_Vertical_Sounding_24_0.png" />
|
||||||
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
|
||||||
|
</section>
|
||||||
|
<hr class="docutils" />
|
||||||
|
<section id="model-sounding-comparison">
|
||||||
|
<h3>9 Model Sounding Comparison<a class="headerlink" href="#model-sounding-comparison" title="Permalink to this heading"></a></h3>
|
||||||
|
<p>Now that we know how to retreive and plot the data for one model, we can
|
||||||
|
run a loop to retreive data for various models and plot them for
|
||||||
|
comparison. In this example we’ll also plot RAP13 and GFS20 data to
|
||||||
|
compare with NAM40.</p>
|
||||||
|
<p>This is also where our functions become so important, because we can
|
||||||
|
easily recall all that logic and keep this for-loop fairly simple.</p>
|
||||||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">models</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"RAP13"</span><span class="p">,</span> <span class="s2">"GFS20"</span><span class="p">,</span> <span class="s2">"NAM40"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">modelName</span> <span class="ow">in</span> <span class="n">models</span><span class="p">:</span>
|
||||||
|
<span class="n">timeReq</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s2">"grid"</span><span class="p">)</span>
|
||||||
|
<span class="n">timeReq</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="n">modelName</span><span class="p">)</span>
|
||||||
|
<span class="n">cycles</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">timeReq</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||||
|
<span class="n">times</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">timeReq</span><span class="p">)</span>
|
||||||
|
<span class="n">fr</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getForecastRun</span><span class="p">(</span><span class="n">cycles</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">times</span><span class="p">)</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Using "</span> <span class="o">+</span> <span class="n">modelName</span> <span class="o">+</span> <span class="s2">" forecast time "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">fr</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
|
||||||
|
<span class="n">tr</span> <span class="o">=</span> <span class="p">[</span><span class="n">fr</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
|
||||||
|
|
||||||
|
<span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span> <span class="o">=</span> <span class="n">get_surface_data</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span><span class="n">point</span><span class="p">,</span><span class="n">tr</span><span class="p">)</span>
|
||||||
|
<span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span><span class="p">,</span><span class="n">w</span> <span class="o">=</span> <span class="n">get_levels_data</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span><span class="n">point</span><span class="p">,</span><span class="n">tr</span><span class="p">,</span><span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Skew-T</span>
|
||||||
|
<span class="n">plot_skewT</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span><span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span><span class="p">,</span><span class="n">w</span><span class="p">,</span><span class="n">tr</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="n">RAP13</span> <span class="n">forecast</span> <span class="n">time</span> <span class="mi">2023</span><span class="o">-</span><span class="mi">07</span><span class="o">-</span><span class="mi">25</span> <span class="mi">19</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">00</span>
|
||||||
|
<span class="n">Found</span> <span class="n">surface</span> <span class="n">record</span> <span class="n">at</span> <span class="mf">839.4</span><span class="n">MB</span>
|
||||||
|
<span class="n">Using</span> <span class="mi">32</span> <span class="n">levels</span> <span class="n">between</span> <span class="mf">839.4</span> <span class="ow">and</span> <span class="mf">100.0</span><span class="n">MB</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<img alt="../../_images/Forecast_Model_Vertical_Sounding_27_1.png" src="../../_images/Forecast_Model_Vertical_Sounding_27_1.png" />
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="n">GFS20</span> <span class="n">forecast</span> <span class="n">time</span> <span class="mi">2023</span><span class="o">-</span><span class="mi">07</span><span class="o">-</span><span class="mi">25</span> <span class="mi">12</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">00</span>
|
||||||
|
<span class="n">Found</span> <span class="n">surface</span> <span class="n">record</span> <span class="n">at</span> <span class="mf">842.5</span><span class="n">MB</span>
|
||||||
|
<span class="n">Using</span> <span class="mi">32</span> <span class="n">levels</span> <span class="n">between</span> <span class="mf">842.5</span> <span class="ow">and</span> <span class="mf">100.0</span><span class="n">MB</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<img alt="../../_images/Forecast_Model_Vertical_Sounding_27_3.png" src="../../_images/Forecast_Model_Vertical_Sounding_27_3.png" />
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="n">NAM40</span> <span class="n">forecast</span> <span class="n">time</span> <span class="mi">2023</span><span class="o">-</span><span class="mi">07</span><span class="o">-</span><span class="mi">25</span> <span class="mi">18</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">00</span>
|
||||||
<span class="n">Found</span> <span class="n">surface</span> <span class="n">record</span> <span class="n">at</span> <span class="mf">833.8</span><span class="n">MB</span>
|
<span class="n">Found</span> <span class="n">surface</span> <span class="n">record</span> <span class="n">at</span> <span class="mf">833.8</span><span class="n">MB</span>
|
||||||
<span class="n">Using</span> <span class="mi">30</span> <span class="n">levels</span> <span class="n">between</span> <span class="mf">833.8</span> <span class="ow">and</span> <span class="mf">100.0</span><span class="n">MB</span>
|
<span class="n">Using</span> <span class="mi">32</span> <span class="n">levels</span> <span class="n">between</span> <span class="mf">833.8</span> <span class="ow">and</span> <span class="mf">50.0</span><span class="n">MB</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<img alt="../../_images/Forecast_Model_Vertical_Sounding_7_1.png" src="../../_images/Forecast_Model_Vertical_Sounding_7_1.png" />
|
<img alt="../../_images/Forecast_Model_Vertical_Sounding_27_5.png" src="../../_images/Forecast_Model_Vertical_Sounding_27_5.png" />
|
||||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="n">GFS20</span> <span class="n">forecast</span> <span class="n">time</span> <span class="mi">2023</span><span class="o">-</span><span class="mi">05</span><span class="o">-</span><span class="mi">17</span> <span class="mi">12</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">00</span>
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
|
||||||
<span class="n">Found</span> <span class="n">surface</span> <span class="n">record</span> <span class="n">at</span> <span class="mf">839.9</span><span class="n">MB</span>
|
</section>
|
||||||
<span class="n">Using</span> <span class="mi">22</span> <span class="n">levels</span> <span class="n">between</span> <span class="mf">839.9</span> <span class="ow">and</span> <span class="mf">100.0</span><span class="n">MB</span>
|
<hr class="docutils" />
|
||||||
</pre></div>
|
<section id="see-also">
|
||||||
</div>
|
<h3>10 See Also<a class="headerlink" href="#see-also" title="Permalink to this heading"></a></h3>
|
||||||
<img alt="../../_images/Forecast_Model_Vertical_Sounding_7_3.png" src="../../_images/Forecast_Model_Vertical_Sounding_7_3.png" />
|
<section id="related-notebooks">
|
||||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="n">NAM40</span> <span class="n">forecast</span> <span class="n">time</span> <span class="mi">2023</span><span class="o">-</span><span class="mi">05</span><span class="o">-</span><span class="mi">17</span> <span class="mi">18</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">00</span>
|
<h4>10.1 Related Notebooks<a class="headerlink" href="#related-notebooks" title="Permalink to this heading"></a></h4>
|
||||||
<span class="n">Found</span> <span class="n">surface</span> <span class="n">record</span> <span class="n">at</span> <span class="mf">829.4</span><span class="n">MB</span>
|
<ul class="simple">
|
||||||
<span class="n">Using</span> <span class="mi">32</span> <span class="n">levels</span> <span class="n">between</span> <span class="mf">829.4</span> <span class="ow">and</span> <span class="mf">50.0</span><span class="n">MB</span>
|
<li><p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grid_Levels_and_Parameters.html">Grid Levels and
|
||||||
</pre></div>
|
Parameters</a></p></li>
|
||||||
</div>
|
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/examples/generated/Upper_Air_BUFR_Soundings.html">Upper Air BUFR
|
||||||
<img alt="../../_images/Forecast_Model_Vertical_Sounding_7_5.png" src="../../_images/Forecast_Model_Vertical_Sounding_7_5.png" />
|
Soundings</a></p></li>
|
||||||
|
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/examples/generated/Model_Sounding_Data.html">Model Sounding
|
||||||
|
Data</a></p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="additional-documentation">
|
||||||
|
<h4>10.2 Additional Documentation<a class="headerlink" href="#additional-documentation" title="Permalink to this heading"></a></h4>
|
||||||
|
<p><strong>python-awips:</strong></p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html">awips.DataAccessLayer</a></p></li>
|
||||||
|
<li><p><a class="reference external" href="https://unidata.github.io/python-awips/api/ModelSounding.html">awips.ModelSounding</a></p></li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>matplotlib:</strong></p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.html">matplotlib.pyplot</a></p></li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>MetPy</strong></p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.wind_speed.html">metpy.wind_speed</a></p></li>
|
||||||
|
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.wind_direction.html">metpy.wind_direction</a></p></li>
|
||||||
|
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.vapor_pressure.html">metpy.vapor_pressure</a></p></li>
|
||||||
|
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.dewpoint.html">metpy.dewpoint</a></p></li>
|
||||||
|
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.SkewT.html">metpy.skewt</a></p></li>
|
||||||
|
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.Hodograph.html">metpy.hodograph</a></p></li>
|
||||||
|
</ul>
|
||||||
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
|
||||||
|
<hr class="docutils" />
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|