[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