[ncl-talk] lonFlip function

Sunmin Park mireiyue at gmail.com
Mon Feb 23 20:32:43 MST 2015


Hi Alan 

Thank you for your help. It seems working now. 

Sun


On Feb 20, 2015, at 12:04 PM, Alan Brammer <abrammer at albany.edu> wrote:

> 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] 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
> 
> 
> _______________________________________________
> 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/20150223/109d243f/attachment.html 


More information about the ncl-talk mailing list