c Program written 3/2/11 by Vern Kousky c program to rank the daily precip values for random samples c23456789012345678901234567890123456789012345678901234567890123456789012 parameter (imax=157,jmax=226,ndmax=1000) dimension x(imax,jmax),y(imax,jmax,ndmax),oindx(ndmax),xx(ndmax) dimension kind(ndmax) character path*34 data path/'/cpc/home/wd52vk/samer/precip/jas/'/ open (11,file=path//'num-events-pge1-r15x1000-jas1981-2010', *access='direct',form='unformatted',recl=imax*jmax*4) open (51,file=path//'rank-pcdiff-pge1-r15x1000-jas1981-2010', *access='direct',form='unformatted',recl=imax*jmax*4) do 1 irec=1,ndmax read(11,rec=irec)x do 40 i=1,imax do 41 j=1,jmax y(i,j,irec)=x(i,j) 41 continue 40 continue 1 continue ccc now order the values beginning with the largest do 30 i=1,imax do 31 j=1,jmax do 32 kk=1,ndmax xx(kk)=y(i,j,kk) 32 continue call order(xx,ndmax,oindx,kind) do 33 kk=1,ndmax y(i,j,kk)=oindx(kk) 33 continue 31 continue 30 continue do 60 kk=1,ndmax do 61 i=1,imax do 62 j=1,jmax x(i,j)=y(i,j,kk) 62 continue 61 continue write(51,rec=kk)x if(kk.le.100)write(6,200)kk,x(74,113) if(kk.ge.900)write(6,200)kk,x(74,113) 200 format(i5,f6.1) 60 continue stop end ccc subroutine kdate(ndmax,nyr,idate) dimension idate(ndmax),ndm(12) data ndm/31,28,31,30,31,30,31,31,30,31,30,31/ lpyr=1984 kk=0 do 2 iyr=1,nyr iyear=1980+iyr do 3 imon=1,3 max=ndm(imon) if(iyear.eq.lpyr.and.imon.eq.2)max=max+1 do 4 iday=1,max kk=kk+1 idate(kk)=iday*1000000+imon*10000+iyear 4 continue 3 continue if(iyear.eq.lpyr)lpyr=lpyr+4 2 continue return end ccc subroutine order(x,kmax,y,kind) dimension x(10000),y(10000),kind(10000) do 1 k=1,kmax y(k)=x(k) kind(k)=k 1 continue ccc first find largest value maxi=1 99 continue ymax=y(maxi) lmax=maxi do 2 k=maxi,kmax if(y(k).le.ymax)go to 2 ymax=y(k) lmax=k 2 continue xy=y(maxi) ky=kind(maxi) y(maxi)=ymax kind(maxi)=kind(lmax) y(lmax)=xy kind(lmax)=ky if(maxi.eq.kmax)go to 999 maxi=maxi+1 go to 99 999 continue return end