       subroutine essai
       use module
       use mod_ena
       use mod_lirint
       implicit real(8) (a-h,o-x,z),logical(1)(y)
       character(10000) namel
       character(16) cc
       logical(1) yc(32)
       dimension it(2),ip(2),mm(1)
       allocatable v0(:),diag(:)
       allocatable isyspi(:)
       character(8) generv
       yw1=.false.
       !if(y_suiv_run) return
!       print*,'VECTEURS D''ESSAI'
!       print*,'nessai',nessai
!       print*,'ndet,nvec',ndet,nvec
       !
       ! Allocation des deux vecteurs Psi et H.Psi
       !
       maxl0=nvec
       !!!!!!!!!!!modifier maxl0 si tous les vect ne tiennent pas en
       !memoire
       !allocate(v1(ndet,maxl0))
       !v1=0.d0
       !
       ! Generation du symetrique de spin
       !
!       if(syspin=='+') then
!          isp=1
!       else if(syspin=='-') then
!          isp=-1
!       else
          isp=0
!       endif
       itest(22)=0
       !
       ! Nessai=3 pour habillage
       !
       if(nessai<=1.and.mhab/=0.and.nvec==1) then
          call titre
     *    (' Vecteurs d''essai : mhab/=0 ==> nessai=3'//
     *    '#',50)
          nessai=3
       endif

       !
       ! Nessai=3
       !
       if(nessai==3) then
          itest(22)=1
          if(noac==0) then
             call titre
     *       (' Vecteurs d''essai : 1. sur det fondamental'//
     *       ' (nessai=3)#',50)
             if(nvec>1) then
                print*,'nessai=3,noac=0,nvec>1 impossible'
                stop
             endif
             if(ms2/=0.or.syspin=='-') then
                print*,
     *          'nessai=3,noac=0,syspin=''-'' ou ms2/=0 impossible'
                print*,'mettre nessai=0'
                stop
             endif
             allocate(v0(ndet))
             v0=0.d0
             v0(1)=1.d0
             call ecr(v0,1,ndet,21)
             deallocate(v0)
             nessai=-1
          else
             call titre
     *       (' Vecteurs d''essai : diagonalisation du CAS (nessai=3)'//
     *       '#',60)
             igenerv=igener
             igener=0
             generv=gener
             gener(4:8)=' '
             is0v=is0
             is0=0
             yiil1lent=.true.
             calcul='M'
             call calmat
             call ecrmatf
             is0=is0v
             call jacobi
             rewind 40
             rewind 30
             indice40=4096
             indice30=4096
             calcul='MD'
             igener=igenerv
             gener=generv
             nessai=-1
          endif
       endif
       if(nessai==-1) then
       !
       ! Nessai=1
       !
       else if(nessai==1) then
          call titre
     *    (' Vecteurs d''essai  nessai=1#',40)
          itest(22)=1
!          if(syspin.ne.' ') then
!             rewind 19
!             allocate(isyspi(ndet))
!             read(19) isyspi
!          endif
          print*,'nvec',nvec
          allocate(v0(ndet))
          ivecf=0
          ! boucle sur les vecteurs
          rewind 93
          do ivec=1,nvec
             v0=0.d0
             ! boucle sur les lectures de determinants
             print*,' '
             do
                cc=' '
                it=0
                ip=0
                vv=0.d0
                call LECNAM(' &LOCESS',namel,93,ierr,0)
                call nameli(namel,IT,'IT',4)
                call nameli(namel,IP,'IP',4)
                call nameld(namel,VV,'V',8)
                call namela(namel,CC,'C')
                call maj(cc,3)
                if(cc=='END'.or.cc=='FIN') exit
                yc=.false.
                na=0
                nb=0
                do k=1,noac
                   if(cc(k:k)=='2') then
                      yc(k)=.true.
                      yc(k+noac)=.true.
                      na=na+1
                      nb=nb+1
                   else if(cc(k:k)=='+') then
                      yc(k)=.true.
                      na=na+1
                   else if(cc(k:k)=='-') then
                      yc(k+noac)=.true.
                      nb=nb+1
                   endif
                enddo
                jt1=0
                jp1=0
                if(it(1)>0) then
                   jt1=jt1+1
                   na=na-1
                else if(it(1)<0) then
                   jt1=jt1+1
                   nb=nb-1
                endif
                if(it(2)>0) then
                   jt1=jt1+1
                   na=na-1
                else if(it(2)<0) then
                   jt1=jt1+1
                   nb=nb-1
                endif
                if(ip(1)>0) then
                   jp1=jp1+1
                   na=na+1
                else if(ip(1)<0) then
                   jp1=jp1+1
                   nb=nb+1
                endif
                if(ip(2)>0) then
                   jp1=jp1+1
                   na=na+1
                else if(ip(2)<0) then
                   jp1=jp1+1
                   nb=nb+1
                endif
