[ncl-talk] lonFlip function
HAVENER, KEVIN F GS-12 USAF AFWA 14 WS/WXED
kevin.havener at us.af.mil
Fri Feb 20 13:33:00 MST 2015
Sun,
To use the script, all you have to do is change the input and output filenames, and match up the dimnames with the input file handle pretty much everywhere there is the string "vardims" in the script. The script is just checking to make sure the rightmost dimension is actually longitude. If it is latitude or some other dimension, the script essentially doesn't do anything, other than in my case I guess it would convert from grib to netcdf. So if your data is already ordered that way, the script will take reorder the array with the western hemisphere first, and also re-calculate the longitude (1D array) dimension so that it is monotonically increasing from -180 to 180. If in your data longitude is not the rightmost dimension, this script will do nothing useful for you.
I will have to look back through my emails to see who gave me this. I finally figured out where I got the script. David Brown, from this list, gave it to me.
Kevin Havener
-----Original Message-----
From: Sunmin Park [mailto:mireiyue at gmail.com]
Sent: Friday, February 20, 2015 2:30 PM
To: HAVENER, KEVIN F GS-12 USAF AFWA 14 WS/WXED; Adam Phillips
Cc: ncl-talk at ucar.edu
Subject: Re: [ncl-talk] lonFlip function
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
More information about the ncl-talk
mailing list