subroutine reorsy
Use lewis_module !module des variables
Use mod_script   !module de Daniel
implicit real*8 (a-h,o-x,z),logical*1(y)
dimension jsymt1(9),ws(8)
real(8),allocatable :: occtmp(:)
dimension isym_ol(8)
logical,allocatable :: occupat_tri(:)
yw=.false.
yw=(yw.or.nprint==5).and..not.nprint==-5

       !call mscript(orb)
allocate(occtmp(norb))
allocate(occupat_tri(norb))
jsymt(1:nsym+1)=isymt(1:nsym+1)
jsymt1(1:nsym+1)=jsymt(1:nsym+1)
!
!---------------------------------------------------------------------
! lit les orbitales finales (symetriques, et ecrites en base d'OA de
! symetrie), trouve leur symetrie et les reordonne par symetrie
!---------------------------------------------------------------------
!
nocs=0
isym_ol=0
ivalence=0
frozen(:)=0
delete(:)=0
fsigpi(:)='????'

allocate(ORB2(NORB,NORB))
!if(mprint(1)>1) then
!   print*,'orbitales locales'
!   call mscript(orb)
!endif
do i=1,norb
   if(mprint(1)>1) then
      print*,'orbitale dont on cherche la symetrie:',i
      do k=1,norb
         if(abs(orb(k,i))>1.d-6) print*,label0(k),orb(k,i),k
      enddo
   endif

!        A quelle symetrie appartient l'OLS i ?
   do j=1,nsym
      ws(j)=0.d0
      do k=jsymt(j)+1,jsymt(j+1)
         ws(j)=ws(j)+orb(k,i)*orb(k,i)
      enddo
   enddo
   is=0
   do j=1,nsym
      if(ws(j)>1.d-8) then
         if(is/=0) then
            print'(a,i4,a)','erreur dans reorsy : l''orbitale',i, &
            ' peut etre attribuee a plusieurs symetries'
            print*,'recouvrements',ws(1:nsym)
                  !call mscript(orb(:,i:i))
            print*,label_ol(i)
            do k=1,norb
               if(abs(orb(k,i))>1.d-6) print*,label0(k),orb(k,i)
            enddo
            stop
         endif
         is=j

         ! ecritures
         if(norb<=20.or.mprint(1)>=1) then
            if(occupat(i)) then
               print'(20x,a,i4,a,i2,a,i6)','l''orb',i, &
               ' est de sym',is,'   '//label_ol(i)//'   (OCC)',isym_ol(is)+1
            else
               print'(20x,a,i4,a,i2,a,i6)','l''orb',i, &
               ' est de sym',is,'   '//label_ol(i)//'   (VIR)',isym_ol(is)+1
            endif
         endif

         ! calcule infos sur les OL
         yG=label_OL(i)(1:1)=='c'.or.label_OL(i)(1:1)=='o'.or.label_OL(i)(1:1)=='t'
         isym_ol(is)=isym_ol(is)+1
         if(yG.and.occ(i)==2.d0) frozen(is)=frozen(is)+1
         if(yG.and.occ(i)==0.d0) delete(is)=delete(is)+1
         jsymt1(is)=jsymt1(is)+1
         if(occupat(i)) nocs(is)=nocs(is)+1
         if(label_OL(i)(1:1)=='A') then
            noacs(is)=noacs(is)+1
                  !print*,'is,noacs(is)',is,noacs(is)
            if(occupat(i)) nocs(is)=nocs(is)-1
                  !if(occupat(i))print*,'-NOCS,is,nocs(is)',is,nocs(is)
         endif
               !if(occupat(i)) print*,'+NOCS,is,nocs(is)',is,nocs(is)
         orb2(:,jsymt1(is))=orb(:,i)
         label_ol_temp(jsymt1(is))=label_ol(i)
         occtmp(jsymt1(is))=occ(i)
         fnat(jsymt1(is))=fnat2(i)
         focvir(jsymt1(is))=focvir2(i)
         occupat_tri(jsymt1(is))=occupat(i)
         fsigpi(jsymt1(is))=fsigpi2(i)
         ycopy(jsymt1(is))=ycopy2(i)
         atoms_in_LO(jsymt1(is),1:fnat2(i))= &
         atoms_in_LO2(i,1:fnat2(i))
         if(fsigpi2(i)=='CORE') then
            icoeur(is)=icoeur(is)+1
         else
            if(label_ol(i)(1:1)/='T'.and.label_ol(i)(1:1)/='t') ivalence(is)=ivalence(is)+1
         endif
      endif
   enddo
   if(is==0) then
      print'(a,i4,a)','erreur dans reorsy : l''orbitale',i, &
      ' ne peut pas etre attribuee a une symetrie'
              !call mscript(orb)
        print*,label_ol(i)
      stop
   endif
enddo
if(yw)print'(a,8i4)','isym   ',isym(1:nsym)
if(yw)print'(a,8i4)','isym_ol',isym_ol(1:nsym)
!
! Si scforbin==' ', fermi0 n'a pas ete calcule, car lir_Orb_Ref n'a
! pas ete appele dans lewis.
! il est mis egal a nocs
if(scforbin==' '.and.fermi0(1)==0) then
   print*,"scforbin==' ' (pas d'orbitales de reference)"
   print*,'Il faut donner fermi0'
   stop
endif

print*,' '
print*,' ','Les OL ont ete reordonnees par symetrie'
print*,' '
print'(a,8i4)',"nb d'OL par symetrie            ",isym_ol(1:nsym)
print'(a,8i4)',"nb d'OM de Ref par symetrie     ",isym(1:nsym)
print'(a,8i4)',"OM de Ref : Fermi               ",fermi0(1:nsym)
print'(a,8i4)',"nb d'OL actives par symetrie    ",noacs(1:nsym)
print'(a,8i4)',"nb de Ref actives par symetrie  ",ref_act(1:nsym)
print'(a,8i4)',"nb d'OL inactives par symetrie  ",nocs(1:nsym)
print'(a,8i4)',"nb de Ref inactives par symetrie",ref_inac(1:nsym)
if(any(isym(1:nsym)/=isym_ol(1:nsym))) then
   print*, &
   'le nb d''OL par sym n''est pas egal au nb d''OA par sym'
   stop
endif
      !ivalence(1:nsym)=nocs(1:nsym)-icoeur(1:nsym)
occ=occtmp
label_ol=label_ol_temp
orb(:,:)=orb2(:,:)
occupat=occupat_tri
deallocate(orb2)
deallocate(occupat_tri)
print*,'-----------------------------------------------------'
end
