Adam's unres update
[unres.git] / source / unres / src-HCD-5D / chain_symmetry.F
index 1406d1d..d10c33f 100644 (file)
@@ -1,5 +1,6 @@
       subroutine chain_symmetry(nchain,nres,itype,chain_border,
-     &    chain_length,npermchain,tabpermchain)
+     &    chain_length,npermchain,tabpermchain,nchain_group,nequiv,
+     &    iequiv,chaingroup)
 c
 c Determine chain symmetry. nperm is the number of permutations and
 c tabperchain contains the allowed permutations of the chains.
@@ -7,17 +8,22 @@ c
       implicit none
       include "DIMENSIONS"
       include "COMMON.IOUNITS"
+      include "COMMON.CONTROL"
       integer nchain,nres,itype(nres),chain_border(2,maxchain),
      &  chain_length(nchain),itemp(maxchain),
      &  npermchain,tabpermchain(maxchain,maxperm),
      &  tabperm(maxchain,maxperm),mapchain(maxchain),
-     &  iequiv(maxchain,maxres),iflag(maxres)
+     &  chaingroup(maxchain),iequiv(maxchain,maxres),iflag(maxres)
       integer i,j,k,l,ii,nchain_group,nequiv(maxchain),iieq,
      &  nperm,npermc,ind
+      logical lprn /.false./
       if (nchain.eq.1) then
         npermchain=1
         tabpermchain(1,1)=1
 c        print*,"npermchain",npermchain," tabpermchain",tabpermchain(1,1)
+        nchain_group=1
+        iequiv(1,1)=1
+        chaingroup(1)=1 
         return
       endif
 c
@@ -42,6 +48,7 @@ c
         nchain_group=nchain_group+1
         iieq=1
         iequiv(iieq,nchain_group)=i
+        if (symetr.eq.1) then
         do j=i+1,nchain 
           if (iflag(j).gt.0.or.chain_length(i).ne.chain_length(j)) cycle
 c          k=0
@@ -57,6 +64,7 @@ c            k=k+1
           iieq=iieq+1
           iequiv(iieq,nchain_group)=j
         enddo
+        endif
         nequiv(nchain_group)=iieq
       enddo
       write(iout,*) "Number of equivalent chain groups:",nchain_group
@@ -70,12 +78,24 @@ c            k=k+1
         do j=1,nequiv(i)
           ind=ind+1
           mapchain(ind)=iequiv(j,i)
+          chaingroup(ind)=i
         enddo
       enddo
       write (iout,*) "mapchain"
       do i=1,nchain
         write (iout,*) i,mapchain(i)
       enddo 
+      write (iout,*) "chaingroup"
+      do i=1,nchain
+        write (iout,*) i,chaingroup(i)
+      enddo 
+      if (npermut.eq.0) then
+        npermchain=1
+        do i=1,nchain
+          tabpermchain(i,1)=i
+        enddo
+        return
+      endif
       ii=0
       do i=1,nchain_group
         call permut(nequiv(i),nperm,tabperm)
@@ -114,10 +134,12 @@ c            k=k+1
         enddo
       enddo 
       write(iout,*) "Number of chain permutations",npermchain
+      if (lprn) then
       write(iout,*) "Permutations"
       do i=1,npermchain
         write(iout,'(20i4)') (tabpermchain(j,i),j=1,nchain)
       enddo
+      endif
       return
       end
 c---------------------------------------------------------------------