      subroutine prepar
      use module
      call calc
      call listes
      call clastp
      call compt
      call gencas
      call condoc
      if(sel==2) then
         call selec2
         call comptc0_sel
         call caldfc0
      endif
      call clastcp
      return
      end
       subroutine selec_2(nd)
! appele si sel==2
      use module
      dimension nd(19,0:2),jndetc(19,0:2)
      allocatable jbinc(:)
      ndetc_sel=sum(nd)
      allocate(jbinc(ndetc_sel))
      allocate(jdetc(0:ndetc_sel+1))
      allocate(reor_sel(ndetc))
!
!======================================================================
      ! dans la liste complete, les det etaient ordonnes par classe (19
      ! classes)
      ! dans la liste selectionee, les det sont ordonnes par classe et
      ! par distance
      !
      ! Signification de la distance
      !
      ! Un det CAS de dist 0 est une reference
      ! Un det CAS de dist 1 est obtenu par une excitation sur une ref
      ! Un det CAS de dist 2 est obtenu par 2 excitations sur une ref
      !
      ! Les classes sont ordonnees de la facon suivante :
      ! classe 1,dist0    jdebc(1,0) -> jfinc(1,0)
      ! classe 1,dist1    jdebc(1,1)=jfinc(1,0)+1 -> jfinc(1,1)
      ! classe 1,dist2    jdebc(1,2)=jfinc(1,1)+1 -> jfinc(1,2)
      ! classe 2,dist0    jdebc(2,0)=jfinc(1,2)+1 -> jfinc(2,0)
      ! ...
      ! classe 19,dist2    jdebc(19,2) -> jfinc(19,2)
!======================================================================
!
      !
      ! calcul de jdebc et jfinc, bornes des classes des det du CAS
      !
      l=1
      do icl=1,nclasc
         do idist=0,2
            jdebc(icl,idist)=l
            jfinc(icl,idist)=jdebc(icl,idist)+nd(icl,idist)-1
            l=l+nd(icl,idist)
            print'(a,10i6)','icl,idist,nd,jdebc,jfinc',
     *      icl,idist,nd(icl,idist)
     *      ,jdebc(icl,idist),jfinc(icl,idist)
         enddo
      enddo
      print*,'nb de det de dist <=2',jfinc(nclasc,2)
      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      ! Lecture des determinants du CAS non selectionne
      ! on retient les dist<=2
      ! dans la liste complete, les det etaient ordonnes par classe (19
      ! classes)
      ! dans la liste selectionee, les det sont ordonnes par classe et
      ! par distance
      ! on note dans reor_sel la correspondance entre les
      ! adressages non selectione et selectionne
      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      jndetc=-1
      i=0
      reor_sel=0
      do icl=1,nclasc
         if(.not.exist_clasc(icl)) cycle
         do idum=idebc(icl),ifinc(icl)
            i=i+1
            idist=icaldist(i,jbin,ibinc,noac)
            if(idist<3) then
               jndetc(icl,idist)=jndetc(icl,idist)+1
               j=jdebc(icl,idist)+jndetc(icl,idist)
               jbinc(j)=ibinc(i)
               reor_sel(i)=j
            print'(a,4i4,2x,16l1,1x,16l1)'
     *      ,'icl,i,idist',icl,i,idist,j,(btest(jbinc(j),k-1),k=1,32)
            endif
         enddo
      enddo
      !verif
      k=0
      do icl=1,nclasc
         do idist=0,2
            do idum=jdebc(icl,idist),jfinc(icl,idist)
               k=k+1
               print'("verif liste det",i4,1x,4l1,1x,4l1,3i4)',k,
     *         (btest(jbinc(k),l-1),l=1,4),(btest(jbinc(k),l-1),l=17,20)
     *         ,icl,idist,icaldist(k,jbin,jbinc,noac)
            enddo
         enddo
      enddo
      ndetc=ndetc_sel
      print*,'nca,ncb,idist,jdebc,jfinc'
      do k=1,19
         do idist=0,2
            print*,iclasc1(:,k),idist,jdebc(k,idist),jfinc(k,idist),
     *      jfinc(k,idist)-jdebc(k,idist)+1
         enddo
      enddo
!
!     on met les det CAS retenus dans ibinc, qui sera donc plus court
!
      deallocate(ibinc)
      allocate(ibinc(ndetc))
      ibinc=jbinc
      deallocate(jbinc)
      return
      end
 
