2 implicit real*8 (a-h,o-z)
8 include 'COMMON.CONTROL'
9 include 'COMMON.SBRIDGE'
10 include 'COMMON.IOUNITS'
12 C Read force-field parameters except weights
14 C Read job setup parameters
16 C Read control parameters for energy minimzation if required
17 if (minim) call read_minim
18 C Read MCM control parameters if required
19 c if (modecalc.eq.3 .or. modecalc.eq.6) call mcmread
20 C Read MD control parameters if reqjuired
21 c if (modecalc.eq.12) call read_MDpar
22 C Read MREMD control parameters if required
23 c if (modecalc.eq.14) then
27 C Read MUCA control parameters if required
28 c if (lmuca) call read_muca
29 C Read CSA control parameters if required (from fort.40 if exists
30 C otherwise from general input file)
31 if (modecalc.eq.8) then
32 inquire (file="fort.40",exist=file_exist)
33 if (.not.file_exist) call csaread
35 cfmc if (modecalc.eq.10) call mcmfread
36 C Read molecule information, molecule geometry, energy-term weights, and
37 C restraints if requested
40 C Print restraint information
42 if (.not. out1file .or. me.eq.king) then
45 &write (iout,'(a,i5,a)') "The following",nhpb-nss,
46 & " distance constraints have been imposed"
48 write (iout,'(3i6,f10.5)') i-nss,ihpb(i),jhpb(i),forcon(i)
53 c print *,"Processor",myrank," leaves READRTNS"
56 C-------------------------------------------------------------------------------
57 subroutine read_control
61 implicit real*8 (a-h,o-z)
65 logical OKRandom, prng_restart
68 include 'COMMON.IOUNITS'
69 include 'COMMON.TIME1'
70 c include 'COMMON.THREAD'
71 include 'COMMON.SBRIDGE'
72 include 'COMMON.CONTROL'
74 c include 'COMMON.MAP'
75 include 'COMMON.HEADER'
77 include 'COMMON.CHAIN'
78 c include 'COMMON.MUCA'
80 include 'COMMON.FFIELD'
81 include 'COMMON.SETUP'
82 COMMON /MACHSW/ KDIAG,ICORFL,IXDR
83 character*8 diagmeth(0:3) /'Library','EVVRSP','Givens','Jacobi'/
85 character*320 controlcard
90 read (INP,'(a)') titel
91 call card_concat(controlcard)
92 c out1file=index(controlcard,'OUT1FILE').gt.0 .or. fg_rank.gt.0
93 c print *,"Processor",me," fg_rank",fg_rank," out1file",out1file
94 call reada(controlcard,'SEED',seed,0.0D0)
95 call random_init(seed)
96 C Set up the time limit (caution! The time must be input in minutes!)
97 read_cart=index(controlcard,'READ_CART').gt.0
98 call readi(controlcard,'CONSTR_DIST',constr_dist,0)
99 call reada(controlcard,'TIMLIM',timlim,960.0D0) ! default 16 hours
100 unres_pdb = index(controlcard,'UNRES_PDB') .gt. 0
101 call reada(controlcard,'SAFETY',safety,30.0D0) ! default 30 minutes
102 call reada(controlcard,'RMSDBC',rmsdbc,3.0D0)
103 call reada(controlcard,'RMSDBC1',rmsdbc1,0.5D0)
104 call reada(controlcard,'RMSDBC1MAX',rmsdbc1max,1.5D0)
105 call reada(controlcard,'RMSDBCM',rmsdbcm,3.0D0)
106 call reada(controlcard,'DRMS',drms,0.1D0)
107 if(me.eq.king .or. .not. out1file .and. fg_rank.eq.0) then
108 write (iout,'(a,f10.1)')'RMSDBC = ',rmsdbc
109 write (iout,'(a,f10.1)')'RMSDBC1 = ',rmsdbc1
110 write (iout,'(a,f10.1)')'RMSDBC1MAX = ',rmsdbc1max
111 write (iout,'(a,f10.1)')'DRMS = ',drms
112 write (iout,'(a,f10.1)')'RMSDBCM = ',rmsdbcm
113 write (iout,'(a,f10.1)') 'Time limit (min):',timlim
115 call readi(controlcard,'NZ_START',nz_start,0)
116 call readi(controlcard,'NZ_END',nz_end,0)
117 call readi(controlcard,'IZ_SC',iz_sc,0)
119 safety = 60.0d0*safety
122 call reada(controlcard,"T_BATH",t_bath,300.0d0)
123 minim=(index(controlcard,'MINIMIZE').gt.0)
124 dccart=(index(controlcard,'CART').gt.0)
125 overlapsc=(index(controlcard,'OVERLAP').gt.0)
126 overlapsc=.not.overlapsc
127 searchsc=(index(controlcard,'NOSEARCHSC').gt.0)
128 searchsc=.not.searchsc
129 sideadd=(index(controlcard,'SIDEADD').gt.0)
130 energy_dec=(index(controlcard,'ENERGY_DEC').gt.0)
131 outpdb=(index(controlcard,'PDBOUT').gt.0)
132 outmol2=(index(controlcard,'MOL2OUT').gt.0)
133 pdbref=(index(controlcard,'PDBREF').gt.0)
134 refstr=pdbref .or. (index(controlcard,'REFSTR').gt.0)
135 indpdb=index(controlcard,'PDBSTART')
136 extconf=(index(controlcard,'EXTCONF').gt.0)
137 call readi(controlcard,'IPRINT',iprint,0)
138 call readi(controlcard,'MAXGEN',maxgen,10000)
139 call readi(controlcard,'MAXOVERLAP',maxoverlap,1000)
140 call readi(controlcard,"KDIAG",kdiag,0)
141 call readi(controlcard,"RESCALE_MODE",rescale_mode,0)
142 if(me.eq.king .or. .not. out1file .and. fg_rank.eq.0)
143 & write (iout,*) "RESCALE_MODE",rescale_mode
144 split_ene=index(controlcard,'SPLIT_ENE').gt.0
145 if (index(controlcard,'REGULAR').gt.0.0D0) then
146 call reada(controlcard,'WEIDIS',weidis,0.1D0)
150 if (index(controlcard,'CHECKGRAD').gt.0) then
152 if (index(controlcard,'CART').gt.0) then
154 elseif (index(controlcard,'CARINT').gt.0) then
159 elseif (index(controlcard,'THREAD').gt.0) then
161 call readi(controlcard,'THREAD',nthread,0)
162 if (nthread.gt.0) then
163 call reada(controlcard,'WEIDIS',weidis,0.1D0)
166 & write (iout,'(a)')'A number has to follow the THREAD keyword.'
167 stop 'Error termination in Read_Control.'
169 else if (index(controlcard,'MCMA').gt.0) then
171 else if (index(controlcard,'MCEE').gt.0) then
173 else if (index(controlcard,'MULTCONF').gt.0) then
175 else if (index(controlcard,'MAP').gt.0) then
177 call readi(controlcard,'MAP',nmap,0)
178 else if (index(controlcard,'CSA').gt.0) then
180 crc else if (index(controlcard,'ZSCORE').gt.0) then
182 crc ZSCORE is rm from UNRES, modecalc=9 is available
185 cfcm else if (index(controlcard,'MCMF').gt.0) then
187 else if (index(controlcard,'SOFTREG').gt.0) then
189 else if (index(controlcard,'CHECK_BOND').gt.0) then
191 else if (index(controlcard,'TEST').gt.0) then
193 else if (index(controlcard,'MD').gt.0) then
195 else if (index(controlcard,'RE ').gt.0) then
199 lmuca=index(controlcard,'MUCA').gt.0
200 call readi(controlcard,'MUCADYN',mucadyn,0)
201 call readi(controlcard,'MUCASMOOTH',muca_smooth,0)
202 if (lmuca .and. (me.eq.king .or. .not.out1file ))
204 write (iout,*) 'MUCADYN=',mucadyn
205 write (iout,*) 'MUCASMOOTH=',muca_smooth
208 iscode=index(controlcard,'ONE_LETTER')
209 indphi=index(controlcard,'PHI')
210 indback=index(controlcard,'BACK')
211 iranconf=index(controlcard,'RAND_CONF')
212 i2ndstr=index(controlcard,'USE_SEC_PRED')
213 gradout=index(controlcard,'GRADOUT').gt.0
214 gnorm_check=index(controlcard,'GNORM_CHECK').gt.0
216 if(me.eq.king.or..not.out1file)
217 & write (iout,'(2a)') diagmeth(kdiag),
218 & ' routine used to diagonalize matrices.'
221 c------------------------------------------------------------------------------
224 C Read molecular data.
226 implicit real*8 (a-h,o-z)
232 include 'COMMON.IOUNITS'
235 include 'COMMON.INTERACT'
236 include 'COMMON.LOCAL'
237 include 'COMMON.NAMES'
238 include 'COMMON.CHAIN'
239 include 'COMMON.FFIELD'
240 include 'COMMON.SBRIDGE'
241 include 'COMMON.HEADER'
242 include 'COMMON.CONTROL'
243 c include 'COMMON.DBASE'
244 c include 'COMMON.THREAD'
245 include 'COMMON.CONTACTS'
246 include 'COMMON.TORCNSTR'
247 include 'COMMON.TIME1'
248 include 'COMMON.BOUNDS'
249 c include 'COMMON.MD'
250 c include 'COMMON.REMD'
251 include 'COMMON.SETUP'
252 character*4 sequence(maxres)
254 double precision x(maxvar)
255 character*256 pdbfile
256 character*320 weightcard
257 character*80 weightcard_t,ucase
258 dimension itype_pdb(maxres)
259 common /pizda/ itype_pdb
260 logical seq_comp,fail
261 double precision energia(0:n_ene)
267 C Read weights of the subsequent energy terms.
269 call card_concat(weightcard)
270 call reada(weightcard,'WLONG',wlong,1.0D0)
271 call reada(weightcard,'WSC',wsc,wlong)
272 call reada(weightcard,'WSCP',wscp,wlong)
273 call reada(weightcard,'WELEC',welec,1.0D0)
274 call reada(weightcard,'WVDWPP',wvdwpp,welec)
275 call reada(weightcard,'WEL_LOC',wel_loc,1.0D0)
276 call reada(weightcard,'WCORR4',wcorr4,0.0D0)
277 call reada(weightcard,'WCORR5',wcorr5,0.0D0)
278 call reada(weightcard,'WCORR6',wcorr6,0.0D0)
279 call reada(weightcard,'WTURN3',wturn3,1.0D0)
280 call reada(weightcard,'WTURN4',wturn4,1.0D0)
281 call reada(weightcard,'WTURN6',wturn6,1.0D0)
282 call reada(weightcard,'WSCCOR',wsccor,1.0D0)
283 call reada(weightcard,'WSTRAIN',wstrain,1.0D0)
284 call reada(weightcard,'WBOND',wbond,1.0D0)
285 call reada(weightcard,'WTOR',wtor,1.0D0)
286 call reada(weightcard,'WTORD',wtor_d,1.0D0)
287 call reada(weightcard,'WANG',wang,1.0D0)
288 call reada(weightcard,'WSCLOC',wscloc,1.0D0)
290 call reada(weightcard,'WDFAD',wdfa_dist,0.0d0)
291 call reada(weightcard,'WDFAT',wdfa_tor,0.0d0)
292 call reada(weightcard,'WDFAN',wdfa_nei,0.0d0)
293 call reada(weightcard,'WDFAB',wdfa_beta,0.0d0)
295 call reada(weightcard,'SCAL14',scal14,0.4D0)
296 call reada(weightcard,'SCALSCP',scalscp,1.0d0)
297 call reada(weightcard,'CUTOFF',cutoff_corr,7.0d0)
298 call reada(weightcard,'DELT_CORR',delt_corr,0.5d0)
299 call reada(weightcard,'TEMP0',temp0,300.0d0)
300 if (index(weightcard,'SOFT').gt.0) ipot=6
301 C 12/1/95 Added weight for the multi-body term WCORR
302 call reada(weightcard,'WCORRH',wcorr,1.0D0)
303 if (wcorr4.gt.0.0d0) wcorr=wcorr4
324 weights(24)=wdfa_dist
327 weights(27)=wdfa_beta
330 if(me.eq.king.or..not.out1file)
331 & write (iout,10) wsc,wscp,welec,wvdwpp,wbond,wang,wscloc,wtor,
332 & wtor_d,wstrain,wel_loc,wcorr,wcorr5,wcorr6,wsccor,wturn3,
334 & wdfa_dist,wdfa_tor,wdfa_nei,wdfa_beta
336 10 format (/'Energy-term weights (unscaled):'//
337 & 'WSCC= ',f10.6,' (SC-SC)'/
338 & 'WSCP= ',f10.6,' (SC-p)'/
339 & 'WELEC= ',f10.6,' (p-p electr)'/
340 & 'WVDWPP= ',f10.6,' (p-p VDW)'/
341 & 'WBOND= ',f10.6,' (stretching)'/
342 & 'WANG= ',f10.6,' (bending)'/
343 & 'WSCLOC= ',f10.6,' (SC local)'/
344 & 'WTOR= ',f10.6,' (torsional)'/
345 & 'WTORD= ',f10.6,' (double torsional)'/
346 & 'WSTRAIN=',f10.6,' (SS bridges & dist. cnstr.)'/
347 & 'WEL_LOC=',f10.6,' (multi-body 3-rd order)'/
348 & 'WCORR4= ',f10.6,' (multi-body 4th order)'/
349 & 'WCORR5= ',f10.6,' (multi-body 5th order)'/
350 & 'WCORR6= ',f10.6,' (multi-body 6th order)'/
351 & 'WSCCOR= ',f10.6,' (back-scloc correlation)'/
352 & 'WTURN3= ',f10.6,' (turns, 3rd order)'/
353 & 'WTURN4= ',f10.6,' (turns, 4th order)'/
354 & 'WTURN6= ',f10.6,' (turns, 6th order)'/
355 & 'WDFA_D= ',f10.6,' (DFA, distance)' /
356 & 'WDFA_T= ',f10.6,' (DFA, torsional)' /
357 & 'WDFA_N= ',f10.6,' (DFA, number of neighbor)' /
358 & 'WDFA_B= ',f10.6,' (DFA, beta formation)')
360 if(me.eq.king.or..not.out1file)then
361 if (wcorr4.gt.0.0d0) then
362 write (iout,'(/2a/)') 'Local-electrostatic type correlation ',
363 & 'between contact pairs of peptide groups'
364 write (iout,'(2(a,f5.3/))')
365 & 'Cutoff on 4-6th order correlation terms: ',cutoff_corr,
366 & 'Range of quenching the correlation terms:',2*delt_corr
367 else if (wcorr.gt.0.0d0) then
368 write (iout,'(/2a/)') 'Hydrogen-bonding correlation ',
369 & 'between contact pairs of peptide groups'
371 write (iout,'(a,f8.3)')
372 & 'Scaling factor of 1,4 SC-p interactions:',scal14
373 write (iout,'(a,f8.3)')
374 & 'General scaling factor of SC-p interactions:',scalscp
376 r0_corr=cutoff_corr-delt_corr
378 aad(i,1)=scalscp*aad(i,1)
379 aad(i,2)=scalscp*aad(i,2)
380 bad(i,1)=scalscp*bad(i,1)
381 bad(i,2)=scalscp*bad(i,2)
383 c call rescale_weights(t_bath)
384 if(me.eq.king.or..not.out1file)
385 & write (iout,22) wsc,wscp,welec,wvdwpp,wbond,wang,wscloc,wtor,
386 & wtor_d,wstrain,wel_loc,wcorr,wcorr5,wcorr6,wsccor,wturn3,
388 & wdfa_dist,wdfa_tor,wdfa_nei,wdfa_beta
390 22 format (/'Energy-term weights (scaled):'//
391 & 'WSCC= ',f10.6,' (SC-SC)'/
392 & 'WSCP= ',f10.6,' (SC-p)'/
393 & 'WELEC= ',f10.6,' (p-p electr)'/
394 & 'WVDWPP= ',f10.6,' (p-p VDW)'/
395 & 'WBOND= ',f10.6,' (stretching)'/
396 & 'WANG= ',f10.6,' (bending)'/
397 & 'WSCLOC= ',f10.6,' (SC local)'/
398 & 'WTOR= ',f10.6,' (torsional)'/
399 & 'WTORD= ',f10.6,' (double torsional)'/
400 & 'WSTRAIN=',f10.6,' (SS bridges & dist. cnstr.)'/
401 & 'WEL_LOC=',f10.6,' (multi-body 3-rd order)'/
402 & 'WCORR4= ',f10.6,' (multi-body 4th order)'/
403 & 'WCORR5= ',f10.6,' (multi-body 5th order)'/
404 & 'WCORR6= ',f10.6,' (multi-body 6th order)'/
405 & 'WSCCOR= ',f10.6,' (back-scloc correlatkion)'/
406 & 'WTURN3= ',f10.6,' (turns, 3rd order)'/
407 & 'WTURN4= ',f10.6,' (turns, 4th order)'/
408 & 'WTURN6= ',f10.6,' (turns, 6th order)'/
409 & 'WDFA_D= ',f10.6,' (DFA, distance)' /
410 & 'WDFA_T= ',f10.6,' (DFA, torsional)' /
411 & 'WDFA_N= ',f10.6,' (DFA, number of neighbor)' /
412 & 'WDFA_B= ',f10.6,' (DFA, beta formation)')
414 if(me.eq.king.or..not.out1file)
415 & write (iout,*) "Reference temperature for weights calculation:",
417 call reada(weightcard,"D0CM",d0cm,3.78d0)
418 call reada(weightcard,"AKCM",akcm,15.1d0)
419 call reada(weightcard,"AKTH",akth,11.0d0)
420 call reada(weightcard,"AKCT",akct,12.0d0)
421 call reada(weightcard,"V1SS",v1ss,-1.08d0)
422 call reada(weightcard,"V2SS",v2ss,7.61d0)
423 call reada(weightcard,"V3SS",v3ss,13.7d0)
424 call reada(weightcard,"EBR",ebr,-5.50D0)
425 if(me.eq.king.or..not.out1file) then
426 write (iout,*) "Parameters of the SS-bond potential:"
427 write (iout,*) "D0CM",d0cm," AKCM",akcm," AKTH",akth,
429 write (iout,*) "V1SS",v1ss," V2SS",v2ss," V3SS",v3ss
430 write (iout,*) "EBR",ebr
431 print *,'indpdb=',indpdb,' pdbref=',pdbref
433 if (indpdb.gt.0 .or. pdbref) then
434 read(inp,'(a)') pdbfile
435 if(me.eq.king.or..not.out1file)
436 & write (iout,'(2a)') 'PDB data will be read from file ',
437 & pdbfile(:ilen(pdbfile))
438 open(ipdbin,file=pdbfile,status='old',err=33)
440 33 write (iout,'(a)') 'Error opening PDB file.'
443 c print *,'Begin reading pdb data'
445 c print *,'Finished reading pdb data'
446 if(me.eq.king.or..not.out1file)
447 & write (iout,'(a,i3,a,i3)')'nsup=',nsup,
448 & ' nstart_sup=',nstart_sup
450 itype_pdb(i)=itype(i)
454 nct=nstart_sup+nsup-1
455 call contact(.false.,ncont_ref,icont_ref,co)
458 C Following 2 lines for diagnostics; comment out if not needed
459 write (iout,*) "Before sideadd"
461 if(me.eq.king.or..not.out1file)
462 & write(iout,*)'Adding sidechains'
469 do while (fail.and.nsi.le.maxsi)
470 c call gen_side(iti,theta(i+1),alph(i),omeg(i),fail)
473 if(fail) write(iout,*)'Adding sidechain failed for res ',
474 & i,' after ',nsi,' trials'
478 C 10/03/12 Adam: Recalculate coordinates with new side chain positions
480 C Following 2 lines for diagnostics; comment out if not needed
481 write (iout,*) "After sideadd"
485 if (indpdb.eq.0) then
486 C Read sequence if not taken from the pdb file.
488 c print *,'nres=',nres
489 if (iscode.gt.0) then
490 read (inp,'(80a1)') (sequence(i)(1:1),i=1,nres)
492 read (inp,'(20(1x,a3))') (sequence(i),i=1,nres)
494 C Convert sequence to numeric code
496 itype(i)=rescode(i,sequence(i),iscode)
498 C Assign initial virtual bond lengths
504 vbld(i+nres)=dsc(itype(i))
505 vbld_inv(i+nres)=dsc_inv(itype(i))
506 c write (iout,*) "i",i," itype",itype(i),
507 c & " dsc",dsc(itype(i))," vbld",vbld(i),vbld(i+nres)
511 c print '(20i4)',(itype(i),i=1,nres)
514 if (itype(i).eq.21 .or. itype(i+1).eq.21) then
516 if (itype(i).eq.21) then
520 else if (itype(i+1).ne.20) then
522 else if (itype(i).ne.20) then
529 if(me.eq.king.or..not.out1file)then
530 write (iout,*) "ITEL"
532 write (iout,*) i,itype(i),itel(i)
534 print *,'Call Read_Bridge.'
537 C 8/13/98 Set limits to generating the dihedral angles
542 read (inp,*) ndih_constr
543 if (ndih_constr.gt.0) then
545 read (inp,*) (idih_constr(i),phi0(i),drange(i),i=1,ndih_constr)
546 if(me.eq.king.or..not.out1file)then
548 & 'There are',ndih_constr,' constraints on phi angles.'
550 write (iout,'(i5,2f8.3)') idih_constr(i),phi0(i),drange(i)
554 phi0(i)=deg2rad*phi0(i)
555 drange(i)=deg2rad*drange(i)
557 if(me.eq.king.or..not.out1file)
558 & write (iout,*) 'FTORS',ftors
561 phibound(1,ii) = phi0(i)-drange(i)
562 phibound(2,ii) = phi0(i)+drange(i)
569 write (iout,'(a)') 'Boundaries in phi angle sampling:'
571 write (iout,'(a3,i5,2f10.1)')
572 & restyp(itype(i)),i,phibound(1,i)*rad2deg,phibound(2,i)*rad2deg
578 cd print *,'NNT=',NNT,' NCT=',NCT
579 if (itype(1).eq.21) nnt=2
580 if (itype(nres).eq.21) nct=nct-1
582 C Juyong:READ init_vars
583 C Initialize variables!
584 C Juyong:READ read_info
585 C READ fragment information!!
586 C both routines should be in dfa.F file!!
588 if (.not. (wdfa_dist.eq.0.0 .and. wdfa_tor.eq.0.0 .and.
589 & wdfa_nei.eq.0.0 .and. wdfa_beta.eq.0.0)) then
591 print*, 'init_dfa_vars finished!'
593 print*, 'read_dfa_info finished!'
600 if(me.eq.king.or..not.out1file)
601 & write (iout,'(a,i3)') 'nsup=',nsup
603 if (nsup.le.(nct-nnt+1)) then
604 do i=0,nct-nnt+1-nsup
605 if (seq_comp(itype(nnt+i),itype_pdb(nstart_sup),nsup)) then
611 & 'Error - sequences to be superposed do not match.'
614 do i=0,nsup-(nct-nnt+1)
615 if (seq_comp(itype(nnt),itype_pdb(nstart_sup+i),nct-nnt+1))
617 nstart_sup=nstart_sup+i
623 & 'Error - sequences to be superposed do not match.'
626 if (nsup.eq.0) nsup=nct-nnt
627 if (nstart_sup.eq.0) nstart_sup=nnt
628 if (nstart_seq.eq.0) nstart_seq=nnt
629 if(me.eq.king.or..not.out1file)
630 & write (iout,*) 'nsup=',nsup,' nstart_sup=',nstart_sup,
631 & ' nstart_seq=',nstart_seq
633 c--- Zscore rms -------
634 if (nz_start.eq.0) nz_start=nnt
635 if (nz_end.eq.0 .and. nsup.gt.0) then
637 else if (nz_end.eq.0) then
640 if(me.eq.king.or..not.out1file)then
641 write (iout,*) 'NZ_START=',nz_start,' NZ_END=',nz_end
642 write (iout,*) 'IZ_SC=',iz_sc
644 c----------------------
647 if (.not.pdbref) then
648 call read_angles(inp,*38)
650 38 write (iout,'(a)') 'Error reading reference structure.'
652 call MPI_Finalize(MPI_COMM_WORLD,IERROR)
653 stop 'Error reading reference structure'
657 czscore call geom_to_var(nvar,coord_exp_zs(1,1))
666 call contact(.true.,ncont_ref,icont_ref,co)
668 if(me.eq.king.or..not.out1file)
669 & write (iout,*) 'Contact order:',co
671 if(me.eq.king.or..not.out1file)
672 & write (2,*) 'Shifting contacts:',nstart_seq,nstart_sup
675 icont_ref(j,i)=icont_ref(j,i)+nstart_seq-nstart_sup
677 if(me.eq.king.or..not.out1file)
678 & write (2,*) i,' ',restyp(itype(icont_ref(1,i))),' ',
679 & icont_ref(1,i),' ',
680 & restyp(itype(icont_ref(2,i))),' ',icont_ref(2,i)
684 c write (iout,*) "constr_dist",constr_dist,nstart_sup,nsup
685 if (constr_dist.gt.0) then
686 call read_dist_constr
688 if (nhpb.gt.0) call hpb_partition
689 c write (iout,*) "After read_dist_constr nhpb",nhpb
691 if (indpdb.eq.0 .and. modecalc.ne.2 .and. modecalc.ne.4
692 & .and. modecalc.ne.8 .and. modecalc.ne.9 .and.
693 & modecalc.ne.10) then
694 C If input structure hasn't been supplied from the PDB file read or generate
696 if (iranconf.eq.0 .and. .not. extconf) then
697 if(me.eq.king.or..not.out1file .and.fg_rank.eq.0)
698 & write (iout,'(a)') 'Initial geometry will be read in.'
700 read(inp,'(8f10.5)',end=36,err=36)
701 & ((c(l,k),l=1,3),k=1,nres),
702 & ((c(l,k+nres),l=1,3),k=nnt,nct)
703 call int_from_cart1(.false.)
706 dc(j,i)=c(j,i+1)-c(j,i)
707 dc_norm(j,i)=dc_norm(j,i)*vbld_inv(i+1)
711 if (itype(i).ne.10) then
713 dc(j,i+nres)=c(j,i+nres)-c(j,i)
714 dc_norm(j,i+nres)=dc_norm(j,i+nres)*vbld_inv(i+nres)
720 call read_angles(inp,*36)
723 36 write (iout,'(a)') 'Error reading angle file.'
725 call mpi_finalize( MPI_COMM_WORLD,IERR )
727 stop 'Error reading angle file.'
729 else if (extconf) then
730 if(me.eq.king.or..not.out1file .and. fg_rank.eq.0)
731 & write (iout,'(a)') 'Extended chain initial geometry.'
733 theta(i)=90d0*deg2rad
739 alph(i)=110d0*deg2rad
742 omeg(i)=-120d0*deg2rad
745 if(me.eq.king.or..not.out1file)
746 & write (iout,'(a)') 'Random-generated initial geometry.'
750 if (me.eq.king .or. fg_rank.eq.0 .and. (
751 & modecalc.eq.12 .or. modecalc.eq.14) ) then
755 c call gen_rand_conf(itmp,*30)
757 30 write (iout,*) 'Failed to generate random conformation',
759 write (*,*) 'Processor:',me,
760 & ' Failed to generate random conformation',
770 write (iout,'(a,i3,a)') 'Processor:',me,
771 & ' error in generating random conformation.'
772 write (*,'(a,i3,a)') 'Processor:',me,
773 & ' error in generating random conformation.'
776 call MPI_Abort(mpi_comm_world,error_msg,ierrcode)
782 c call gen_rand_conf(itmp,*31)
784 31 write (iout,*) 'Failed to generate random conformation',
786 write (*,*) 'Failed to generate random conformation',
789 write (iout,'(a,i3,a)') 'Processor:',me,
790 & ' error in generating random conformation.'
791 write (*,'(a,i3,a)') 'Processor:',me,
792 & ' error in generating random conformation.'
797 elseif (modecalc.eq.4) then
798 read (inp,'(a)') intinname
799 open (intin,file=intinname,status='old',err=333)
800 if (me.eq.king .or. .not.out1file.and.fg_rank.eq.0)
801 & write (iout,'(a)') 'intinname',intinname
802 write (*,'(a)') 'Processor',myrank,' intinname',intinname
804 333 write (iout,'(2a)') 'Error opening angle file ',intinname
806 call MPI_Finalize(MPI_COMM_WORLD,IERR)
808 stop 'Error opening angle file.'
812 C Generate distance constraints, if the PDB structure is to be regularized.
814 if (me.eq.king .or. .not. out1file)
816 if (ns.gt.0 .and. (me.eq.king .or. .not.out1file) ) then
817 write (iout,'(/a,i3,a)')
818 & 'The chain contains',ns,' disulfide-bridging cysteines.'
819 write (iout,'(20i4)') (iss(i),i=1,ns)
820 write (iout,'(/a/)') 'Pre-formed links are:'
826 if (me.eq.king.or..not.out1file)
827 & write (iout,'(2a,i3,3a,i3,a,3f10.3)')
828 & restyp(it1),'(',i1,') -- ',restyp(it2),'(',i2,')',dhpb(i),
833 c if (i2ndstr.gt.0) call secstrp2dihc
834 c call geom_to_var(nvar,x)
835 c call etotal(energia(0))
836 c call enerprint(energia(0))
837 c call briefout(0,etot)
839 cd write (iout,'(2(a,i3))') 'NNT',NNT,' NCT',NCT
840 cd write (iout,'(a)') 'Variable list:'
841 cd write (iout,'(i4,f10.5)') (i,rad2deg*x(i),i=1,nvar)
843 if (me.eq.king .or. (fg_rank.eq.0 .and. .not.out1file))
844 & write (iout,'(//80(1h*)/20x,a,i4,a/80(1h*)//)')
845 & 'Processor',myrank,': end reading molecular data.'
849 c--------------------------------------------------------------------------
850 logical function seq_comp(itypea,itypeb,length)
852 integer length,itypea(length),itypeb(length)
855 if (itypea(i).ne.itypeb(i)) then
863 c-----------------------------------------------------------------------------
864 subroutine read_bridge
865 C Read information about disulfide bridges.
866 implicit real*8 (a-h,o-z)
871 include 'COMMON.IOUNITS'
874 include 'COMMON.INTERACT'
875 include 'COMMON.LOCAL'
876 include 'COMMON.NAMES'
877 include 'COMMON.CHAIN'
878 include 'COMMON.FFIELD'
879 include 'COMMON.SBRIDGE'
880 include 'COMMON.HEADER'
881 include 'COMMON.CONTROL'
882 c include 'COMMON.DBASE'
883 c include 'COMMON.THREAD'
884 include 'COMMON.TIME1'
885 include 'COMMON.SETUP'
886 C Read bridging residues.
887 read (inp,*) ns,(iss(i),i=1,ns)
889 if(me.eq.king.or..not.out1file)
890 & write (iout,*) 'ns=',ns,' iss:',(iss(i),i=1,ns)
891 C Check whether the specified bridging residues are cystines.
893 if (itype(iss(i)).ne.1) then
894 if (me.eq.king.or..not.out1file) write (iout,'(2a,i3,a)')
895 & 'Do you REALLY think that the residue ',restyp(iss(i)),i,
896 & ' can form a disulfide bridge?!!!'
897 write (*,'(2a,i3,a)')
898 & 'Do you REALLY think that the residue ',restyp(iss(i)),i,
899 & ' can form a disulfide bridge?!!!'
901 call MPI_Finalize(MPI_COMM_WORLD,ierror)
906 C Read preformed bridges.
908 read (inp,*) nss,(ihpb(i),jhpb(i),i=1,nss)
909 write (iout,*) 'nss=',nss,' ihpb,jhpb: ',(ihpb(i),jhpb(i),i=1,nss)
912 C Check if the residues involved in bridges are in the specified list of
916 if (ihpb(i).eq.ihpb(j).or.ihpb(i).eq.jhpb(j)
917 & .or.jhpb(i).eq.ihpb(j).or.jhpb(i).eq.jhpb(j)) then
918 write (iout,'(a,i3,a)') 'Disulfide pair',i,
919 & ' contains residues present in other pairs.'
920 write (*,'(a,i3,a)') 'Disulfide pair',i,
921 & ' contains residues present in other pairs.'
923 call MPI_Finalize(MPI_COMM_WORLD,ierror)
929 if (ihpb(i).eq.iss(j)) goto 10
931 write (iout,'(a,i3,a)') 'Pair',i,' contains unknown cystine.'
934 if (jhpb(i).eq.iss(j)) goto 20
936 write (iout,'(a,i3,a)') 'Pair',i,' contains unknown cystine.'
949 c----------------------------------------------------------------------------
950 subroutine read_x(kanal,*)
951 implicit real*8 (a-h,o-z)
955 include 'COMMON.CHAIN'
956 include 'COMMON.IOUNITS'
957 include 'COMMON.CONTROL'
958 include 'COMMON.LOCAL'
959 include 'COMMON.INTERACT'
960 c Read coordinates from input
962 read(kanal,'(8f10.5)',end=10,err=10)
963 & ((c(l,k),l=1,3),k=1,nres),
964 & ((c(l,k+nres),l=1,3),k=nnt,nct)
967 c(j,2*nres)=c(j,nres)
969 call int_from_cart1(.false.)
972 dc(j,i)=c(j,i+1)-c(j,i)
973 dc_norm(j,i)=dc(j,i)*vbld_inv(i+1)
977 if (itype(i).ne.10) then
979 dc(j,i+nres)=c(j,i+nres)-c(j,i)
980 dc_norm(j,i+nres)=dc(j,i+nres)*vbld_inv(i+nres)
988 c------------------------------------------------------------------------------
990 implicit real*8 (a-h,o-z)
992 include 'COMMON.IOUNITS'
995 include 'COMMON.INTERACT'
996 include 'COMMON.LOCAL'
997 include 'COMMON.NAMES'
998 include 'COMMON.CHAIN'
999 include 'COMMON.FFIELD'
1000 include 'COMMON.SBRIDGE'
1001 include 'COMMON.HEADER'
1002 include 'COMMON.CONTROL'
1003 c include 'COMMON.DBASE'
1004 c include 'COMMON.THREAD'
1005 include 'COMMON.TIME1'
1006 C Set up variable list.
1012 if (itype(i).ne.10) then
1014 ialph(i,1)=nvar+nside
1018 if (indphi.gt.0) then
1020 else if (indback.gt.0) then
1025 cd write (iout,'(3i4)') (i,ialph(i,1),ialph(i,2),i=2,nres-1)
1028 c----------------------------------------------------------------------------
1029 subroutine gen_dist_constr
1030 C Generate CA distance constraints.
1031 implicit real*8 (a-h,o-z)
1032 include 'DIMENSIONS'
1033 include 'COMMON.IOUNITS'
1034 include 'COMMON.GEO'
1035 include 'COMMON.VAR'
1036 include 'COMMON.INTERACT'
1037 include 'COMMON.LOCAL'
1038 include 'COMMON.NAMES'
1039 include 'COMMON.CHAIN'
1040 include 'COMMON.FFIELD'
1041 include 'COMMON.SBRIDGE'
1042 include 'COMMON.HEADER'
1043 include 'COMMON.CONTROL'
1044 c include 'COMMON.DBASE'
1045 c include 'COMMON.THREAD'
1046 include 'COMMON.TIME1'
1047 dimension itype_pdb(maxres)
1048 common /pizda/ itype_pdb
1050 cd print *,'gen_dist_constr: nnt=',nnt,' nct=',nct
1051 cd write (2,*) 'gen_dist_constr: nnt=',nnt,' nct=',nct,
1052 cd & ' nstart_sup',nstart_sup,' nstart_seq',nstart_seq,
1054 do i=nstart_sup,nstart_sup+nsup-1
1055 cd write (2,*) 'i',i,' seq ',restyp(itype(i+nstart_seq-nstart_sup)),
1056 cd & ' seq_pdb', restyp(itype_pdb(i))
1057 do j=i+2,nstart_sup+nsup-1
1059 ihpb(nhpb)=i+nstart_seq-nstart_sup
1060 jhpb(nhpb)=j+nstart_seq-nstart_sup
1062 dhpb(nhpb)=dist(i,j)
1065 cd write (iout,'(a)') 'Distance constraints:'
1070 cd if (ii.gt.nres) then
1075 cd write (iout,'(a,1x,a,i4,3x,a,1x,a,i4,2f10.3)')
1076 cd & restyp(itype(ii)),iden,ii,restyp(itype(jj)),iden,jj,
1077 cd & dhpb(i),forcon(i)
1081 c----------------------------------------------------------------------------
1083 implicit real*8 (a-h,o-z)
1084 include 'DIMENSIONS'
1085 include 'COMMON.IOUNITS'
1086 include 'COMMON.GEO'
1087 include 'COMMON.CSA'
1088 include 'COMMON.BANK'
1089 include 'COMMON.CONTROL'
1091 character*620 mcmcard
1092 call card_concat(mcmcard)
1094 call readi(mcmcard,'NCONF',nconf,50)
1095 call readi(mcmcard,'NADD',nadd,0)
1096 call readi(mcmcard,'JSTART',jstart,1)
1097 call readi(mcmcard,'JEND',jend,1)
1098 call readi(mcmcard,'NSTMAX',nstmax,500000)
1099 call readi(mcmcard,'N0',n0,1)
1100 call readi(mcmcard,'N1',n1,6)
1101 call readi(mcmcard,'N2',n2,4)
1102 call readi(mcmcard,'N3',n3,0)
1103 call readi(mcmcard,'N4',n4,0)
1104 call readi(mcmcard,'N5',n5,0)
1105 call readi(mcmcard,'N6',n6,10)
1106 call readi(mcmcard,'N7',n7,0)
1107 call readi(mcmcard,'N8',n8,0)
1108 call readi(mcmcard,'N9',n9,0)
1109 call readi(mcmcard,'N14',n14,0)
1110 call readi(mcmcard,'N15',n15,0)
1111 call readi(mcmcard,'N16',n16,0)
1112 call readi(mcmcard,'N17',n17,0)
1113 call readi(mcmcard,'N18',n18,0)
1115 vdisulf=(index(mcmcard,'DYNSS').gt.0)
1117 call readi(mcmcard,'NDIFF',ndiff,2)
1118 call reada(mcmcard,'DIFFCUT',diffcut,0.0d0)
1119 call readi(mcmcard,'IS1',is1,1)
1120 call readi(mcmcard,'IS2',is2,8)
1121 call readi(mcmcard,'NRAN0',nran0,4)
1122 call readi(mcmcard,'NRAN1',nran1,2)
1123 call readi(mcmcard,'IRR',irr,1)
1124 call readi(mcmcard,'NSEED',nseed,20)
1125 call readi(mcmcard,'NTOTAL',ntotal,10000)
1126 call reada(mcmcard,'CUT1',cut1,2.0d0)
1127 call reada(mcmcard,'CUT2',cut2,5.0d0)
1128 call reada(mcmcard,'ESTOP',estop,-300000.0d0)
1129 call readi(mcmcard,'ICMAX',icmax,1)
1130 call readi(mcmcard,'NBANKM',nbankm,400)
1131 call readi(mcmcard,'IUCUT',iucut,2)
1132 call readi(mcmcard,'IRESTART',irestart,0)
1133 c!bankt call readi(mcmcard,'NBANKTM',ntbankm,0)
1136 call reada(mcmcard,'DELE',dele,20.0d0)
1137 call reada(mcmcard,'DIFCUT',difcut,720.0d0)
1138 call readi(mcmcard,'IREF',iref,0)
1139 call reada(mcmcard,'RMSCUT',rmscut,4.0d0)
1140 call reada(mcmcard,'PNCCUT',pnccut,0.5d0)
1141 call readi(mcmcard,'NCONF_IN',nconf_in,0)
1142 call reada(mcmcard,'RDIH_BIAS',rdih_bias,0.5d0)
1143 write (iout,*) "NCONF_IN",nconf_in
1144 tm_score=(index(mcmcard,'TMSCORE').gt.0)
1145 if (tm_score) write (iout,*) "Using TM_Score instead of DIFF",
1146 & " for torsional angles"
1150 subroutine read_minim
1151 implicit real*8 (a-h,o-z)
1152 include 'DIMENSIONS'
1153 include 'COMMON.MINIM'
1154 include 'COMMON.IOUNITS'
1156 character*320 minimcard
1157 call card_concat(minimcard)
1158 call readi(minimcard,'MAXMIN',maxmin,2000)
1159 call readi(minimcard,'MAXFUN',maxfun,5000)
1160 call readi(minimcard,'MINMIN',minmin,maxmin)
1161 call readi(minimcard,'MINFUN',minfun,maxmin)
1162 call reada(minimcard,'TOLF',tolf,1.0D-2)
1163 call reada(minimcard,'RTOLF',rtolf,1.0D-4)
1164 print_min_stat=min0(index(minimcard,'PRINT_MIN_STAT'),1)
1165 print_min_res=min0(index(minimcard,'PRINT_MIN_RES'),1)
1166 print_min_ini=min0(index(minimcard,'PRINT_MIN_INI'),1)
1167 write (iout,'(/80(1h*)/20x,a/80(1h*))')
1168 & 'Options in energy minimization:'
1169 write (iout,'(4(a,i5),a,1pe14.5,a,1pe14.5)')
1170 & 'MaxMin:',MaxMin,' MaxFun:',MaxFun,
1171 & 'MinMin:',MinMin,' MinFun:',MinFun,
1172 & ' TolF:',TolF,' RTolF:',RTolF
1175 c----------------------------------------------------------------------------
1176 subroutine read_angles(kanal,*)
1177 implicit real*8 (a-h,o-z)
1178 include 'DIMENSIONS'
1179 include 'COMMON.GEO'
1180 include 'COMMON.VAR'
1181 include 'COMMON.CHAIN'
1182 include 'COMMON.IOUNITS'
1183 include 'COMMON.CONTROL'
1184 c Read angles from input
1186 read (kanal,*,err=10,end=10) (theta(i),i=3,nres)
1187 read (kanal,*,err=10,end=10) (phi(i),i=4,nres)
1188 read (kanal,*,err=10,end=10) (alph(i),i=2,nres-1)
1189 read (kanal,*,err=10,end=10) (omeg(i),i=2,nres-1)
1192 c 9/7/01 avoid 180 deg valence angle
1193 if (theta(i).gt.179.99d0) theta(i)=179.99d0
1195 theta(i)=deg2rad*theta(i)
1196 phi(i)=deg2rad*phi(i)
1197 alph(i)=deg2rad*alph(i)
1198 omeg(i)=deg2rad*omeg(i)
1203 c----------------------------------------------------------------------------
1204 subroutine reada(rekord,lancuch,wartosc,default)
1206 character*(*) rekord,lancuch
1207 double precision wartosc,default
1210 iread=index(rekord,lancuch)
1211 if (iread.eq.0) then
1215 iread=iread+ilen(lancuch)+1
1216 read (rekord(iread:),*,err=10,end=10) wartosc
1221 c----------------------------------------------------------------------------
1222 subroutine readi(rekord,lancuch,wartosc,default)
1224 character*(*) rekord,lancuch
1225 integer wartosc,default
1228 iread=index(rekord,lancuch)
1229 if (iread.eq.0) then
1233 iread=iread+ilen(lancuch)+1
1234 read (rekord(iread:),*,err=10,end=10) wartosc
1239 c----------------------------------------------------------------------------
1240 subroutine multreadi(rekord,lancuch,tablica,dim,default)
1243 integer tablica(dim),default
1244 character*(*) rekord,lancuch
1251 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
1252 if (iread.eq.0) return
1253 iread=iread+ilen(lancuch)+1
1254 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
1257 c----------------------------------------------------------------------------
1258 subroutine multreada(rekord,lancuch,tablica,dim,default)
1261 double precision tablica(dim),default
1262 character*(*) rekord,lancuch
1269 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
1270 if (iread.eq.0) return
1271 iread=iread+ilen(lancuch)+1
1272 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
1275 c----------------------------------------------------------------------------
1276 subroutine openunits
1277 implicit real*8 (a-h,o-z)
1278 include 'DIMENSIONS'
1281 character*16 form,nodename
1284 include 'COMMON.SETUP'
1285 include 'COMMON.IOUNITS'
1286 c include 'COMMON.MD'
1287 include 'COMMON.CONTROL'
1288 integer lenpre,lenpot,ilen,lentmp
1290 character*3 out1file_text,ucase
1293 c print *,"Processor",myrank,"fg_rank",fg_rank," entered openunits"
1294 call getenv_loc("PREFIX",prefix)
1296 call getenv_loc("POT",pot)
1297 call getenv_loc("DIRTMP",tmpdir)
1298 call getenv_loc("CURDIR",curdir)
1299 call getenv_loc("OUT1FILE",out1file_text)
1300 c print *,"Processor",myrank,"fg_rank",fg_rank," did GETENV"
1301 out1file_text=ucase(out1file_text)
1302 if (out1file_text(1:1).eq."Y") then
1305 out1file=fg_rank.gt.0
1310 if (lentmp.gt.0) then
1311 write (*,'(80(1h!))')
1312 write (*,'(a,19x,a,19x,a)') "!"," A T T E N T I O N ","!"
1313 write (*,'(80(1h!))')
1314 write (*,*)"All output files will be on node /tmp directory."
1316 call MPI_GET_PROCESSOR_NAME( nodename, nodelen, IERROR )
1317 if (me.eq.king) then
1318 write (*,*) "The master node is ",nodename
1319 else if (fg_rank.eq.0) then
1320 write (*,*) "I am the CG slave node ",nodename
1322 write (*,*) "I am the FG slave node ",nodename
1325 PREFIX = tmpdir(:lentmp)//'/'//prefix(:lenpre)
1326 lenpre = lentmp+lenpre+1
1328 entname=prefix(:lenpre)//'_'//pot(:lenpot)//'.entr'
1329 C Get the names and open the input files
1330 #if defined(WINIFL) || defined(WINPGI)
1331 open(1,file=pref_orig(:ilen(pref_orig))//
1332 & '.inp',status='old',readonly,shared)
1333 open (9,file=prefix(:ilen(prefix))//'.intin',status='unknown')
1334 C open (18,file=prefix(:ilen(prefix))//'.entin',status='unknown')
1335 C Get parameter filenames and open the parameter files.
1336 call getenv_loc('BONDPAR',bondname)
1337 open (ibond,file=bondname,status='old',readonly,shared)
1338 call getenv_loc('THETPAR',thetname)
1339 open (ithep,file=thetname,status='old',readonly,shared)
1341 call getenv_loc('THETPARPDB',thetname_pdb)
1342 open (ithep_pdb,file=thetname_pdb,status='old',readonly,shared)
1344 call getenv_loc('ROTPAR',rotname)
1345 open (irotam,file=rotname,status='old',readonly,shared)
1347 call getenv_loc('ROTPARPDB',rotname_pdb)
1348 open (irotam_pdb,file=rotname_pdb,status='old',readonly,shared)
1350 call getenv_loc('TORPAR',torname)
1351 open (itorp,file=torname,status='old',readonly,shared)
1352 call getenv_loc('TORDPAR',tordname)
1353 open (itordp,file=tordname,status='old',readonly,shared)
1354 call getenv_loc('FOURIER',fouriername)
1355 open (ifourier,file=fouriername,status='old',readonly,shared)
1356 call getenv_loc('ELEPAR',elename)
1357 open (ielep,file=elename,status='old',readonly,shared)
1358 call getenv_loc('SIDEPAR',sidename)
1359 open (isidep,file=sidename,status='old',readonly,shared)
1360 #elif (defined CRAY) || (defined AIX)
1361 open(1,file=pref_orig(:ilen(pref_orig))//'.inp',status='old',
1363 c print *,"Processor",myrank," opened file 1"
1364 open (9,file=prefix(:ilen(prefix))//'.intin',status='unknown')
1365 c print *,"Processor",myrank," opened file 9"
1366 C open (18,file=prefix(:ilen(prefix))//'.entin',status='unknown')
1367 C Get parameter filenames and open the parameter files.
1368 call getenv_loc('BONDPAR',bondname)
1369 open (ibond,file=bondname,status='old',action='read')
1370 c print *,"Processor",myrank," opened file IBOND"
1371 call getenv_loc('THETPAR',thetname)
1372 open (ithep,file=thetname,status='old',action='read')
1373 c print *,"Processor",myrank," opened file ITHEP"
1375 call getenv_loc('THETPARPDB',thetname_pdb)
1376 open (ithep_pdb,file=thetname_pdb,status='old',action='read')
1378 call getenv_loc('ROTPAR',rotname)
1379 open (irotam,file=rotname,status='old',action='read')
1380 c print *,"Processor",myrank," opened file IROTAM"
1382 call getenv_loc('ROTPARPDB',rotname_pdb)
1383 open (irotam_pdb,file=rotname_pdb,status='old',action='read')
1385 call getenv_loc('TORPAR',torname)
1386 open (itorp,file=torname,status='old',action='read')
1387 c print *,"Processor",myrank," opened file ITORP"
1388 call getenv_loc('TORDPAR',tordname)
1389 open (itordp,file=tordname,status='old',action='read')
1390 c print *,"Processor",myrank," opened file ITORDP"
1391 call getenv_loc('SCCORPAR',sccorname)
1392 open (isccor,file=sccorname,status='old',action='read')
1393 c print *,"Processor",myrank," opened file ISCCOR"
1394 call getenv_loc('FOURIER',fouriername)
1395 open (ifourier,file=fouriername,status='old',action='read')
1396 c print *,"Processor",myrank," opened file IFOURIER"
1397 call getenv_loc('ELEPAR',elename)
1398 open (ielep,file=elename,status='old',action='read')
1399 c print *,"Processor",myrank," opened file IELEP"
1400 call getenv_loc('SIDEPAR',sidename)
1401 open (isidep,file=sidename,status='old',action='read')
1402 c print *,"Processor",myrank," opened file ISIDEP"
1403 c print *,"Processor",myrank," opened parameter files"
1405 open(1,file=pref_orig(:ilen(pref_orig))//'.inp',status='old')
1406 open (9,file=prefix(:ilen(prefix))//'.intin',status='unknown')
1407 C open (18,file=prefix(:ilen(prefix))//'.entin',status='unknown')
1408 C Get parameter filenames and open the parameter files.
1409 call getenv_loc('BONDPAR',bondname)
1410 open (ibond,file=bondname,status='old')
1411 call getenv_loc('THETPAR',thetname)
1412 open (ithep,file=thetname,status='old')
1414 call getenv_loc('THETPARPDB',thetname_pdb)
1415 open (ithep_pdb,file=thetname_pdb,status='old')
1417 call getenv_loc('ROTPAR',rotname)
1418 open (irotam,file=rotname,status='old')
1420 call getenv_loc('ROTPARPDB',rotname_pdb)
1421 open (irotam_pdb,file=rotname_pdb,status='old')
1423 call getenv_loc('TORPAR',torname)
1424 open (itorp,file=torname,status='old')
1425 call getenv_loc('TORDPAR',tordname)
1426 open (itordp,file=tordname,status='old')
1427 call getenv_loc('SCCORPAR',sccorname)
1428 open (isccor,file=sccorname,status='old')
1429 call getenv_loc('FOURIER',fouriername)
1430 open (ifourier,file=fouriername,status='old')
1431 call getenv_loc('ELEPAR',elename)
1432 open (ielep,file=elename,status='old')
1433 call getenv_loc('SIDEPAR',sidename)
1434 open (isidep,file=sidename,status='old')
1436 open(1,file=pref_orig(:ilen(pref_orig))//'.inp',status='old',
1438 open (9,file=prefix(:ilen(prefix))//'.intin',status='unknown')
1439 C open (18,file=prefix(:ilen(prefix))//'.entin',status='unknown')
1440 C Get parameter filenames and open the parameter files.
1441 call getenv_loc('BONDPAR',bondname)
1442 open (ibond,file=bondname,status='old',readonly)
1443 call getenv_loc('THETPAR',thetname)
1444 open (ithep,file=thetname,status='old',readonly)
1446 call getenv_loc('THETPARPDB',thetname_pdb)
1447 print *,"thetname_pdb ",thetname_pdb
1448 open (ithep_pdb,file=thetname_pdb,status='old',readonly)
1449 print *,ithep_pdb," opened"
1451 call getenv_loc('ROTPAR',rotname)
1452 open (irotam,file=rotname,status='old',readonly)
1454 call getenv_loc('ROTPARPDB',rotname_pdb)
1455 open (irotam_pdb,file=rotname_pdb,status='old',readonly)
1457 call getenv_loc('TORPAR',torname)
1458 open (itorp,file=torname,status='old',readonly)
1459 call getenv_loc('TORDPAR',tordname)
1460 open (itordp,file=tordname,status='old',readonly)
1461 call getenv_loc('SCCORPAR',sccorname)
1462 open (isccor,file=sccorname,status='old',readonly)
1463 call getenv_loc('FOURIER',fouriername)
1464 open (ifourier,file=fouriername,status='old',readonly)
1465 call getenv_loc('ELEPAR',elename)
1466 open (ielep,file=elename,status='old',readonly)
1467 call getenv_loc('SIDEPAR',sidename)
1468 open (isidep,file=sidename,status='old',readonly)
1472 C 8/9/01 In the newest version SCp interaction constants are read from a file
1473 C Use -DOLDSCP to use hard-coded constants instead.
1475 call getenv_loc('SCPPAR',scpname)
1476 #if defined(WINIFL) || defined(WINPGI)
1477 open (iscpp,file=scpname,status='old',readonly,shared)
1478 #elif (defined CRAY) || (defined AIX)
1479 open (iscpp,file=scpname,status='old',action='read')
1481 open (iscpp,file=scpname,status='old')
1483 open (iscpp,file=scpname,status='old',readonly)
1486 call getenv_loc('PATTERN',patname)
1487 #if defined(WINIFL) || defined(WINPGI)
1488 open (icbase,file=patname,status='old',readonly,shared)
1489 #elif (defined CRAY) || (defined AIX)
1490 open (icbase,file=patname,status='old',action='read')
1492 open (icbase,file=patname,status='old')
1494 open (icbase,file=patname,status='old',readonly)
1497 C Open output file only for CG processes
1498 c print *,"Processor",myrank," fg_rank",fg_rank
1499 if (fg_rank.eq.0) then
1501 if (nodes.eq.1) then
1504 npos = dlog10(dfloat(nodes-1))+1
1506 if (npos.lt.3) npos=3
1507 write (liczba,'(i1)') npos
1508 form = '(bz,i'//liczba(:ilen(liczba))//'.'//liczba(:ilen(liczba))
1510 write (liczba,form) me
1511 outname=prefix(:lenpre)//'.out_'//pot(:lenpot)//
1512 & liczba(:ilen(liczba))
1513 intname=prefix(:lenpre)//'_'//pot(:lenpot)//liczba(:ilen(liczba))
1515 pdbname=prefix(:lenpre)//'_'//pot(:lenpot)//liczba(:ilen(liczba))
1517 mol2name=prefix(:lenpre)//'_'//pot(:lenpot)//
1518 & liczba(:ilen(liczba))//'.mol2'
1519 statname=prefix(:lenpre)//'_'//pot(:lenpot)//
1520 & liczba(:ilen(liczba))//'.stat'
1522 & call copy_to_tmp(pref_orig(:ilen(pref_orig))//'_'//pot(:lenpot)
1523 & //liczba(:ilen(liczba))//'.stat')
1524 rest2name=prefix(:ilen(prefix))//"_"//liczba(:ilen(liczba))
1527 c qname=prefix(:lenpre)//'_'//pot(:lenpot)//
1528 c & liczba(:ilen(liczba))//'.const'
1533 outname=prefix(:lenpre)//'.out_'//pot(:lenpot)
1534 intname=prefix(:lenpre)//'_'//pot(:lenpot)//'.int'
1535 pdbname=prefix(:lenpre)//'_'//pot(:lenpot)//'.pdb'
1536 mol2name=prefix(:lenpre)//'_'//pot(:lenpot)//'.mol2'
1537 statname=prefix(:lenpre)//'_'//pot(:lenpot)//'.stat'
1539 & call copy_to_tmp(pref_orig(:ilen(pref_orig))//'_'//pot(:lenpot)//
1541 rest2name=prefix(:ilen(prefix))//'.rst'
1543 c qname=prefix(:lenpre)//'_'//pot(:lenpot)//'.const'
1546 #if defined(AIX) || defined(PGI)
1547 if (me.eq.king .or. .not. out1file)
1548 & open(iout,file=outname,status='unknown')
1550 if (fg_rank.gt.0) then
1551 write (liczba,'(i3.3)') myrank/nfgtasks
1552 write (ll,'(bz,i3.3)') fg_rank
1553 open(iout,file="debug"//liczba(:ilen(liczba))//"."//ll,
1558 open(igeom,file=intname,status='unknown',position='append')
1559 open(ipdb,file=pdbname,status='unknown')
1560 open(imol2,file=mol2name,status='unknown')
1561 open(istat,file=statname,status='unknown',position='append')
1563 c1out open(iout,file=outname,status='unknown')
1566 if (me.eq.king .or. .not.out1file)
1567 & open(iout,file=outname,status='unknown')
1569 if (fg_rank.gt.0) then
1570 write (liczba,'(i3.3)') myrank/nfgtasks
1571 write (ll,'(bz,i3.3)') fg_rank
1572 open(iout,file="debug"//liczba(:ilen(liczba))//"."//ll,
1577 open(igeom,file=intname,status='unknown',access='append')
1578 open(ipdb,file=pdbname,status='unknown')
1579 open(imol2,file=mol2name,status='unknown')
1580 open(istat,file=statname,status='unknown',access='append')
1582 c1out open(iout,file=outname,status='unknown')
1585 csa_rbank=prefix(:lenpre)//'.CSA.rbank'
1586 csa_seed=prefix(:lenpre)//'.CSA.seed'
1587 csa_history=prefix(:lenpre)//'.CSA.history'
1588 csa_bank=prefix(:lenpre)//'.CSA.bank'
1589 csa_bank1=prefix(:lenpre)//'.CSA.bank1'
1590 csa_alpha=prefix(:lenpre)//'.CSA.alpha'
1591 csa_alpha1=prefix(:lenpre)//'.CSA.alpha1'
1592 c!bankt csa_bankt=prefix(:lenpre)//'.CSA.bankt'
1593 csa_int=prefix(:lenpre)//'.int'
1594 csa_bank_reminimized=prefix(:lenpre)//'.CSA.bank_reminimized'
1595 csa_native_int=prefix(:lenpre)//'.CSA.native.int'
1596 csa_in=prefix(:lenpre)//'.CSA.in'
1597 c print *,"Processor",myrank,"fg_rank",fg_rank," opened files"
1600 write (iout,'(80(1h-))')
1601 write (iout,'(30x,a)') "FILE ASSIGNMENT"
1602 write (iout,'(80(1h-))')
1603 write (iout,*) "Input file : ",
1604 & pref_orig(:ilen(pref_orig))//'.inp'
1605 write (iout,*) "Output file : ",
1606 & outname(:ilen(outname))
1608 write (iout,*) "Sidechain potential file : ",
1609 & sidename(:ilen(sidename))
1611 write (iout,*) "SCp potential file : ",
1612 & scpname(:ilen(scpname))
1614 write (iout,*) "Electrostatic potential file : ",
1615 & elename(:ilen(elename))
1616 write (iout,*) "Cumulant coefficient file : ",
1617 & fouriername(:ilen(fouriername))
1618 write (iout,*) "Torsional parameter file : ",
1619 & torname(:ilen(torname))
1620 write (iout,*) "Double torsional parameter file : ",
1621 & tordname(:ilen(tordname))
1622 write (iout,*) "SCCOR parameter file : ",
1623 & sccorname(:ilen(sccorname))
1624 write (iout,*) "Bond & inertia constant file : ",
1625 & bondname(:ilen(bondname))
1626 write (iout,*) "Bending parameter file : ",
1627 & thetname(:ilen(thetname))
1628 write (iout,*) "Rotamer parameter file : ",
1629 & rotname(:ilen(rotname))
1630 write (iout,*) "Threading database : ",
1631 & patname(:ilen(patname))
1633 &write (iout,*)" DIRTMP : ",
1635 write (iout,'(80(1h-))')
1639 c----------------------------------------------------------------------------
1640 subroutine card_concat(card)
1641 implicit real*8 (a-h,o-z)
1642 include 'DIMENSIONS'
1643 include 'COMMON.IOUNITS'
1645 character*80 karta,ucase
1647 read (inp,'(a)') karta
1650 do while (karta(80:80).eq.'&')
1651 card=card(:ilen(card)+1)//karta(:79)
1652 read (inp,'(a)') karta
1655 card=card(:ilen(card)+1)//karta
1659 subroutine read_dist_constr
1660 implicit real*8 (a-h,o-z)
1661 include 'DIMENSIONS'
1665 include 'COMMON.SETUP'
1666 include 'COMMON.CONTROL'
1667 include 'COMMON.CHAIN'
1668 include 'COMMON.IOUNITS'
1669 include 'COMMON.SBRIDGE'
1670 integer ifrag_(2,100),ipair_(2,100)
1671 double precision wfrag_(100),wpair_(100)
1672 character*500 controlcard
1673 c write (iout,*) "Calling read_dist_constr"
1674 c write (iout,*) "nres",nres," nstart_sup",nstart_sup," nsup",nsup
1676 call card_concat(controlcard)
1677 call readi(controlcard,"NFRAG",nfrag_,0)
1678 call readi(controlcard,"NPAIR",npair_,0)
1679 call readi(controlcard,"NDIST",ndist_,0)
1680 call reada(controlcard,'DIST_CUT',dist_cut,5.0d0)
1681 call multreadi(controlcard,"IFRAG",ifrag_(1,1),2*nfrag_,0)
1682 call multreadi(controlcard,"IPAIR",ipair_(1,1),2*npair_,0)
1683 call multreada(controlcard,"WFRAG",wfrag_(1),nfrag_,0.0d0)
1684 call multreada(controlcard,"WPAIR",wpair_(1),npair_,0.0d0)
1685 c write (iout,*) "NFRAG",nfrag_," NPAIR",npair_," NDIST",ndist_
1686 c write (iout,*) "IFRAG"
1688 c write (iout,*) i,ifrag_(1,i),ifrag_(2,i),wfrag_(i)
1690 c write (iout,*) "IPAIR"
1692 c write (iout,*) i,ipair_(1,i),ipair_(2,i),wpair_(i)
1694 if (.not.refstr .and. nfrag.gt.0) then
1696 & "ERROR: no reference structure to compute distance restraints"
1698 & "Restraints must be specified explicitly (NDIST=number)"
1701 if (nfrag.lt.2 .and. npair.gt.0) then
1702 write (iout,*) "ERROR: Less than 2 fragments specified",
1703 & " but distance restraints between pairs requested"
1708 if (ifrag_(1,i).lt.nstart_sup) ifrag_(1,i)=nstart_sup
1709 if (ifrag_(2,i).gt.nstart_sup+nsup-1)
1710 & ifrag_(2,i)=nstart_sup+nsup-1
1711 c write (iout,*) i,ifrag_(1,i),ifrag_(2,i),wfrag_(i)
1713 if (wfrag_(i).gt.0.0d0) then
1714 do j=ifrag_(1,i),ifrag_(2,i)-1
1715 do k=j+1,ifrag_(2,i)
1716 c write (iout,*) "j",j," k",k
1718 if (constr_dist.eq.1) then
1723 forcon(nhpb)=wfrag_(i)
1724 else if (constr_dist.eq.2) then
1725 if (ddjk.le.dist_cut) then
1730 forcon(nhpb)=wfrag_(i)
1737 forcon(nhpb)=wfrag_(i)*dexp(-0.5d0*(ddjk/dist_cut)**2)
1740 if (.not.out1file .or. me.eq.king)
1741 & write (iout,'(a,3i5,f8.2,1pe12.2)') "+dist.constr ",
1742 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
1744 write (iout,'(a,3i5,f8.2,1pe12.2)') "+dist.constr ",
1745 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
1752 if (wpair_(i).gt.0.0d0) then
1760 do j=ifrag_(1,ii),ifrag_(2,ii)
1761 do k=ifrag_(1,jj),ifrag_(2,jj)
1765 forcon(nhpb)=wpair_(i)
1766 dhpb(nhpb)=dist(j,k)
1768 if (.not.out1file .or. me.eq.king)
1769 & write (iout,'(a,3i5,f8.2,f10.1)') "+dist.constr ",
1770 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
1772 write (iout,'(a,3i5,f8.2,f10.1)') "+dist.constr ",
1773 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
1780 read (inp,*) ihpb(nhpb+1),jhpb(nhpb+1),dhpb(i),dhpb1(i),
1781 & ibecarb(i),forcon(nhpb+1)
1782 if (forcon(nhpb+1).gt.0.0d0) then
1784 if (ibecarb(i).gt.0) then
1785 ihpb(i)=ihpb(i)+nres
1786 jhpb(i)=jhpb(i)+nres
1788 if (dhpb(nhpb).eq.0.0d0)
1789 & dhpb(nhpb)=dist(ihpb(nhpb),jhpb(nhpb))
1793 if (.not.out1file .or. me.eq.king) then
1796 write (iout,'(a,3i5,2f8.2,i2,f10.1)') "+dist.constr ",
1797 & i,ihpb(i),jhpb(i),dhpb(i),dhpb1(i),ibecarb(i),forcon(i)
1805 c-------------------------------------------------------------------------------
1807 subroutine flush(iu)
1812 subroutine flush(iu)
1817 c------------------------------------------------------------------------------
1818 subroutine copy_to_tmp(source)
1819 include "DIMENSIONS"
1820 include "COMMON.IOUNITS"
1821 character*(*) source
1822 character* 256 tmpfile
1826 tmpfile=curdir(:ilen(curdir))//"/"//source(:ilen(source))
1827 inquire(file=tmpfile,exist=ex)
1829 write (*,*) "Copying ",tmpfile(:ilen(tmpfile)),
1830 & " to temporary directory..."
1831 write (*,*) "/bin/cp "//tmpfile(:ilen(tmpfile))//" "//tmpdir
1832 call system("/bin/cp "//tmpfile(:ilen(tmpfile))//" "//tmpdir)
1836 c------------------------------------------------------------------------------
1837 subroutine move_from_tmp(source)
1838 include "DIMENSIONS"
1839 include "COMMON.IOUNITS"
1840 character*(*) source
1843 write (*,*) "Moving ",source(:ilen(source)),
1844 & " from temporary directory to working directory"
1845 write (*,*) "/bin/mv "//source(:ilen(source))//" "//curdir
1846 call system("/bin/mv "//source(:ilen(source))//" "//curdir)
1849 c------------------------------------------------------------------------------
1850 subroutine random_init(seed)
1852 C Initialize random number generator
1854 implicit real*8 (a-h,o-z)
1855 include 'DIMENSIONS'
1861 logical OKRandom, prng_restart
1863 integer iseed_array(4)
1865 include 'COMMON.IOUNITS'
1866 include 'COMMON.TIME1'
1867 c include 'COMMON.THREAD'
1868 include 'COMMON.SBRIDGE'
1869 include 'COMMON.CONTROL'
1870 include 'COMMON.MCM'
1871 c include 'COMMON.MAP'
1872 include 'COMMON.HEADER'
1873 c include 'COMMON.CSA'
1874 include 'COMMON.CHAIN'
1875 c include 'COMMON.MUCA'
1876 c include 'COMMON.MD'
1877 include 'COMMON.FFIELD'
1878 include 'COMMON.SETUP'
1879 iseed=-dint(dabs(seed))
1880 if (iseed.eq.0) then
1881 write (iout,'(/80(1h*)/20x,a/80(1h*))')
1882 & 'Random seed undefined. The program will stop.'
1883 write (*,'(/80(1h*)/20x,a/80(1h*))')
1884 & 'Random seed undefined. The program will stop.'
1886 call mpi_finalize(mpi_comm_world,ierr)
1888 stop 'Bad random seed.'
1891 if (fg_rank.eq.0) then
1895 if(me.eq.king .or. .not. out1file)
1896 & write (iout,*) 'MPI: node= ', me, ' iseed= ',iseedi8
1897 write (*,*) 'MPI: node= ', me, ' iseed= ',iseedi8
1898 OKRandom = prng_restart(me,iseedi8)
1901 tmp=65536.0d0**(4-i)
1902 iseed_array(i) = dint(seed/tmp)
1903 seed=seed-iseed_array(i)*tmp
1905 if(me.eq.king .or. .not. out1file)
1906 & write (iout,*) 'MPI: node= ', me, ' iseed(4)= ',
1907 & (iseed_array(i),i=1,4)
1908 write (*,*) 'MPI: node= ',me, ' iseed(4)= ',
1909 & (iseed_array(i),i=1,4)
1910 OKRandom = prng_restart(me,iseed_array)
1913 r1=ran_number(0.0D0,1.0D0)
1914 if(me.eq.king .or. .not. out1file)
1915 & write (iout,*) 'ran_num',r1
1916 if (r1.lt.0.0d0) OKRandom=.false.
1918 if (.not.OKRandom) then
1919 write (iout,*) 'PRNG IS NOT WORKING!!!'
1920 print *,'PRNG IS NOT WORKING!!!'
1923 call mpi_abort(mpi_comm_world,error_msg,ierr)
1926 write (iout,*) 'too many processors for parallel prng'
1927 write (*,*) 'too many processors for parallel prng'
1935 write (iout,*) 'ran_num',ran_number(0.0d0,1.0d0)