[ncl-talk] Dealing with 2D lat and lon outputs of WRF

Prashanth Bhalachandran prashanth.bhalachandran at gmail.com
Sat Oct 5 09:50:27 MDT 2019


Dear Dennis,
This was really helpful. However, the regridding is turning the whole map
and as a result, creating missing values at the boundaries (Please see the
image attached). Is this expected?

-P

On Fri, Oct 4, 2019 at 3:26 PM Dennis Shea <shea at ucar.edu> wrote:

> As noted by Rick, the *grad_latlon_cfd* <http://www.ncl.ucar.edu/Document/Functions/Contributed/grad_latlon_cfd.shtml>  requires a rectilinear grid.
> One-dimensional lat/lon arrays. This is clear in both the text and
> the function prototyping
>
> 	function *grad_latlon_cfd* <http://www.ncl.ucar.edu/Document/Functions/Contributed/grad_latlon_cfd.shtml> (
> 		z          : numeric,  ; float, double, integer only
> 		*lat    [*]* : numeric,
> 		*lon    [*]* : numeric,
> 		cyclic [1] : logical,
> 		opt    [1] : logical
> 	)
>
> ===============================================================
>    a      = *addfile* <http://www.ncl.ucar.edu/Document/Functions/Built-in/addfile.shtml> (""wrfout_d04_2005-07-29_12:06:00","r")
>    ctt    = *wrf_user_getvar* <http://www.ncl.ucar.edu/Document/Functions/WRF_arw/wrf_user_getvar.shtml>(a,"ctt",-1)
>
>    *printVarSummary* <http://www.ncl.ucar.edu/Document/Functions/Built-in/printVarSummary.shtml>(ctt)   ; Examine variable
>    opt_sd = True
>    opt_sd at PrintStat = True
>    stat_ctt = *stat_dispersion* <http://www.ncl.ucar.edu/Document/Functions/Contributed/stat_dispersion.shtml>(ctt, opt_sd )  ; look at distribution
>
>    lat2d  = *wrf_user_getvar*(a,"XLAT",0)
>    lon2d  = *wrf_user_getvar*(a,"XLONG",0)
>
>    dim2d  = *dimsizes*(lat2d)
>    nlat   = dim2d(0)     ; arbitrary; here (roughly same resolution as WRF)
>    mlon   = dim2d(1)
>                          ; generate rectilinear coordinate variables
>    lat    = *fspan*( *min*(lat2d), *max*(lat2d) ,nlat)
>    lon    = *fspan*( *min*(lon2d), *max*(lon2d) ,mlon)
>    lat!0 = "lat"
>    lon!0 = "lon"
>    lat at units = "degrees_north"
>    lon at units = "degrees_east"
>
> ; Bilinear interpolation to rectilinear ['regular'] grid
>
>    cttgrd = *rcm2rgrid_Wrap*(lat2d,lon2d,ctt,lat,lon,0)
>    *printVarSummary*(cttgrd)
>    print("-----")
>
> ; Zonal and Meridional gradients
>
>    cttLatLon    = *grad_latlon_cfd* <http://www.ncl.ucar.edu/Document/Functions/Contributed/grad_latlon_cfd.shtml> (cttgrd, lat, lon, False, False)
>
> ; Extract variables from the list variable
>    ctt_grad_lat = gradLatLon[0]    ; Gradients in latitudinal [meridional] direction
>    ctt_grad_lon = gradLatLon[1]    ; Gradients in longitudinal [zonal] direction
>
>    *printVarSummary* <http://www.ncl.ucar.edu/Document/Functions/Built-in/printVarSummary.shtml>(ctt_grad_lat)   ; Examine variable
>    stat_ctt_lat = *stat_dispersion* <http://www.ncl.ucar.edu/Document/Functions/Contributed/stat_dispersion.shtml>(ctt_grad_lat, opt_sd )  ; look at distribution
>    print("-----")
>
>    *printVarSummary* <http://www.ncl.ucar.edu/Document/Functions/Built-in/printVarSummary.shtml>(ctt_grad_lon)
>    stat_ctt_lon = *stat_dispersion* <http://www.ncl.ucar.edu/Document/Functions/Contributed/stat_dispersion.shtml>(ctt_grad_lon, opt_sd )  ; look at distribution
>    print("-----")
>
> ; Interpolate gradients back to WRF grid
>
>   ctt_grad_lat_wrf  = *rgrid2rcm_Wrap* <http://www.ncl.ucar.edu/Document/Functions/Contributed/rgrid2rcm_Wrap.shtml> (lat, lon, ctt_grad_lat, lat2d, lon2d, 0)
>   ctt_grad_lon_wrf  = *rgrid2rcm_Wrap* <http://www.ncl.ucar.edu/Document/Functions/Contributed/rgrid2rcm_Wrap.shtml> (lat, lon, ctt_grad_lon, lat2d, lon2d, 0)
>   *printVarSummary* <http://www.ncl.ucar.edu/Document/Functions/Built-in/printVarSummary.shtml>(ctt_grad_lat_wrf)
>   *printVarSummary* <http://www.ncl.ucar.edu/Document/Functions/Built-in/printVarSummary.shtml>(ctt_grad_lon_wrf)
>
> ===
>
> There are multiple example of this methodology using ESMF_regrid
> *http://www.ncl.ucar.edu/Applications/ESMF.shtml * <http://www.ncl.ucar.edu/Applications/ESMF.shtml>
>
> Examples: 29, 30, 37 [others there also]
>
> Please examine carefully.
>
>
> On Fri, Oct 4, 2019 at 9:59 PM Rick Brownrigg via ncl-talk <
> ncl-talk at ucar.edu> wrote:
>
>> Hi,
>>
>> I am not expert at this, but based upon the docs for the
>> function_latlon_cfd, it looks like it requires a rectilinear grid, which
>> would imply you'll need to regrid your curvilinear WRF grid. NCL has
>> numerous functions for doing this (I can't advise which one you should use):
>>
>>    http://ncl.ucar.edu/Applications/regrid.shtml
>>
>> I also note in the second warning you provided, its complaining about 3
>> dimensions in parameter 1 (i.e., the lat variable) -- Is there a time
>> dimension on that variable as well as X/Y?
>>
>> Hope that helps...
>> Rick
>>
>>
>> On Fri, Oct 4, 2019 at 1:25 PM Prashanth Bhalachandran via ncl-talk <
>> ncl-talk at ucar.edu> wrote:
>>
>>> Dear NCL'ers,
>>> I have a question on dealing with the 2D lat and long variables from WRF
>>> output. For example, in my code below, I am having trouble using the lat
>>> long information to either use them as coordinate variables or to be used
>>> as inputs to the horizontal gradient function. What is the best way to
>>> create or extract 1D lat and long information so that I can use them here?
>>>
>>> Thank you,
>>> Prashanth
>>>
>>> begin
>>>
>>>
>>> a = addfile("wrfout_d04_2005-07-29_12:06:00","r")
>>>
>>>
>>> ctt = wrf_user_getvar(a,"ctt",-1) ; Cloud top temperatures in degree
>>> Celsius
>>>
>>> lat = wrf_user_getvar(a,"XLAT",-1)
>>>
>>> lon = wrf_user_getvar(a,"XLONG",-1)
>>>
>>>
>>> ;Original Dimensions and sizes: [Time | 10] x [south_north | 480] x
>>> [west_east | 480]
>>>
>>>
>>> ; Take the horizontal gradient
>>>
>>>   cttLatLon  = grad_latlon_cfd (ctt, lat, lon, False, False)
>>>
>>>
>>>   ctt_grad_lat  = gradLatLon[0]    ; Extract Individual gradients in
>>> latitudinal direction
>>>
>>>   ctt_grad_lon  = gradLatLon[1]    ; Gradient in longitudinal
>>> directional
>>>
>>>
>>>   delete(cttLatLon)
>>>
>>>
>>>    if(all(ismissing(ctt_grad_lat))) then
>>>
>>>     print("ctt_grad_lat contains all missing values, cannot continue.")
>>>
>>>     return
>>>
>>>   end if
>>>
>>>
>>>     if(all(ismissing(ctt_grad_lon))) then
>>>
>>>     print("ctt_grad_lon contains all missing values, cannot continue.")
>>>
>>>     return
>>>
>>>   end if
>>> end
>>>
>>>
>>> Output:
>>>
>>> I can't prescribe lat and lon as coordinate variables since they are 2D.
>>>
>>> $ ncl -n -Q cloud_top.ncl
>>>
>>> fatal:Coordinate variables must have one dimension only
>>>
>>> fatal:No coordinate variable exists for dimension (lat) in variable (ctt)
>>>
>>> fatal:["Execute.c":8637]:Execute: Error occurred at or near line 12 in
>>> file cloud_top.ncl
>>>
>>>
>>> or use them as inputs to the gradient function:
>>>
>>> $ ncl -n -Q cloud_top.ncl
>>>
>>> fatal:Number of dimensions in parameter (1) of (grad_latlon_cfd) is (3),
>>> (1) dimensions were expected
>>>
>>> fatal:["Execute.c":8637]:Execute: Error occurred at or near line 12 in
>>> file cloud_top.ncl
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> ncl-talk mailing list
>>> ncl-talk at ucar.edu
>>> List instructions, subscriber options, unsubscribe:
>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>
>> _______________________________________________
>> ncl-talk mailing list
>> ncl-talk at ucar.edu
>> List instructions, subscriber options, unsubscribe:
>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20191005/1ce7bc14/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Screen Shot 2019-10-05 at 8.44.54 AM.png
Type: image/png
Size: 117003 bytes
Desc: not available
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20191005/1ce7bc14/attachment.png>


More information about the ncl-talk mailing list