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

Dennis Shea shea at ucar.edu
Mon Oct 7 08:49:14 MDT 2019


There are two bilinear interpolations involved.
    [1] WRF->rectilinear
    [2] rectilinear->WRF

As implemented in* rcm2rgrid* and *rgrid2rcm*, each bilinear interpolation
require 4 surrounding points. Edge [boundary] effects are expected. No
extrapolations are performed.

----
The ESMF examples mentioned earlier perform the same two-step approach.
ESMF's bilinear interpolation is likely more sophisticated. Still, I think
there are some edge effects. See the bottom of:
    *http://www.ncl.ucar.edu/Applications/Images/ESMF_regrid_29_lg.png*
<http://www.ncl.ucar.edu/Applications/Images/ESMF_regrid_29_lg.png>

On Sun, Oct 6, 2019 at 12:20 PM Rick Brownrigg <brownrig at ucar.edu> wrote:

> Hi,
>
> I can't say for certain, but depending upon the map projection of the
> original WRF file, such a rotation might be expected. Does your data look
> plausible  otherwise?
>
> Rick
>
> On Sat, Oct 5, 2019 at 9:50 AM Prashanth Bhalachandran <
> prashanth.bhalachandran at gmail.com> wrote:
>
>> 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/20191007/92e7d0a8/attachment.html>


More information about the ncl-talk mailing list