      program REORDENS
      use mod_script
!     
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!     reordonne les matrices densite pour suivre les vecteurs propres
!     
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!     
      IMPLICIT REAL(8)(A-H,O-X,Z),logical(1)(y)
      character(80) dens0,dens1,davec0,davec1,prefix
      character(1280) namel
      double precision,allocatable,dimension(:,:) :: rec,densi0,densi1
      double precision,allocatable,dimension(:) :: vec0,vec1
      integer,allocatable,dimension(:) :: iord
      print*,' '
      print*,'*******************************************************'
      print*,'======================================================='
      print*,'                       REORDENS'
      print*,'======================================================='
      print*,'*******************************************************'
      print*,' '
      yw=.false.
      maxit=50
c
c-----------------------------------------------------
c     lecture des donnees
c-----------------------------------------------------
c
      call LECNAM('&REORDENS ',namel,5,ierr,1)
      if(ierr.eq.1) then
         print*,'namelist REORDENS non trouvee'
         stop
      endif
      PREFIX=' '
      call namela(namel,DAVEC0,'DAVEC0')
      call namela(namel,PREFIX,'PREFIX')
      call namela(namel,DENS0,'DENS0')
      call namela(namel,DENS1,'DENS1')
      print*,'davec0',davec0
      call namela(namel,DAVEC1,'DAVEC1')
      print*,'davec0',davec0
      print*,'davec1',davec1
      print*,'dens0',dens0
      print*,'dens1',dens1
      open(1,file=dens0,status='old',form='unformatted')
      open(2,file=davec0,status='old',form='unformatted')
      open(3,file=davec1,status='old',form='unformatted')
      open(4,file=dens1,status='unknown',form='unformatted')
      open(11,file=trim(prefix)//'Info',status='old')
      call LECNAM('&COST_MO ',namel,11,ierr,1)
      call nameli(namel,NORB,'NORB',4)
      !
      read(2) n,nvec
      print*,'matrice de dimension',n
      print*,'nombre de vecteurs  ',nvec
      allocate(rec(nvec,nvec))
      allocate(vec0(n))
      allocate(vec1(n))
      allocate(iord(nvec))
      if(nvec==1) stop
      read(2)
      do i=1,nvec
         read(2) vec0
         rewind(3)
         read(3)
         read(3)
         do k=1,i
            read(3) vec1
            rec(i,k)=abs(dot_product(vec0,vec1))
            rec(k,i)=rec(i,k)
         enddo
      enddo
      call mscript(rec)
      iord=maxloc(rec,dim=1)
      print'(a)', 'iord'
      print'(10i3)',iord
      deallocate(vec0,vec1,rec)
      allocate(densi0(norb,norb))
      do k=1,nvec
         rewind 1
         do l=1,iord(k)-1
            read(1)
         enddo
         read(1) densi0
         write(4) densi0
      enddo
      end