!234567890123456
!                  n12345678901234567890123456789012345678901234567890
!tttt tttt --> |cccc| --> pppp pppp adr=aaaaaaaa   vvvvvvvv   vec=vv 
                n=16+noac
                namel=' '
                namel(12:16)='--> |'
                namel(n+1:n+5)='| -->'
                write(namel(1:10),'(2i5)') it(1:2)
                write(namel(n+6:n+15),'(2i5)') ip(1:2)
                write(namel(n+32:n+112),'(f8.4)') vv
                namel(n+17:n+30)='adr='
                namel(n+43:n+46)='vec='
                write(namel(n+47:n+48),'(i2)') ivec
                namel(17:n)=cc
                !print*,'essai cc ',cc
                !print*,'essai it ',it
                !print*,'essai ip ',ip
                !print*,'essai  vv ',vv
                if(na/=nocac0) then
                   print*,'mauvais determinant d''essai'
                   print*,
     *             'nombre d''electrons alpha dans le determinant',na
                   print*,'nombre d''electrons alpha dans la reference',
     *             nocac0
                   stop
                endif
                if(nb/=nocbc0) then
                   print*,'mauvais determinant d''essai'
                   print*,'nombre d''electrons beta dans le determinant'
     *             ,nb
                   print*,'nombre d''electrons beta dans la reference',
     *             nocbc0
                   stop
                endif
                call adrdet(yc,jt1,it,jp1,ip,iadr)
                write(namel(n+21:n+28),'(i8)') iadr
                print*,trim(namel)
                !print*,'essai iadr ',iadr,maxl0
                if(iadr==0) then
                   print*,'vecteur d''essai mal defini'
                   print*,'le determinant n''est pas dans la base'
                   print*,'trou',it(1:jt1)
                   print*,'part',ip(1:jp1)
                   stop
                endif   
                !print*,'iadr,ivec',iadr,ivec
                v0(iadr)=vv
!                !
!                ! Generation du symetrique de spin
!                !
!                if(isp/=0) then
!                   iadrsp=isyspi(iadr)
!                   do l=1,maxl0
!                      v0(iadrsp)=v0(iadrsp)+isp*vv(l)
!                   enddo
!                   print*,'iadr,iadrsp',iadr,iadrsp
!                   do k=1,ndet
!                      print*,',ivec,k,v0',ivec,k,v0(k)
!                   enddo
!                endif
                !
                ! Generation du symetrique
                 !print*,'v0 avant',v0
                if(syspin/=' '.or.is0/=0) call symdet3(v0)
                 !print*,'v0 apres',v0
                !
                ! Renormalisation
                anorm=dot_product(v0,v0)
                !print*,'anorm',anorm
                if(anorm<1.d-8) then
                   print*,'norme trop petite pour le vecteur d''essai',
     *             ivec
                   print*,'norme=',anom
                   stop
                endif
                v0(:)=v0(:)/dsqrt(anorm)
                call ecr(v0(:),ivec,ndet,21)
                if(yw1)call scrida('v0 essai    $',v0(:),ndet,21,ivec)
                if(jt1/=0.or.jp1/=0) itest(22)=0
             enddo
             print*,' '
          enddo
!          if(syspin.ne.' ') deallocate(isyspi)
          deallocate(v0)
       !
       ! Nessai=0
       !
       else if(nessai==0) then
          print*,'nessai=0'
          itest(22)=0
          ! lecture de la diagonale de la matrice d'IC
