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 if (modecalc.eq.3 .or. modecalc.eq.6) call mcmread
20 C Read MD control parameters if reqjuired
21 if (modecalc.eq.12) call read_MDpar
22 C Read MREMD control parameters if required
23 if (modecalc.eq.14) then
27 C Read MUCA control parameters if required
28 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
39 C Print restraint information
41 if (.not. out1file .or. me.eq.king) then
44 &write (iout,'(a,i5,a)') "The following",nhpb-nss,
45 & " distance constraints have been imposed"
47 write (iout,'(3i6,f10.5)') i-nss,ihpb(i),jhpb(i),forcon(i)
52 c print *,"Processor",myrank," leaves READRTNS"
55 C-------------------------------------------------------------------------------
56 subroutine read_control
60 implicit real*8 (a-h,o-z)
64 logical OKRandom, prng_restart
67 include 'COMMON.IOUNITS'
68 include 'COMMON.TIME1'
69 include 'COMMON.THREAD'
70 include 'COMMON.SBRIDGE'
71 include 'COMMON.CONTROL'
74 include 'COMMON.HEADER'
76 include 'COMMON.CHAIN'
79 include 'COMMON.FFIELD'
80 include 'COMMON.INTERACT'
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 readi(controlcard,'SYM',symetr,1)
100 call reada(controlcard,'TIMLIM',timlim,960.0D0) ! default 16 hours
101 unres_pdb = index(controlcard,'UNRES_PDB') .gt. 0
102 call reada(controlcard,'SAFETY',safety,30.0D0) ! default 30 minutes
103 call reada(controlcard,'RMSDBC',rmsdbc,3.0D0)
104 call reada(controlcard,'RMSDBC1',rmsdbc1,0.5D0)
105 call reada(controlcard,'RMSDBC1MAX',rmsdbc1max,1.5D0)
106 call reada(controlcard,'RMSDBCM',rmsdbcm,3.0D0)
107 call reada(controlcard,'DRMS',drms,0.1D0)
108 if(me.eq.king .or. .not. out1file .and. fg_rank.eq.0) then
109 write (iout,'(a,f10.1)')'RMSDBC = ',rmsdbc
110 write (iout,'(a,f10.1)')'RMSDBC1 = ',rmsdbc1
111 write (iout,'(a,f10.1)')'RMSDBC1MAX = ',rmsdbc1max
112 write (iout,'(a,f10.1)')'DRMS = ',drms
113 write (iout,'(a,f10.1)')'RMSDBCM = ',rmsdbcm
114 write (iout,'(a,f10.1)') 'Time limit (min):',timlim
116 call readi(controlcard,'NZ_START',nz_start,0)
117 call readi(controlcard,'NZ_END',nz_end,0)
118 call readi(controlcard,'IZ_SC',iz_sc,0)
120 safety = 60.0d0*safety
123 call reada(controlcard,"T_BATH",t_bath,300.0d0)
124 minim=(index(controlcard,'MINIMIZE').gt.0)
125 dccart=(index(controlcard,'CART').gt.0)
126 overlapsc=(index(controlcard,'OVERLAP').gt.0)
127 overlapsc=.not.overlapsc
128 searchsc=(index(controlcard,'NOSEARCHSC').gt.0)
129 searchsc=.not.searchsc
130 sideadd=(index(controlcard,'SIDEADD').gt.0)
131 energy_dec=(index(controlcard,'ENERGY_DEC').gt.0)
132 outpdb=(index(controlcard,'PDBOUT').gt.0)
133 outmol2=(index(controlcard,'MOL2OUT').gt.0)
134 pdbref=(index(controlcard,'PDBREF').gt.0)
135 refstr=pdbref .or. (index(controlcard,'REFSTR').gt.0)
136 indpdb=index(controlcard,'PDBSTART')
137 extconf=(index(controlcard,'EXTCONF').gt.0)
138 call readi(controlcard,'IPRINT',iprint,0)
139 call readi(controlcard,'MAXGEN',maxgen,10000)
140 call readi(controlcard,'MAXOVERLAP',maxoverlap,1000)
141 call readi(controlcard,"KDIAG",kdiag,0)
142 call readi(controlcard,"RESCALE_MODE",rescale_mode,2)
143 if(me.eq.king .or. .not. out1file .and. fg_rank.eq.0)
144 & write (iout,*) "RESCALE_MODE",rescale_mode
145 split_ene=index(controlcard,'SPLIT_ENE').gt.0
146 if (index(controlcard,'REGULAR').gt.0.0D0) then
147 call reada(controlcard,'WEIDIS',weidis,0.1D0)
151 if (index(controlcard,'CHECKGRAD').gt.0) then
153 if (index(controlcard,'CART').gt.0) then
155 elseif (index(controlcard,'CARINT').gt.0) then
160 elseif (index(controlcard,'THREAD').gt.0) then
162 call readi(controlcard,'THREAD',nthread,0)
163 if (nthread.gt.0) then
164 call reada(controlcard,'WEIDIS',weidis,0.1D0)
167 & write (iout,'(a)')'A number has to follow the THREAD keyword.'
168 stop 'Error termination in Read_Control.'
170 else if (index(controlcard,'MCMA').gt.0) then
172 else if (index(controlcard,'MCEE').gt.0) then
174 else if (index(controlcard,'MULTCONF').gt.0) then
176 else if (index(controlcard,'MAP').gt.0) then
178 call readi(controlcard,'MAP',nmap,0)
179 else if (index(controlcard,'CSA').gt.0) then
181 crc else if (index(controlcard,'ZSCORE').gt.0) then
183 crc ZSCORE is rm from UNRES, modecalc=9 is available
186 cfcm else if (index(controlcard,'MCMF').gt.0) then
188 else if (index(controlcard,'SOFTREG').gt.0) then
190 else if (index(controlcard,'CHECK_BOND').gt.0) then
192 else if (index(controlcard,'TEST').gt.0) then
194 else if (index(controlcard,'MD').gt.0) then
196 else if (index(controlcard,'RE ').gt.0) then
200 lmuca=index(controlcard,'MUCA').gt.0
201 call readi(controlcard,'MUCADYN',mucadyn,0)
202 call readi(controlcard,'MUCASMOOTH',muca_smooth,0)
203 if (lmuca .and. (me.eq.king .or. .not.out1file ))
205 write (iout,*) 'MUCADYN=',mucadyn
206 write (iout,*) 'MUCASMOOTH=',muca_smooth
209 iscode=index(controlcard,'ONE_LETTER')
210 indphi=index(controlcard,'PHI')
211 indback=index(controlcard,'BACK')
212 iranconf=index(controlcard,'RAND_CONF')
213 i2ndstr=index(controlcard,'USE_SEC_PRED')
214 gradout=index(controlcard,'GRADOUT').gt.0
215 gnorm_check=index(controlcard,'GNORM_CHECK').gt.0
216 call reada(controlcard,'DISTCHAINMAX',distchainmax,5.0d0)
217 if (me.eq.king .or. .not.out1file )
218 & write (iout,*) "DISTCHAINMAX",distchainmax
220 if(me.eq.king.or..not.out1file)
221 & write (iout,'(2a)') diagmeth(kdiag),
222 & ' routine used to diagonalize matrices.'
225 c--------------------------------------------------------------------------
226 subroutine read_REMDpar
230 implicit real*8 (a-h,o-z)
232 include 'COMMON.IOUNITS'
233 include 'COMMON.TIME1'
236 include 'COMMON.LANGEVIN'
238 include 'COMMON.LANGEVIN.lang0'
240 include 'COMMON.INTERACT'
241 include 'COMMON.NAMES'
243 include 'COMMON.REMD'
244 include 'COMMON.CONTROL'
245 include 'COMMON.SETUP'
247 character*320 controlcard
248 character*3200 controlcard1
249 integer iremd_m_total
251 if(me.eq.king.or..not.out1file)
252 & write (iout,*) "REMD setup"
254 call card_concat(controlcard)
255 call readi(controlcard,"NREP",nrep,3)
256 call readi(controlcard,"NSTEX",nstex,1000)
257 call reada(controlcard,"RETMIN",retmin,10.0d0)
258 call reada(controlcard,"RETMAX",retmax,1000.0d0)
259 mremdsync=(index(controlcard,'SYNC').gt.0)
260 call readi(controlcard,"NSYN",i_sync_step,100)
261 restart1file=(index(controlcard,'REST1FILE').gt.0)
262 traj1file=(index(controlcard,'TRAJ1FILE').gt.0)
263 call readi(controlcard,"TRAJCACHE",max_cache_traj_use,1)
264 if(max_cache_traj_use.gt.max_cache_traj)
265 & max_cache_traj_use=max_cache_traj
266 if(me.eq.king.or..not.out1file) then
267 cd if (traj1file) then
268 crc caching is in testing - NTWX is not ignored
269 cd write (iout,*) "NTWX value is ignored"
270 cd write (iout,*) " trajectory is stored to one file by master"
271 cd write (iout,*) " before exchange at NSTEX intervals"
273 write (iout,*) "NREP= ",nrep
274 write (iout,*) "NSTEX= ",nstex
275 write (iout,*) "SYNC= ",mremdsync
276 write (iout,*) "NSYN= ",i_sync_step
277 write (iout,*) "TRAJCACHE= ",max_cache_traj_use
280 if (index(controlcard,'TLIST').gt.0) then
282 call card_concat(controlcard1)
283 read(controlcard1,*) (remd_t(i),i=1,nrep)
284 if(me.eq.king.or..not.out1file)
285 & write (iout,*)'tlist',(remd_t(i),i=1,nrep)
288 if (index(controlcard,'MLIST').gt.0) then
290 call card_concat(controlcard1)
291 read(controlcard1,*) (remd_m(i),i=1,nrep)
292 if(me.eq.king.or..not.out1file) then
293 write (iout,*)'mlist',(remd_m(i),i=1,nrep)
296 iremd_m_total=iremd_m_total+remd_m(i)
298 write (iout,*) 'Total number of replicas ',iremd_m_total
301 if(me.eq.king.or..not.out1file)
302 & write (iout,'(/30(1h=),a,29(1h=)/)') " End of REMD run setup "
305 c--------------------------------------------------------------------------
306 subroutine read_MDpar
310 implicit real*8 (a-h,o-z)
312 include 'COMMON.IOUNITS'
313 include 'COMMON.TIME1'
316 include 'COMMON.LANGEVIN'
318 include 'COMMON.LANGEVIN.lang0'
320 include 'COMMON.INTERACT'
321 include 'COMMON.NAMES'
323 include 'COMMON.SETUP'
324 include 'COMMON.CONTROL'
325 include 'COMMON.SPLITELE'
327 character*320 controlcard
329 call card_concat(controlcard)
330 call readi(controlcard,"NSTEP",n_timestep,1000000)
331 call readi(controlcard,"NTWE",ntwe,100)
332 call readi(controlcard,"NTWX",ntwx,1000)
333 call reada(controlcard,"DT",d_time,1.0d-1)
334 call reada(controlcard,"DVMAX",dvmax,2.0d1)
335 call reada(controlcard,"DAMAX",damax,1.0d1)
336 call reada(controlcard,"EDRIFTMAX",edriftmax,1.0d+1)
337 call readi(controlcard,"LANG",lang,0)
338 RESPA = index(controlcard,"RESPA") .gt. 0
339 call readi(controlcard,"NTIME_SPLIT",ntime_split,1)
340 ntime_split0=ntime_split
341 call readi(controlcard,"MAXTIME_SPLIT",maxtime_split,64)
342 ntime_split0=ntime_split
343 call reada(controlcard,"R_CUT",r_cut,2.0d0)
344 call reada(controlcard,"LAMBDA",rlamb,0.3d0)
345 rest = index(controlcard,"REST").gt.0
346 tbf = index(controlcard,"TBF").gt.0
347 usampl = index(controlcard,"USAMPL").gt.0
348 mdpdb = index(controlcard,"MDPDB").gt.0
349 call reada(controlcard,"T_BATH",t_bath,300.0d0)
350 call reada(controlcard,"TAU_BATH",tau_bath,1.0d-1)
351 call reada(controlcard,"EQ_TIME",eq_time,1.0d+4)
352 call readi(controlcard,"RESET_MOMENT",count_reset_moment,1000)
353 if (count_reset_moment.eq.0) count_reset_moment=1000000000
354 call readi(controlcard,"RESET_VEL",count_reset_vel,1000)
355 reset_moment=lang.eq.0 .and. tbf .and. count_reset_moment.gt.0
356 reset_vel=lang.eq.0 .and. tbf .and. count_reset_vel.gt.0
357 if (count_reset_vel.eq.0) count_reset_vel=1000000000
358 large = index(controlcard,"LARGE").gt.0
359 print_compon = index(controlcard,"PRINT_COMPON").gt.0
360 rattle = index(controlcard,"RATTLE").gt.0
361 c if performing umbrella sampling, fragments constrained are read from the fragment file
367 if(me.eq.king.or..not.out1file) then
369 write (iout,'(27(1h=),a26,27(1h=))') " Parameters of the MD run "
371 write (iout,'(a)') "The units are:"
372 write (iout,'(a)') "positions: angstrom, time: 48.9 fs"
373 write (iout,'(2a)') "velocity: angstrom/(48.9 fs),",
374 & " acceleration: angstrom/(48.9 fs)**2"
375 write (iout,'(a)') "energy: kcal/mol, temperature: K"
377 write (iout,'(a60,i10)') "Number of time steps:",n_timestep
378 write (iout,'(a60,f10.5,a)')
379 & "Initial time step of numerical integration:",d_time,
381 write (iout,'(60x,f10.5,a)') d_time*48.9," fs"
383 write (iout,'(2a,i4,a)')
384 & "A-MTS algorithm used; initial time step for fast-varying",
385 & " short-range forces split into",ntime_split," steps."
386 write (iout,'(a,f5.2,a,f5.2)') "Short-range force cutoff",
387 & r_cut," lambda",rlamb
389 write (iout,'(2a,f10.5)')
390 & "Maximum acceleration threshold to reduce the time step",
391 & "/increase split number:",damax
392 write (iout,'(2a,f10.5)')
393 & "Maximum predicted energy drift to reduce the timestep",
394 & "/increase split number:",edriftmax
395 write (iout,'(a60,f10.5)')
396 & "Maximum velocity threshold to reduce velocities:",dvmax
397 write (iout,'(a60,i10)') "Frequency of property output:",ntwe
398 write (iout,'(a60,i10)') "Frequency of coordinate output:",ntwx
399 if (rattle) write (iout,'(a60)')
400 & "Rattle algorithm used to constrain the virtual bonds"
404 call reada(controlcard,"ETAWAT",etawat,0.8904d0)
405 call reada(controlcard,"RWAT",rwat,1.4d0)
406 call reada(controlcard,"SCAL_FRIC",scal_fric,2.0d-2)
407 surfarea=index(controlcard,"SURFAREA").gt.0
408 call readi(controlcard,"RESET_FRICMAT",reset_fricmat,1000)
409 if(me.eq.king.or..not.out1file)then
410 write (iout,'(/a,$)') "Langevin dynamics calculation"
413 & " with direct integration of Langevin equations"
414 else if (lang.eq.2) then
415 write (iout,'(a/)') " with TINKER stochasic MD integrator"
416 else if (lang.eq.3) then
417 write (iout,'(a/)') " with Ciccotti's stochasic MD integrator"
418 else if (lang.eq.4) then
419 write (iout,'(a/)') " in overdamped mode"
421 write (iout,'(//a,i5)')
422 & "=========== ERROR: Unknown Langevin dynamics mode:",lang
425 write (iout,'(a60,f10.5)') "Temperature:",t_bath
426 write (iout,'(a60,f10.5)') "Viscosity of the solvent:",etawat
427 write (iout,'(a60,f10.5)') "Radius of solvent molecule:",rwat
428 write (iout,'(a60,f10.5)')
429 & "Scaling factor of the friction forces:",scal_fric
430 if (surfarea) write (iout,'(2a,i10,a)')
431 & "Friction coefficients will be scaled by solvent-accessible",
432 & " surface area every",reset_fricmat," steps."
434 c Calculate friction coefficients and bounds of stochastic forces
435 eta=6*pi*cPoise*etawat
436 if(me.eq.king.or..not.out1file)
437 & write(iout,'(a60,f10.5)')"Eta of the solvent in natural units:"
439 gamp=scal_fric*(pstok+rwat)*eta
440 stdfp=dsqrt(2*Rb*t_bath/d_time)
442 gamsc(i)=scal_fric*(restok(i)+rwat)*eta
443 stdfsc(i)=dsqrt(2*Rb*t_bath/d_time)
445 if(me.eq.king.or..not.out1file)then
446 write (iout,'(/2a/)')
447 & "Radii of site types and friction coefficients and std's of",
448 & " stochastic forces of fully exposed sites"
449 write (iout,'(a5,f5.2,2f10.5)')'p',pstok,gamp,stdfp*dsqrt(gamp)
451 write (iout,'(a5,f5.2,2f10.5)') restyp(i),restok(i),
452 & gamsc(i),stdfsc(i)*dsqrt(gamsc(i))
456 if(me.eq.king.or..not.out1file)then
457 write (iout,'(a)') "Berendsen bath calculation"
458 write (iout,'(a60,f10.5)') "Temperature:",t_bath
459 write (iout,'(a60,f10.5)') "Coupling constant (tau):",tau_bath
461 & write (iout,'(a,i10,a)') "Momenta will be reset at zero every",
462 & count_reset_moment," steps"
464 & write (iout,'(a,i10,a)')
465 & "Velocities will be reset at random every",count_reset_vel,
469 if(me.eq.king.or..not.out1file)
470 & write (iout,'(a31)') "Microcanonical mode calculation"
472 if(me.eq.king.or..not.out1file)then
473 if (rest) write (iout,'(/a/)') "===== Calculation restarted ===="
475 write(iout,*) "MD running with constraints."
476 write(iout,*) "Equilibration time ", eq_time, " mtus."
477 write(iout,*) "Constraining ", nfrag," fragments."
478 write(iout,*) "Length of each fragment, weight and q0:"
480 write (iout,*) "Set of restraints #",iset
482 write(iout,'(2i5,f8.1,f7.4)') ifrag(1,i,iset),
483 & ifrag(2,i,iset),wfrag(i,iset),qinfrag(i,iset)
485 write(iout,*) "constraints between ", npair, "fragments."
486 write(iout,*) "constraint pairs, weights and q0:"
488 write(iout,'(2i5,f8.1,f7.4)') ipair(1,i,iset),
489 & ipair(2,i,iset),wpair(i,iset),qinpair(i,iset)
491 write(iout,*) "angle constraints within ", nfrag_back,
492 & "backbone fragments."
493 write(iout,*) "fragment, weights:"
495 write(iout,'(2i5,3f8.1)') ifrag_back(1,i,iset),
496 & ifrag_back(2,i,iset),wfrag_back(1,i,iset),
497 & wfrag_back(2,i,iset),wfrag_back(3,i,iset)
500 iset=mod(kolor,nset)+1
503 if(me.eq.king.or..not.out1file)
504 & write (iout,'(/30(1h=),a,29(1h=)/)') " End of MD run setup "
507 c------------------------------------------------------------------------------
510 C Read molecular data.
512 implicit real*8 (a-h,o-z)
518 include 'COMMON.IOUNITS'
521 include 'COMMON.INTERACT'
522 include 'COMMON.LOCAL'
523 include 'COMMON.NAMES'
524 include 'COMMON.CHAIN'
525 include 'COMMON.FFIELD'
526 include 'COMMON.SBRIDGE'
527 include 'COMMON.HEADER'
528 include 'COMMON.CONTROL'
529 include 'COMMON.DBASE'
530 include 'COMMON.THREAD'
531 include 'COMMON.CONTACTS'
532 include 'COMMON.TORCNSTR'
533 include 'COMMON.TIME1'
534 include 'COMMON.BOUNDS'
536 include 'COMMON.SETUP'
537 character*4 sequence(maxres)
539 double precision x(maxvar)
540 character*256 pdbfile
541 character*320 weightcard
542 character*80 weightcard_t,ucase
543 dimension itype_pdb(maxres)
544 common /pizda/ itype_pdb
545 logical seq_comp,fail
546 double precision energia(0:n_ene)
552 C Read weights of the subsequent energy terms.
553 call card_concat(weightcard)
554 call reada(weightcard,'WLONG',wlong,1.0D0)
555 call reada(weightcard,'WSC',wsc,wlong)
556 call reada(weightcard,'WSCP',wscp,wlong)
557 call reada(weightcard,'WELEC',welec,1.0D0)
558 call reada(weightcard,'WVDWPP',wvdwpp,welec)
559 call reada(weightcard,'WEL_LOC',wel_loc,1.0D0)
560 call reada(weightcard,'WCORR4',wcorr4,0.0D0)
561 call reada(weightcard,'WCORR5',wcorr5,0.0D0)
562 call reada(weightcard,'WCORR6',wcorr6,0.0D0)
563 call reada(weightcard,'WTURN3',wturn3,1.0D0)
564 call reada(weightcard,'WTURN4',wturn4,1.0D0)
565 call reada(weightcard,'WTURN6',wturn6,1.0D0)
566 call reada(weightcard,'WSCCOR',wsccor,1.0D0)
567 call reada(weightcard,'WSTRAIN',wstrain,1.0D0)
568 call reada(weightcard,'WBOND',wbond,1.0D0)
569 call reada(weightcard,'WTOR',wtor,1.0D0)
570 call reada(weightcard,'WTORD',wtor_d,1.0D0)
571 call reada(weightcard,'WANG',wang,1.0D0)
572 call reada(weightcard,'WSCLOC',wscloc,1.0D0)
573 call reada(weightcard,'SCAL14',scal14,0.4D0)
574 call reada(weightcard,'SCALSCP',scalscp,1.0d0)
575 call reada(weightcard,'CUTOFF',cutoff_corr,7.0d0)
576 call reada(weightcard,'DELT_CORR',delt_corr,0.5d0)
577 call reada(weightcard,'TEMP0',temp0,300.0d0)
578 if (index(weightcard,'SOFT').gt.0) ipot=6
579 C 12/1/95 Added weight for the multi-body term WCORR
580 call reada(weightcard,'WCORRH',wcorr,1.0D0)
581 if (wcorr4.gt.0.0d0) wcorr=wcorr4
601 if(me.eq.king.or..not.out1file)
602 & write (iout,10) wsc,wscp,welec,wvdwpp,wbond,wang,wscloc,wtor,
603 & wtor_d,wstrain,wel_loc,wcorr,wcorr5,wcorr6,wsccor,wturn3,
605 10 format (/'Energy-term weights (unscaled):'//
606 & 'WSCC= ',f10.6,' (SC-SC)'/
607 & 'WSCP= ',f10.6,' (SC-p)'/
608 & 'WELEC= ',f10.6,' (p-p electr)'/
609 & 'WVDWPP= ',f10.6,' (p-p VDW)'/
610 & 'WBOND= ',f10.6,' (stretching)'/
611 & 'WANG= ',f10.6,' (bending)'/
612 & 'WSCLOC= ',f10.6,' (SC local)'/
613 & 'WTOR= ',f10.6,' (torsional)'/
614 & 'WTORD= ',f10.6,' (double torsional)'/
615 & 'WSTRAIN=',f10.6,' (SS bridges & dist. cnstr.)'/
616 & 'WEL_LOC=',f10.6,' (multi-body 3-rd order)'/
617 & 'WCORR4= ',f10.6,' (multi-body 4th order)'/
618 & 'WCORR5= ',f10.6,' (multi-body 5th order)'/
619 & 'WCORR6= ',f10.6,' (multi-body 6th order)'/
620 & 'WSCCOR= ',f10.6,' (back-scloc correlation)'/
621 & 'WTURN3= ',f10.6,' (turns, 3rd order)'/
622 & 'WTURN4= ',f10.6,' (turns, 4th order)'/
623 & 'WTURN6= ',f10.6,' (turns, 6th order)')
624 if(me.eq.king.or..not.out1file)then
625 if (wcorr4.gt.0.0d0) then
626 write (iout,'(/2a/)') 'Local-electrostatic type correlation ',
627 & 'between contact pairs of peptide groups'
628 write (iout,'(2(a,f5.3/))')
629 & 'Cutoff on 4-6th order correlation terms: ',cutoff_corr,
630 & 'Range of quenching the correlation terms:',2*delt_corr
631 else if (wcorr.gt.0.0d0) then
632 write (iout,'(/2a/)') 'Hydrogen-bonding correlation ',
633 & 'between contact pairs of peptide groups'
635 write (iout,'(a,f8.3)')
636 & 'Scaling factor of 1,4 SC-p interactions:',scal14
637 write (iout,'(a,f8.3)')
638 & 'General scaling factor of SC-p interactions:',scalscp
640 r0_corr=cutoff_corr-delt_corr
642 aad(i,1)=scalscp*aad(i,1)
643 aad(i,2)=scalscp*aad(i,2)
644 bad(i,1)=scalscp*bad(i,1)
645 bad(i,2)=scalscp*bad(i,2)
647 call rescale_weights(t_bath)
648 if(me.eq.king.or..not.out1file)
649 & write (iout,22) wsc,wscp,welec,wvdwpp,wbond,wang,wscloc,wtor,
650 & wtor_d,wstrain,wel_loc,wcorr,wcorr5,wcorr6,wsccor,wturn3,
652 22 format (/'Energy-term weights (scaled):'//
653 & 'WSCC= ',f10.6,' (SC-SC)'/
654 & 'WSCP= ',f10.6,' (SC-p)'/
655 & 'WELEC= ',f10.6,' (p-p electr)'/
656 & 'WVDWPP= ',f10.6,' (p-p VDW)'/
657 & 'WBOND= ',f10.6,' (stretching)'/
658 & 'WANG= ',f10.6,' (bending)'/
659 & 'WSCLOC= ',f10.6,' (SC local)'/
660 & 'WTOR= ',f10.6,' (torsional)'/
661 & 'WTORD= ',f10.6,' (double torsional)'/
662 & 'WSTRAIN=',f10.6,' (SS bridges & dist. cnstr.)'/
663 & 'WEL_LOC=',f10.6,' (multi-body 3-rd order)'/
664 & 'WCORR4= ',f10.6,' (multi-body 4th order)'/
665 & 'WCORR5= ',f10.6,' (multi-body 5th order)'/
666 & 'WCORR6= ',f10.6,' (multi-body 6th order)'/
667 & 'WSCCOR= ',f10.6,' (back-scloc correlatkion)'/
668 & 'WTURN3= ',f10.6,' (turns, 3rd order)'/
669 & 'WTURN4= ',f10.6,' (turns, 4th order)'/
670 & 'WTURN6= ',f10.6,' (turns, 6th order)')
671 if(me.eq.king.or..not.out1file)
672 & write (iout,*) "Reference temperature for weights calculation:",
674 call reada(weightcard,"D0CM",d0cm,3.78d0)
675 call reada(weightcard,"AKCM",akcm,15.1d0)
676 call reada(weightcard,"AKTH",akth,11.0d0)
677 call reada(weightcard,"AKCT",akct,12.0d0)
678 call reada(weightcard,"V1SS",v1ss,-1.08d0)
679 call reada(weightcard,"V2SS",v2ss,7.61d0)
680 call reada(weightcard,"V3SS",v3ss,13.7d0)
681 call reada(weightcard,"EBR",ebr,-5.50D0)
682 if(me.eq.king.or..not.out1file) then
683 write (iout,*) "Parameters of the SS-bond potential:"
684 write (iout,*) "D0CM",d0cm," AKCM",akcm," AKTH",akth,
686 write (iout,*) "V1SS",v1ss," V2SS",v2ss," V3SS",v3ss
687 write (iout,*) "EBR",ebr
688 c print *,'indpdb=',indpdb,' pdbref=',pdbref
690 if (indpdb.gt.0 .or. pdbref) then
691 read(inp,'(a)') pdbfile
692 if(me.eq.king.or..not.out1file)
693 & write (iout,'(2a)') 'PDB data will be read from file ',
694 & pdbfile(:ilen(pdbfile))
695 open(ipdbin,file=pdbfile,status='old',err=33)
697 33 write (iout,'(a)') 'Error opening PDB file.'
700 c print *,'Begin reading pdb data'
702 c print *,'Finished reading pdb data'
703 if(me.eq.king.or..not.out1file)
704 & write (iout,'(a,i3,a,i3)')'nsup=',nsup,
705 & ' nstart_sup=',nstart_sup
707 itype_pdb(i)=itype(i)
711 nct=nstart_sup+nsup-1
712 call contact(.false.,ncont_ref,icont_ref,co)
715 if(me.eq.king.or..not.out1file)
716 & write(iout,*)'Adding sidechains'
720 if (iti.ne.10 .and. itype(i).ne.21) then
723 do while (fail.and.nsi.le.maxsi)
724 call gen_side(iti,theta(i+1),alph(i),omeg(i),fail)
727 if(fail) write(iout,*)'Adding sidechain failed for res ',
728 & i,' after ',nsi,' trials'
733 if (indpdb.eq.0) then
734 C Read sequence if not taken from the pdb file.
736 c print *,'nres=',nres
737 if (iscode.gt.0) then
738 read (inp,'(80a1)') (sequence(i)(1:1),i=1,nres)
740 read (inp,'(20(1x,a3))') (sequence(i),i=1,nres)
742 C Convert sequence to numeric code
744 itype(i)=rescode(i,sequence(i),iscode)
746 C Assign initial virtual bond lengths
752 vbld(i+nres)=dsc(itype(i))
753 vbld_inv(i+nres)=dsc_inv(itype(i))
754 c write (iout,*) "i",i," itype",itype(i),
755 c & " dsc",dsc(itype(i))," vbld",vbld(i),vbld(i+nres)
759 c print '(20i4)',(itype(i),i=1,nres)
762 if (itype(i).eq.21 .or. itype(i+1).eq.21) then
764 if (itype(i).eq.21) then
768 else if (itype(i+1).ne.20) then
770 else if (itype(i).ne.20) then
777 if(me.eq.king.or..not.out1file)then
778 write (iout,*) "ITEL"
780 write (iout,*) i,itype(i),itel(i)
782 print *,'Call Read_Bridge.'
785 C 8/13/98 Set limits to generating the dihedral angles
790 read (inp,*) ndih_constr
791 if (ndih_constr.gt.0) then
793 read (inp,*) (idih_constr(i),phi0(i),drange(i),i=1,ndih_constr)
794 if(me.eq.king.or..not.out1file)then
796 & 'There are',ndih_constr,' constraints on phi angles.'
798 write (iout,'(i5,2f8.3)') idih_constr(i),phi0(i),drange(i)
802 phi0(i)=deg2rad*phi0(i)
803 drange(i)=deg2rad*drange(i)
805 if(me.eq.king.or..not.out1file)
806 & write (iout,*) 'FTORS',ftors
809 phibound(1,ii) = phi0(i)-drange(i)
810 phibound(2,ii) = phi0(i)+drange(i)
817 write (iout,'(a)') 'Boundaries in phi angle sampling:'
819 write (iout,'(a3,i5,2f10.1)')
820 & restyp(itype(i)),i,phibound(1,i)*rad2deg,phibound(2,i)*rad2deg
826 cd print *,'NNT=',NNT,' NCT=',NCT
827 if (itype(1).eq.21) nnt=2
828 if (itype(nres).eq.21) nct=nct-1
830 if(me.eq.king.or..not.out1file)
831 & write (iout,'(a,i3)') 'nsup=',nsup
833 if (nsup.le.(nct-nnt+1)) then
834 do i=0,nct-nnt+1-nsup
835 if (seq_comp(itype(nnt+i),itype_pdb(nstart_sup),nsup)) then
841 & 'Error - sequences to be superposed do not match.'
844 do i=0,nsup-(nct-nnt+1)
845 if (seq_comp(itype(nnt),itype_pdb(nstart_sup+i),nct-nnt+1))
847 nstart_sup=nstart_sup+i
853 & 'Error - sequences to be superposed do not match.'
856 if (nsup.eq.0) nsup=nct-nnt
857 if (nstart_sup.eq.0) nstart_sup=nnt
858 if (nstart_seq.eq.0) nstart_seq=nnt
859 if(me.eq.king.or..not.out1file)
860 & write (iout,*) 'nsup=',nsup,' nstart_sup=',nstart_sup,
861 & ' nstart_seq=',nstart_seq
863 c--- Zscore rms -------
864 if (nz_start.eq.0) nz_start=nnt
865 if (nz_end.eq.0 .and. nsup.gt.0) then
867 else if (nz_end.eq.0) then
870 if(me.eq.king.or..not.out1file)then
871 write (iout,*) 'NZ_START=',nz_start,' NZ_END=',nz_end
872 write (iout,*) 'IZ_SC=',iz_sc
874 c----------------------
877 if (.not.pdbref) then
878 call read_angles(inp,*38)
880 38 write (iout,'(a)') 'Error reading reference structure.'
882 call MPI_Finalize(MPI_COMM_WORLD,IERROR)
883 stop 'Error reading reference structure'
887 czscore call geom_to_var(nvar,coord_exp_zs(1,1))
897 call contact(.true.,ncont_ref,icont_ref,co)
899 c write (iout,*) "constr_dist",constr_dist,nstart_sup,nsup
901 if (constr_dist.gt.0) call read_dist_constr
902 write (iout,*) "After read_dist_constr nhpb",nhpb
904 if(me.eq.king.or..not.out1file)
905 & write (iout,*) 'Contact order:',co
907 if(me.eq.king.or..not.out1file)
908 & write (2,*) 'Shifting contacts:',nstart_seq,nstart_sup
911 icont_ref(j,i)=icont_ref(j,i)+nstart_seq-nstart_sup
913 if(me.eq.king.or..not.out1file)
914 & write (2,*) i,' ',restyp(itype(icont_ref(1,i))),' ',
915 & icont_ref(1,i),' ',
916 & restyp(itype(icont_ref(2,i))),' ',icont_ref(2,i)
920 if (indpdb.eq.0 .and. modecalc.ne.2 .and. modecalc.ne.4
921 & .and. modecalc.ne.8 .and. modecalc.ne.9 .and.
922 & modecalc.ne.10) then
923 C If input structure hasn't been supplied from the PDB file read or generate
925 if (iranconf.eq.0 .and. .not. extconf) then
926 if(me.eq.king.or..not.out1file .and.fg_rank.eq.0)
927 & write (iout,'(a)') 'Initial geometry will be read in.'
929 read(inp,'(8f10.5)',end=36,err=36)
930 & ((c(l,k),l=1,3),k=1,nres),
931 & ((c(l,k+nres),l=1,3),k=nnt,nct)
932 write (iout,*) "Exit READ_CART"
933 write (iout,'(8f10.5)')
934 & ((c(l,k),l=1,3),k=1,nres),
935 & ((c(l,k+nres),l=1,3),k=nnt,nct)
936 call int_from_cart1(.true.)
937 write (iout,*) "Finish INT_TO_CART"
940 dc(j,i)=c(j,i+1)-c(j,i)
941 dc_norm(j,i)=dc_norm(j,i)*vbld_inv(i+1)
945 if (itype(i).ne.10 .and. itype(i).ne.21) then
947 dc(j,i+nres)=c(j,i+nres)-c(j,i)
948 dc_norm(j,i+nres)=dc_norm(j,i+nres)*vbld_inv(i+nres)
954 call read_angles(inp,*36)
957 36 write (iout,'(a)') 'Error reading angle file.'
959 call mpi_finalize( MPI_COMM_WORLD,IERR )
961 stop 'Error reading angle file.'
963 else if (extconf) then
964 if(me.eq.king.or..not.out1file .and. fg_rank.eq.0)
965 & write (iout,'(a)') 'Extended chain initial geometry.'
967 theta(i)=90d0*deg2rad
973 alph(i)=110d0*deg2rad
976 omeg(i)=-120d0*deg2rad
979 if(me.eq.king.or..not.out1file)
980 & write (iout,'(a)') 'Random-generated initial geometry.'
984 if (me.eq.king .or. fg_rank.eq.0 .and. (
985 & modecalc.eq.12 .or. modecalc.eq.14) ) then
989 call gen_rand_conf(itmp,*30)
991 30 write (iout,*) 'Failed to generate random conformation',
993 write (*,*) 'Processor:',me,
994 & ' Failed to generate random conformation',
1004 write (iout,'(a,i3,a)') 'Processor:',me,
1005 & ' error in generating random conformation.'
1006 write (*,'(a,i3,a)') 'Processor:',me,
1007 & ' error in generating random conformation.'
1010 call MPI_Abort(mpi_comm_world,error_msg,ierrcode)
1016 call gen_rand_conf(itmp,*30)
1018 30 write (iout,*) 'Failed to generate random conformation',
1019 & ', itrial=',itrial
1020 write (*,*) 'Failed to generate random conformation',
1021 & ', itrial=',itrial
1023 write (iout,'(a,i3,a)') 'Processor:',me,
1024 & ' error in generating random conformation.'
1025 write (*,'(a,i3,a)') 'Processor:',me,
1026 & ' error in generating random conformation.'
1031 elseif (modecalc.eq.4) then
1032 read (inp,'(a)') intinname
1033 open (intin,file=intinname,status='old',err=333)
1034 if (me.eq.king .or. .not.out1file.and.fg_rank.eq.0)
1035 & write (iout,'(a)') 'intinname',intinname
1036 write (*,'(a)') 'Processor',myrank,' intinname',intinname
1038 333 write (iout,'(2a)') 'Error opening angle file ',intinname
1040 call MPI_Finalize(MPI_COMM_WORLD,IERR)
1042 stop 'Error opening angle file.'
1046 C Generate distance constraints, if the PDB structure is to be regularized.
1047 if (nthread.gt.0) then
1048 call read_threadbase
1051 if (me.eq.king .or. .not. out1file)
1053 if (ns.gt.0 .and. (me.eq.king .or. .not.out1file) ) then
1054 write (iout,'(/a,i3,a)')
1055 & 'The chain contains',ns,' disulfide-bridging cysteines.'
1056 write (iout,'(20i4)') (iss(i),i=1,ns)
1057 write (iout,'(/a/)') 'Pre-formed links are:'
1063 if (me.eq.king.or..not.out1file)
1064 & write (iout,'(2a,i3,3a,i3,a,3f10.3)')
1065 & restyp(it1),'(',i1,') -- ',restyp(it2),'(',i2,')',dhpb(i),
1070 if (i2ndstr.gt.0) call secstrp2dihc
1071 c call geom_to_var(nvar,x)
1072 c call etotal(energia(0))
1073 c call enerprint(energia(0))
1074 c call briefout(0,etot)
1076 cd write (iout,'(2(a,i3))') 'NNT',NNT,' NCT',NCT
1077 cd write (iout,'(a)') 'Variable list:'
1078 cd write (iout,'(i4,f10.5)') (i,rad2deg*x(i),i=1,nvar)
1080 if (me.eq.king .or. (fg_rank.eq.0 .and. .not.out1file))
1081 & write (iout,'(//80(1h*)/20x,a,i4,a/80(1h*)//)')
1082 & 'Processor',myrank,': end reading molecular data.'
1086 c--------------------------------------------------------------------------
1087 logical function seq_comp(itypea,itypeb,length)
1089 integer length,itypea(length),itypeb(length)
1092 if (itypea(i).ne.itypeb(i)) then
1100 c-----------------------------------------------------------------------------
1101 subroutine read_bridge
1102 C Read information about disulfide bridges.
1103 implicit real*8 (a-h,o-z)
1104 include 'DIMENSIONS'
1108 include 'COMMON.IOUNITS'
1109 include 'COMMON.GEO'
1110 include 'COMMON.VAR'
1111 include 'COMMON.INTERACT'
1112 include 'COMMON.LOCAL'
1113 include 'COMMON.NAMES'
1114 include 'COMMON.CHAIN'
1115 include 'COMMON.FFIELD'
1116 include 'COMMON.SBRIDGE'
1117 include 'COMMON.HEADER'
1118 include 'COMMON.CONTROL'
1119 include 'COMMON.DBASE'
1120 include 'COMMON.THREAD'
1121 include 'COMMON.TIME1'
1122 include 'COMMON.SETUP'
1123 C Read bridging residues.
1124 read (inp,*) ns,(iss(i),i=1,ns)
1126 if(me.eq.king.or..not.out1file)
1127 & write (iout,*) 'ns=',ns,' iss:',(iss(i),i=1,ns)
1128 C Check whether the specified bridging residues are cystines.
1130 if (itype(iss(i)).ne.1) then
1131 if (me.eq.king.or..not.out1file) write (iout,'(2a,i3,a)')
1132 & 'Do you REALLY think that the residue ',restyp(iss(i)),i,
1133 & ' can form a disulfide bridge?!!!'
1134 write (*,'(2a,i3,a)')
1135 & 'Do you REALLY think that the residue ',restyp(iss(i)),i,
1136 & ' can form a disulfide bridge?!!!'
1138 call MPI_Finalize(MPI_COMM_WORLD,ierror)
1143 C Read preformed bridges.
1145 read (inp,*) nss,(ihpb(i),jhpb(i),i=1,nss)
1146 write (iout,*) 'nss=',nss,' ihpb,jhpb: ',(ihpb(i),jhpb(i),i=1,nss)
1149 C Check if the residues involved in bridges are in the specified list of
1150 C bridging residues.
1153 if (ihpb(i).eq.ihpb(j).or.ihpb(i).eq.jhpb(j)
1154 & .or.jhpb(i).eq.ihpb(j).or.jhpb(i).eq.jhpb(j)) then
1155 write (iout,'(a,i3,a)') 'Disulfide pair',i,
1156 & ' contains residues present in other pairs.'
1157 write (*,'(a,i3,a)') 'Disulfide pair',i,
1158 & ' contains residues present in other pairs.'
1160 call MPI_Finalize(MPI_COMM_WORLD,ierror)
1166 if (ihpb(i).eq.iss(j)) goto 10
1168 write (iout,'(a,i3,a)') 'Pair',i,' contains unknown cystine.'
1171 if (jhpb(i).eq.iss(j)) goto 20
1173 write (iout,'(a,i3,a)') 'Pair',i,' contains unknown cystine.'
1179 ihpb(i)=ihpb(i)+nres
1180 jhpb(i)=jhpb(i)+nres
1186 c----------------------------------------------------------------------------
1187 subroutine read_x(kanal,*)
1188 implicit real*8 (a-h,o-z)
1189 include 'DIMENSIONS'
1190 include 'COMMON.GEO'
1191 include 'COMMON.VAR'
1192 include 'COMMON.CHAIN'
1193 include 'COMMON.IOUNITS'
1194 include 'COMMON.CONTROL'
1195 include 'COMMON.LOCAL'
1196 include 'COMMON.INTERACT'
1197 c Read coordinates from input
1199 read(kanal,'(8f10.5)',end=10,err=10)
1200 & ((c(l,k),l=1,3),k=1,nres),
1201 & ((c(l,k+nres),l=1,3),k=nnt,nct)
1204 c(j,2*nres)=c(j,nres)
1206 call int_from_cart1(.false.)
1209 dc(j,i)=c(j,i+1)-c(j,i)
1210 dc_norm(j,i)=dc(j,i)*vbld_inv(i+1)
1214 if (itype(i).ne.10 .and. itype(i).ne.21) then
1216 dc(j,i+nres)=c(j,i+nres)-c(j,i)
1217 dc_norm(j,i+nres)=dc(j,i+nres)*vbld_inv(i+nres)
1225 c----------------------------------------------------------------------------
1226 subroutine read_threadbase
1227 implicit real*8 (a-h,o-z)
1228 include 'DIMENSIONS'
1229 include 'COMMON.IOUNITS'
1230 include 'COMMON.GEO'
1231 include 'COMMON.VAR'
1232 include 'COMMON.INTERACT'
1233 include 'COMMON.LOCAL'
1234 include 'COMMON.NAMES'
1235 include 'COMMON.CHAIN'
1236 include 'COMMON.FFIELD'
1237 include 'COMMON.SBRIDGE'
1238 include 'COMMON.HEADER'
1239 include 'COMMON.CONTROL'
1240 include 'COMMON.DBASE'
1241 include 'COMMON.THREAD'
1242 include 'COMMON.TIME1'
1243 C Read pattern database for threading.
1244 read (icbase,*) nseq
1246 read (icbase,'(i5,2x,a8,2i4)') nres_base(1,i),str_nam(i),
1247 & nres_base(2,i),nres_base(3,i)
1248 read (icbase,'(9f8.3)') ((cart_base(k,j,i),k=1,3),j=1,
1250 c write (iout,'(i5,2x,a8,2i4)') nres_base(1,i),str_nam(i),
1251 c & nres_base(2,i),nres_base(3,i)
1252 c write (iout,'(9f8.3)') ((cart_base(k,j,i),k=1,3),j=1,
1256 if (weidis.eq.0.0D0) weidis=0.1D0
1265 read (inp,*) nexcl,(iexam(1,i),iexam(2,i),i=1,nexcl)
1266 write (iout,'(a,i5)') 'nexcl: ',nexcl
1267 write (iout,'(2i5)') (iexam(1,i),iexam(2,i),i=1,nexcl)
1270 c------------------------------------------------------------------------------
1271 subroutine setup_var
1272 implicit real*8 (a-h,o-z)
1273 include 'DIMENSIONS'
1274 include 'COMMON.IOUNITS'
1275 include 'COMMON.GEO'
1276 include 'COMMON.VAR'
1277 include 'COMMON.INTERACT'
1278 include 'COMMON.LOCAL'
1279 include 'COMMON.NAMES'
1280 include 'COMMON.CHAIN'
1281 include 'COMMON.FFIELD'
1282 include 'COMMON.SBRIDGE'
1283 include 'COMMON.HEADER'
1284 include 'COMMON.CONTROL'
1285 include 'COMMON.DBASE'
1286 include 'COMMON.THREAD'
1287 include 'COMMON.TIME1'
1288 C Set up variable list.
1294 if (itype(i).ne.10 .and. itype(i).ne.21) then
1296 ialph(i,1)=nvar+nside
1300 if (indphi.gt.0) then
1302 else if (indback.gt.0) then
1307 cd write (iout,'(3i4)') (i,ialph(i,1),ialph(i,2),i=2,nres-1)
1310 c----------------------------------------------------------------------------
1311 subroutine gen_dist_constr
1312 C Generate CA distance constraints.
1313 implicit real*8 (a-h,o-z)
1314 include 'DIMENSIONS'
1315 include 'COMMON.IOUNITS'
1316 include 'COMMON.GEO'
1317 include 'COMMON.VAR'
1318 include 'COMMON.INTERACT'
1319 include 'COMMON.LOCAL'
1320 include 'COMMON.NAMES'
1321 include 'COMMON.CHAIN'
1322 include 'COMMON.FFIELD'
1323 include 'COMMON.SBRIDGE'
1324 include 'COMMON.HEADER'
1325 include 'COMMON.CONTROL'
1326 include 'COMMON.DBASE'
1327 include 'COMMON.THREAD'
1328 include 'COMMON.TIME1'
1329 dimension itype_pdb(maxres)
1330 common /pizda/ itype_pdb
1332 cd print *,'gen_dist_constr: nnt=',nnt,' nct=',nct
1333 cd write (2,*) 'gen_dist_constr: nnt=',nnt,' nct=',nct,
1334 cd & ' nstart_sup',nstart_sup,' nstart_seq',nstart_seq,
1336 do i=nstart_sup,nstart_sup+nsup-1
1337 cd write (2,*) 'i',i,' seq ',restyp(itype(i+nstart_seq-nstart_sup)),
1338 cd & ' seq_pdb', restyp(itype_pdb(i))
1339 do j=i+2,nstart_sup+nsup-1
1341 ihpb(nhpb)=i+nstart_seq-nstart_sup
1342 jhpb(nhpb)=j+nstart_seq-nstart_sup
1344 dhpb(nhpb)=dist(i,j)
1347 cd write (iout,'(a)') 'Distance constraints:'
1352 cd if (ii.gt.nres) then
1357 cd write (iout,'(a,1x,a,i4,3x,a,1x,a,i4,2f10.3)')
1358 cd & restyp(itype(ii)),iden,ii,restyp(itype(jj)),iden,jj,
1359 cd & dhpb(i),forcon(i)
1363 c----------------------------------------------------------------------------
1365 implicit real*8 (a-h,o-z)
1366 include 'DIMENSIONS'
1367 include 'COMMON.MAP'
1368 include 'COMMON.IOUNITS'
1369 character*3 angid(4) /'THE','PHI','ALP','OME'/
1370 character*80 mapcard,ucase
1372 read (inp,'(a)') mapcard
1373 mapcard=ucase(mapcard)
1374 if (index(mapcard,'PHI').gt.0) then
1376 else if (index(mapcard,'THE').gt.0) then
1378 else if (index(mapcard,'ALP').gt.0) then
1380 else if (index(mapcard,'OME').gt.0) then
1383 write(iout,'(a)')'Error - illegal variable spec in MAP card.'
1384 stop 'Error - illegal variable spec in MAP card.'
1386 call readi (mapcard,'RES1',res1(imap),0)
1387 call readi (mapcard,'RES2',res2(imap),0)
1388 if (res1(imap).eq.0) then
1389 res1(imap)=res2(imap)
1390 else if (res2(imap).eq.0) then
1391 res2(imap)=res1(imap)
1393 if(res1(imap)*res2(imap).eq.0 .or. res1(imap).gt.res2(imap))then
1395 & 'Error - illegal definition of variable group in MAP.'
1396 stop 'Error - illegal definition of variable group in MAP.'
1398 call reada(mapcard,'FROM',ang_from(imap),0.0D0)
1399 call reada(mapcard,'TO',ang_to(imap),0.0D0)
1400 call readi(mapcard,'NSTEP',nstep(imap),0)
1401 if (ang_from(imap).eq.ang_to(imap) .or. nstep(imap).eq.0) then
1403 & 'Illegal boundary and/or step size specification in MAP.'
1404 stop 'Illegal boundary and/or step size specification in MAP.'
1409 c----------------------------------------------------------------------------
1411 implicit real*8 (a-h,o-z)
1412 include 'DIMENSIONS'
1413 include 'COMMON.IOUNITS'
1414 include 'COMMON.GEO'
1415 include 'COMMON.CSA'
1416 include 'COMMON.BANK'
1417 include 'COMMON.CONTROL'
1419 character*620 mcmcard
1420 call card_concat(mcmcard)
1422 call readi(mcmcard,'NCONF',nconf,50)
1423 call readi(mcmcard,'NADD',nadd,0)
1424 call readi(mcmcard,'JSTART',jstart,1)
1425 call readi(mcmcard,'JEND',jend,1)
1426 call readi(mcmcard,'NSTMAX',nstmax,500000)
1427 call readi(mcmcard,'N0',n0,1)
1428 call readi(mcmcard,'N1',n1,6)
1429 call readi(mcmcard,'N2',n2,4)
1430 call readi(mcmcard,'N3',n3,0)
1431 call readi(mcmcard,'N4',n4,0)
1432 call readi(mcmcard,'N5',n5,0)
1433 call readi(mcmcard,'N6',n6,10)
1434 call readi(mcmcard,'N7',n7,0)
1435 call readi(mcmcard,'N8',n8,0)
1436 call readi(mcmcard,'N9',n9,0)
1437 call readi(mcmcard,'N14',n14,0)
1438 call readi(mcmcard,'N15',n15,0)
1439 call readi(mcmcard,'N16',n16,0)
1440 call readi(mcmcard,'N17',n17,0)
1441 call readi(mcmcard,'N18',n18,0)
1443 vdisulf=(index(mcmcard,'DYNSS').gt.0)
1445 call readi(mcmcard,'NDIFF',ndiff,2)
1446 call reada(mcmcard,'DIFFCUT',diffcut,0.0d0)
1447 call readi(mcmcard,'IS1',is1,1)
1448 call readi(mcmcard,'IS2',is2,8)
1449 call readi(mcmcard,'NRAN0',nran0,4)
1450 call readi(mcmcard,'NRAN1',nran1,2)
1451 call readi(mcmcard,'IRR',irr,1)
1452 call readi(mcmcard,'NSEED',nseed,20)
1453 call readi(mcmcard,'NTOTAL',ntotal,10000)
1454 call reada(mcmcard,'CUT1',cut1,2.0d0)
1455 call reada(mcmcard,'CUT2',cut2,5.0d0)
1456 call reada(mcmcard,'ESTOP',estop,-3000.0d0)
1457 call readi(mcmcard,'ICMAX',icmax,3)
1458 call readi(mcmcard,'IRESTART',irestart,0)
1459 c!bankt call readi(mcmcard,'NBANKTM',ntbankm,0)
1462 call reada(mcmcard,'DELE',dele,20.0d0)
1463 call reada(mcmcard,'DIFCUT',difcut,720.0d0)
1464 call readi(mcmcard,'IREF',iref,0)
1465 call reada(mcmcard,'RMSCUT',rmscut,4.0d0)
1466 call reada(mcmcard,'PNCCUT',pnccut,0.5d0)
1467 call readi(mcmcard,'NCONF_IN',nconf_in,0)
1468 call reada(mcmcard,'RDIH_BIAS',rdih_bias,0.5d0)
1469 write (iout,*) "NCONF_IN",nconf_in
1472 c----------------------------------------------------------------------------
1473 cfmc subroutine mcmfread
1474 cfmc implicit real*8 (a-h,o-z)
1475 cfmc include 'DIMENSIONS'
1476 cfmc include 'COMMON.MCMF'
1477 cfmc include 'COMMON.IOUNITS'
1478 cfmc include 'COMMON.GEO'
1479 cfmc character*80 ucase
1480 cfmc character*620 mcmcard
1481 cfmc call card_concat(mcmcard)
1483 cfmc call readi(mcmcard,'MAXRANT',maxrant,1000)
1484 cfmc write(iout,*)'MAXRANT=',maxrant
1485 cfmc call readi(mcmcard,'MAXFAM',maxfam,maxfam_p)
1486 cfmc write(iout,*)'MAXFAM=',maxfam
1487 cfmc call readi(mcmcard,'NNET1',nnet1,5)
1488 cfmc write(iout,*)'NNET1=',nnet1
1489 cfmc call readi(mcmcard,'NNET2',nnet2,4)
1490 cfmc write(iout,*)'NNET2=',nnet2
1491 cfmc call readi(mcmcard,'NNET3',nnet3,4)
1492 cfmc write(iout,*)'NNET3=',nnet3
1493 cfmc call readi(mcmcard,'ILASTT',ilastt,0)
1494 cfmc write(iout,*)'ILASTT=',ilastt
1495 cfmc call readi(mcmcard,'MAXSTR',maxstr,maxstr_mcmf)
1496 cfmc write(iout,*)'MAXSTR=',maxstr
1497 cfmc maxstr_f=maxstr/maxfam
1498 cfmc write(iout,*)'MAXSTR_F=',maxstr_f
1499 cfmc call readi(mcmcard,'NMCMF',nmcmf,10)
1500 cfmc write(iout,*)'NMCMF=',nmcmf
1501 cfmc call readi(mcmcard,'IFOCUS',ifocus,nmcmf)
1502 cfmc write(iout,*)'IFOCUS=',ifocus
1503 cfmc call readi(mcmcard,'NLOCMCMF',nlocmcmf,1000)
1504 cfmc write(iout,*)'NLOCMCMF=',nlocmcmf
1505 cfmc call readi(mcmcard,'INTPRT',intprt,1000)
1506 cfmc write(iout,*)'INTPRT=',intprt
1507 cfmc call readi(mcmcard,'IPRT',iprt,100)
1508 cfmc write(iout,*)'IPRT=',iprt
1509 cfmc call readi(mcmcard,'IMAXTR',imaxtr,100)
1510 cfmc write(iout,*)'IMAXTR=',imaxtr
1511 cfmc call readi(mcmcard,'MAXEVEN',maxeven,1000)
1512 cfmc write(iout,*)'MAXEVEN=',maxeven
1513 cfmc call readi(mcmcard,'MAXEVEN1',maxeven1,3)
1514 cfmc write(iout,*)'MAXEVEN1=',maxeven1
1515 cfmc call readi(mcmcard,'INIMIN',inimin,200)
1516 cfmc write(iout,*)'INIMIN=',inimin
1517 cfmc call readi(mcmcard,'NSTEPMCMF',nstepmcmf,10)
1518 cfmc write(iout,*)'NSTEPMCMF=',nstepmcmf
1519 cfmc call readi(mcmcard,'NTHREAD',nthread,5)
1520 cfmc write(iout,*)'NTHREAD=',nthread
1521 cfmc call readi(mcmcard,'MAXSTEPMCMF',maxstepmcmf,2500)
1522 cfmc write(iout,*)'MAXSTEPMCMF=',maxstepmcmf
1523 cfmc call readi(mcmcard,'MAXPERT',maxpert,9)
1524 cfmc write(iout,*)'MAXPERT=',maxpert
1525 cfmc call readi(mcmcard,'IRMSD',irmsd,1)
1526 cfmc write(iout,*)'IRMSD=',irmsd
1527 cfmc call reada(mcmcard,'DENEMIN',denemin,0.01D0)
1528 cfmc write(iout,*)'DENEMIN=',denemin
1529 cfmc call reada(mcmcard,'RCUT1S',rcut1s,3.5D0)
1530 cfmc write(iout,*)'RCUT1S=',rcut1s
1531 cfmc call reada(mcmcard,'RCUT1E',rcut1e,2.0D0)
1532 cfmc write(iout,*)'RCUT1E=',rcut1e
1533 cfmc call reada(mcmcard,'RCUT2S',rcut2s,0.5D0)
1534 cfmc write(iout,*)'RCUT2S=',rcut2s
1535 cfmc call reada(mcmcard,'RCUT2E',rcut2e,0.1D0)
1536 cfmc write(iout,*)'RCUT2E=',rcut2e
1537 cfmc call reada(mcmcard,'DPERT1',d_pert1,180.0D0)
1538 cfmc write(iout,*)'DPERT1=',d_pert1
1539 cfmc call reada(mcmcard,'DPERT1A',d_pert1a,180.0D0)
1540 cfmc write(iout,*)'DPERT1A=',d_pert1a
1541 cfmc call reada(mcmcard,'DPERT2',d_pert2,90.0D0)
1542 cfmc write(iout,*)'DPERT2=',d_pert2
1543 cfmc call reada(mcmcard,'DPERT2A',d_pert2a,45.0D0)
1544 cfmc write(iout,*)'DPERT2A=',d_pert2a
1545 cfmc call reada(mcmcard,'DPERT2B',d_pert2b,90.0D0)
1546 cfmc write(iout,*)'DPERT2B=',d_pert2b
1547 cfmc call reada(mcmcard,'DPERT2C',d_pert2c,60.0D0)
1548 cfmc write(iout,*)'DPERT2C=',d_pert2c
1549 cfmc d_pert1=deg2rad*d_pert1
1550 cfmc d_pert1a=deg2rad*d_pert1a
1551 cfmc d_pert2=deg2rad*d_pert2
1552 cfmc d_pert2a=deg2rad*d_pert2a
1553 cfmc d_pert2b=deg2rad*d_pert2b
1554 cfmc d_pert2c=deg2rad*d_pert2c
1555 cfmc call reada(mcmcard,'KT_MCMF1',kt_mcmf1,1.0D0)
1556 cfmc write(iout,*)'KT_MCMF1=',kt_mcmf1
1557 cfmc call reada(mcmcard,'KT_MCMF2',kt_mcmf2,1.0D0)
1558 cfmc write(iout,*)'KT_MCMF2=',kt_mcmf2
1559 cfmc call reada(mcmcard,'DKT_MCMF1',dkt_mcmf1,10.0D0)
1560 cfmc write(iout,*)'DKT_MCMF1=',dkt_mcmf1
1561 cfmc call reada(mcmcard,'DKT_MCMF2',dkt_mcmf2,1.0D0)
1562 cfmc write(iout,*)'DKT_MCMF2=',dkt_mcmf2
1563 cfmc call reada(mcmcard,'RCUTINI',rcutini,3.5D0)
1564 cfmc write(iout,*)'RCUTINI=',rcutini
1565 cfmc call reada(mcmcard,'GRAT',grat,0.5D0)
1566 cfmc write(iout,*)'GRAT=',grat
1567 cfmc call reada(mcmcard,'BIAS_MCMF',bias_mcmf,0.0D0)
1568 cfmc write(iout,*)'BIAS_MCMF=',bias_mcmf
1572 c----------------------------------------------------------------------------
1574 implicit real*8 (a-h,o-z)
1575 include 'DIMENSIONS'
1576 include 'COMMON.MCM'
1577 include 'COMMON.MCE'
1578 include 'COMMON.IOUNITS'
1580 character*320 mcmcard
1581 call card_concat(mcmcard)
1582 call readi(mcmcard,'MAXACC',maxacc,100)
1583 call readi(mcmcard,'MAX_MCM_IT',max_mcm_it,10000)
1584 call readi(mcmcard,'MAXTRIAL',maxtrial,100)
1585 call readi(mcmcard,'MAXTRIAL_ITER',maxtrial_iter,1000)
1586 call readi(mcmcard,'MAXREPM',maxrepm,200)
1587 call reada(mcmcard,'RANFRACT',RanFract,0.5D0)
1588 call reada(mcmcard,'POOL_FRACT',pool_fraction,0.01D0)
1589 call reada(mcmcard,'OVERLAP',overlap_cut,1.0D3)
1590 call reada(mcmcard,'E_UP',e_up,5.0D0)
1591 call reada(mcmcard,'DELTE',delte,0.1D0)
1592 call readi(mcmcard,'NSWEEP',nsweep,5)
1593 call readi(mcmcard,'NSTEPH',nsteph,0)
1594 call readi(mcmcard,'NSTEPC',nstepc,0)
1595 call reada(mcmcard,'TMIN',tmin,298.0D0)
1596 call reada(mcmcard,'TMAX',tmax,298.0D0)
1597 call readi(mcmcard,'NWINDOW',nwindow,0)
1598 call readi(mcmcard,'PRINT_MC',print_mc,0)
1599 print_stat=(index(mcmcard,'NO_PRINT_STAT').le.0)
1600 print_int=(index(mcmcard,'NO_PRINT_INT').le.0)
1601 ent_read=(index(mcmcard,'ENT_READ').gt.0)
1602 call readi(mcmcard,'SAVE_FREQ',save_frequency,1000)
1603 call readi(mcmcard,'MESSAGE_FREQ',message_frequency,1000)
1604 call readi(mcmcard,'POOL_READ_FREQ',pool_read_freq,5000)
1605 call readi(mcmcard,'POOL_SAVE_FREQ',pool_save_freq,1000)
1606 call readi(mcmcard,'PRINT_FREQ',print_freq,1000)
1607 if (nwindow.gt.0) then
1608 read (inp,*) (winstart(i),winend(i),i=1,nwindow)
1610 winlen(i)=winend(i)-winstart(i)+1
1613 if (tmax.lt.tmin) tmax=tmin
1614 if (tmax.eq.tmin) then
1618 if (nstepc.gt.0 .and. nsteph.gt.0) then
1619 tsteph=(tmax/tmin)**(1.0D0/(nsteph+0.0D0))
1620 tstepc=(tmax/tmin)**(1.0D0/(nstepc+0.0D0))
1622 C Probabilities of different move types
1623 sumpro_type(0)=0.0D0
1624 call reada(mcmcard,'MULTI_BOND',sumpro_type(1),1.0d0)
1625 call reada(mcmcard,'ONE_ANGLE' ,sumpro_type(2),2.0d0)
1626 sumpro_type(2)=sumpro_type(1)+sumpro_type(2)
1627 call reada(mcmcard,'THETA' ,sumpro_type(3),0.0d0)
1628 sumpro_type(3)=sumpro_type(2)+sumpro_type(3)
1629 call reada(mcmcard,'SIDE_CHAIN',sumpro_type(4),0.5d0)
1630 sumpro_type(4)=sumpro_type(3)+sumpro_type(4)
1632 print *,'i',i,' sumprotype',sumpro_type(i)
1633 sumpro_type(i)=sumpro_type(i)/sumpro_type(MaxMoveType)
1634 print *,'i',i,' sumprotype',sumpro_type(i)
1638 c----------------------------------------------------------------------------
1639 subroutine read_minim
1640 implicit real*8 (a-h,o-z)
1641 include 'DIMENSIONS'
1642 include 'COMMON.MINIM'
1643 include 'COMMON.IOUNITS'
1645 character*320 minimcard
1646 call card_concat(minimcard)
1647 call readi(minimcard,'MAXMIN',maxmin,2000)
1648 call readi(minimcard,'MAXFUN',maxfun,5000)
1649 call readi(minimcard,'MINMIN',minmin,maxmin)
1650 call readi(minimcard,'MINFUN',minfun,maxmin)
1651 call reada(minimcard,'TOLF',tolf,1.0D-2)
1652 call reada(minimcard,'RTOLF',rtolf,1.0D-4)
1653 print_min_stat=min0(index(minimcard,'PRINT_MIN_STAT'),1)
1654 print_min_res=min0(index(minimcard,'PRINT_MIN_RES'),1)
1655 print_min_ini=min0(index(minimcard,'PRINT_MIN_INI'),1)
1656 write (iout,'(/80(1h*)/20x,a/80(1h*))')
1657 & 'Options in energy minimization:'
1658 write (iout,'(4(a,i5),a,1pe14.5,a,1pe14.5)')
1659 & 'MaxMin:',MaxMin,' MaxFun:',MaxFun,
1660 & 'MinMin:',MinMin,' MinFun:',MinFun,
1661 & ' TolF:',TolF,' RTolF:',RTolF
1664 c----------------------------------------------------------------------------
1665 subroutine read_angles(kanal,*)
1666 implicit real*8 (a-h,o-z)
1667 include 'DIMENSIONS'
1668 include 'COMMON.GEO'
1669 include 'COMMON.VAR'
1670 include 'COMMON.CHAIN'
1671 include 'COMMON.IOUNITS'
1672 include 'COMMON.CONTROL'
1673 c Read angles from input
1675 read (kanal,*,err=10,end=10) (theta(i),i=3,nres)
1676 read (kanal,*,err=10,end=10) (phi(i),i=4,nres)
1677 read (kanal,*,err=10,end=10) (alph(i),i=2,nres-1)
1678 read (kanal,*,err=10,end=10) (omeg(i),i=2,nres-1)
1681 c 9/7/01 avoid 180 deg valence angle
1682 if (theta(i).gt.179.99d0) theta(i)=179.99d0
1684 theta(i)=deg2rad*theta(i)
1685 phi(i)=deg2rad*phi(i)
1686 alph(i)=deg2rad*alph(i)
1687 omeg(i)=deg2rad*omeg(i)
1692 c----------------------------------------------------------------------------
1693 subroutine reada(rekord,lancuch,wartosc,default)
1695 character*(*) rekord,lancuch
1696 double precision wartosc,default
1699 iread=index(rekord,lancuch)
1700 if (iread.eq.0) then
1704 iread=iread+ilen(lancuch)+1
1705 read (rekord(iread:),*,err=10,end=10) wartosc
1710 c----------------------------------------------------------------------------
1711 subroutine readi(rekord,lancuch,wartosc,default)
1713 character*(*) rekord,lancuch
1714 integer wartosc,default
1717 iread=index(rekord,lancuch)
1718 if (iread.eq.0) then
1722 iread=iread+ilen(lancuch)+1
1723 read (rekord(iread:),*,err=10,end=10) wartosc
1728 c----------------------------------------------------------------------------
1729 subroutine multreadi(rekord,lancuch,tablica,dim,default)
1732 integer tablica(dim),default
1733 character*(*) rekord,lancuch
1740 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
1741 if (iread.eq.0) return
1742 iread=iread+ilen(lancuch)+1
1743 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
1746 c----------------------------------------------------------------------------
1747 subroutine multreada(rekord,lancuch,tablica,dim,default)
1750 double precision tablica(dim),default
1751 character*(*) rekord,lancuch
1758 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
1759 if (iread.eq.0) return
1760 iread=iread+ilen(lancuch)+1
1761 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
1764 c----------------------------------------------------------------------------
1765 subroutine openunits
1766 implicit real*8 (a-h,o-z)
1767 include 'DIMENSIONS'
1770 character*16 form,nodename
1773 include 'COMMON.SETUP'
1774 include 'COMMON.IOUNITS'
1776 include 'COMMON.CONTROL'
1777 integer lenpre,lenpot,ilen,lentmp
1779 character*3 out1file_text,ucase
1782 c print *,"Processor",myrank,"fg_rank",fg_rank," entered openunits"
1783 call getenv_loc("PREFIX",prefix)
1785 call getenv_loc("POT",pot)
1786 call getenv_loc("DIRTMP",tmpdir)
1787 call getenv_loc("CURDIR",curdir)
1788 call getenv_loc("OUT1FILE",out1file_text)
1789 c print *,"Processor",myrank,"fg_rank",fg_rank," did GETENV"
1790 out1file_text=ucase(out1file_text)
1791 if (out1file_text(1:1).eq."Y") then
1794 out1file=fg_rank.gt.0
1799 if (lentmp.gt.0) then
1800 write (*,'(80(1h!))')
1801 write (*,'(a,19x,a,19x,a)') "!"," A T T E N T I O N ","!"
1802 write (*,'(80(1h!))')
1803 write (*,*)"All output files will be on node /tmp directory."
1805 call MPI_GET_PROCESSOR_NAME( nodename, nodelen, IERROR )
1806 if (me.eq.king) then
1807 write (*,*) "The master node is ",nodename
1808 else if (fg_rank.eq.0) then
1809 write (*,*) "I am the CG slave node ",nodename
1811 write (*,*) "I am the FG slave node ",nodename
1814 PREFIX = tmpdir(:lentmp)//'/'//prefix(:lenpre)
1815 lenpre = lentmp+lenpre+1
1817 entname=prefix(:lenpre)//'_'//pot(:lenpot)//'.entr'
1818 C Get the names and open the input files
1819 #if defined(WINIFL) || defined(WINPGI)
1820 open(1,file=pref_orig(:ilen(pref_orig))//
1821 & '.inp',status='old',readonly,shared)
1822 open (9,file=prefix(:ilen(prefix))//'.intin',status='unknown')
1823 C open (18,file=prefix(:ilen(prefix))//'.entin',status='unknown')
1824 C Get parameter filenames and open the parameter files.
1825 call getenv_loc('BONDPAR',bondname)
1826 open (ibond,file=bondname,status='old',readonly,shared)
1827 call getenv_loc('THETPAR',thetname)
1828 open (ithep,file=thetname,status='old',readonly,shared)
1829 call getenv_loc('ROTPAR',rotname)
1830 open (irotam,file=rotname,status='old',readonly,shared)
1831 call getenv_loc('TORPAR',torname)
1832 open (itorp,file=torname,status='old',readonly,shared)
1833 call getenv_loc('TORDPAR',tordname)
1834 open (itordp,file=tordname,status='old',readonly,shared)
1835 call getenv_loc('FOURIER',fouriername)
1836 open (ifourier,file=fouriername,status='old',readonly,shared)
1837 call getenv_loc('ELEPAR',elename)
1838 open (ielep,file=elename,status='old',readonly,shared)
1839 call getenv_loc('SIDEPAR',sidename)
1840 open (isidep,file=sidename,status='old',readonly,shared)
1841 #elif (defined CRAY) || (defined AIX)
1842 open(1,file=pref_orig(:ilen(pref_orig))//'.inp',status='old',
1844 c print *,"Processor",myrank," opened file 1"
1845 open (9,file=prefix(:ilen(prefix))//'.intin',status='unknown')
1846 c print *,"Processor",myrank," opened file 9"
1847 C open (18,file=prefix(:ilen(prefix))//'.entin',status='unknown')
1848 C Get parameter filenames and open the parameter files.
1849 call getenv_loc('BONDPAR',bondname)
1850 open (ibond,file=bondname,status='old',action='read')
1851 c print *,"Processor",myrank," opened file IBOND"
1852 call getenv_loc('THETPAR',thetname)
1853 open (ithep,file=thetname,status='old',action='read')
1854 c print *,"Processor",myrank," opened file ITHEP"
1855 call getenv_loc('ROTPAR',rotname)
1856 open (irotam,file=rotname,status='old',action='read')
1857 c print *,"Processor",myrank," opened file IROTAM"
1858 call getenv_loc('TORPAR',torname)
1859 open (itorp,file=torname,status='old',action='read')
1860 c print *,"Processor",myrank," opened file ITORP"
1861 call getenv_loc('TORDPAR',tordname)
1862 open (itordp,file=tordname,status='old',action='read')
1863 c print *,"Processor",myrank," opened file ITORDP"
1864 call getenv_loc('SCCORPAR',sccorname)
1865 open (isccor,file=sccorname,status='old',action='read')
1866 c print *,"Processor",myrank," opened file ISCCOR"
1867 call getenv_loc('FOURIER',fouriername)
1868 open (ifourier,file=fouriername,status='old',action='read')
1869 c print *,"Processor",myrank," opened file IFOURIER"
1870 call getenv_loc('ELEPAR',elename)
1871 open (ielep,file=elename,status='old',action='read')
1872 c print *,"Processor",myrank," opened file IELEP"
1873 call getenv_loc('SIDEPAR',sidename)
1874 open (isidep,file=sidename,status='old',action='read')
1875 c print *,"Processor",myrank," opened file ISIDEP"
1876 c print *,"Processor",myrank," opened parameter files"
1878 open(1,file=pref_orig(:ilen(pref_orig))//'.inp',status='old')
1879 open (9,file=prefix(:ilen(prefix))//'.intin',status='unknown')
1880 C open (18,file=prefix(:ilen(prefix))//'.entin',status='unknown')
1881 C Get parameter filenames and open the parameter files.
1882 call getenv_loc('BONDPAR',bondname)
1883 open (ibond,file=bondname,status='old')
1884 call getenv_loc('THETPAR',thetname)
1885 open (ithep,file=thetname,status='old')
1886 call getenv_loc('ROTPAR',rotname)
1887 open (irotam,file=rotname,status='old')
1888 call getenv_loc('TORPAR',torname)
1889 open (itorp,file=torname,status='old')
1890 call getenv_loc('TORDPAR',tordname)
1891 open (itordp,file=tordname,status='old')
1892 call getenv_loc('SCCORPAR',sccorname)
1893 open (isccor,file=sccorname,status='old')
1894 call getenv_loc('FOURIER',fouriername)
1895 open (ifourier,file=fouriername,status='old')
1896 call getenv_loc('ELEPAR',elename)
1897 open (ielep,file=elename,status='old')
1898 call getenv_loc('SIDEPAR',sidename)
1899 open (isidep,file=sidename,status='old')
1901 open(1,file=pref_orig(:ilen(pref_orig))//'.inp',status='old',
1903 open (9,file=prefix(:ilen(prefix))//'.intin',status='unknown')
1904 C open (18,file=prefix(:ilen(prefix))//'.entin',status='unknown')
1905 C Get parameter filenames and open the parameter files.
1906 call getenv_loc('BONDPAR',bondname)
1907 open (ibond,file=bondname,status='old',readonly)
1908 call getenv_loc('THETPAR',thetname)
1909 open (ithep,file=thetname,status='old',readonly)
1910 call getenv_loc('ROTPAR',rotname)
1911 open (irotam,file=rotname,status='old',readonly)
1912 call getenv_loc('TORPAR',torname)
1913 open (itorp,file=torname,status='old',readonly)
1914 call getenv_loc('TORDPAR',tordname)
1915 open (itordp,file=tordname,status='old',readonly)
1916 call getenv_loc('SCCORPAR',sccorname)
1917 open (isccor,file=sccorname,status='old',readonly)
1918 call getenv_loc('FOURIER',fouriername)
1919 open (ifourier,file=fouriername,status='old',readonly)
1920 call getenv_loc('ELEPAR',elename)
1921 open (ielep,file=elename,status='old',readonly)
1922 call getenv_loc('SIDEPAR',sidename)
1923 open (isidep,file=sidename,status='old',readonly)
1927 C 8/9/01 In the newest version SCp interaction constants are read from a file
1928 C Use -DOLDSCP to use hard-coded constants instead.
1930 call getenv_loc('SCPPAR',scpname)
1931 #if defined(WINIFL) || defined(WINPGI)
1932 open (iscpp,file=scpname,status='old',readonly,shared)
1933 #elif (defined CRAY) || (defined AIX)
1934 open (iscpp,file=scpname,status='old',action='read')
1936 open (iscpp,file=scpname,status='old')
1938 open (iscpp,file=scpname,status='old',readonly)
1941 call getenv_loc('PATTERN',patname)
1942 #if defined(WINIFL) || defined(WINPGI)
1943 open (icbase,file=patname,status='old',readonly,shared)
1944 #elif (defined CRAY) || (defined AIX)
1945 open (icbase,file=patname,status='old',action='read')
1947 open (icbase,file=patname,status='old')
1949 open (icbase,file=patname,status='old',readonly)
1952 C Open output file only for CG processes
1953 c print *,"Processor",myrank," fg_rank",fg_rank
1954 if (fg_rank.eq.0) then
1956 if (nodes.eq.1) then
1959 npos = dlog10(dfloat(nodes-1))+1
1961 if (npos.lt.3) npos=3
1962 write (liczba,'(i1)') npos
1963 form = '(bz,i'//liczba(:ilen(liczba))//'.'//liczba(:ilen(liczba))
1965 write (liczba,form) me
1966 outname=prefix(:lenpre)//'.out_'//pot(:lenpot)//
1967 & liczba(:ilen(liczba))
1968 intname=prefix(:lenpre)//'_'//pot(:lenpot)//liczba(:ilen(liczba))
1970 pdbname=prefix(:lenpre)//'_'//pot(:lenpot)//liczba(:ilen(liczba))
1972 mol2name=prefix(:lenpre)//'_'//pot(:lenpot)//
1973 & liczba(:ilen(liczba))//'.mol2'
1974 statname=prefix(:lenpre)//'_'//pot(:lenpot)//
1975 & liczba(:ilen(liczba))//'.stat'
1977 & call copy_to_tmp(pref_orig(:ilen(pref_orig))//'_'//pot(:lenpot)
1978 & //liczba(:ilen(liczba))//'.stat')
1979 rest2name=prefix(:ilen(prefix))//"_"//liczba(:ilen(liczba))
1982 qname=prefix(:lenpre)//'_'//pot(:lenpot)//
1983 & liczba(:ilen(liczba))//'.const'
1988 outname=prefix(:lenpre)//'.out_'//pot(:lenpot)
1989 intname=prefix(:lenpre)//'_'//pot(:lenpot)//'.int'
1990 pdbname=prefix(:lenpre)//'_'//pot(:lenpot)//'.pdb'
1991 mol2name=prefix(:lenpre)//'_'//pot(:lenpot)//'.mol2'
1992 statname=prefix(:lenpre)//'_'//pot(:lenpot)//'.stat'
1994 & call copy_to_tmp(pref_orig(:ile(pref_orig))//'_'//pot(:lenpot)//
1996 rest2name=prefix(:ilen(prefix))//'.rst'
1998 qname=prefix(:lenpre)//'_'//pot(:lenpot)//'.const'
2001 #if defined(AIX) || defined(PGI)
2002 if (me.eq.king .or. .not. out1file)
2003 & open(iout,file=outname,status='unknown')
2005 if (fg_rank.gt.0) then
2006 write (liczba,'(i3.3)') myrank/nfgtasks
2007 write (ll,'(bz,i3.3)') fg_rank
2008 open(iout,file="debug"//liczba(:ilen(liczba))//"."//ll,
2013 open(igeom,file=intname,status='unknown',position='append')
2014 open(ipdb,file=pdbname,status='unknown')
2015 open(imol2,file=mol2name,status='unknown')
2016 open(istat,file=statname,status='unknown',position='append')
2018 c1out open(iout,file=outname,status='unknown')
2021 if (me.eq.king .or. .not.out1file)
2022 & open(iout,file=outname,status='unknown')
2024 if (fg_rank.gt.0) then
2025 write (liczba,'(i3.3)') myrank/nfgtasks
2026 write (ll,'(bz,i3.3)') fg_rank
2027 open(iout,file="debug"//liczba(:ilen(liczba))//"."//ll,
2032 open(igeom,file=intname,status='unknown',access='append')
2033 open(ipdb,file=pdbname,status='unknown')
2034 open(imol2,file=mol2name,status='unknown')
2035 open(istat,file=statname,status='unknown',access='append')
2037 c1out open(iout,file=outname,status='unknown')
2040 csa_rbank=prefix(:lenpre)//'.CSA.rbank'
2041 csa_seed=prefix(:lenpre)//'.CSA.seed'
2042 csa_history=prefix(:lenpre)//'.CSA.history'
2043 csa_bank=prefix(:lenpre)//'.CSA.bank'
2044 csa_bank1=prefix(:lenpre)//'.CSA.bank1'
2045 csa_alpha=prefix(:lenpre)//'.CSA.alpha'
2046 csa_alpha1=prefix(:lenpre)//'.CSA.alpha1'
2047 c!bankt csa_bankt=prefix(:lenpre)//'.CSA.bankt'
2048 csa_int=prefix(:lenpre)//'.int'
2049 csa_bank_reminimized=prefix(:lenpre)//'.CSA.bank_reminimized'
2050 csa_native_int=prefix(:lenpre)//'.CSA.native.int'
2051 csa_in=prefix(:lenpre)//'.CSA.in'
2052 c print *,"Processor",myrank,"fg_rank",fg_rank," opened files"
2055 write (iout,'(80(1h-))')
2056 write (iout,'(30x,a)') "FILE ASSIGNMENT"
2057 write (iout,'(80(1h-))')
2058 write (iout,*) "Input file : ",
2059 & pref_orig(:ilen(pref_orig))//'.inp'
2060 write (iout,*) "Output file : ",
2061 & outname(:ilen(outname))
2063 write (iout,*) "Sidechain potential file : ",
2064 & sidename(:ilen(sidename))
2066 write (iout,*) "SCp potential file : ",
2067 & scpname(:ilen(scpname))
2069 write (iout,*) "Electrostatic potential file : ",
2070 & elename(:ilen(elename))
2071 write (iout,*) "Cumulant coefficient file : ",
2072 & fouriername(:ilen(fouriername))
2073 write (iout,*) "Torsional parameter file : ",
2074 & torname(:ilen(torname))
2075 write (iout,*) "Double torsional parameter file : ",
2076 & tordname(:ilen(tordname))
2077 write (iout,*) "SCCOR parameter file : ",
2078 & sccorname(:ilen(sccorname))
2079 write (iout,*) "Bond & inertia constant file : ",
2080 & bondname(:ilen(bondname))
2081 write (iout,*) "Bending parameter file : ",
2082 & thetname(:ilen(thetname))
2083 write (iout,*) "Rotamer parameter file : ",
2084 & rotname(:ilen(rotname))
2085 write (iout,*) "Threading database : ",
2086 & patname(:ilen(patname))
2088 &write (iout,*)" DIRTMP : ",
2090 write (iout,'(80(1h-))')
2094 c----------------------------------------------------------------------------
2095 subroutine card_concat(card)
2096 implicit real*8 (a-h,o-z)
2097 include 'DIMENSIONS'
2098 include 'COMMON.IOUNITS'
2100 character*80 karta,ucase
2102 read (inp,'(a)') karta
2105 do while (karta(80:80).eq.'&')
2106 card=card(:ilen(card)+1)//karta(:79)
2107 read (inp,'(a)') karta
2110 card=card(:ilen(card)+1)//karta
2113 c----------------------------------------------------------------------------------
2115 implicit real*8 (a-h,o-z)
2116 include 'DIMENSIONS'
2117 include 'COMMON.CHAIN'
2118 include 'COMMON.IOUNITS'
2120 open(irest2,file=rest2name,status='unknown')
2121 read(irest2,*) totT,EK,potE,totE,t_bath
2123 read(irest2,'(3e15.5)') (d_t(j,i),j=1,3)
2126 read(irest2,'(3e15.5)') (dc(j,i),j=1,3)
2129 read (irest2,*) iset
2134 c---------------------------------------------------------------------------------
2135 subroutine read_fragments
2136 implicit real*8 (a-h,o-z)
2137 include 'DIMENSIONS'
2141 include 'COMMON.SETUP'
2142 include 'COMMON.CHAIN'
2143 include 'COMMON.IOUNITS'
2145 include 'COMMON.CONTROL'
2146 read(inp,*) nset,nfrag,npair,nfrag_back
2147 if(me.eq.king.or..not.out1file)
2148 & write(iout,*) "nset",nset," nfrag",nfrag," npair",npair,
2149 & " nfrag_back",nfrag_back
2151 read(inp,*) mset(iset)
2153 read(inp,*) wfrag(i,iset),ifrag(1,i,iset),ifrag(2,i,iset),
2155 if(me.eq.king.or..not.out1file)
2156 & write(iout,*) "R ",i,wfrag(i,iset),ifrag(1,i,iset),
2157 & ifrag(2,i,iset), qinfrag(i,iset)
2160 read(inp,*) wpair(i,iset),ipair(1,i,iset),ipair(2,i,iset),
2162 if(me.eq.king.or..not.out1file)
2163 & write(iout,*) "R ",i,wpair(i,iset),ipair(1,i,iset),
2164 & ipair(2,i,iset), qinpair(i,iset)
2167 read(inp,*) wfrag_back(1,i,iset),wfrag_back(2,i,iset),
2168 & wfrag_back(3,i,iset),
2169 & ifrag_back(1,i,iset),ifrag_back(2,i,iset)
2170 if(me.eq.king.or..not.out1file)
2171 & write(iout,*) "A",i,wfrag_back(1,i,iset),wfrag_back(2,i,iset),
2172 & wfrag_back(3,i,iset),ifrag_back(1,i,iset),ifrag_back(2,i,iset)
2177 c-------------------------------------------------------------------------------
2178 subroutine read_dist_constr
2179 implicit real*8 (a-h,o-z)
2180 include 'DIMENSIONS'
2184 include 'COMMON.SETUP'
2185 include 'COMMON.CONTROL'
2186 include 'COMMON.CHAIN'
2187 include 'COMMON.IOUNITS'
2188 include 'COMMON.SBRIDGE'
2189 integer ifrag_(2,100),ipair_(2,100)
2190 double precision wfrag_(100),wpair_(100)
2191 character*500 controlcard
2192 c write (iout,*) "Calling read_dist_constr"
2193 c write (iout,*) "nres",nres," nstart_sup",nstart_sup," nsup",nsup
2195 call card_concat(controlcard)
2196 call readi(controlcard,"NFRAG",nfrag_,0)
2197 call readi(controlcard,"NPAIR",npair_,0)
2198 call readi(controlcard,"NDIST",ndist_,0)
2199 call reada(controlcard,'DIST_CUT',dist_cut,5.0d0)
2200 call multreadi(controlcard,"IFRAG",ifrag_(1,1),2*nfrag_,0)
2201 call multreadi(controlcard,"IPAIR",ipair_(1,1),2*npair_,0)
2202 call multreada(controlcard,"WFRAG",wfrag_(1),nfrag_,0.0d0)
2203 call multreada(controlcard,"WPAIR",wpair_(1),npair_,0.0d0)
2204 c write (iout,*) "NFRAG",nfrag_," NPAIR",npair_," NDIST",ndist_
2205 c write (iout,*) "IFRAG"
2207 c write (iout,*) i,ifrag_(1,i),ifrag_(2,i),wfrag_(i)
2209 c write (iout,*) "IPAIR"
2211 c write (iout,*) i,ipair_(1,i),ipair_(2,i),wpair_(i)
2215 if (ifrag_(1,i).lt.nstart_sup) ifrag_(1,i)=nstart_sup
2216 if (ifrag_(2,i).gt.nstart_sup+nsup-1)
2217 & ifrag_(2,i)=nstart_sup+nsup-1
2218 c write (iout,*) i,ifrag_(1,i),ifrag_(2,i),wfrag_(i)
2220 if (wfrag_(i).gt.0.0d0) then
2221 do j=ifrag_(1,i),ifrag_(2,i)-1
2222 do k=j+1,ifrag_(2,i)
2223 c write (iout,*) "j",j," k",k
2225 if (constr_dist.eq.1) then
2230 forcon(nhpb)=wfrag_(i)
2231 else if (constr_dist.eq.2) then
2232 if (ddjk.le.dist_cut) then
2237 forcon(nhpb)=wfrag_(i)
2244 forcon(nhpb)=wfrag_(i)*dexp(-0.5d0*(ddjk/dist_cut)**2)
2247 if (.not.out1file .or. me.eq.king)
2248 & write (iout,'(a,3i5,f8.2,1pe12.2)') "+dist.constr ",
2249 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
2251 write (iout,'(a,3i5,f8.2,1pe12.2)') "+dist.constr ",
2252 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
2259 if (wpair_(i).gt.0.0d0) then
2267 do j=ifrag_(1,ii),ifrag_(2,ii)
2268 do k=ifrag_(1,jj),ifrag_(2,jj)
2272 forcon(nhpb)=wpair_(i)
2273 dhpb(nhpb)=dist(j,k)
2275 if (.not.out1file .or. me.eq.king)
2276 & write (iout,'(a,3i5,f8.2,f10.1)') "+dist.constr ",
2277 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
2279 write (iout,'(a,3i5,f8.2,f10.1)') "+dist.constr ",
2280 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
2287 read (inp,*) ihpb(nhpb+1),jhpb(nhpb+1),forcon(nhpb+1)
2288 if (forcon(nhpb+1).gt.0.0d0) then
2290 dhpb(nhpb)=dist(ihpb(nhpb),jhpb(nhpb))
2292 if (.not.out1file .or. me.eq.king)
2293 & write (iout,'(a,3i5,f8.2,f10.1)') "+dist.constr ",
2294 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
2296 write (iout,'(a,3i5,f8.2,f10.1)') "+dist.constr ",
2297 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
2304 c-------------------------------------------------------------------------------
2306 subroutine flush(iu)
2311 subroutine flush(iu)
2316 c------------------------------------------------------------------------------
2317 subroutine copy_to_tmp(source)
2318 include "DIMENSIONS"
2319 include "COMMON.IOUNITS"
2320 character*(*) source
2321 character* 256 tmpfile
2325 tmpfile=curdir(:ilen(curdir))//"/"//source(:ilen(source))
2326 inquire(file=tmpfile,exist=ex)
2328 write (*,*) "Copying ",tmpfile(:ilen(tmpfile)),
2329 & " to temporary directory..."
2330 write (*,*) "/bin/cp "//tmpfile(:ilen(tmpfile))//" "//tmpdir
2331 call system("/bin/cp "//tmpfile(:ilen(tmpfile))//" "//tmpdir)
2335 c------------------------------------------------------------------------------
2336 subroutine move_from_tmp(source)
2337 include "DIMENSIONS"
2338 include "COMMON.IOUNITS"
2339 character*(*) source
2342 write (*,*) "Moving ",source(:ilen(source)),
2343 & " from temporary directory to working directory"
2344 write (*,*) "/bin/mv "//source(:ilen(source))//" "//curdir
2345 call system("/bin/mv "//source(:ilen(source))//" "//curdir)
2348 c------------------------------------------------------------------------------
2349 subroutine random_init(seed)
2351 C Initialize random number generator
2353 implicit real*8 (a-h,o-z)
2354 include 'DIMENSIONS'
2357 logical OKRandom, prng_restart
2359 integer iseed_array(4)
2361 include 'COMMON.IOUNITS'
2362 include 'COMMON.TIME1'
2363 include 'COMMON.THREAD'
2364 include 'COMMON.SBRIDGE'
2365 include 'COMMON.CONTROL'
2366 include 'COMMON.MCM'
2367 include 'COMMON.MAP'
2368 include 'COMMON.HEADER'
2369 include 'COMMON.CSA'
2370 include 'COMMON.CHAIN'
2371 include 'COMMON.MUCA'
2373 include 'COMMON.FFIELD'
2374 include 'COMMON.SETUP'
2375 iseed=-dint(dabs(seed))
2376 if (iseed.eq.0) then
2377 write (iout,'(/80(1h*)/20x,a/80(1h*))')
2378 & 'Random seed undefined. The program will stop.'
2379 write (*,'(/80(1h*)/20x,a/80(1h*))')
2380 & 'Random seed undefined. The program will stop.'
2382 call mpi_finalize(mpi_comm_world,ierr)
2384 stop 'Bad random seed.'
2387 if (fg_rank.eq.0) then
2391 & write (iout,*) 'MPI: node= ', me, ' iseed= ',iseed
2392 OKRandom = prng_restart(me,iseed)
2395 tmp=65536.0d0**(4-i)
2396 iseed_array(i) = dint(seed/tmp)
2397 seed=seed-iseed_array(i)*tmp
2400 & write (iout,*) 'MPI: node= ', me, ' iseed(4)= ',
2401 & (iseed_array(i),i=1,4)
2402 write (*,*) 'MPI: node= ',me, ' iseed(4)= ',
2403 & (iseed_array(i),i=1,4)
2404 OKRandom = prng_restart(me,iseed_array)
2407 c r1 = prng_next(me)
2408 r1=ran_number(0.0D0,1.0D0)
2410 & write (iout,*) 'ran_num',r1
2411 if (r1.lt.0.0d0) OKRandom=.false.
2413 if (.not.OKRandom) then
2414 write (iout,*) 'PRNG IS NOT WORKING!!!'
2415 print *,'PRNG IS NOT WORKING!!!'
2418 call mpi_abort(mpi_comm_world,error_msg,ierr)
2421 write (iout,*) 'too many processors for parallel prng'
2422 write (*,*) 'too many processors for parallel prng'
2430 write (iout,*) 'ran_num',ran_number(0.0d0,1.0d0)