      subroutine rang2s(nat,ial,idet1,irang)
c---------------------------------------------------------------------
c    entree:
c    nat = nb d'orbitales
c    ial = nb d'electrons
c    idet1 = numero des orb ou st les electrons
c    sortie :
c    irang = adresse de la partie alpha (ou beta) du determinant du CAS
c---------------------------------------------------------------------
      PARAMETER (maxorbcas=16,maxsym=8)
      include 'maxorb.prm'
      IMPLICIT INTEGER(A-H,O-x,z),LOGICAL*1(y)
      dimension idet1(maxorbcas)
      common /zs/ izs(maxorbcas+4,maxorbcas+4,maxorbcas+4,maxorbcas+4)
      common /cs/ noac,nelac,numac(maxorbcas),itype(maxorb),is0,ms2
      common/sy2/nts(maxsym),ncs(maxsym),nps(maxsym)
     *,norbs(maxsym)
      common /prep/ nca0,ncb0,ic0(maxorbcas),icamun(maxorb+maxorb)
     *,numt(maxorb),nump(maxorb),nv
     *,gener,yoc(maxorb+maxorb),yrefc(maxorbcas),yac(maxorb)
     *,ygmono,ygddci,ygddc2,ygcas,ygtous
      character*4 gener
      yw=.false.
      if(yw)write(6,*)'entree dans rang2s'
      if(yw)write(6,*)'nat,ial,idet1',nat,ial,(idet1(k),k=1,ial)
      if(ial.eq.2) then
         irang=(idet1(2)-1)*(idet1(2)-2)/2+idet1(1)
      else if(ial.eq.1) then
         irang=idet1(1)
      else if(ial.eq.0) then
         irang=1
      else
         irang=1
         DO 1 I=1,ial
         ID=idet1(I)
         irang=irang+izs(I,ID,ial,nat)
         if(yw)print*,'I,ID,ial,nat,izs',I,ID,ial,nat,izs(I,ID,ial,nat)
 1       continue
      endif
      return
      end
       subroutine rang3s(nat,ial,idet1,irang)
c---------------------------------------------------------------------
c    entree:
c    nat = nb d'orbitales
c    ial = nb d'electrons
c    idet1 = numero des orb ou st les electrons
c    sortie :
c    irang = adresse de la partie alpha (ou beta) du determinant du CAS
c---------------------------------------------------------------------
      PARAMETER (maxorbcas=16,maxsym=8)
      include 'maxorb.prm'
      IMPLICIT INTEGER(A-H,O-x,z),LOGICAL*1(y)
      dimension idet1(maxorbcas)
      common /zs/ izs(maxorbcas+4,maxorbcas+4,maxorbcas+4,maxorbcas+4)
      common /cs/ noac,nelac,numac(maxorbcas),itype(maxorb),is0,ms2
      common/sy2/nts(maxsym),ncs(maxsym),nps(maxsym)
     *,norbs(maxsym)
      common /prep/ nca0,ncb0,ic0(maxorbcas),icamun(maxorb+maxorb)
     *,numt(maxorb),nump(maxorb),nv
     *,gener,yoc(maxorb+maxorb),yrefc(maxorbcas),yac(maxorb)
     *,ygmono,ygddci,ygddc2,ygcas,ygtous
      character*4 gener
      yw=.false.
      if(yw)write(6,*)'entree dans rang2s'
      if(yw)write(6,*)'nat,ial,idet1',nat,ial,(idet1(k),k=1,ial)
      if(ial.eq.2) then
c         irang=(idet1(2)-1)*(idet1(2)-2)/2+idet1(1)
         irang=(idet1(1)-1)*nat-(idet1(1)*(idet1(1)+1))/2+idet1(2)
c        rang3s mis egal a rang2s pour test
c        a rechanger!!!!!!
      else if(ial.eq.1) then
         irang=idet1(1)
      else if(ial.eq.0) then
         irang=1
      else
         irang=1
         DO 1 I=1,ial
         ID=idet1(I)
         irang=irang+izs(I,ID,ial,nat)
         if(yw)print*,'I,ID,ial,nat,izs',I,ID,ial,nat,izs(I,ID,ial,nat)
 1       continue
      endif
      return
      end
