source: flexpart.git/src/sort2.f90

10.4.1_peseiGFS_025bugfixes+enhancementsdevrelease-10release-10.4.1scaling-bug
Last change on this file was bb7db5c, checked in by Ignacio Pisso <ip@…>, 4 years ago

remove GPL license header from sort2.f90

  • Property mode set to 100644
File size: 1.9 KB
Line 
1! From numerical recipes
2! Change by A. Stohl: Use of integer instead of real values
3
4subroutine sort2(n,arr,brr)
5
6  implicit none
7
8  integer :: n
9  integer :: arr(n),brr(n)
10  integer,parameter :: m=7,nstack=50
11  integer :: i,ir,j,jstack,k,l,istack(nstack)
12  integer :: a,b,temp
13  jstack=0
14  l=1
15  ir=n
161   if(ir-l.lt.m)then
17    do j=l+1,ir
18      a=arr(j)
19      b=brr(j)
20      do i=j-1,1,-1
21        if(arr(i).le.a)goto 2
22        arr(i+1)=arr(i)
23        brr(i+1)=brr(i)
24      end do
25      i=0
262     arr(i+1)=a
27      brr(i+1)=b
28    end do
29    if(jstack.eq.0)return
30    ir=istack(jstack)
31    l=istack(jstack-1)
32    jstack=jstack-2
33  else
34    k=(l+ir)/2
35    temp=arr(k)
36    arr(k)=arr(l+1)
37    arr(l+1)=temp
38    temp=brr(k)
39    brr(k)=brr(l+1)
40    brr(l+1)=temp
41    if(arr(l+1).gt.arr(ir))then
42      temp=arr(l+1)
43      arr(l+1)=arr(ir)
44      arr(ir)=temp
45      temp=brr(l+1)
46      brr(l+1)=brr(ir)
47      brr(ir)=temp
48    endif
49    if(arr(l).gt.arr(ir))then
50      temp=arr(l)
51      arr(l)=arr(ir)
52      arr(ir)=temp
53      temp=brr(l)
54      brr(l)=brr(ir)
55      brr(ir)=temp
56    endif
57    if(arr(l+1).gt.arr(l))then
58      temp=arr(l+1)
59      arr(l+1)=arr(l)
60      arr(l)=temp
61      temp=brr(l+1)
62      brr(l+1)=brr(l)
63      brr(l)=temp
64    endif
65    i=l+1
66    j=ir
67    a=arr(l)
68    b=brr(l)
693   continue
70      i=i+1
71    if(arr(i).lt.a)goto 3
724   continue
73      j=j-1
74    if(arr(j).gt.a)goto 4
75    if(j.lt.i)goto 5
76    temp=arr(i)
77    arr(i)=arr(j)
78    arr(j)=temp
79    temp=brr(i)
80    brr(i)=brr(j)
81    brr(j)=temp
82    goto 3
835   arr(l)=arr(j)
84    arr(j)=a
85    brr(l)=brr(j)
86    brr(j)=b
87    jstack=jstack+2
88    if(jstack.gt.nstack) then
89       print*, 'nstack too small in sort2'
90       stop
91    end if
92    if(ir-i+1.ge.j-l)then
93      istack(jstack)=ir
94      istack(jstack-1)=i
95      ir=j-1
96    else
97      istack(jstack)=j-1
98      istack(jstack-1)=l
99      l=i
100    endif
101  endif
102  goto 1
103end subroutine sort2
104!  (C) Copr. 1986-92 Numerical Recipes Software us.
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG