Re: Sorting maxes at lat and lon

From: Mary Haley <haley_at_nyahnyahspammersnyahnyah>
Date: Tue Aug 14 2012 - 13:16:00 MDT

Hi Michelle,

dim_pqsort_n returns the *index values* of the newly sorted array, and not the sorted values themselves. That's why you have the option of whether or not to sort the array itself.

In your dim_pqsort_n line:

sorted_maxes(j,i) = dim_pqsort_n(all_maxes(j,i),2,0) ;Sorting not working the way I want. want maxes first..

why do you have all_maxes subscripted by j and i? As far as I can tell, i and j have not been set.

I think you do want to sort x, so option "2" seems like the right value to me. However, I think you should just call the function with:

sorted_maxes = dim_pqsort_n(all_maxes,2,0)

To see how dim_pqsort_n works, please run the attached script, which simply sorts a 2D array across the rightmost dimension , and then the leftmost dimension.

--Mary

On Aug 10, 2012, at 11:28 AM, Michelle Cipullo wrote:

> Hello,
>
> I am working on a script to calculate return period at each point. I have most things working, except I'm not sorting correctly. It may be my confusion on the function. I am looking at dim_pqsort_n, and from that I want it listed in increasing order (min_wind.....max_wind) at each individual lat an lon. I have bolded the sort function in this script since the rest of it is irrelevant for my question. I am confused on if I want to sort "x" or not from the documentation (I think I do want to sort x).
> Also, using the dim_max_n I sort across time, so there is only two components in the array (lat,lon). I want the max at each individual lat & lon so I'm not sure what dimension I should sort across, or if there is a better function.
>
> Thanks so much for your help,
>
> Michelle
>
> 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"
> load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"
>
> ;__________________________________
> ;
> ;Michelle Cipullo
> ;Return Period
> ;
> ;___________________________
>
> begin
>
> wks = gsn_open_wks("x11","Return_Period")
> gsn_define_colormap(wks,"precip2_17lev")
>
> nrows = numAsciiRow("Red_var_115_times.txt")
> ncols = numAsciiCol("Red_var_115_times.txt")
>
> Red_Var_t = asciiread("Red_var_115_times.txt",(/nrows,ncols/),"float")
> Red_Var = Red_Var_t(:,0)
>
> fils = systemfunc("ls /NCL_fixed_up_scripts/*"+".nc")
> F = addfiles(fils,"r")
> f = addfile("wrfout_d01_2010-02-27_00:00:00.nc","r") ;Need one file for plot info
>
>
> ;_________get wind variables__________
>
> u_all = addfiles_GetVar(F,fils,"U10")
> v_all = addfiles_GetVar(F,fils,"V10")
>
> lmask = addfiles_GetVar(F,fils,"LANDMASK")
>
> u2 = u_all(:,:,:)*u_all(:,:,:)
> v2 = v_all(:,:,:)*v_all(:,:,:)
>
> speed = sqrt(u2+v2)
> speed = speed*lmask
>
> maxwind_2002 = dim_max_n(speed,0) ;Find max over 0 dim. (time)
> delete([/u_all,v_all,u2,v2,speed,F,f/])
>
> nj = 106
> ni = 193
>
> ;_______append all maxes_______
>
> new1 = array_append_record(maxwind_2002,maxwind_2003,0) ;I realize this is extremely inefficient, fix later
> new2 = array_append_record(new1,maxwind_2004,0)
> new3 = array_append_record(new2,maxwind_2005,0)
> new4 = array_append_record(new3,maxwind_2006,0)
> new5 = array_append_record(new4,maxwind_2007,0)
> new6 = array_append_record(new5,maxwind_2008,0)
> new7 = array_append_record(new6,maxwind_2009,0)
> new8 = array_append_record(new7,maxwind_2010,0)
>
> ten_yr_maxes = array_append_record(new8,maxwind_2011,0)
> print(dimsizes(all_maxes))
>
> ;_______Sort in ascending order_______________
>
> sorted_maxes = new((/nj,ni/),float)
>
> sorted_maxes(j,i) = dim_pqsort_n(all_maxes(j,i),2,0) ;Sorting not working the way I want. want maxes first..
>
> ;_____the x in RP = mx+b_____
>
> rank = 1/dimsizes(sorted_maxes+1) ;have to +1 b/c starts at 0, can't div.
> P = -log(-log(rank)) ;
> x_tenyrs = P ;
>
>
> ;______correlation_________
>
> do j = 0, nj-1
> do i = 0, ni-1
>
> corr = new((/nj,ni/),float)
> Return_Period = new((/nj,ni/),float)
> m = new((/nj,ni/),float) ;slope
> b = new((/nj,ni/),float) ;intercept
>
> corr(j,i) = regline(Red_Var,sorted_maxes) ;red var y-axis, wind x-axis
>
> yavg = corr@yave
> xavg = corr@xave
> b = corr@yintercept
> m(j,i) = yavg/xavg
>
> Return_Period(j,i) = m(j,i)*x_tenyrs+b(j,i)
>
> end do
> end do
> end
>
> Michelle Cipullo
>
>
> _______________________________________________
> 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
Received on Tue Aug 14 13:16:37 2012

This archive was generated by hypermail 2.1.8 : Wed Aug 15 2012 - 08:12:08 MDT