[ncl-talk] lonFlip function
Sunmin Park
mireiyue at gmail.com
Fri Feb 20 12:30:11 MST 2015
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] 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] 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20150220/31c1cc6c/attachment.html
More information about the ncl-talk
mailing list