[ncl-talk] plotting model output where x/y are not lat/lon

Mary Haley haley at ucar.edu
Sun Sep 13 17:42:23 MDT 2015


I echo Dennis' recommendation about not using lat2d/lon2d for writing
NetCDF.  This should *never* be done for production files.

The lat2d/lon2d usage was adopted for plotting purposes, and, as Dave
pointed out, because it is more understandable than "sfXArray" and
"sfYArray".  Note that lat2d/lon2d also work for vector and streamline
plotting routines, where you would normally have to set "vfXArray" and
"vfYArray".

--Mary


On Sun, Sep 13, 2015 at 7:04 AM, Dennis Shea <shea at ucar.edu> wrote:

> A bit more ...
>
> Another issue is that if someone writes one or more variables (eg, x,
> y, z) containing lat2d/lon2d attributes to a netCDF (or HDF) file,
> *each* variable would have the same set of coordinates associated with
> it. This results in a bloated file size. The lat2d/lon2d attributes
> for each variable should be deleted prior to netCDF creation and
> separate variables created to contain the associated coordinate
> information.
>
>    delete( x at lat2d )
>    delete( x at lon2d )
>    delete(y at lat2d)
>    delete(y at lon2d)
>    delete(z at lat2d)
>    delete(z at lon2d)
>
> or,
>
>    delete( [/ x at lat2d, x at loned, y at lat2d, y at loned, z at lat2d, z at loned /] )
>
> and, not required, but recommended
>
>    x at coordinates = "LAT2D LON2D"       ; variable names are arbitrary
>    y at coordinates = "LAT2D LON2D"
>    z at coordinates = "LAT2D LON2D"
>
> ...
>
>    fcn = addfile9"...","c")
>    X = f->x
>    Y = f->y
>    Z = f->z
>
>    LAT2D =  lat2d
>    LON2D = lon2d
>
> On Fri, Sep 11, 2015 at 5:56 PM, Dave Allured - NOAA Affiliate
> <dave.allured at noaa.gov> wrote:
> > Mary and Dennis,
> >
> > Mary showed several advantages of the use of the lat2d/lon2d special
> > attributes for 2-D coordinates.  I would like to retract my suggestion
> for
> > changing existing examples.
> >
> > It seems to me that it is best to use sfXArray and sfYArray attributes
> only
> > in special cases when lat2d and lon2d are not sufficient.  Also, lat2d
> and
> > lon2d seem more understandable to me.  Perhaps the decision process for
> > which method could be enhanced on the "Overlaying data" documentation
> page:
> >
> > http://www.ncl.ucar.edu/Document/Graphics/overlays_on_map.shtml
> >
> > Dennis mentioned a performance problem:  "Each variable having an
> associated
> > @lat2d, @lon2d takes up memory."  Technically, I agree.  However, modern
> > workstations have many Gbytes of RAM, so carrying around a few extra
> medium
> > size 2-D arrays is not noticeable unless you are repeating full variable
> > assignments within major processing loops.  So I think this is not a
> > significant problem for retaining lat2d/lon2d.
> >
> > --Dave
> >
> >
> > On Fri, Sep 11, 2015 at 11:15 AM, Mary Haley <haley at ucar.edu> wrote:
> >>
> >> Hi Dave,
> >>
> >> I'm a bit torn about what to do with the examples, because ideally, we
> >> (NCL) would come up with a way to represent all types of "coordinate
> values"
> >> (true 1D coordinate arrays, 2D coordinate arrays, 1D arrays for "random"
> >> arrays, and something else for unstructured grids, like hexagonal or
> >> triangular meshes) through the NCL variable model.  We've always tried
> to
> >> model the NetCDF way of handling these variables, and it doesn't yet
> have a
> >> way to recognize all types of coordinates.
> >>
> >> We have kept the use of lat2d/lon2d attributes in the examples partly
> >> because we have advertised them for so long. Because of our strict
> backwards
> >> compatibility rule, we hope to always support this feature unless it
> becomes
> >> unreasonable to do so (which I don't foresee).
> >>
> >> We also use this method in our ESMF regridding, because it's the only
> way
> >> to "sneak" in these special coordinate arrays to the "ESMF_regrid"
> routine.
> >> ESMF_regrid will look for "lat2d/lon2d" attached to the variable, and it
> >> will also return lat2d/lon2d if regridding to a curvilinear grid. The
> same
> >> is true for "lon1d/lat1d", which is a quick-and-dirty way to pass in 1D
> >> arrays of lat/lon for a 1D variable that is potentially "random".
> >>
> >> There's one minor correction to what Dennis said about using one method
> >> over the other for plotting: if you have lat2d/lon2d attributes
> attached to
> >> your data when plotting, and you set res at gsnAddCyclic = True, then the
> >> gsn_csm_xxxx plotting routines will know how to properly add the cyclic
> >> point.  However, if you use sfXArray and sfYArray resources,
> gsnAddCyclic
> >> doesn't know anything about these.
> >>
> >> We have it on our list to modernize many of our aging NCL scripts, and
> we
> >> will add more examples that show the two ways of doing things.
> >>
> >> --Mary
> >>
> >>
> >> On Fri, Aug 28, 2015 at 4:15 PM, Dave Allured - NOAA Affiliate
> >> <dave.allured at noaa.gov> wrote:
> >>>
> >>> Dennis,
> >>>
> >>> Thank you for the information about preferred resources sfXArray and
> >>> sfYArray for 2-D coordinates, and the reason why this is optimal.  I
> learned
> >>> something new here.
> >>>
> >>> Several NCL examples and at least one documentation page are advocating
> >>> the less optimal method using lat2d and lon2d attributes.  Perhaps
> these
> >>> examples and pages could eventually be updated to use sfXArray and
> sfYArray
> >>> instead.
> >>>
> >>> --Dave
> >>>
> >>>
> >>> On Fri, Aug 28, 2015 at 3:54 PM, Dennis Shea <shea at ucar.edu> wrote:
> >>>>
> >>>> Will's suggestion is correct.
> >>>>
> >>>> -----
> >>>>
> >>>> FYI: The ***only*** time you should assign the reserved attributes:
> >>>> @lat2d,   @lon2d is for plotting.
> >>>>
> >>>> In fact, the NCL-team would prefer that people use the following
> >>>> rather than the reserved attributes.
> >>>>
> >>>>      res at sfXArraya   = lon2d
> >>>>      res at sfYArray     = lat2d
> >>>>      res at trGridType  = "TriangularMesh"
> >>>>
> >>>> ---
> >>>>
> >>>> Each variable having an associated  @lat2d, @lon2d takes up memory.
> >>>> If 5 variables  a, a at lat2d, a at lon2d, ...  b, c, d, e then each will
> >>>> require the necessary memory.
> >>>> Firther, if you write to netCDF via
> >>>>
> >>>>      fnc->A = a
> >>>>      fnc->B = b
> >>>>      fnc->C = c
> >>>>      fnc->D = d
> >>>>      fnc->E = e
> >>>>
> >>>> Then the lat2d/lon2d arrays will be written 5 times (one for each
> >>>> variable).
> >>>>
> >>>>     fnc->LAT2D = lat2d
> >>>>     fnc->LON2D = lon2d
> >>>>
> >>>> Will write each variable  only once!
> >>>>
> >>>> Cheers
> >>>>
> >>>>
> >>>> On Fri, Aug 28, 2015 at 3:38 PM, Will Hobbs <Will.Hobbs at utas.edu.au>
> >>>> wrote:
> >>>> > Mira
> >>>> >
> >>>> > To keep all the attributes from 'sf'....
> >>>> >
> >>>> >> sf_total = sf(0,:,:)     ;sf_total is now a 2-da array with all the
> >>>> >>attributes and rightmost dimensions of sf
> >>>> >> sf_total = dim_sum_n(sf,0)
> >>>> >
> >>>> > Will
> >>>> >
> >>>> >
> >>>> > On 29/08/15 5:26 AM, "mberdahl at envsci.rutgers.edu"
> >>>> > <mberdahl at envsci.rutgers.edu> wrote:
> >>>> >
> >>>> >>Excellent, this worked!  Thank you!
> >>>> >>I just have a quick follow-up question.  Once I assign the lat and
> lon
> >>>> >> to
> >>>> >>my variables (for example:  sf at lon2d = lon2d, sf at lat2d = lat2d),
> and
> >>>> >> then
> >>>> >>I would like to do a calculation with sf (eg. sf_total =
> >>>> >> dim_sum_n(sf,0)),
> >>>> >>it seems I have to assign the the new variable the lat and lon
> again.
> >>>> >> Is
> >>>> >>there a way to keep the lat and lon following through the
> calculations
> >>>> >>without always reassigning them?
> >>>> >>I hope that makes sense.
> >>>> >>Thanks,
> >>>> >>Mira
> >>>> >>
> >>>> >>
> >>>> >>> Here is more information about dat with 2-D coordinates.  I was
> >>>> >>> typing
> >>>> >>> this
> >>>> >>> up when I saw Will's reply.  Some of the other examples indicate
> >>>> >>> that trGridTrype may not be needed with some data sets.
> >>>> >>>
> >>>> >>> Please see section #2 on this documentation page, for a basic
> >>>> >>>description.
> >>>> >>> Notice the several different working examples:
> >>>> >>> https://www.ncl.ucar.edu/Document/Graphics/overlays_on_map.shtml
> >>>> >>>
> >>>> >>> (Please ignore the link "2D vertical coordinates", that is not
> about
> >>>> >>> geographic surface maps, and can be confusing.)
> >>>> >>>
> >>>> >>> The simplest example for making map plots with 2-D coordinates is
> >>>> >>>example
> >>>> >>> 3
> >>>> >>> on this page:
> >>>> >>> https://www.ncl.ucar.edu/Applications/ice.shtml
> >>>> >>>
> >>>> >>> I also like NARR example 4 because it shows how the 2-D coordinate
> >>>> >>>method
> >>>> >>> can be used with different map projections:
> >>>> >>> http://www.ncl.ucar.edu/Applications/narr.shtml
> >>>> >>>
> >>>> >>> --Dave
> >>>> >>>
> >>>> >>>
> >>>> >>> On Thu, Aug 27, 2015 at 9:35 PM, Will Hobbs <
> Will.Hobbs at utas.edu.au>
> >>>> >>> wrote:
> >>>> >>>
> >>>> >>>> Mira
> >>>> >>>>
> >>>> >>>> It looks like you have 2-d lat and lon arrays associated with
> your
> >>>> >>>>data,
> >>>> >>>> as is often the case with models (especially ocean models).
> >>>> >>>>
> >>>> >>>> This can be plotted by NCL without regridding, see the examples
> >>>> >>>> here:
> >>>> >>>> http://www.ncl.ucar.edu/Applications/ease.shtml
> >>>> >>>> Although you are not using the EASE grid, the principal is
> exactly
> >>>> >>>> the
> >>>> >>>> same:
> >>>> >>>>
> >>>> >>>> 1. Set your map plot grid type resource
> >>>> >>>> >res at trGridTrype = "TriangularMesh"
> >>>> >>>>
> >>>> >>>> 2. Set the lat and lon arrays as attributes of the array you are
> >>>> >>>> plotting,
> >>>> >>>> so if your array is 'x'
> >>>> >>>> > x at lat2d = LAT
> >>>> >>>> > x at lon2d = LON
> >>>> >>>>
> >>>> >>>> The just use one of the gsn_csm contour map plotting functions as
> >>>> >>>> normal.
> >>>> >>>>
> >>>> >>>> I hope that's clear.
> >>>> >>>>
> >>>> >>>> Will
> >>>> >>>>
> >>>> >>>>
> >>>> >>>> On 28/08/15 1:27 PM, "Yuqiang Zhang" <yuqiangzhang.thu at gmail.com
> >
> >>>> >>>>wrote:
> >>>> >>>>
> >>>> >>>> >Hi Mira,
> >>>> >>>> >
> >>>> >>>> >Check the link here
> >>>> >>>> >http://www.ncl.ucar.edu/FAQ/
> >>>> >>>> >For Q 27:
> >>>> >>>> >
> >>>> >>>> >When I call one of the gsn_csm_xxxx_map plotting scripts, I get
> an
> >>>> >>>> error
> >>>> >>>> >message about a units attribute not being correct.
> >>>> >>>> >If you are using one of the gsn_csm_xxx_map functions to overlay
> >>>> >>>> > data
> >>>> >>>> on a
> >>>> >>>> >map, and seeing one or both of the following error messages:
> >>>> >>>> >
> >>>> >>>> >    (0)   is_valid_lat_ycoord: Warning: The units attribute of
> >>>> >>>> >    the Y coordinate array is not set to one of the allowable
> >>>> >>>> >    units values (i.e. 'degrees_north'). Your latitude labels
> >>>> >>>> >    may not be correct.
> >>>> >>>> >
> >>>> >>>> >    (0)   is_valid_lat_xcoord: Warning: The units attribute of
> >>>> >>>> >    the X coordinate array is not set to one of the allowable
> >>>> >>>> >    units values (i.e. 'degrees_east'). Your longitude labels
> >>>> >>>> >    may not be correct.
> >>>> >>>> >then this means that your data contains coordinate arrays, but
> the
> >>>> >>>> >coordinate arrays either don't have the necessary "units"
> >>>> >>>> > attribute,
> >>>> >>>>or
> >>>> >>>> >it's
> >>>> >>>> >not set to one of the allowable values ("degrees_east" for
> >>>> >>>> > longitude
> >>>> >>>> >values
> >>>> >>>> >and "degrees_north" for latitude values).
> >>>> >>>> >If your coordinate arrays are indeed degrees east and degrees
> >>>> >>>> > north,
> >>>> >>>> then
> >>>> >>>> >you can set the units attribute as follows (this code snippet
> >>>> >>>> > assumes
> >>>> >>>> your
> >>>> >>>> >data array is called "data" and that the coordinate arrays are
> >>>> >>>> > called
> >>>> >>>> >"lat"
> >>>> >>>> >and "lon"):
> >>>> >>>> >
> >>>> >>>> >  data&lat at units = "degrees_north"
> >>>> >>>> >  data&lon at units = "degrees_east"
> >>>> >>>> >
> >>>> >>>> >Regards,
> >>>> >>>> >Yuqiang
> >>>> >>>> >
> >>>> >>>> >-----Original Message-----
> >>>> >>>> >From: ncl-talk-bounces at ucar.edu [mailto:
> ncl-talk-bounces at ucar.edu]
> >>>> >>>> > On
> >>>> >>>> >Behalf
> >>>> >>>> >Of mberdahl at envsci.rutgers.edu
> >>>> >>>> >Sent: Thursday, August 27, 2015 10:21 PM
> >>>> >>>> >To: ncl-talk at ucar.edu
> >>>> >>>> >Subject: [ncl-talk] plotting model output where x/y are not
> >>>> >>>> > lat/lon
> >>>> >>>> >
> >>>> >>>> >Hi all,
> >>>> >>>> >
> >>>> >>>> >I'm trying to make a simple plot of cumulative snowfall with
> data
> >>>> >>>> > from
> >>>> >>>> a
> >>>> >>>> >model I did not run.  When I try to make a simple plot, I
> receive
> >>>> >>>> > the
> >>>> >>>> >following error:
> >>>> >>>> >
> >>>> >>>> >(0)     check_for_y_lat_coord: Warning: Data either does not
> >>>> >>>> > contain a
> >>>> >>>> >valid latitude coordinate array or doesn't contain one at all.
> >>>> >>>> >(0)     A valid latitude coordinate array should have a 'units'
> >>>> >>>> attribute
> >>>> >>>> >equal to one of the following values:
> >>>> >>>> >(0)         'degrees_north' 'degrees-north' 'degree_north'
> >>>> >>>> > 'degrees
> >>>> >>>> north'
> >>>> >>>> >'degrees_N' 'Degrees_north' 'degree_N' 'degreeN' 'degreesN' 'deg
> >>>> >>>>north'
> >>>> >>>> >(0)     check_for_lon_coord: Warning: Data either does not
> contain
> >>>> >>>> > a
> >>>> >>>> valid
> >>>> >>>> >longitude coordinate array or doesn't contain one at all.
> >>>> >>>> >(0)     A valid longitude coordinate array should have a 'units'
> >>>> >>>> attribute
> >>>> >>>> >equal to one of the following values:
> >>>> >>>> >(0)         'degrees_east' 'degrees-east' 'degree_east' 'degrees
> >>>> >>>> > east'
> >>>> >>>> >'degrees_E' 'Degrees_east' 'degree_E' 'degreeE' 'degreesE' 'deg
> >>>> >>>> > east'
> >>>> >>>> >
> >>>> >>>> >
> >>>> >>>>
> >>>>
> >>>> >>>>>
> >>>>>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> >>>> >>>> >
> >>>> >>>> >When I dump the file it looks like this:
> >>>> >>>> >
> >>>> >>>> >netcdf ICE.1983.01-12.f77 {
> >>>> >>>> >dimensions:
> >>>> >>>> >        TIME = UNLIMITED ; // (365 currently)
> >>>> >>>> >        X10_69 = 60 ;
> >>>> >>>> >        Y18_127 = 110 ;
> >>>> >>>> >        SECTOR = 2 ;
> >>>> >>>> >        SECTOR1_1 = 1 ;
> >>>> >>>> >        ATMLAY14_23 = 10 ;
> >>>> >>>> >        bnds = 2 ;
> >>>> >>>> >        ATMLAY23_23 = 1 ;
> >>>> >>>> >        ATM6H3_3 = 1 ;
> >>>> >>>> >        OUTLAY = 20 ;
> >>>> >>>> >        OUTLAY1_1 = 1 ;
> >>>> >>>> >
> >>>> >>>> >variables:
> >>>> >>>> >        double TIME(TIME) ;
> >>>> >>>> >                TIME:units = "HOURS since 1901-01-15 00:00:00" ;
> >>>> >>>> >                TIME:long_name = "time" ;
> >>>> >>>> >                TIME:time_origin = "15-JAN-1901 00:00:00" ;
> >>>> >>>> >                TIME:axis = "T" ;
> >>>> >>>> >        float DATE(TIME) ;
> >>>> >>>> >                DATE:units = "YYYYMMDDHH" ;
> >>>> >>>> >                DATE:long_name = "Date(YYYY MM DD HH)" ;
> >>>> >>>> >                DATE:history = "From ICE.f77.1983.01.01-15" ;
> >>>> >>>> >        double X10_69(X10_69) ;
> >>>> >>>> >                X10_69:units = "km" ;
> >>>> >>>> >                X10_69:long_name = "x" ;
> >>>> >>>> >                X10_69:point_spacing = "even" ;
> >>>> >>>> >                X10_69:axis = "X" ;
> >>>> >>>> >
> >>>> >>>> > double Y18_127(Y18_127) ;
> >>>> >>>> >                Y18_127:units = "km" ;
> >>>> >>>> >                Y18_127:long_name = "y" ;
> >>>> >>>> >                Y18_127:point_spacing = "even" ;
> >>>> >>>> >                Y18_127:axis = "Y" ;
> >>>> >>>> >        float LON(Y18_127, X10_69) ;
> >>>> >>>> >                LON:units = "degrees" ;
> >>>> >>>> >                LON:long_name = "Longitude" ;
> >>>> >>>> >                LON:history = "From ICE.f77.1983.01.01-15" ;
> >>>> >>>> >        float LAT(Y18_127, X10_69) ;
> >>>> >>>> >                LAT:units = "degrees" ;
> >>>> >>>> >                LAT:long_name = "Latitude" ;
> >>>> >>>> >                LAT:history = "From ICE.f77.1983.01.01-15" ;
> >>>> >>>> >
> >>>> >>>> >Clearly there are lats and lons associated with the x and y
> >>>> >>>> > spacing,
> >>>> >>>> but
> >>>> >>>> >I'm
> >>>> >>>> >not sure how to tell NCL how to use those.  Does anyone have
> >>>> >>>> > advice on
> >>>> >>>> >this?
> >>>> >>>> >
> >>>> >>>> >Thanks in advance,
> >>>> >>>> >Mira
> >
> >
> > _______________________________________________
> > 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/20150913/0d1ebddd/attachment.html 


More information about the ncl-talk mailing list