update new files
[unres.git] / source / cluster / wham / src-M-SAXS-homology / oligomer.f
1       subroutine oligomer
2       implicit none
3       include "DIMENSIONS"
4       include "COMMON.CHAIN"
5       include "COMMON.INTERACT"
6       include "COMMON.IOUNITS"
7       integer nchain,i,ii,ipi,ipj,ipmin,j,jmin,k,ix,iy,iz,
8      &  ixmin,iymin,izmin
9       logical newchain 
10       integer ichain(2,20),iper(20),iaux
11       double precision dchain,dchainmin,cmchain(3,20)
12       nchain=1
13       newchain=.false.
14       ichain(1,nchain)=1
15       do i=2,nres
16         if (itype(i).eq.ntyp1) then
17           if (newchain) then
18             ichain(2,nchain)=i
19             nchain=nchain+1
20             newchain=.false.
21           else 
22             newchain=.true.
23             ichain(1,nchain)=i
24           endif
25         endif   
26       enddo
27       ichain(2,nchain)=nres
28       write (iout,*) "Chains"
29       do i=1,nchain
30         write (iout,*) i,ichain(1,i),ichain(2,i)
31       enddo
32       cmchain=0.0d0
33       do i=1,nchain
34         ii=0
35         do j=ichain(1,i),ichain(2,i)
36           if (itype(j).eq.ntyp1) cycle
37           ii=ii+1
38           do k=1,3
39             cmchain(k,i)=cmchain(k,i)+c(k,j)
40           enddo
41         enddo
42         do k=1,3
43           cmchain(k,i)=cmchain(k,i)/ii
44         enddo
45       enddo
46       do i=1,nchain
47         iper(i)=i
48       enddo
49       do i=1,nchain
50         dchainmin=1.0d10
51         do j=i+1,nchain
52           ipi=iper(i)
53           ipj=iper(j)
54           do ix=-1,1
55             do iy=-1,1
56               do iz=-1,1
57                 dchain=(cmchain(1,ipj)-cmchain(1,ipi)+ix*boxxsize)**2+
58      &                 (cmchain(2,ipj)-cmchain(2,ipi)+iy*boxysize)**2+
59      &                 (cmchain(3,ipj)-cmchain(3,ipi)+iz*boxzsize)**2
60                 if (dchain.lt.dchainmin) then
61                   dchainmin=dchain
62                   ixmin=ix
63                   iymin=iy
64                   izmin=iz
65                   jmin=j
66                 endif
67               enddo
68             enddo
69           enddo
70         enddo
71         cmchain(1,jmin)=cmchain(1,jmin)+ixmin*boxxsize
72         cmchain(2,jmin)=cmchain(2,jmin)+iymin*boxysize
73         cmchain(3,jmin)=cmchain(3,jmin)+izmin*boxzsize
74         do k=ichain(1,jmin),ichain(2,jmin)
75           c(1,k)=c(1,k)+ixmin*boxxsize
76           c(2,k)=c(2,k)+iymin*boxysize
77           c(3,k)=c(3,k)+izmin*boxzsize
78         enddo
79         write (iout,*) "jmin",jmin," ixmin",ixmin," iymin",iymin,
80      &   " izmin",izmin
81         iaux=iper(i+1)
82         iper(i+1)=iper(jmin)
83         iper(jmin)=iaux
84       enddo
85       return
86       end