      program casdiloc
      use module
      use mod_ena
      use mod_dim
      implicit real(8) (a-h,o-x,z),logical(y)
      print*,' '
      print*,'*******************************************************'
      print*,'======================================================='
      print*,'                       CASDILOC'
      print*,'======================================================='
      print*,'*******************************************************'
      print*,' '      
      print*,' '      
      print*,'   XXXX                      XX   '//
     *'  X     XX'                  
      print*,'  X    X                      X   '//
     *'         X'                  
      print*,' X                            X   '//
     *'         X'                  
      print*,' X        XXXX    XXXXX   XXXXX   '//
     *'XXX      X     XXXXX   XXXXX'
      print*,' X            X  X     X X    X   '//
     *'  X      X    X     X X     X'
      print*,' X        XXXXX   XXX    X    X   '//
     *'  X      X    X     X X'     
      print*,' X       X    X      XX  X    X   '//
     *'  X      X    X     X X'     
      print*,'  X    X X    X  X     X X    X   '//
     *'  X      X    X     X X     X'
      print*,'   XXXX   XXXX X  XXXXX   XXXXXX  '//
     *'XXXXX  XXXXX   XXXXX   XXXXX'

      print*,' '      
!
!---------------------------------------------------------------
!     lecture des donnees, ouverture des fichiers, lectures
!---------------------------------------------------------------
!
      call openlec
      y_suiv_run=.false.
      if(calcul=='M'.or.nessai==3) 
     *open(50,file=MAT1,status='unknown',form='unformatted')
      call casdiloc1
!
!--------------------------------------------------------------------
! si ysuiv, on appelle suiv2 pour voir si des vecteurs ont change
! de nature par rapport aux vecteurs d'essai
! Si des vecteurs d'essai n'ont pas ete retrouves, on met ceux 
! trouves en vecteurs d'essai, on remet ceux non trouves et on renvoie
! casdiloc
!--------------------------------------------------------------------
!
      if(ysuiv) then
         print*,'ysuiv2',ysuiv2
         do while(ysuiv2)
            call suivi2!(ysuiv2)
            if(ysuiv2) then
               y_suiv_run=.true.
               call casdiloc1
            endif
         enddo
         call titre('Fin du suivi des vecteurs#',58)
      endif
      end
       subroutine casdiloc1
      use module
      use mod_ena
      use mod_dim
      implicit real(8) (a-h,o-x,z),logical(y)
      call lirint
!
!---------------------------------------------------------------
!     preparations
!---------------------------------------------------------------
!
      !if(.not.y_suiv_run) then
      call prepar
      ! conditions sur l'occupation des orbitales ?
      call dimic
      call titre(' Preparation du calcul #',40)
      call flush(6)
      call fock
      call flush(6)
      call cpu_time(t1)
      call diago
      write(2) eref+enuc,enuc,eref
      close(2)
      call cpu_time(t0)
      print'(a,f10.2)','temps cpu pour le calcul de la diagonale de la '
     *//'matrice d''IC',t0-t1
      print*,' '
      call flush(6)
      print*,' '
      call titre('Generation des determinants#',300)
      if(ytestgendet)call testgendet
      if(stop=='TESTGENDET') stop'stop==''TESTGENDET'''
      call cpu_time(t1)
      print'(a,f10.2)','temps de generation des determinants',t1-t0
      call flush(6)
      if(ygendet) then 
         print*,' '
         print*,'ygendet=T : on genere un fichier de det type CASDI'
         call fine2
         if(ydetv) call finev
         call cpu_time(t2)
         print'(a,f10.2)','temps dans la generation des det casdi',t2-t1
      endif
      call flush(6)
      call typint
!
!---------------------------------------------------------------
!     symetrie
!---------------------------------------------------------------
!
      if(is0/=0.or.syspin.ne.' ') call symdet
      !?????????????appel suivant a supprimer ? inutile ?
      call caldim_itp
!
!---------------------------------------------------------------
!     si calcul='M', calcul de la matrice
!---------------------------------------------------------------
!
      !print*,'calcul',calcul
      if(calcul=='M') then
         yiil1lent=.true.
         call calmat
         call ecrmatf
         call fin
      endif
!
!---------------------------------------------------------------
!     symetrie de spin 
!---------------------------------------------------------------
!
!      if(syspin/=' ') call syspin0
!
!---------------------------------------------------------------
!     vecteurs d'essai 
!---------------------------------------------------------------
!
      open(98,file='FIL98',status='unknown',form='formatted')
      if(.not.densonly) then
         call essai
         if(ysuiv) call suivi
      endif
      !endif
!
!---------------------------------------------------------------
!     diagonalisation 
!---------------------------------------------------------------
!
      if(.not.densonly) call david(v1,v2)
      close(98,status='delete')
      call ecrivec
!
!---------------------------------------------------------------
!     matrice densite 
!---------------------------------------------------------------
!
      if(ydens) call dens
!
!---------------------------------------------------------------
!     fin
!---------------------------------------------------------------
!
      call fin
      end

      !mhab(0)        option d'habillage : 0 pas d'habillage
      !                                    1 MR-CEPA_0
      !                                    2 MR-CEPA_0 raffine
      !nhab(0)        numero du vecteur par rapport auquel on habille
      !iterh(0)       iteration a partir de laquelle on habille

      !itest( 1)      pour calcul='M': calcule la matrice, mais ne
      !               l'ecrit pas sur disque
      !itest( 2)      tests de temps dans mod_mula
      !itest( 3)      tests de temps dans mod_mula
      !itest( 4)      tests de temps dans mod_mula
      !itest( 5)      tests de temps dans mod_mula
      !itest( 6)      tests de temps dans mod_mula
      !itest( 7)      tests de temps dans mod_ena
      !itest( 8)      desactive le stockage des elements de matrice 
      !itest( 8)         type dans debiil1 (Char(52))
      !itest(11)      temps dans mod_ena2 : boucle interne differente
      !itest(13)      temps dans mod_ena : boucle interne differente
      !itest(14)      tests de temps dans mod_ena2
      !itest(15-18)   tests de temps dans mod_mula
      !itest(20)/=0   test : ne considere que les integrales pour
      !               lesquelles 
      !               itest(20)=itypi(itype(i),itype(j),itype(k),itype(l))
      !               defaut 0
      !itest(21)=1    variable interne: la symetrie de spin s'applique
      !itest(22)=1    variable interne: acceleration de la 1ere iteration
      !itest(23)      variable interne: =1: on ecrit les integrales utiles
      !               sur la file 17
      !itest(24)      variable interne: =1: l'integrale en cours est utile
      !itest(25),itest(26) comptage des integrales utiles
      !itest(28)      =0 : impressions detaillees des liaisons entre orb.
      !itest(30)      =1 : On note les integrales utiles (cad qui ont
      !               participe au produit), on les stoque dans un fichier
      !               court d'integrales. A partir de la 2eme iteration
      !               c'est ce fichier court qui est lu (defaut 1)
      !densonly       Donnee de casdiloc. 
      !               Lit la file davec d'un calcul precedent
      !               et calcule la matrice densite sans faire d'iteration.
      !ytestgendet=t et mprint(7)=1 : ecrit les determinants
      !          
