[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