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