      subroutine mulccccx(x1,y1,z1,t1,aa1)
      use module
      use mod_ena
      IMPLICIT REAL(8)(A-H,O-X,Z),logical(1)(y)
      integer a,x1,y1,z1,b,b1,x,y,z,t1,t
      !
      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      !
      ! x1,y1,z1,t1,aa1 = indices et valeur de l'integrale
      ! appels a mulccccd2 pour differentes valeurs de nca,ncb
      ! (2 derniers indices)
      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      !
 
      x=num_oav(x1)
      y=num_oav(y1)
      z=num_oav(z1)
      t=num_oav(t1)
 
 
      call mulcccx2(x,y,z,t,aa1,0,0)
      if(igener==0) return
      if(itest(22)==1.and.iter==1) return
      call mulcccx2(x,y,z,t,aa1,0,1)
      call mulcccx2(x,y,z,t,aa1,0,-1)
      call mulcccx2(x,y,z,t,aa1,1,0)
      call mulcccx2(x,y,z,t,aa1,-1,0)
      call mulcccx2(x,y,z,t,aa1,1,1)
      call mulcccx2(x,y,z,t,aa1,1,-1)
      call mulcccx2(x,y,z,t,aa1,-1,1)
      call mulcccx2(x,y,z,t,aa1,-1,-1)
      call mulcccx2(x,y,z,t,aa1,2,-1)
      call mulcccx2(x,y,z,t,aa1,-2,1)
      call mulcccx2(x,y,z,t,aa1,1,-2)
      call mulcccx2(x,y,z,t,aa1,-1,2)
      call mulcccx2(x,y,z,t,aa1,2,0)
      call mulcccx2(x,y,z,t,aa1,-2,0)
      call mulcccx2(x,y,z,t,aa1,0,2)
      call mulcccx2(x,y,z,t,aa1,0,-2)
      call mulcccx2(x,y,z,t,aa1,2,-2)
      call mulcccx2(x,y,z,t,aa1,-2,2)
 
      return
      end
 
 
       subroutine mulcccx2(x,y,z,t,aa1,nca,ncb)
      use module
      use mod_ena
      IMPLICIT REAL(8)(A-H,O-X,Z),logical(1)(y)
      integer a,x1,y1,z1,b,b1,x,y,z,t1,t
      dimension nbc(0:2)
 
      if(w)print*,'mulccccx alpha',x,y,z,t,nca,ncb
      ! classe du determinant CAS
      iclc=iclasc(nca,ncb)
      if(iclc==0) return
      ! llongc=nb de strings du CAS correspondant a la classe
      j1=idebc(iclc)-1
      j2=idebc(iclc)-1
      llongc=ifinc(iclc)-idebc(iclc)+1
      ! appel a cast, ou on trouve tous les elements d'interaction
      ! entre les determinants CAS. On a elimine tous les elements
      ! d'interaction incompatibles avec l'integrale. A la sortie 
      ! de cast, il en reste longc
      call cast(msgnc,j1,j2,iclc,iclc,x,y,z,t,longc,mdetc1
     *,mdetc2,llongc,nbc,nca,ncb)
      if(sel==2) then
         ! calcul selectionne
         ! 
         ! Dans cast, on a assigne a chaque element d'interaction
         ! une distance, = la distance max des 2 det CAS.
         !
         ! si on n'a pas (nca==0.and.ncb==0), les choses sont simples,
         ! il n'y a jamais de dist 0, don soit 1 soit 2. Les 1 on ete 
         ! places en tete de mdetc? et msgnc, les dist 2 en bout.
         !
         ! Selon les valeurs de nt et np, on va prendre toutes les
         ! interactions CAS, ou seulement celles de distance plus petites
         ! (mulcccc_sel)
         call mulcccc_sel(nca,ncb,longc,aa1,nbc,iclc)
      else
         n=idetc(idebc(iclc)+1)-idetc(idebc(iclc))
         if(igener==0) n=1
         ! Appel a la boucle interne
         if(longc/=0.or.n/=0) itest(24)=1
         call ena_ccccd(aa1,longc,mdetc1(1:longc),mdetc2(1:longc),
     *   n,isgn=msgnc)
      endif
 
      if(w)print*,'mulccccx beta',x,y,z,t
         ! Adresse de la partie tp
         ! iclc1=iclasc(nca,ncb) -2<=nca<=2
         ! longc=nb cd string du CAS correspondant a la classe
      j1=idebc(iclc)-1
      j2=idebc(iclc)-1
      call cast(msgnc,j1,j2,iclc,iclc,x+16,y+16,z+16,t+16,longc,mdetc1
     *,mdetc2,llongc,nbc,nca,ncb)
      if(sel==2) then
         ! calcul selectionne
         ! 
         ! Dans cast, on a assigne a chaque element d'interaction
         ! une distance, = la distance max des 2 det CAS.
         !
         ! si on n'a pas (nca==0.and.ncb==0), les choses sont simples,
         ! il n'y a jamais de dist 0, don soit 1 soit 2. Les 1 on ete 
         ! places en tete de mdetc? et msgnc, les dist 2 en bout.
         !
         ! Selon les valeurs de nt et np, on va prendre toutes les
         ! interactions CAS, ou seulement celles de distance plus petites
         ! (mulcccc_sel)
         call mulcccc_sel(nca,ncb,longc,aa1,nbc,iclc)
      else
         n=idetc(idebc(iclc)+1)-idetc(idebc(iclc))
         if(igener==0) n=1
         ! Appel a la boucle interne
         if(longc/=0.or.n/=0) itest(24)=1
         call ena_ccccd(aa1,longc,mdetc1(1:longc),mdetc2(1:longc),
     *   n,isgn=msgnc)
      endif
      return
      end
