[ncl-talk] lonFlip function
Alan Brammer
abrammer at albany.edu
Fri Feb 20 13:04:10 MST 2015
This is how I would edit your script. I would remove all trace of LON
and LAT they serve no purpose but to confuse things. Paste your whole
script here, so people can actually check what you're doing. And probably
past the output of the below as well.
Adam had a typo in his code so if you just copy pasted that without
checking it there will have been an error.
~Alan.
diri = "/Users/spark/vertical/00_DATA/"
fili = "precipmonmean.nc"
f = addfile (diri+fili+".nc", "r")
varname = "precip"
data = f->$varname$
;;;; There is no need for these lines, it just complicates the script.
;;; Keep metadata attached to the variables to keep things simple.
;; LON = data&lon
;; LAT = data&lat ;({-90:90}) ;
;; LON = lonFlip(LON1)
printVarSummary(data)
data1 = lonFlip(data) ; data1&lon is now flipped but LON or data&lon
are not, those variables are no longer associated to data1.
printVarSummary(data1) ;
print(data1&lon(::10)) ;; print every 10th lon to see how it's doing.
print(data1&lat(::10)) ;; print every 10th lat to see how it's doing.
lat = fspan(-85,85,85) ;; do you want this to be 86, every
2 degree? At the moment it's every 2.13... degree.
lon = fspan(-180,180,72)
lat at units = "degrees_east"
lon at units = "degrees_north"
precipreg = linint2_Wrap(data1&lon,data1&lat,data1,True,lon,lat,0)
printVarSummary(precipreg)
On Fri, Feb 20, 2015 at 2:30 PM, Sunmin Park <mireiyue at gmail.com> wrote:
> Thank you Adam and Kevin
>
> I tired what Adam suggested and it still shows the warning. I am trying to
> use the scripts that Kevin sent me. But I am confused with the line says "*if
> the rightmost dimension is longitude then flip the data*”. The rightmost
> is longitude then should I do array reverse like precip_in((:,:,::-1)?
>
> Sun
>
>
>
>
> On Feb 20, 2015, at 7:55 AM, HAVENER, KEVIN F GS-12 USAF AFWA 14 WS/WXED <
> kevin.havener at us.af.mil> wrote:
>
> Incomplete copy paste from my last email. Here it is with the last few
> lines intact. Sorry for the misdirection.
>
> begin
> ;***********************************************
> ; get variable names from grib file
> ;***********************************************
> grib_in = addfile("./U78559.grb","r")
> names = getfilevarnames(grib_in); extract all variable names
> ;
> ; get the longitudinal dimension name(s)
> ;
> dimnames = getvardims(grib_in)
> print(dimnames)
> londims = str_match_ic(dimnames,"lon")
> ;***********************************************
> ; create output netcdf file
> ;***********************************************
> system("rm out.nc") ; remove any pre-existing file
> ncdf_out = addfile("out.nc" ,"c") ; create output netCDF file
> ;***********************************************
> ; loop through variables and output each to netcdf
> ;***********************************************
> do i = 0, dimsizes(names)-1
> print (names(i))
> ;
> ; strings need to be converted to character if you want them in the
> output file
> ;
> if (typeof(grib_in->$names(i)$) .eq. "string") then
> continue
> end if
> ;
> ; if the rightmost dimension is longitude then flip the data
> ; otherwise just copy the variable unaltered
> ;
> dims := getfilevardims(grib_in,names(i))
> rdim = dims(dimsizes(dims)-1)
> if (any(londims .eq. rdim)) then
> ncdf_out->$names(i)$ = lonFlip(grib_in->$names(i)$)
> else
> ncdf_out->$names(i)$ = grib_in->$names(i)$
> end if
> end do
> end
>
> Kevin Havener, DAFC, 14WS/WXED
> Comm 828-271-4323; DSN 673-9044
> NIPRNet kevin.havener at us.af.mil
> SIPRNet kevin.f.havener.civ at mail.smil.mil
>
>
> -----Original Message-----
> From: ncl-talk-bounces at ucar.edu [mailto:ncl-talk-bounces at ucar.edu
> <ncl-talk-bounces at ucar.edu>] On Behalf Of HAVENER, KEVIN F GS-12 USAF
> AFWA 14 WS/WXED
> Sent: Friday, February 20, 2015 10:51 AM
> To: Sunmin Park
> Cc: ncl-talk at ucar.edu
> Subject: Re: [ncl-talk] lonFlip function
>
> Here is a script that I got from the ncl website somewhere, or maybe from
> the mailing list, because re-ordering 0-360 arrays is something I have to
> do frequently. It re-orders the array and re-calculates the longitudes. I
> deal with grib1/2 files, so it reads a grib and writes out a netcdf, but it
> doesn't really matter what the input file type is as long as ncl likes it.
>
> begin
> ;***********************************************
> ; get variable names from grib file
> ;***********************************************
> grib_in = addfile("./U78559.grb","r")
> names = getfilevarnames(grib_in); extract all variable names
> ;
> ; get the longitudinal dimension name(s) ;
> dimnames = getvardims(grib_in)
> print(dimnames)
> londims = str_match_ic(dimnames,"lon")
> ;***********************************************
> ; create output netcdf file
> ;***********************************************
> system("rm out.nc") ; remove any pre-existing file
> ncdf_out = addfile("out.nc" ,"c") ; create output netCDF file
> ;***********************************************
> ; loop through variables and output each to netcdf
> ;***********************************************
> do i = 0, dimsizes(names)-1
> print (names(i))
> ;
> ; strings need to be converted to character if you want them in the
> output file
> ;
> if (typeof(grib_in->$names(i)$) .eq. "string") then
> continue
> end if
> ;
> ; if the rightmost dimension is longitude then flip the data
> ; otherwise just copy the variable unaltered
> ;
> dims := getfilevardims(grib_in,names(i))
> rdim = dims(dimsizes(dims)-1)
> if (any(londims .eq. rdim)) then
> ncdf_out->$names(i)$ = lonFlip(grib_in->$names(i)$)
> else
> ncdf_out->$names(i)$ = grib_in->$names(i)$
>
> Kevin Havener
>
> -----Original Message-----
> From: ncl-talk-bounces at ucar.edu [mailto:ncl-talk-bounces at ucar.edu
> <ncl-talk-bounces at ucar.edu>] On Behalf Of Sunmin Park
> Sent: Friday, February 20, 2015 10:32 AM
> To: Adam Phillips
> Cc: ncl-talk at ucar.edu
> Subject: Re: [ncl-talk] lonFlip function
>
> Thank you Adam
>
> I am trying to do regredding the data using the function linint2_Wrap.
> I got warning
> "warning:linint2: xi, yi, xo, and yo must be monotonically increasing"
> therefore I think it is due to LON values.
> How I can remove the warning?
>
>
> diri = "/Users/spark/vertical/00_DATA/"
> fili = "precipmonmean.nc"
> f = addfile (diri+fili+".nc", "r")
> varname = "precip"
> data = f->$varname$
>
> LON = f->lon ({0:360}) ;
> LAT = f->lat ;({-90:90}) ;
> ; LON = lonFlip(LON1)
>
> printVarSummary(data)
> data1 = lonFlip(data)
> printVarSummary(data1)
>
> lat = fspan(-85,85,85)
> lon = fspan(-180,180,72)
> lat at units = "degrees_east"
> lon at units = "degrees_north"
> precipreg = linint2_Wrap(LON,LAT,data1,True,lon,lat,0)
> printVarSummary(precipreg)
>
> On Feb 20, 2015, at 7:17 AM, Adam Phillips <asphilli at ucar.edu> wrote:
>
>
> Hi Sunmin,
> lonFlip flips the attached longitude coordinate variable, and not the
> array itself. Try:
> printVarSummary(data)
> data = lonFlip(data)
> printVarSummary(data)
> If you have any further questions please respond to ncl-talk.
> Adam
>
> On Fri, Feb 20, 2015 at 8:04 AM, Sunmin Park <mireiyue at gmail.com> wrote:
>
>
> Dear NCL users
>
> I am trying to change longitude 0,360 to -180,180. I used the function
> lonFlip to change longitude but it has wrong values. When I use
> printVarSummary the coordinate looks fine but when I print it out (print)
> it doesn't change LON (the file that I am using is GPCP monthly mean
> precipitation from NCAR) How can I get correct LON (-180,180)?
>
> Thank you in advance,
> Sun-
>
> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
>
> begin
>
> ;==============================================================
> ; Open the file:
> ;================================================================
>
> diri = "/Users/spark/vertical/00_DATA/"
> fili = "precipmonmean.nc <http://precipmonmean.nc/> "
> f = addfile (diri+fili+".nc", "r")
> varname = "precip"
> data = f->$varname$
>
> LON1 = f->lon ;({-180:180}) ;
> LAT = f->lat ;({-90:90}) ;
> LON = lonFlip(LON1)
>
> printVarSummary(data)
> printVarSummary(LON)
> print(LON)
> return
>
>
> Variable: LON
> Type: float
> Total Size: 576 bytes
> 144 values
> Number of Dimensions: 1
> Dimensions and sizes: [lon | 144]
> Coordinates:
> lon: [-178.75..178.75]
> Number Of Attributes: 6
> units : degrees_east
> long_name : Longitude
> actual_range : ( 1.25, 358.75 )
> standard_name : longitude
> axis : X
> lonFlip : longitude coordinate variable has been reordered via
> lonFlip
>
> (0) 181.25
> (1) 183.75
> (2) 186.25
> (3) 188.75
> (4) 191.25
> (5) 193.75
> (6) 196.25
> (7) 198.75
> (8) 201.25
> (9) 203.75
> (10) 206.25
> .
> .
> .
> (135) 158.75
> (136) 161.25
> (137) 163.75
> (138) 166.25
> (139) 168.75
> (140) 171.25
> (141) 173.75
> (142) 176.25
> (143) 178.75
> _______________________________________________
> ncl-talk mailing list
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
>
>
>
>
> --
>
> Adam Phillips
>
> Associate Scientist, Climate and Global Dynamics Division, NCAR
>
> www.cgd.ucar.edu/staff/asphilli/ 303-497-1726
>
>
>
> <http://www.cgd.ucar.edu/staff/asphilli>
>
>
> _______________________________________________
> ncl-talk mailing list
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
>
>
> _______________________________________________
> ncl-talk mailing list
> 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/20150220/23225f45/attachment.html
More information about the ncl-talk
mailing list