      subroutine mul(m0,m2,m)
      use module
      use mod_ena
C     use mod_dav
      use mod_lirint
c
c-------------------------------------------------------------------
c     subroutine de multiplication directe de la matrice par m vecteurs
c     la dimension est ndet
c     les vecteurs en donnee sont dans le fichier partitionne 21
c     l'enregistrement i correspond au vecteur i
c     les vecteurs resultats sont ecrits de la meme facon
c     dans le fichier 22
c-------------------------------------------------------------------
c
      IMPLICIT real(8) (A-H,O-x,z),LOGICAL(1)(y)
      dimension d(2048)
      yw=.false.
      yw1=.false.
      v2=0.d0
      rewind 20
      n=ndet
      kk=0
      nv1=0
      !print*,'bornes',0,nvec-1,maxl0,m0,m2,m
      !print*,'ycvl',ycvl
      do llll=0,nvec-1,maxl0
         !print*,'MUL',llll,nvec,maxl0
         rewind 20
         nv1=nv1+maxl0
         nv1=min(nv1,nvec)                 !dernier vect du bloc
!         maxl1=min(maxl0,nvec-llll*maxl0)    ! longueur du bloc
         do lll=1,m-m0
            !print*,'MUL lu v1',lll,m,m0,m-m0
            call lire(v1(:,lll),m0+lll,ndet,21)
         enddo
         if(itest(81)==m) call sauvl(v1,ndet)
         if(yw1) then
            do lll=1,maxl0
               call scrida('mul v1 depart    $',v2,ndet,21,m0+lll)
            enddo
         endif
         !
         ! Partie diagonale
         !
         do k=1,ndet,2048
            ll=min(2048,n)
            read(20) d(1:ll)
            do l=1,ll
               kk=kk+1
!               print'(a,f12.8)','prodena0 diag',d(l)
               !call prodena0(d(l)/2,kk,kk)
               do k1=1,m-m0
                  v2(kk,k1)=v2(kk,k1)+d(l)*v1(kk,k1)/2
                  v2(kk,k1)=v2(kk,k1)+d(l)*v1(kk,k1)/2
               enddo
            enddo
            n=n-2048
         enddo
         !
         ! Partie extradiagonale
         !
         rewind 40
         rewind 30
         indice40=4096
         indice30=4096
         !print*,'v2 avnt calmat',v2
!         maxl0=m-m0
         call calmat
!         maxl0=nvec
         !print*,'v2 aperscalmat',v2
         do lll=1,m-m0
            if(is0/=0.or.syspin/=' ') then
               ! symetrisation de v2
               call symdet3(v2(:,lll))
            else
               ! symetrisation en spin de v2
!               call syspin2(v2(:,lll))
            endif
            !ecriture
            call ecr(v2(:,lll),m0+lll,ndet,22)
         enddo
      enddo
 
!   Habillage a partir de ITERH
 
!     print*,'NHAB=',nhab
!      if(nhab.ne.0.and.iter.ge.iterh) call diaghab
      return
      end
