def test_first_derivative_xarray_pint_conversion(test_da_lonlat): """Test first derivative with implicit xarray to pint quantity conversion.""" dx, _ = grid_deltas_from_dataarray(test_da_lonlat) deriv = first_derivative(test_da_lonlat, delta=dx, axis=-1) truth = np.array([[[-3.30782978e-06] * 4, [-3.42816074e-06] * 4, [-3.57012948e-06] * 4, [-3.73759364e-06] * 4]] * 3) * units('kelvin / meter') assert_array_almost_equal(deriv, truth, 12)
def test_grid_deltas_from_dataarray_xy(test_da_xy): """Test grid_deltas_from_dataarray with a xy grid.""" dx, dy = grid_deltas_from_dataarray(test_da_xy) true_dx = np.array([[[[500] * 3]]]) * units('km') true_dy = np.array([[[[500]] * 3]]) * units('km') assert_array_almost_equal(dx, true_dx, 5) assert_array_almost_equal(dy, true_dy, 5)
def test_grid_deltas_from_dataarray_lonlat(test_da_lonlat): """Test grid_deltas_from_dataarray with a lonlat grid.""" dx, dy = grid_deltas_from_dataarray(test_da_lonlat) true_dx = np.array([[[321609.59212064, 321609.59212065, 321609.59212064], [310320.85961483, 310320.85961483, 310320.85961483], [297980.72966733, 297980.72966733, 297980.72966733], [284629.6008561, 284629.6008561, 284629.6008561]]]) * units.m true_dy = np.array([[[369603.78775948, 369603.78775948, 369603.78775948, 369603.78775948], [369802.28173967, 369802.28173967, 369802.28173967, 369802.28173967], [370009.56291098, 370009.56291098, 370009.56291098, 370009.56291098]]]) * units.m assert_array_almost_equal(dx, true_dx, 5) assert_array_almost_equal(dy, true_dy, 5)
# - ``normal_component`` # - ``tangential_component`` # - ``absolute_momentum`` # # More details can be found by looking at the documentation for the specific function of # interest. ######################################################################### # There is also the special case of the helper function, ``grid_deltas_from_dataarray``, which # takes a ``DataArray`` input, but returns unit arrays for use in other calculations. We could # rewrite the above geostrophic wind example using this helper function as follows: heights = data['height'].loc[time[0]].loc[{vertical.name: 500.}] lat, lon = xr.broadcast(y, x) f = mpcalc.coriolis_parameter(lat) dx, dy = mpcalc.grid_deltas_from_dataarray(heights) u_geo, v_geo = mpcalc.geostrophic_wind(heights, f, dx, dy) print(u_geo) print(v_geo) ######################################################################### # Plotting # -------- # # Like most meteorological data, we want to be able to plot these data. DataArrays can be used # like normal numpy arrays in plotting code, which is the recommended process at the current # point in time, or we can use some of xarray's plotting functionality for quick inspection of # the data. # # (More detail beyond the following can be found at `xarray's plotting reference # <http://xarray.pydata.org/en/stable/plotting.html>`_.)
# - ``cross_section_components`` # - ``normal_component`` # - ``tangential_component`` # - ``absolute_momentum`` # # More details can be found by looking at the documentation for the specific function. ######################################################################### # There is also the special case of the helper function, ``grid_deltas_from_dataarray``, which # takes a DataArray input, but returns unit arrays for use in other calculations. We could # rewrite the above geostrophic wind example using this helper function as follows: heights = data['height'].loc[time[0]].loc[{vertical.name: 500.}] lat, lon = xr.broadcast(y, x) f = mpcalc.coriolis_parameter(lat) dx, dy = mpcalc.grid_deltas_from_dataarray(heights) u_geo, v_geo = mpcalc.geostrophic_wind(heights, f, dx, dy) print(u_geo) print(v_geo) ######################################################################### # Plotting # -------- # # Like most meteorological data, we want to be able to plot these data. DataArrays can be used # like normal numpy arrays in plotting code, or we can use some of xarray's plotting # functionality. # # (More detail beyond the following can be found at `xarray's plotting reference # <http://xarray.pydata.org/en/stable/plotting.html>`_.)