[ncl-talk] Dealing with 2D lat and lon outputs of WRF
Rick Brownrigg
brownrig at ucar.edu
Sun Oct 6 12:14:07 MDT 2019
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/20191006/f8306a59/attachment.html>
More information about the ncl-talk
mailing list