[ncl-talk] regrid variable writing netcdf file

Mary Haley haley at ucar.edu
Mon Mar 26 13:18:15 MDT 2018


Anil,

You can use the "where" statement:

http://www.ncl.ucar.edu/Document/Functions/Built-in/where.shtml

Look at the examples section.

--Mary




On Mon, Mar 26, 2018 at 1:06 PM, Anil Kumar - NOAA Affiliate <
anil.kumar at noaa.gov> wrote:

> 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
> <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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20180326/953de664/attachment.html>


More information about the ncl-talk mailing list