[ncl-talk] regrid variable writing netcdf file

Anil Kumar - NOAA Affiliate anil.kumar at noaa.gov
Mon Mar 26 13:06:29 MDT 2018


Hi Mary,

This looks great. Your code run successfully without any issues. Sorry for
not proper intended. I'll make it correctly.

Can you please give me some suggestion on next step which I am trying to
make.

Now we have remap zmax data on wrf grid, the zeta values ( > zero) are
water points and missing data is -99999 values.   I want to update
geo_em.d01.nc LU_INDEX variable, replace LU_INDEX = 17 wherever zmax values
are greater than zero (zmax>0)  (effects will be on coastal where water
inundation is impacted).

Please let me know, this is my next step in coding.

Thanks! much appreciated!

Anil





On Mon, Mar 26, 2018 at 2:26 PM, Mary Haley <haley at ucar.edu> wrote:

> Anil,
>
> Your WRF grid is represented by two-dimensional latitude / longitude
> arrays, so you cannot do this:
>
>   var_regrid&lat2d = dst_lat
>   var_regrid&lon2d = dst_lon
>
> ​The "&" syntax is a special syntax that is reserved for attaching
> *one-dimensional* coordinate arrays to a variable.
>
> When your data is represented by two-dimensional lat/lon arrays, then in
> order to associate the name of the 2D lat/lon arrays on the file with a
> particular variable, you can use the "coordinates" attribute.
>
> I know this is confusing, but this is how things are defined on NetCDF
> files. You can read more about this in the CF convention document, chapter
> 5.2, "Two-Dimensional Latitude, Longitude, Coordinate Variables":
>
> http://cfconventions.org/Data/cf-conventions/cf-conventions-
> 1.7/cf-conventions.pdf
>
> You want to do something like this:
>
>     var_regrid at coordinates = "XLONG_M XLAT_M" ; indicates name of lat/lon
> coord arrays on the file
>
> and then make sure you write the 2D latitude / longitude arrays to the
> file using these same names.  You've already read these as "dst_lat" and
> "dst_lon", so to write them, you would use:
>
>   fnew->XLAT_M   = dst_lat
>   fnew->XLONG_M  = dst_lon
>
> I've attached the modified script.
>
> By the way, I tried to modify your script as little as possible so you
> could easily see where I made changes.
>
> However, I highly recommend that you clean up the indentation, because
> it's very hard to read code when it is not consistently indented.
>
> For example, you have:
>
>  lat1D = sfile->y
>  lon1D = sfile->x
>  var = sfile->zeta_max
>
>
>  dst_file = "geo_em.d01.nc"
>  dfile    = addfile(dst_file,"r")
>
>
>
>     dst_lat              = dfile->XLAT_M(0,:,:)    ; Be sure to use
> appropriate names
>     dst_lon              = dfile->XLONG_M(0,:,:)   ; here.
>
>
> srcGridName = "source_grid_file.nc"
> dstGridName = "destination_grid_file.nc"
> wgtFileName = "unstruct_to_rect.nc"
>
> This is hard to read because lines are indented somewhat randomly, and
> there are extra line breaks and white space that you really don't need.
>
> It helps if you can decide on a consistent indentation, say two or four
> spaces for each line, and stick to it. It also helps if you line up the
> equal signs, but this is a personal preference that you need to decide if
> it works for you.
>
>  lat1D = sfile->y
>  lon1D = sfile->x
>  var   = sfile->zeta_max
>
>  dst_file = "geo_em.d01.nc"
>  dfile    = addfile(dst_file,"r")
>
>  dst_lat = dfile->XLAT_M(0,:,:)    ; Be sure to use appropriate names
>
>  dst_lon = dfile->XLONG_M(0,:,:)   ; here.
>
>
>  srcGridName = "source_grid_file.nc"
>  dstGridName = "destination_grid_file.nc"
>  wgtFileName = "unstruct_to_rect.nc"
>
>
> --Mary
>
>
>
>
> On Mon, Mar 26, 2018 at 11:39 AM, Anil Kumar - NOAA Affiliate <
> anil.kumar at noaa.gov> wrote:
>
>> Mary,
>>
>> Thanks for your email. After some proper plotting resources, I am able to
>> plot figure (attached).
>> My initial question is about writing regrid variable in lat x lon format
>> . (ncl script attached)
>>
>> I am trying to write var_regrid variable in lat x long format i.e
>> var_regrid(lat x lon). After esmf call var_regrid is in (x x y) point
>> dimensions.
>>
>> I am trying to looking samples and scripts but no success so far.
>>
>> Thanks,
>> Anil
>>
>>
>>
>>
>>
>> On Fri, Mar 23, 2018 at 6:09 PM, Mary Haley <haley at ucar.edu> wrote:
>>
>>> Hello,
>>>
>>> We have been looking into this offline.
>>>
>>> For starters, since both of your grids are regional, you want to set:
>>>
>>> Opt at DstRegional = True
>>> Opt at SrcRegional = True
>>>
>>> Secondly, you already have the triangular mesh defined on your file,
>>> which will help the regridding go much faster, because NCL doesn't have to
>>> generate it for you:
>>>
>>>>>> Opt at SrcTriangularMesh = sfile->element-1
>>> ​   ; the minus one is important so indexes go from 0 to n-1
>>>
>>> ​For plotting purposes​, I set these for both plots:
>>>
>>> res at cnLevelSelectionMode = "ManualLevels"
>>> res at cnMinLevelValF       = -6
>>> res at cnMaxLevelValF       = 6
>>> res at cnLevelSpacingF      = 0.25
>>>
>>> ​I removed the file writing part for now, because there's something
>>> weird about an attribute type, but I'll include the original script
>>> (test_regrid.ncl) and the modified one without the file writing
>>> (test_regrid_mod.ncl) and hopefully you can add back in the file writing
>>> part.  I was in a hurry so I just removed it, and now I have to run out the
>>> door.
>>>
>>> I'm not sure the regridding went well​, but this could simply be the
>>> nature of going from high-res to low-res, and also the fact that the two
>>> grids don't have values in the same places.  You will need to take a look
>>> at the PNG image and see what you think.
>>>
>>> --Mary
>>>
>>>
>>> On Thu, Mar 22, 2018 at 9:58 AM, Rick Brownrigg <brownrig at ucar.edu>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> Without the data, I can't run the script, but on visual inspection, it
>>>> *looks* like you have all the right elements in place to write the NetCDF
>>>> file. What's not happening for you -- any errors or odd results, or just
>>>> plain nothing?
>>>>
>>>> Rick
>>>>
>>>> On Thu, Mar 22, 2018 at 6:58 AM, Anil Kumar - NOAA Affiliate <
>>>> anil.kumar at noaa.gov> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I am trying to write regrid variable (unstructured data to WRF grid),
>>>>> code creates var_regrid  successfully at that point. I want to write
>>>>> var_regird variable in separate netcdf file with lat & lon dimension in it.
>>>>> Can anyone please help me on this. Thanks
>>>>>  The var_regrid print summmary
>>>>> ********
>>>>>
>>>>> Variable: var_regrid
>>>>>
>>>>> Type: double
>>>>>
>>>>> Total Size: 1301864 bytes
>>>>>
>>>>>             162733 values
>>>>>
>>>>> Number of Dimensions: 2
>>>>>
>>>>> Dimensions and sizes: [353] x [461]
>>>>>
>>>>> Coordinates:
>>>>>
>>>>> Number Of Attributes: 10
>>>>>
>>>>>   missing_value : -99999
>>>>>
>>>>>   remap : remapped via ESMF_regrid_with_weights: Bilinear
>>>>>
>>>>>   lon2d : <ARRAY of 162733 elements>
>>>>>
>>>>>   lat2d : <ARRAY of 162733 elements>
>>>>>
>>>>>   long_name : maximum water surface elevationabove geoid
>>>>>
>>>>>   standard_name : maximum_sea_surface_height_above_geoid
>>>>>
>>>>>   location : node
>>>>>
>>>>>   mesh : adcirc_mesh
>>>>>
>>>>>   units : m
>>>>>
>>>>>   _FillValue : -99999
>>>>>
>>>>> ********
>>>>> here is the code
>>>>>
>>>>> begin
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>  src_file = "maxele.63.nc"
>>>>>
>>>>>  sfile = addfile(src_file,"r")
>>>>>
>>>>>
>>>>> ;printVarSummary(sfile)
>>>>>
>>>>>  lat1D = sfile->y
>>>>>
>>>>>  lon1D = sfile->x
>>>>>
>>>>>  var = sfile->zeta_max
>>>>>
>>>>>
>>>>>  dst_file = "geo_em.d01.nc"
>>>>>
>>>>>  dfile    = addfile(dst_file,"r")
>>>>>
>>>>>
>>>>>
>>>>> ;---Set up regridding options
>>>>>
>>>>>
>>>>>     Opt                = True
>>>>>
>>>>>
>>>>> ;---"bilinear" is the default. "patch" and "conserve" are other
>>>>> options.
>>>>>
>>>>>     Opt at InterpMethod     = "bilinear"        ;;---Change (maybe)
>>>>>
>>>>>     Opt at WgtFileName      = "unstruct_to_rect.nc"
>>>>>
>>>>>
>>>>>     Opt at SrcGridLat       = lat1D
>>>>>
>>>>>     Opt at SrcGridLon       = lon1D
>>>>>
>>>>>     Opt at SrcRegional      = False            ;;--Change (maybe)
>>>>>
>>>>>     Opt at SrcInputFileName = src_file          ; optional, but good idea
>>>>>
>>>>>
>>>>>     Opt at SrcMask2D        = where(.not.ismissing(var),1,0) ; Necessary
>>>>> if has
>>>>>
>>>>>                                                           ; missing
>>>>> values.
>>>>>
>>>>>
>>>>>     dst_lat              = dfile->XLAT_M(0,:,:)    ; Be sure to use
>>>>> appropriate names
>>>>>
>>>>>     dst_lon              = dfile->XLONG_M(0,:,:)   ; here.
>>>>>
>>>>>     Opt at DstGridLon       = dst_lon
>>>>>
>>>>>     Opt at DstGridLat       = dst_lat
>>>>>
>>>>>     Opt at DstRegional      = True            ;;--Change (maybe)
>>>>>
>>>>> ;    Opt at DstMask2D = where(.not.ismissing(dst_lat).and.\
>>>>>
>>>>> ;                          .not.ismissing(dst_lon),1,0) ; Necessary
>>>>> if lat/lon
>>>>>
>>>>>                                                       ; has missing
>>>>> values.
>>>>>
>>>>>                                                       ; has missing
>>>>> values.
>>>>>
>>>>>     Opt at ForceOverwrite   = True
>>>>>
>>>>>     Opt at Debug            = True
>>>>>
>>>>>     Opt at PrintTimings     = True
>>>>>
>>>>>
>>>>>     var_regrid = ESMF_regrid(var,Opt)     ; Do the regridding
>>>>>
>>>>>
>>>>>     printVarSummary(var_regrid)
>>>>>
>>>>>
>>>>>
>>>>> ; Code for writing netcdf format file with lat and long cordinate
>>>>>
>>>>>  setfileoption("nc", "Format",  "NetCDF4")
>>>>>
>>>>>   fon = "ZETA_MAX_D01.nc"
>>>>>
>>>>>   system("/bin/rm -f " + fon) ; remove if exists
>>>>>
>>>>>   fnew = addfile(fon, "c")
>>>>>
>>>>>
>>>>>
>>>>> ;===================================================================
>>>>>
>>>>> ; create global attributes of the file (optional)
>>>>>
>>>>> ;===================================================================
>>>>>
>>>>>   fAtt               = True            ; assign file attributes
>>>>>
>>>>>   fAtt at title         = "NCL Simple Approach to netCDF Creation"
>>>>>
>>>>>   fAtt at source_file   =  "original-file.nc"
>>>>>
>>>>>   fAtt at Conventions   = "None"
>>>>>
>>>>>   fAtt at creation_date = systemfunc ("date")
>>>>>
>>>>>   fileattdef( fnew, fAtt )            ; copy file attributes
>>>>>
>>>>>
>>>>>   filedimdef(fnew,(/"lat","lon"/),(/353,461/),(/False,False/))
>>>>>
>>>>>   var_names2D = (/ "var_regrid" /)
>>>>>
>>>>>   varvar_types2D = (/ "float" /)
>>>>>
>>>>>
>>>>>   filevardef( fnew, var_names2D, varvar_types2D, (/  "lat", "lon" /) )
>>>>>
>>>>>
>>>>>
>>>>>   var_regrid!0  =  "lat"
>>>>>
>>>>>   var_regrid!1  =  "lon"
>>>>>
>>>>>
>>>>>   var_regrid&lat = dst_lat
>>>>>
>>>>>   var_regrid&lon = dst_lon
>>>>>
>>>>>
>>>>>   var_regrid at long_name = "maximum water surface elevationabove geoid"
>>>>>         ; assign attributes
>>>>>
>>>>>   var_regrid at units     = "m"
>>>>>
>>>>>
>>>>>   fnew->ZETA_MAX = var_regrid                ; name on file different
>>>>> from name in code
>>>>>
>>>>>
>>>>>
>>>>> end
>>>>>
>>>>>
>>>>> --
>>>>> Dr. Anil Kumar
>>>>> NWS/NCEP/EMC, Office# 2875
>>>>> NOAA Center for Weather and Climate Prediction (NCWCP)
>>>>> 5830 UNIVERSITY RESEARCH CT
>>>>> <https://maps.google.com/?q=5830+UNIVERSITY+RESEARCH+CT+College+Park,+MD+20740&entry=gmail&source=g>
>>>>> College Park, MD 20740
>>>>> <https://maps.google.com/?q=5830+UNIVERSITY+RESEARCH+CT+College+Park,+MD+20740&entry=gmail&source=g>
>>>>> -3818
>>>>> 301-683-0494 <(301)%20683-0494>
>>>>> anil.kumar at noaa.gov
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> 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
>>>>
>>>>
>>>
>>
>>
>> --
>> Dr. Anil Kumar
>> NWS/NCEP/EMC, Office# 2875
>> NOAA Center for Weather and Climate Prediction (NCWCP)
>> 5830 UNIVERSITY RESEARCH CT
>> <https://maps.google.com/?q=5830+UNIVERSITY+RESEARCH+CT+College+Park,+MD+20740&entry=gmail&source=g>
>> College Park, MD 20740
>> <https://maps.google.com/?q=5830+UNIVERSITY+RESEARCH+CT+College+Park,+MD+20740&entry=gmail&source=g>
>> -3818
>> 301-683-0494 <(301)%20683-0494>
>> anil.kumar at noaa.gov
>>
>>
>


-- 
Dr. Anil Kumar
NWS/NCEP/EMC, Office# 2875
NOAA Center for Weather and Climate Prediction (NCWCP)
5830 UNIVERSITY RESEARCH CT
College Park, MD 20740-3818
301-683-0494
anil.kumar at noaa.gov
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20180326/27707712/attachment.html>


More information about the ncl-talk mailing list