1 subroutine chain_symmetry(nchain,nres,itype,chain_border,
2 & chain_length,npermchain,tabpermchain)
4 c Determine chain symmetry. nperm is the number of permutations and
5 c tabperchain contains the allowed permutations of the chains.
9 include "COMMON.IOUNITS"
10 include "COMMON.CONTROL"
11 integer nchain,nres,itype(nres),chain_border(2,maxchain),
12 & chain_length(nchain),itemp(maxchain),
13 & npermchain,tabpermchain(maxchain,maxperm),
14 & tabperm(maxchain,maxperm),mapchain(maxchain),
15 & iequiv(maxchain,maxres),iflag(maxres)
16 integer i,j,k,l,ii,nchain_group,nequiv(maxchain),iieq,
21 c print*,"npermchain",npermchain," tabpermchain",tabpermchain(1,1)
25 c Look for equivalent chains
28 write(iout,*) "nchain",nchain
30 write(iout,*) "chain",i," from",chain_border(1,i),
31 & " to",chain_border(2,i)
33 & "sequence ",(itype(j),j=chain_border(1,i),chain_border(2,i))
41 if (iflag(i).gt.0) cycle
43 nchain_group=nchain_group+1
45 iequiv(iieq,nchain_group)=i
48 if (iflag(j).gt.0.or.chain_length(i).ne.chain_length(j)) cycle
50 c do while(k.lt.chain_length(i) .and.
51 c & itype(chain_border(1,i)+k).eq.itype(chain_border(1,j)+k))
52 do k=0,chain_length(i)-1
54 if (itype(chain_border(1,i)+k).ne.
55 & itype(chain_border(1,j)+k)) exit
57 if (k.lt.chain_length(i)) cycle
60 iequiv(iieq,nchain_group)=j
63 nequiv(nchain_group)=iieq
65 write(iout,*) "Number of equivalent chain groups:",nchain_group
66 write(iout,*) "Equivalent chain groups"
68 write(iout,*) "group",i," #members",nequiv(i)," chains",
69 & (iequiv(j,i),j=1,nequiv(i))
75 mapchain(ind)=iequiv(j,i)
78 write (iout,*) "mapchain"
80 write (iout,*) i,mapchain(i)
84 call permut(nequiv(i),nperm,tabperm)
90 tabpermchain(k,j)=iequiv(tabperm(k,j),i)
95 npermchain=npermchain*nperm
101 tabpermchain(l,ind)=tabpermchain(l,j)
104 tabpermchain(ii+l,ind)=iequiv(tabperm(l,k),i)
113 itemp(mapchain(j))=tabpermchain(j,i)
116 tabpermchain(j,i)=itemp(j)
119 write(iout,*) "Number of chain permutations",npermchain
120 write(iout,*) "Permutations"
122 write(iout,'(20i4)') (tabpermchain(j,i),j=1,nchain)
126 c---------------------------------------------------------------------
127 integer function tperm(i,iperm,tabpermchain)
131 integer tabpermchain(maxchain,maxperm)
135 tperm=tabpermchain(i,iperm)