[ncl-talk] change dimensions to lat/lon

Mary Haley haley at ucar.edu
Thu May 4 17:05:49 MDT 2017


Jian,

The first issue is that you cannot assign a missing value using a different
type. For example, the following will produce the same error, because "x"
is an integer array, and you are trying to assign a floating point
_FillValue:

  x = (/1,2,3,4,5,-999/)    ; x is an array of integers
  x at _FillValue = -999.      ; -999. is a float, which is a "higher"
type than an integer


The fix in your case would be to use "totype":

  x at _FillValue = totype(x at CodeMissingValue,typeof(x))

You have to be careful with this kind of assignment, however, because you
could lose precision when going from a higher type to a lower type.

As for the second question, I'm not sure what you mean by "Geo2D".

--Mary



On Tue, May 2, 2017 at 8:44 AM, Su, Jian (GSFC-610.2)[ADNET SYSTEMS INC] <
jian.su at nasa.gov> wrote:

> Thank you again Rick, and thank you Dennis.
>
>
>
> There are still two issues:
>
> 1.      x at _FillValue = x at CodeMissingValue
>
> fatal:Type Mismatch: The type of missing value could not be converted to
> type of variable (x)
>
>
>
> 2.      It’s 2D but not Geo2D if you open it with eg, panoply.
>
>
>
> *From: *Rick Brownrigg <brownrig at ucar.edu>
> *Date: *Tuesday, May 2, 2017 at 10:23 AM
>
> *To: *"Su, Jian (GSFC-610.2)[ADNET SYSTEMS INC]" <jian.su at nasa.gov>
> *Cc: *"ncl-talk at ucar.edu" <ncl-talk at ucar.edu>
> *Subject: *Re: [ncl-talk] change dimensions to lat/lon
>
>
>
> Hi Jian,
>
>
>
> This is from my colleague Dennis Shea;  it presumes you need to generate
> the actual lat/lon values:
>
>
>
> Re: the hdf5 question ... a (720,1440) is a 'classic' 0.25 degree grid.
> This is offset from the poles an dateline by 0.125. The grisd point is the
> cented of the local grid.
>
> nlat = 720
>
> lat  = *latGlobeFo*(nlat, "lat", "latitude", "degrees_north")
> lat  = lat(::-1)   ; lat: [89.875..-89.875]
>
> print(lat)
>
> mlon = 1440
> lon  = *lonGlobeFo*(mlon, "lon", "longitude", "degrees_east")
> lon  = (/ lon - 180. /)  ; subtract 180 from all values
>
> lon&lon = lon            ; update coordinate
>
> *print* <http://www.ncl.ucar.edu/Document/Functions/Built-in/print.shtml>(lon)               ; lon: [-179.875..179.875]
>
>
>
>    x    = f->pixTot
>
>    x!0 = "lat"
>
>    x!1 = "lon"
>
>    x at _FillValue = x at CodeMissingValue
>
>    fout->pixTot = x
>
>
>
>
>
>
>
> On Tue, May 2, 2017 at 7:59 AM, Su, Jian (GSFC-610.2)[ADNET SYSTEMS INC] <
> jian.su at nasa.gov> wrote:
>
> Thank you Rick,
>
>
>
> Filedimdef successfully added lat/lon, but how can we remove DIM_001/
> DIM_002 and assign lat/lon to the variable pixTot?
>
>
>
>
>
>    file global attributes:
>
>    dimensions:
>
>       DIM_001 = 1440
>
>       DIM_002 = 720
>
>       lat = 1440
>
>       lon = 720
>
>    variables:
>
>       integer pixTot ( DIM_001, DIM_002 )
>
>          CodeMissingValue :       -9999
>
>          DimensionNames :         nlon,nlat
>
>
>
>
>
>
>
> *From: *Rick Brownrigg <brownrig at ucar.edu>
> *Date: *Monday, May 1, 2017 at 4:15 PM
> *To: *"Su, Jian (GSFC-610.2)[ADNET SYSTEMS INC]" <jian.su at nasa.gov>
> *Cc: *"ncl-talk at ucar.edu" <ncl-talk at ucar.edu>
> *Subject: *Re: [ncl-talk] change dimensions to lat/lon
>
>
>
> Hi Jay,
>
> There are probably several ways to do this. One that occurs to me is to
> create the dimensions in the new file with the "filedimdef" procedure:
>
>     http://ncl.ucar.edu/Document/Functions/Built-in/filedimdef.shtml
>
> So in your case, that might look something like:
>
>     filedimdef(f,(/"lat","lon"/),(/1440, 720/), (/False,False/))
>
> You can add the other information directly as global attributes of the
> file:
>
>     f->LatitudeResolution=0.25
>
>     f->LongitudeResolution=0.25
>
>     ...etc...
>
> Hope that helps...
>
> Rick
>
>
>
> On Mon, May 1, 2017 at 12:28 PM, Su, Jian (GSFC-610.2)[ADNET SYSTEMS INC] <
> jian.su at nasa.gov> wrote:
>
> Hello,
>
>
>
> I am using ncl to convert HDF5 files to netCDF, and one of them looks like
> this:
>
>
>
> Variable: f
>
> Type: file
>
> filename:         out
>
> path:    out.nc4
>
>    file global attributes:
>
>    dimensions:
>
>       DIM_001 = 1440
>
>       DIM_002 = 720
>
>    variables:
>
>       integer pixTot ( DIM_001, DIM_002 )
>
>          CodeMissingValue :       -9999
>
>          DimensionNames :         nlon,nlat
>
>
>
>
>
> How can I change DIM_001 and DIM_002 to lat/lon, and add the grid
> information eg,
>
>
>
> LatitudeResolution=0.25;
>
> LongitudeResolution=0.25;
>
> NorthBoundingCoordinate=90;
>
> SouthBoundingCoordinate=-90;
>
> EastBoundingCoordinate=180;
>
> WestBoundingCoordinate=-180;
>
>
>
> Thanks,
>
> Jay
>
>
>
>
>
>
> _______________________________________________
> 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/20170504/6b9826c6/attachment.html 


More information about the ncl-talk mailing list