In [1]:
from cached_property import cached_property
import cf_units
import datetime
import iris
from iris.analysis.calculus import differentiate
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import os
#
import umtools.irismode as umt
from umtools.utils import grdstep

In [2]:
import iris.quickplot as qplt

In [3]:
import pyveccalc
print(pyveccalc.__version__)
import pyveccalc.iris_api as pvci


0.2.5

In [4]:
%matplotlib inline

In [5]:
# plt.style.reload_library()
plt.style.use('awesome')

In [6]:
iris.FUTURE.netcdf_promote = True
um_res = grdstep('km2p2')

In [7]:
fcst_init = '25_1200'

In [8]:
test_levels = 'model' # 'pressure'

In [9]:
if test_levels == 'pressure':
    f = iris.load('~/UEA/ACCACIA/UM/exp_results/km2p2/25_1200/plevels/full_1H/umnsa_t1-48_full_1H_all_011')
    add_kw = dict(rm_sigma=False, rm_surf_alt=False)
    w_name = 'lagrangian_tendency_of_air_pressure'
else:
    f = iris.load('~/UEA/ACCACIA/UM/exp_results/km2p2/25_1200/model_levels_full/processed/umnsa_rlev_obs_11-14h_014-proc.nc')
    add_kw = dict(rm_sigma=True, rm_surf_alt=True)
    w_name = 'upward_air_velocity'

In [10]:
u_orig = f.extract_strict('x_wind')
v_orig = f.extract_strict('y_wind')
u_orig, v_orig = umt.unrotate_uv(u_orig, v_orig)
w_orig = f.extract_strict(w_name)

In [11]:
u = pvci.prepare_cube_on_model_levels(u_orig, lonlat2cart_kw=dict(dx=um_res.to_flt()), **add_kw)
v = pvci.prepare_cube_on_model_levels(v_orig, lonlat2cart_kw=dict(dx=um_res.to_flt()), **add_kw)
w = pvci.prepare_cube_on_model_levels(w_orig, lonlat2cart_kw=dict(dx=um_res.to_flt()), **add_kw)
w.rename('z_wind')

In [12]:
A = pvci.AtmosFlow(u,v,w)
wk = pvci.replace_dimcoord(A.kvn, u_orig)

In [13]:
c_red = mpl.colors.colorConverter.to_rgba('red')
c_blue= mpl.colors.colorConverter.to_rgba('blue')
c_white_trans = mpl.colors.colorConverter.to_rgba('white',alpha = 0.0)
cmap_rb = mpl.colors.LinearSegmentedColormap.from_list('cmap_BuRd',[c_blue,c_white_trans,c_red],64)
cmap_rb.set_over('magenta')
cmap_rb.set_under('navy')
bounds = [-10,-1,1,10]
norm = mpl.colors.BoundaryNorm(bounds, cmap_rb.N)
wk_kw = dict(norm=norm, levels=bounds, cmap=cmap_rb, extend='both')

In [14]:
plt.figure(figsize=(10,8))
p = plt.contourf(A.rel_vort.data[8,...]*1e4, levels=np.arange(-10,11,1), cmap='PuOr_r', extend='both')
plt.contourf(A.kvn.data[8,...], **wk_kw)
plt.colorbar(p)


Out[14]:
<matplotlib.colorbar.Colorbar at 0x7fa425285c88>

In [15]:
def _show_points(cube, i1=1, i2=4):
    print(cube.name())
    print(cube.coord(axis='x').name(), cube.coord(axis='x').points[i1:i2], len(cube.coord(axis='x').points))
    print(cube.data[0,0,i1:i2])
    print(cube.coord(axis='y').name(), cube.coord(axis='y').points[i1:i2], len(cube.coord(axis='y').points))
    print(cube.data[0,i1:i2,0])

In [16]:
_show_points(u)


transformed_x_wind
longitude [ 2200.  4400.  6600.] 599
[ 2.60661744  2.6738313   2.73421348]
latitude [ 2200.  4400.  6600.] 599
[ 2.57115471  2.61472129  2.67054189]

In [19]:
f = iris.load('/local/fwv14jru/UEA/ACCACIA/UM/exp_results/km2p2/25_1200/model_levels_full/umnsa_rlev_obs_11-14h_*')

In [20]:
f


Out[20]:
[<iris 'Cube' of geopotential_height / (m) (time: 37; model_level_number: 40; grid_latitude: 600; grid_longitude: 600)>,
<iris 'Cube' of surface_altitude / (m) (time: 37; grid_latitude: 600; grid_longitude: 600)>,
<iris 'Cube' of upward_air_velocity / (m s-1) (time: 37; model_level_number: 40; grid_latitude: 600; grid_longitude: 600)>,
<iris 'Cube' of x_wind / (m s-1) (time: 37; model_level_number: 40; grid_latitude: 600; grid_longitude: 600)>,
<iris 'Cube' of y_wind / (m s-1) (time: 37; model_level_number: 40; grid_latitude: 601; grid_longitude: 600)>]