!          if(syspin.ne.' ') then
!             rewind 19
!             allocate(isyspi(ndet))
!             read(19) isyspi
!          endif
          allocate(diag(ndet))
          allocate(v0(ndet))
          rewind 20
          call lir8bl(diag,ndet,20)
          ! recherche des valeurs minimales
          ivec=0
          do k1=1,ndet
             v0=0.d0
             mm=minloc(diag)
            !print*,'mm',mm(1)
             v0(mm(1))=1.d0
             !print*,'avant symdet3 v0',v0
             call symdet3(v0)
             ! pour ne pas generer 2 fois le meme vecteur, mm(1)
             ! doit etre plus petit que les autres det generes
             ! par symetrie:
             do k=1,mm(1)-1
                if(abs(v0(k))>1.d-2) goto 1
             enddo
             !print*,'apres symdet3 v0',v0
             if(abs(v0(mm(1)))>1.d-2) then
                ivec=ivec+1
                anorm=dsqrt(dot_product(v0,v0))
                v0=v0/anorm
                call ecr(v0,ivec,ndet,21)
                if(ivec==nvec) exit
             endif
 1           continue
             diag(mm(1))=1.d10
          enddo
          if(ivec<nvec) then
             print'(a,i3,a)'
     *       ,'Compte tenu des conditions de symetrie, '//
     *       'on ne peut pas trouver',nvec,' vecteurs propres'
             print'(a,i3)','On n''en calcule que',ivec
             nvec=ivec
          endif
          deallocate(diag)
          deallocate(v0)
!          do
!             mm=minloc(diag)
!             !print*,'position du 1.',mm(1)
!             if(isp/=0) then
!                diag(isyspi(mm(1)))=1.d10
!                if(isyspi(mm(1))==mm(1).and.isp==-1) cycle
!             endif
!             write(99,*) mm(1)
!             diag(mm(1))=1.d10
!             ivec=ivec+1
!             if(ivec==nvec) exit
!          enddo
!          deallocate(diag)
!          allocate(v0(ndet))
!          rewind(99)
!          do ivec=1,nvec
!             v0=0.d0
!             read(99,*) m
!             !print*,'ivec,m',ivec,m
!             coef=1.d0
!             if(isp/=0) then
!                if(m/=isyspi(m)) coef=1.d0/dsqrt(2.d0)
!                v0(isyspi(m))=isp*coef
!             endif
!             v0(m)=coef
!             call ecr(v0,ivec,ndet,21)
!             itest(22)=0
!          enddo
!          deallocate(v0)
!          if(isp/=0) deallocate(isyspi)
       else if(nessai==2) then
          call titre('lecture des vecteurs d''essai sur#'//trim(ess1)
     *    //'#',300)
          inquire(99,name=namel)
      
          open(99,status='unknown',file=ess1,form='unformatted')   
          read(99) ndet99,nvec99
          if(ndet99/=ndet) then
             print*,'le nombre de determinants n''est pas le bon '//
     *       'dans le vecteur d''essai'
             print*,'dans ',ess1,' :',ndet99
             stop
          endif 
          if(nvec/=nvec) then
             print*,'le nombre de racines n''est pas le bon '//
     *       'dans le vecteur d''essai'
             print*,'dans ',ess1,' :',nvec99
             stop
          endif 
          read(99)
!          if(syspin.ne.' ') then
!             rewind 19
!             allocate(isyspi(ndet))
!             read(19) isyspi
!          endif
          allocate(v0(ndet))
          DO kk=1,NVEC
             read(99) v0
             ! Verif normalisation
             anorm=dot_product(v0,v0)
             print'(a,i3,f12.8)','norme',kk,anorm
             if(anorm<1.d-8) then
                print*,'norme trop petite pour le vecteur d''essai',
     *          ivec
                print*,'norme=',anom
                stop
             endif
             v0(:)=v0(:)/dsqrt(anorm)
             call ecr(v0(:),kk,ndet,21)
          enddo
          close(99)
          deallocate(v0)
!          if(syspin.ne.' ') deallocate(isyspi)
       else
          print*,'nessai : valeur non prevue',nessai
          stop
       endif
       ! ouverture de Psi et H*Psi
       maxl0=nvec
       !!!!!!!!!!!modifier maxl0 si tous les vect ne tiennent pas en
       !memoire
       if(.not.allocated(v1))allocate(v1(ndet,maxl0))
       if(.not.allocated(v2))allocate(v2(ndet,maxl0))
       if (nhab.ne.0) then
          if(.not.allocated(vhab))allocate(vhab(ndet))
          vhab=0.d0
          vhab_original=.true.
       endif
       v2=0.d0
       do k=1,maxl0
          if(yw1)call scrida('v1 essai    $',v1(:,k),ndet,21,k)
       enddo
       if(stop=='ESSAI') then
          call titre('stop=''ESSAI''#',40)
          stop
       endif
       return
       end
