1      subroutine util_nwsort(n,value,vector,order)
2c
3c $Id$
4c
5c Sort the eigenvalues and eigenvectors
6c in an ascending/descending order
7c Written by So Hirata, Feb 2002.
8c (c) Battelle, PNNL, 2002.
9c
10      implicit none
11      integer n
12      double precision value(n)
13      double precision vector(n,n)
14      double precision minval,maxval,swap
15      character*1 order
16      integer i,j,k
17
18      if ((order.eq.'A').or.(order.eq.'a')) then
19        do i=1,n-1
20          minval=value(i)
21          k=0
22          do j=i+1,n
23            if (value(j).lt.minval) then
24              k=j
25              minval=value(j)
26            endif
27          enddo
28          if (k.ne.0) then
29            swap=value(i)
30            value(i)=value(k)
31            value(k)=swap
32            do j=1,n
33              swap=vector(j,i)
34              vector(j,i)=vector(j,k)
35              vector(j,k)=swap
36            enddo
37          endif
38        enddo
39      else if ((order.eq.'D').or.(order.eq.'d')) then
40        do i=1,n-1
41          maxval=value(i)
42          k=0
43          do j=i+1,n
44            if (value(j).gt.maxval) then
45              k=j
46              maxval=value(j)
47            endif
48          enddo
49          if (k.ne.0) then
50            swap=value(i)
51            value(i)=value(k)
52            value(k)=swap
53            do j=1,n
54              swap=vector(j,i)
55              vector(j,i)=vector(j,k)
56              vector(j,k)=swap
57            enddo
58          endif
59        enddo
60      endif
61      return
62      end
63