Optimizing your wind retrieval#

In the Retrieving your first wind field section, we showed how to perform an example wind retrieval with PyDDA. However, there were some issues to be resolved in the wind retrieval, including artificial updrafts at the boundaries of the Dual Doppler lobes caused by discontinuities in the horizontal winds from changing data sources from the radar network to the model constraint. In this section, we will show how to adjust the parameters of your wind retrieval in order to minimize such artifacts. First, we will show the wind retrieval that we did in Retrieving your first wind field.

grids_out, _ = pydda.retrieval.get_dd_wind_field([grid_kict, grid_ktlx],
                                            Cm=256.0, Co=1e-2, Cx=1, Cy=1,
                                            Cz=1, Cmod=1e-5, model_fields=["hrrr"],
                                            refl_field='DBZ', wind_tol=0.5,
                                            max_iterations=100, filter_window=15,
                                            filter_order=3, engine='scipy')

pydda.vis.plot_horiz_xsection_quiver(grids_out, level=15, cmap='ChaseSpectral', vmin=-10, vmax=80,
                                 quiverkey_len=20.0, background_field='DBZ', bg_grid_no=1,
                                 w_vel_contours=[1, 2, 5, 10], quiver_spacing_x_km=10.0,
                                 quiver_spacing_y_km=10.0, quiverkey_loc='bottom_right')

(Source code, png, hires.png, pdf)

../_images/optimizing_wind_retrieval-1.png

We can see several potential issues with the wind retrieval. First, there are artifacts at the Dual Doppler lobe edges where updrafts are being produced by the optimization code simply because of a discontinuity in the horizontal winds at the edges of the lobes. In addition, there are other discontinuities in the horizontal winds that should be addressed. One thing we can do to mitigate these discontunities is to increase the weight of the horizontal smoothnes constraints. Therefore, let’s prescribe Cx = 100. and Cy = 100 to the above retrieval.

grids_out, _ = pydda.retrieval.get_dd_wind_field([grid_kict, grid_ktlx],
                                            Cm=256.0, Co=1e-2, Cx=100, Cy=100,
                                            Cz=1, Cmod=1e-5, model_fields=["hrrr"],
                                            refl_field='DBZ', wind_tol=0.5,
                                            max_iterations=100, filter_window=15,
                                            filter_order=3, engine='scipy')

pydda.vis.plot_horiz_xsection_quiver(grids_out, level=15, cmap='ChaseSpectral', vmin=-10, vmax=80,
                                 quiverkey_len=20.0, background_field='DBZ', bg_grid_no=1,
                                 w_vel_contours=[1, 2, 5, 10], quiver_spacing_x_km=10.0,
                                 quiver_spacing_y_km=10.0, quiverkey_loc='bottom_right')

(Source code, png, hires.png, pdf)

../_images/optimizing_wind_retrieval-2.png

As we can see, the artifact at the edge of the Dual Doppler lobe has reduced in size. However, we also have lost some detail on the updraft structure at this level because the wind field has been smoothed out. This therefore coarsens the effective resolution of the retrieval. Let’s see what happens when we increase the level of smoothing.

grids_out, _ = pydda.retrieval.get_dd_wind_field([grid_kict, grid_ktlx],
                                            Cm=256.0, Co=1e-2, Cx=250., Cy=250.,
                                            Cz=250.0, Cmod=1e-5, model_fields=["hrrr"],
                                            refl_field='DBZ', wind_tol=0.5,
                                            max_iterations=100, filter_window=15,
                                            filter_order=3, engine='scipy')

pydda.vis.plot_horiz_xsection_quiver(grids_out, level=15, cmap='ChaseSpectral', vmin=-10, vmax=80,
                                 quiverkey_len=20.0, background_field='DBZ', bg_grid_no=1,
                                 w_vel_contours=[1, 2, 5, 10], quiver_spacing_x_km=10.0,
                                 quiver_spacing_y_km=10.0, quiverkey_loc='bottom_right')

(Source code, png, hires.png, pdf)

../_images/optimizing_wind_retrieval-3.png

In the above retrieval, the updrafts appear to be smoothed out. To help the optimization loop resolve the updrafts, we recommend, from here, decreasing the tolerance required for the optimization loop to converge. In addition, decreasing the smoothness will allow more details of the resolved wind field to appear. In the below example, we observe this, though part of the artifact near the edge of the Dual Doppler lobe re-appears.

grids_out, _ = pydda.retrieval.get_dd_wind_field([grid_kict, grid_ktlx],
                                            Cm=256.0, Co=1e-2, Cx=150., Cy=150.,
                                            Cz=150.0, Cmod=1e-5, model_fields=["hrrr"],
                                            refl_field='DBZ', wind_tol=0.1,
                                            max_iterations=400, filter_window=15,
                                            filter_order=3, engine='scipy')

pydda.vis.plot_horiz_xsection_quiver(grids_out, level=15, cmap='ChaseSpectral', vmin=-10, vmax=80,
                                 quiverkey_len=20.0, background_field='DBZ', bg_grid_no=1,
                                 w_vel_contours=[1, 2, 5, 10], quiver_spacing_x_km=10.0,
                                 quiver_spacing_y_km=10.0, quiverkey_loc='bottom_right')

(Source code, png, hires.png, pdf)

../_images/optimizing_wind_retrieval-4.png

Generally, these parameters need to be tuned for your particular radar configuration in order to obtain the most optimal wind retrieval for your situation. If you are placing more importance on horizontal winds compared to updraft velocities, then you may be willing to tolerate more errors in the vertical velocity field so that finer details of the horizontal wind field can be generated. The above parameters are examples that apply to a 1 km resolution grid from two NEXRADs and vary for given radar configurations and storm coverages.