update
[unres.git] / source / unres / src_MD-M / csa.f
1       subroutine make_array
2       implicit real*8 (a-h,o-z)
3       include 'DIMENSIONS'
4       include 'COMMON.IOUNITS'
5       include 'COMMON.CHAIN'
6       include 'COMMON.INTERACT'
7       include 'COMMON.CSA'
8
9 ccccccccccccccccccccccccc
10 c Level-2: group
11 ccccccccccccccccccccccccc
12
13       indg=0
14       do k=1,numch
15 ccccccccccccccccccccccccccccccccccccccccc
16 ! Groups the THETAs and the GAMMAs
17        do j=2,nres-1
18          indg=indg+1
19          if (j.lt.nres-1) then
20            ngroup(indg)=2
21          else
22            ngroup(indg)=1
23          endif
24          do i=1,ngroup(indg)
25           igroup(1,i,indg)=i
26           igroup(2,i,indg)=j
27           igroup(3,i,indg)=k
28          enddo
29        enddo
30 ccccccccccccccccccccccccccccccccccccccccc
31       enddo
32 ! Groups the ALPHAs and the BETAs
33       do k=1,numch
34        do j=2,nres-1
35         if(itype(j).ne.10) then
36          indg=indg+1
37          ngroup(indg)=2
38          do i=1,ngroup(indg)
39           igroup(1,i,indg)=i+2
40           igroup(2,i,indg)=j
41           igroup(3,i,indg)=k
42          enddo
43         endif
44        enddo
45       enddo
46
47       ntotgr=indg
48       write(iout,*) 
49       write(iout,*) "# of groups: ",ntotgr
50       do i=1,ntotgr
51        write(iout,41) i,ngroup(i),((igroup(k,j,i),k=1,3),j=1,ngroup(i))
52       enddo
53 !      close(iout)
54
55    40 format(i3,3x,3i3)
56    41 format(2i3,3x,6(3i3,2x))
57
58       return
59       end
60 ccccccccccccccccccccccccccccccccccccccccccccccccc
61 ccccccccccccccccccccccccccccccccccccccccccccccccc
62       subroutine make_ranvar(n,m,idum)
63       implicit real*8 (a-h,o-z)
64       include 'DIMENSIONS'
65       include 'COMMON.IOUNITS'
66       include 'COMMON.CHAIN'
67       include 'COMMON.VAR'
68       include 'COMMON.BANK'
69 c al      m=0
70       print *,'HOHOHOHO Make_RanVar!!!!!',n,m
71       itrial=0
72       do while(m.lt.n .and. itrial.le.10000)
73         itrial=itrial+1
74         jeden=1
75         nrestmp=nres
76         call gen_rand_conf(jeden,nrestmp,*10)
77 !        call intout
78         m=m+1
79         do j=2,nres-1
80           dihang_in(1,j,1,m)=theta(j+1)
81           dihang_in(2,j,1,m)=phi(j+2)
82           dihang_in(3,j,1,m)=alph(j)
83           dihang_in(4,j,1,m)=omeg(j)
84         enddo  
85         dihang_in(2,nres-1,1,m)=0.0d0
86         goto 20
87   10    write (iout,*) 'Failed to generate conformation #',m+1,
88      &   ' itrial=',itrial
89   20    continue
90       enddo
91       print *,'Make_RanVar!!!!! m=',m,' itrial=',itrial
92
93       return
94       end
95 ccccccccccccccccccccccccccccccccccccccccccccccccc
96 ccccccccccccccccccccccccccccccccccccccccccccccccc
97       subroutine make_ranvar_reg(n,idum)
98       implicit real*8 (a-h,o-z)
99       include 'DIMENSIONS'
100       include 'COMMON.IOUNITS'
101       include 'COMMON.CHAIN'
102       include 'COMMON.VAR'
103       include 'COMMON.BANK'
104       include 'COMMON.GEO'
105       m=0
106       print *,'HOHOHOHO Make_RanVar!!!!!'
107       itrial=0
108       do while(m.lt.n .and. itrial.le.10000)
109         itrial=itrial+1
110         jeden=1
111         nrestmp=nres
112         call gen_rand_conf(jeden,nrestmp,*10)
113 !        call intout
114         m=m+1
115         do j=2,nres-1
116           dihang_in(1,j,1,m)=theta(j+1)
117           dihang_in(2,j,1,m)=phi(j+2)
118           dihang_in(3,j,1,m)=alph(j)
119           dihang_in(4,j,1,m)=omeg(j)
120           if(m.le.n*0.1) then
121            dihang_in(1,j,1,m)=90.0*deg2rad
122            dihang_in(2,j,1,m)=50.0*deg2rad
123           endif
124         enddo  
125         dihang_in(2,nres-1,1,m)=0.0d0
126         goto 20
127   10    write (iout,*) 'Failed to generate conformation #',m+1,
128      &   ' itrial=',itrial
129   20    continue
130       enddo
131       print *,'Make_RanVar!!!!! m=',m,' itrial=',itrial
132
133       return
134       end
135 ccccccccccccccccccccccccccccccccccccccccccccccccc
136 ccccccccccccccccccccccccccccccccccccccccccccccccc
137       subroutine from_pdb(n,idum)
138 c This subroutine stores the UNRES int variables generated from 
139 c subroutine readpdb into the 1st conformation of in dihang_in.
140 c Subsequent n-1 conformations of dihang_in have identical values
141 c of theta and phi as the 1st conformation but random values for
142 c alph and omeg.
143 c The array cref (also generated from subroutine readpdb) is stored
144 c to crefjlee to be used for rmsd calculation in CSA, if necessary.
145       implicit real*8 (a-h,o-z)
146       include 'DIMENSIONS'
147       include 'COMMON.IOUNITS'
148       include 'COMMON.CHAIN'
149       include 'COMMON.VAR'
150       include 'COMMON.BANK'
151       include 'COMMON.GEO'
152
153       m=1
154       do j=2,nres-1
155         dihang_in(1,j,1,m)=theta(j+1)
156         dihang_in(2,j,1,m)=phi(j+2)
157         dihang_in(3,j,1,m)=alph(j)
158         dihang_in(4,j,1,m)=omeg(j)
159       enddo
160       dihang_in(2,nres-1,1,k)=0.0d0
161
162       do m=2,n
163        do k=2,nres-1
164         dihang_in(1,k,1,m)=dihang_in(1,k,1,1)
165         dihang_in(2,k,1,m)=dihang_in(2,k,1,1)
166         if(dabs(dihang_in(3,k,1,1)).gt.1.d-6) then
167          dihang_in(3,k,1,m)=90.d0*ran1(idum)+90.d0
168          dihang_in(3,k,1,m)=dihang_in(3,k,1,m)*deg2rad
169         endif
170         if(dabs(dihang_in(4,k,1,1)).gt.1.d-6) then
171          dihang_in(4,k,1,m)=360.d0*ran1(idum)-180.d0
172          dihang_in(4,k,1,m)=dihang_in(4,k,1,m)*deg2rad
173         endif
174        enddo
175       enddo
176
177 c Store cref to crefjlee (they are in COMMON.CHAIN).
178       do k=1,2*nres
179        do kk=1,3
180         kkk=1
181         crefjlee(kk,k)=cref(kk,k,kkk)
182        enddo
183       enddo
184
185       open(icsa_native_int,file=csa_native_int,status="old")
186       do m=1,n
187          write(icsa_native_int,*) m,e
188          write(icsa_native_int,200) 
189      &    (dihang_in(1,k,1,m)*rad2deg,k=2,nres-1)
190          write(icsa_native_int,200) 
191      &    (dihang_in(2,k,1,m)*rad2deg,k=2,nres-2)
192          write(icsa_native_int,200) 
193      &    (dihang_in(3,k,1,m)*rad2deg,k=2,nres-1)
194          write(icsa_native_int,200) 
195      &    (dihang_in(4,k,1,m)*rad2deg,k=2,nres-1)
196       enddo
197
198       do k=1,nres
199        write(icsa_native_int,200) (crefjlee(i,k),i=1,3)
200       enddo
201       close(icsa_native_int)
202
203   200 format (8f10.4)
204
205       return
206       end
207 ccccccccccccccccccccccccccccccccccccccccccccccccc
208 ccccccccccccccccccccccccccccccccccccccccccccccccc
209       subroutine from_int(n,mm,idum)
210       implicit real*8 (a-h,o-z)
211       include 'DIMENSIONS'
212       include 'COMMON.IOUNITS'
213       include 'COMMON.CHAIN'
214       include 'COMMON.VAR'
215       include 'COMMON.INTERACT'
216       include 'COMMON.BANK'
217       include 'COMMON.GEO'
218       include 'COMMON.CONTACTS'
219       integer ilen
220       external ilen
221       logical fail
222       double precision energia(0:n_ene)
223
224       open(icsa_native_int,file=csa_native_int,status="old")
225       read (icsa_native_int,*)
226       call read_angles(icsa_native_int,*10)
227       goto 11
228    10 write (iout,'(2a)') "CHUJ NASTAPIL - error in ",
229      &  csa_native_int(:ilen(csa_native_int))
230    11 continue
231       call intout
232       do j=2,nres-1
233         dihang_in(1,j,1,1)=theta(j+1)
234         dihang_in(2,j,1,1)=phi(j+2)
235         dihang_in(3,j,1,1)=alph(j)
236         dihang_in(4,j,1,1)=omeg(j)
237       enddo
238       dihang_in(2,nres-1,1,1)=0.0d0
239
240 c         read(icsa_native_int,*) ind,e
241 c         read(icsa_native_int,200) (dihang_in(1,k,1,1),k=2,nres-1)
242 c         read(icsa_native_int,200) (dihang_in(2,k,1,1),k=2,nres-2)
243 c         read(icsa_native_int,200) (dihang_in(3,k,1,1),k=2,nres-1)
244 c         read(icsa_native_int,200) (dihang_in(4,k,1,1),k=2,nres-1)
245 c         dihang_in(2,nres-1,1,1)=0.d0
246
247          maxsi=100
248          maxcount_fail=100
249
250          do m=mm+2,n
251 c          do k=2,nres-1
252 c           dihang_in(1,k,1,m)=dihang_in(1,k,1,1)
253 c           dihang_in(2,k,1,m)=dihang_in(2,k,1,1)
254 c           if(abs(dihang_in(3,k,1,1)).gt.1.d-3) then
255 c            dihang_in(3,k,1,m)=90.d0*ran1(idum)+90.d0
256 c           endif
257 c           if(abs(dihang_in(4,k,1,1)).gt.1.d-3) then
258 c            dihang_in(4,k,1,m)=360.d0*ran1(idum)-180.d0
259 c           endif
260 c          enddo
261 c           call intout
262            fail=.true.
263
264            icount_fail=0
265
266            DO WHILE (FAIL .AND. ICOUNT_FAIL .LE. MAXCOUNT_FAIL)
267
268            do i=nnt,nct
269              if (itype(i).ne.10) then
270 cd             print *,'i=',i,' itype=',itype(i),' theta=',theta(i+1)
271                fail=.true.
272                ii=0
273                do while (fail .and. ii .le. maxsi)
274                  call gen_side(itype(i),theta(i+1),alph(i),omeg(i),fail)
275                  ii = ii+1
276                enddo
277              endif
278            enddo
279            call chainbuild
280            call etotal(energia(0))
281            fail = (energia(0).ge.1.0d20)
282            icount_fail=icount_fail+1
283
284            ENDDO
285
286            if (icount_fail.gt.maxcount_fail) then
287              write (iout,*) 
288      &       'Failed to generate non-overlaping near-native conf.',
289      &       m
290            endif
291
292            do j=2,nres-1
293              dihang_in(1,j,1,m)=theta(j+1)
294              dihang_in(2,j,1,m)=phi(j+2)
295              dihang_in(3,j,1,m)=alph(j)
296              dihang_in(4,j,1,m)=omeg(j)
297            enddo
298            dihang_in(2,nres-1,1,m)=0.0d0
299          enddo
300
301 c      do m=1,n
302 c        write(icsa_native_int,*) m,e
303 c         write(icsa_native_int,200) (dihang_in(1,k,1,m),k=2,nres-1)
304 c         write(icsa_native_int,200) (dihang_in(2,k,1,m),k=2,nres-2)
305 c         write(icsa_native_int,200) (dihang_in(3,k,1,m),k=2,nres-1)
306 c         write(icsa_native_int,200) (dihang_in(4,k,1,m),k=2,nres-1)
307 c      enddo
308 c     close(icsa_native_int)
309
310 c      do m=mm+2,n
311 c       do i=1,4
312 c        do j=2,nres-1
313 c         dihang_in(i,j,1,m)=dihang_in(i,j,1,m)*deg2rad
314 c        enddo
315 c       enddo
316 c      enddo
317
318       call dihang_to_c(dihang_in(1,1,1,1))
319
320 c Store c to cref (they are in COMMON.CHAIN).
321       do k=1,2*nres
322        do kk=1,3
323         crefjlee(kk,k)=c(kk,k)
324        enddo
325       enddo
326
327       call contact(.true.,ncont_ref,icont_ref,co)
328
329 c      do k=1,nres
330 c       write(icsa_native_int,200) (crefjlee(i,k),i=1,3)
331 c      enddo
332       close(icsa_native_int)
333
334   200 format (8f10.4)
335
336       return
337       end
338 ccccccccccccccccccccccccccccccccccccccccccccccccc
339 ccccccccccccccccccccccccccccccccccccccccccccccccc
340       subroutine dihang_to_c(aarray)
341       implicit real*8 (a-h,o-z)
342       include 'DIMENSIONS'
343       include 'COMMON.CSA'
344       include 'COMMON.BANK'
345       include 'COMMON.CHAIN'
346       include 'COMMON.GEO'
347       include 'COMMON.VAR'
348
349       dimension aarray(mxang,maxres,mxch)
350
351 c     do i=4,nres
352 c      phi(i)=dihang_in(1,i-2,1,1)
353 c     enddo
354       do i=2,nres-1
355        theta(i+1)=aarray(1,i,1)
356        phi(i+2)=aarray(2,i,1)
357        alph(i)=aarray(3,i,1)
358        omeg(i)=aarray(4,i,1)
359       enddo
360
361       call chainbuild
362
363       return
364       end
365 ccccccccccccccccccccccccccccccccccccccccccccccccc
366 ccccccccccccccccccccccccccccccccccccccccccccccccc