Ploting VAD and VVP using Wradlib

Hello,
I am trying to plot VAD and VVP for the radar data. I couldn’t find the VVP and VAD retrieval Techniques using wradlib. Any help ?

A notebook will be really helpful

@adithiyrnair Velocity Azimuth Display (VAD) and volume velocity processing (VVP) is currently not implemented in wradlib. VAD algorithm(s) are implemented in Py-ART, not sure if there is a full featured VVP, too. Maybe @mgrover1 or @rcjackson can give more guidance here.

1 Like

Thanks for the information
Kai

1 Like

We do have VADs in PyART, but not VVP. I don’t think I know of a package that uses VVP to get 2D winds that’s written in Python.

PyDDA doesn’t have VVD, but it can generate winds from a single doppler radar using the weak variational technique. I would just use u and v from the results you get from PyDDA.

1 Like

I believe you’re referring to something like the below attached VVP. Also, IMD uses one hour radar data for plotting vertical wind profile .

I think it should be something like this, but I am doubtful about the barbs direction :smiley:.

import matplotlib.pyplot as plt
import numpy as np
import pyart

radar = pyart.io.read_cfradial("goa_data/cfradial/polar_GOA210516024101-IMD-B.nc")

# Loop on all sweeps and compute VAD
zlevels = np.arange(100, 5000, 100)  # height above radar
u_allsweeps = []
v_allsweeps = []

for idx in range(radar.nsweeps):
    radar_1sweep = radar.extract_sweeps([idx])
    vad = pyart.retrieve.vad_browning(
        radar_1sweep, "VELH", z_want=zlevels
    )
    u_allsweeps.append(vad.u_wind)
    v_allsweeps.append(vad.v_wind)

# Average U and V over all sweeps and compute magnitude and angle
u_avg = np.nanmean(np.array(u_allsweeps), axis=0)
v_avg = np.nanmean(np.array(v_allsweeps), axis=0)
orientation = np.rad2deg(np.arctan2(-u_avg, -v_avg)) % 360
speed = np.sqrt(u_avg**2 + v_avg**2)

# Display vertical profile of wind
fig, ax = plt.subplots(1, 3, sharey=True)
ax[0].plot(speed * 2, zlevels + radar.altitude["data"])
ax[1].plot(orientation, zlevels + radar.altitude["data"])
ax[0].set_xlabel("Wind speed [m/s]")
ax[1].set_xlabel("Wind direction [deg]")
ax[0].set_ylabel("Altitude [m]")
fig.suptitle("Wind profile obtained from VAD")
u = np.ma.masked_array(u_avg, mask=False)
v = np.ma.masked_array(v_avg, mask=False)
# this line should no longer cause an exception
nbarbs = (~u.mask).sum()
skip = max(1, int(nbarbs//5))
bloc = 0.5
ax[2].barbs((np.zeros(zlevels.shape)+bloc)[::skip]-0.5, zlevels[::skip]+radar.altitude['data'],
            -u[::skip], -v[::skip],)
ax[2].axis("off")

image

2 Likes

Yes @syedhamidali
This is it thank you :innocent: :innocent:

Sorry, I forgot that you have to convert the winds (m/s) to knots before plotting barbs.

convert to knots

u = u * 1.94384
v = v * 1.94384

2 Likes