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

Bill Ladwig ladwig at ucar.edu
Mon Nov 5 10:39:30 MST 2018

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 (
[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
> else:
>     _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> 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,
> Huseyin
> Bill Ladwig <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,
> Bill
> On Mon, Oct 29, 2018 at 7:17 AM Huseyin Ozdemir via pyngl-talk <
> 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,
>> Huseyin
>> _______________________________________________
>> pyngl-talk mailing list
>> List instructions, subscriber options, unsubscribe:
>> http://mailman.ucar.edu/mailman/listinfo/pyngl-talk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/pyngl-talk/attachments/20181105/611bd784/attachment-0001.html>

More information about the pyngl-talk mailing list