[pyngl-talk] reading wrf output without lat lon variables

Huseyin Ozdemir huseyin at envs.au.dk
Tue Nov 20 03:22:14 MST 2018

Thank you very much Bill. Unfortunately it is used to run wrf simulations like that in my section, so it looks like i should try to use below code + PyNGL for the plots.

All the best,


Bill Ladwig <ladwig at ucar.edu<mailto:ladwig at ucar.edu>> şunları yazdı (5 Kas 2018 18:39):

Hi Huseyin,

You should be able to use the 'getvar' routine in WRF-Python if you supply the 'meta=False' keyword argument in your getvar call. This will turn off the metadata and give you back a numpy array, so it should bypass all the coordinate stuff if I've coded it correctly. WRF-Python itself doesn't do any plotting. It just has some helper routines to set up the mapping object for cartopy, basemap, or pyngl. These helper routines will fail because it can't get the geographic boundaries, so you'll have to set the mapping objects up yourself. For cartopy and basemap, you're going to have a problem, because both of those packages need the lat/lon location at each grid point so it can convert to meters when it plots.

Your best bet is to use PyNGL. In PyNGL, if you set the resource tfDoNDCOverlay to True, then you don't need the lat/lon location at each grid point. However, you WILL need to compute the lat/lon information for the corner points and you must make sure that the map projection is set up correctly.  Use the xy_to_ll_proj routine to get the corner points (https://wrf-python.readthedocs.io/en/latest/user_api/generated/wrf.xy_to_ll_proj.html#wrf.xy_to_ll_proj) [sorry, I sent the wrong link in previous email].

Below is a snippet of code for how WRF-Python handles the polar stereographic projection (note: this is just for demonstration, you will have to modify/write it for your particular case)

t2 = getvar(f, "T2", meta=False)

last_x = t2.shape[-1] - 1
last_y = t2.shape[-2] - 1

# First, compute the corner points.
# You will have to fill in the '...' stuff with your projection information
ll = xy_to_ll_proj([0,last_x], [0, last_y], ..., meta=False)

# Get this from your file global attributes
stand_lon = ...
_hemi = 1 # 1 for northern hemisphere,  0 for southern

_pyngl = pyngl.Resources()
_pyngl.mpProjection = "Stereographic"
_pyngl.mpDataBaseVersion = "MediumRes"

_pyngl.mpCenterLonF = stand_lon
if _hemi > 0:
    _pyngl.mpCenterLatF = 90.0
    _pyngl.mpCenterLatF = -90.0

_pyngl.mpLimitMode = "Corners"
_pyngl.mpLeftCornerLonF = ll[0,0]
_pyngl.mpLeftCornerLatF = ll[1,0]
_pyngl.mpRightCornerLonF = ll[0,1]
_pyngl.mpRightCornerLatF = ll[1,1]

_pyngl.tfDoNDCOverlay = True

Once you have your PyNGL resources, then you should be able to make contour plots, etc of your data. You can see more examples here in the WRF section (http://www.pyngl.ucar.edu/Examples/gallery.shtml), but these make use of get_pyngl for WRF-Python, which you can't use, so you'll have to set up the resources similar to above.

To be honest, how hard is it to redo your data to keep the coordinate information? Not having the lat/lon points for curvilinear data is going to make things difficult. If you can rerun the data, it might be worth it to avoid all of these hacks.

Hope this helps,


On Sun, Nov 4, 2018 at 5:07 PM Huseyin Ozdemir <huseyin at envs.au.dk<mailto:huseyin at envs.au.dk>> wrote:
Hi Bill,

Thanks a lot for your answer. I tried the first one and it gave an error because of the lack of xlat variable, then tried the second routine with giving the parameters, and it is working now.

I am now wondering if i will be able to plot my wrf outputs with wrf-python, because I noticed that getvar routine doesn’t work due to missing lat-lon variables, do you have any advice for this?

All the best,


Bill Ladwig <ladwig at ucar.edu<mailto:ladwig at ucar.edu>> şunları yazdı (29 Eki 2018 17:40):

Hi Huseyin,

Without that information in the files, you're going to have to calculate the latitude and longitude values. Since you're using Python, you can use wrf-python which contains a xy_to_ll routine that converts grid points to latitude and longitude points, as long as you're using one of the standard WRF projections, which it looks like you are (https://wrf-python.readthedocs.io/en/latest/user_api/generated/wrf.xy_to_ll.html#wrf.xy_to_ll)

Note that this will only work if you have the map projection global parameters still in your file. If not, there is an xy_to_ll_proj version where you can specify the parameters yourself. (https://wrf-python.readthedocs.io/en/latest/user_api/generated/wrf.ll_to_xy_proj.html#wrf.ll_to_xy_proj).

Hope this helps,


On Mon, Oct 29, 2018 at 7:17 AM Huseyin Ozdemir via pyngl-talk <pyngl-talk at ucar.edu<mailto:pyngl-talk at ucar.edu>> wrote:
Hi everyone,

I have a problem with reading wrf output file (Projection is Polar Stereographic); i want to compare wrf model output with observations at specific latitude-longitude coordinates, but output netcdf file has no latitude and longitude variables.

I am using my python environment for reading this netcdf file, where PyNGL and PyNIO are already installed. As an example, temp variable in this output has attributes below:

short T2 [ Time|1, south_north|150, west_east|150 ]
      FieldType : 104
      MemoryOrder : XY
      description : TEMP at 2 M
      units : K
      stagger :
      coordinates : XLONG XLAT XTIME
      add_offset : 273.8086
      scale_factor : -0.0005068767

Here, T2 variable has “Time", “south_north" and “west_east” dimensions and “south_north" and "west _east" dimensions have both 150 grids.  There is no XLAT and XLONG variables in the netcdf output, so how can i get the temperatures at any lat-lon points with just grid numbers?

Thanks in advance,


pyngl-talk mailing list
List instructions, subscriber options, unsubscribe:

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/pyngl-talk/attachments/20181120/d793028e/attachment-0001.html>

More information about the pyngl-talk mailing list