1 subroutine read_general_data(*)
4 include "DIMENSIONS.ZSCOPT"
8 integer ierror,kolor,klucz
10 include "COMMON.WEIGHTS"
11 include "COMMON.NAMES"
12 include "COMMON.VMCPAR"
13 include "COMMON.TORSION"
14 include "COMMON.INTERACT"
15 include "COMMON.ENERGIES"
16 include "COMMON.MINPAR"
17 include "COMMON.IOUNITS"
18 include "COMMON.TIME1"
19 include "COMMON.PROTFILES"
20 include "COMMON.CHAIN"
21 include "COMMON.CLASSES"
22 include "COMMON.THERMAL"
23 include "COMMON.FFIELD"
24 include "COMMON.OPTIM"
25 include "COMMON.CONTROL"
26 include "COMMON.SCCOR"
27 include "COMMON.SPLITELE"
28 character*800 controlcard
29 integer i,j,k,l,ii,n_ene_found,ist1,iet1,ist2,iet2,ls,le
30 integer ind,itype1,itype2,itypf,itypsc,itypp,itypt1,itypt2
31 integer ilen,lenpot,lenpre
33 character*4 liczba,liczba1
40 double precision xchuj,weitemp,weitemp_low,weitemp_up
45 c write (iout,*) "Enter read_general_data"
53 C Read first record: seed and number of energy components
54 call card_concat(controlcard,.true.)
55 c write (iout,*) "card1",controlcard
57 call readi(controlcard,"ISEED",iseed,0)
58 if (iseed.eq.0) stop "Seed is zero!"
59 c print *,me," iseed",iseed
60 call readi(controlcard,"NPARMSET",nparmset,1)
61 c print *,me," nparmset",nparmset
63 c Split processor pool if multiple parameter sets are treated
64 if (nparmset.eq.1) then
65 WHAM_COMM = MPI_COMM_WORLD
66 c print *,me," opening ",outname," opened"
67 open(iout,file=outname,status='unknown')
69 c print *,me," outname ",outname," opened"
71 if (nprocs.lt.nparmset) then
73 & "*** Cannot split parameter sets for fewer processors than sets",
75 call MPI_Finalize(ierror)
78 c write (iout,*) "nparmset",nparmset
79 nprocs = nprocs/nparmset
81 klucz = mod(me,nprocs)
82 c write (*,*) "My old rank",me," kolor",kolor," klucz",klucz
83 call MPI_Comm_split(MPI_COMM_WORLD,kolor,klucz,WHAM_COMM,ierror)
84 call MPI_Comm_size(WHAM_COMM,nprocs,ierror)
85 call MPI_Comm_rank(WHAM_COMM,me,ierror)
86 c write (*,*) "My new rank",me," comm size",nprocs
87 c write (*,*) "MPI_COMM_WORLD",MPI_COMM_WORLD,
88 c & " WHAM_COMM",WHAM_COMM
90 c write (*,*) "My parameter set is",myparm
91 write(liczba,'(bz,i4.4)') me
92 write(liczba1,'(bz,i4.4)') myparm
93 outname=prefix(:lenpre)//'.out_par'//liczba1//'_'//
94 & pot(:lenpot)//liczba
95 open(iout,file=outname,status='unknown')
98 c print *,me," checkpoint 1"
99 energy_dec=(index(controlcard,'ENERGY_DEC').gt.0)
100 call readi(controlcard,'TORMODE',tor_mode,0)
101 c print *,me," tor_mode",tor_mode
102 call readi(controlcard,"N_ENE",n_ene,max_ene)
103 c print *,"iseed",iseed," n_ene",n_ene
104 call readi(controlcard,"NPARMSET",nparmset,1)
105 geom_and_wham_weights =
106 & index(controlcard,"GEOM_AND_WHAM_WEIGHTS").gt.0
107 c write (iout,*) "GEOM_AND_WHAM_WEIGHTS",geom_and_wham_weights
108 if (iseed.gt.0) iseed=-iseed
110 out_newe=index(controlcard,"OUT_NEWE").gt.0
111 unres_pdb = index(controlcard,"UNRES_PDB").gt.0
112 c write (iout,*) "UNRES_PDB ",unres_pdb
113 c Energy calculation settings section
114 call readi(controlcard,'TORMODE',tor_mode,0)
115 C if(me.eq.king .or. .not. out1file .and. fg_rank.eq.0) then
116 call reada(controlcard,'BOXX',boxxsize,100.0d0)
117 call reada(controlcard,'BOXY',boxysize,100.0d0)
118 call reada(controlcard,'BOXZ',boxzsize,100.0d0)
119 c print *,me," checkpoint 2"
120 c Cutoff range for interactions
121 call reada(controlcard,"R_CUT",r_cut,15.0d0)
122 call reada(controlcard,"LAMBDA",rlamb,0.3d0)
123 call reada(controlcard,"LIPTHICK",lipthick,0.0d0)
124 call reada(controlcard,"LIPAQBUF",lipbufthick,0.0d0)
125 if (lipthick.gt.0.0d0) then
126 bordliptop=(boxzsize+lipthick)/2.0
127 bordlipbot=bordliptop-lipthick
129 if ((bordliptop.gt.boxzsize).or.(bordlipbot.lt.0.0))
130 & write(iout,*) "WARNING WRONG SIZE OF LIPIDIC PHASE"
131 buflipbot=bordlipbot+lipbufthick
132 bufliptop=bordliptop-lipbufthick
133 if ((lipbufthick*2.0d0).gt.lipthick)
134 &write(iout,*) "WARNING WRONG SIZE OF LIP AQ BUF"
136 c write(iout,*) "bordliptop=",bordliptop
137 c write(iout,*) "bordlipbot=",bordlipbot
138 c write(iout,*) "bufliptop=",bufliptop
139 c write(iout,*) "buflipbot=",buflipbot
140 call readi(controlcard,'SYM',symetr,1)
141 c print *,me," checkpoint 3"
142 c write (iout,*) "n_ene",n_ene
144 c Energy-term-weights section
146 C Read third record: weights
150 c print *,me," checkpoint 4"
151 C Read fourth record: masks
152 call card_concat(controlcard,.true.)
153 c write (iout,*) "card2",controlcard
155 key = "MASK_"//wname(i)(2:ilen(wname(i)))
156 call readi(controlcard,key(:ilen(key)),imask(i),0)
158 c print *,me," checkpoint 5"
159 C Read fifth record: lower limits of weights
160 call card_concat(controlcard,.true.)
161 c write (iout,*) "card3",controlcard
163 key = "WLOW_"//wname(i)(2:ilen(wname(i)))
164 call reada(controlcard,key(:ilen(key)),ww_low(i),ww(i))
166 C Read sixth record: upper limits of weights
167 call card_concat(controlcard,.true.)
168 c write (iout,*) "card4",controlcard
170 key = "WUP_"//wname(i)(2:ilen(wname(i)))
171 call reada(controlcard,key(:ilen(key)),ww_up(i),ww(i))
173 C Read seventh record: VMC parameters
174 call card_concat(controlcard,.true.)
175 c write (iout,*) "card5",controlcard
176 call readi(controlcard,"MODE",mode,3)
177 call readi(controlcard,"NSCANCYCLE",nscancycle,3)
178 call readi(controlcard,"MAXSTEP_SCAN",maxstep_scan,50)
179 call reada(controlcard,"RSTEP_SCAN",step_scan,1.0d-1)
180 call readi(controlcard,"READ_STAT",read_stat,3)
181 call readi(controlcard,"RESCALE_MODE",rescale_mode,2)
182 c init_ene = index(controlcard,"INIT_ENE").gt.0 .and. read_stat.gt.1
184 call readi(controlcard,"NMCM",nmcm,0)
185 call readi(controlcard,"MAXSCAN",maxscan,0)
186 call readi(controlcard,"MAXMIN",maxmin,100)
187 call readi(controlcard,"MAXFUN",maxfun,100)
188 call reada(controlcard,"TOLF",tolf,1.0d-6)
189 call reada(controlcard,"RTOLF",rtolf,1.0d-6)
191 if (index(controlcard,"OUT_MINIM").gt.0) out_minim=iout
193 if (index(controlcard,"PRINT_INI").gt.0) print_ini=1
195 if (index(controlcard,"PRINT_FIN").gt.0) print_fin=1
197 if (index(controlcard,"PRINT_STAT").gt.0) print_stat=1
198 call reada(controlcard,"RSTIME",rstime,9.0d2)
199 call reads(controlcard,"MINIMIZER",minimizer,"SUMSL")
200 call readi(controlcard,"OPT_MODE",opt_mode,0)
201 mod_other_params=index(controlcard,"OPTIMIZE_OTHER").gt.0
202 if (read_stat.eq.0 .and. mod_other_params) then
203 write (iout,*) "Error: only optimization of energy-term",
204 & " weights can be performed with READ_STAT=",read_stat
208 if (index(controlcard,"RESTART").gt.0) then
213 c print *,me," checkpoint 6"
216 c-----------------------------------------------------------------------
217 subroutine read_optim_parm(*)
220 include "DIMENSIONS.ZSCOPT"
224 integer ierror,kolor,klucz
226 include "COMMON.WEIGHTS"
227 include "COMMON.NAMES"
228 include "COMMON.VMCPAR"
229 include "COMMON.TORSION"
230 include "COMMON.INTERACT"
231 include "COMMON.ENERGIES"
232 include "COMMON.MINPAR"
233 include "COMMON.IOUNITS"
234 include "COMMON.TIME1"
235 include "COMMON.PROTFILES"
236 include "COMMON.CHAIN"
237 include "COMMON.CLASSES"
238 include "COMMON.THERMAL"
239 include "COMMON.FFIELD"
240 include "COMMON.OPTIM"
241 include "COMMON.CONTROL"
242 include "COMMON.SCCOR"
243 character*800 controlcard
245 integer i,j,k,l,ii,n_ene_found,ist1,iet1,ist2,iet2,ls,le
246 integer ind,ind1,ind2,itype1,itype2,itypf,itypsc,itypp,
247 & itypt1,itypt2,masktemp,iblock,iaux
248 integer ilen,lenpot,lenpre
251 character*4 liczba,liczba1
258 double precision xchuj,weitemp,weitemp_low,weitemp_up
266 write (iout,*) "MOD_OTHER_PARAMS ",mod_other_params
270 mask_tor(0,itypt1,itypt2,iblock)=0
271 weitor(0,itypt1,itypt2,iblock)=1.0d0
272 weitor_low(0,itypt1,itypt2,iblock)=1.0d0
273 weitor_up(0,itypt1,itypt2,iblock)=1.0d0
279 mask_tor(l,itypt1,itypt2,iblock)=0
280 weitor(l,itypt1,itypt2,iblock)=1.0
281 weitor_low(l,itypt1,itypt2,iblock)=1.0
282 weitor_up(l,itypt1,itypt2,iblock)=1.0
288 write (iout,*) "ntyp",ntyp
291 write (iout,*) "itypt1",itypt1," itypt2",itypt2,
292 & "weitor",weitor(0,itypt1,itypt2,1),eitor(0,itypt1,itypt2,2)
296 if (mod_other_params) then
298 c &"Internal parameters of UNRES energy components will be optimized"
299 call card_concat(controlcard,.true.)
300 c write (iout,*) "mod_side ",controlcard
302 mod_side = (index(controlcard,"MOD_SIDE").gt.0)
306 call card_concat(controlcard,.true.)
307 do while ( index(controlcard,"END").eq.0 )
308 call split_string(controlcard,item(1),4,nitem)
309 if (nitem.eq.1 .or. item(2)(:1).eq."*") then
310 nsingle_sc=nsingle_sc+1
311 ityp_ssc(nsingle_sc)=rescode(1,item(1),0)
313 epss_low(nsingle_sc)=0.02d0
315 read (item(3),*) epss_low(nsingle_sc)
318 epss_up(nsingle_sc)=0.0d0
320 read (item(4),*) epss_up(nsingle_sc)
324 ityp_psc(1,npair_sc)=rescode(1,item(1),0)
325 ityp_psc(2,npair_sc)=rescode(1,item(2),0)
327 epsp_low(npair_sc)=0.02d0
329 read (item(3),*) epsp_low(npair_sc)
332 epsp_up(npair_sc)=0.0d0
334 read (item(4),*) epsp_up(npair_sc)
337 call card_concat(controlcard,.true.)
339 if (nsingle_sc+npair_sc.eq.0) mod_side=.false.
340 call card_concat(controlcard,.true.)
343 & index(controlcard,"MOD_SIDE_OTHER").gt.0
344 c write (iout,*) "mod_side_other ",controlcard,mod_side_other
345 if (mod_side_other) then
346 mod_side_other=.false.
352 call card_concat(controlcard,.true.)
353 c write (iout,*) "mod_side_oter ",controlcard
354 do while ( index(controlcard,"END").eq.0 )
355 call reads(controlcard,"RESKIND",reskind," ")
356 itypsc=rescode(1,reskind,0)
357 if (itypsc.lt.1 .or. itypsc.gt.20) then
358 write (iout,*) "Error in SC optimization data;",
359 & " SC type must not be dummy, type is" ,restyp," ",itypsc
360 write (*,*) "Error in SC optimization data;",
361 & " SC type must not be dummy, type is" ,restyp," ",itypsc
364 call readi(controlcard,"MASK_SIGMA0",mask_sigma(1,itypsc),0)
365 call readi(controlcard,"MASK_SIGMAII",mask_sigma(2,itypsc),0)
366 call readi(controlcard,"MASK_CHIP",mask_sigma(3,itypsc),0)
367 call readi(controlcard,"MASK_ALP",mask_sigma(4,itypsc),0)
368 call reada(controlcard,"SIGMA0_LOW",sigma_low(1,itypsc),0.d0)
369 call reada(controlcard,"SIGMA0_UP",sigma_up(1,itypsc),0.0d0)
370 call reada(controlcard,"SIGMAII_LOW",sigma_low(2,itypsc),
372 call reada(controlcard,"SIGMAII_UP",sigma_up(2,itypsc),0.0d0)
373 call reada(controlcard,"CHIP_LOW",sigma_low(3,itypsc),0.d0)
374 call reada(controlcard,"CHIP_UP",sigma_up(3,itypsc),0.0d0)
375 call reada(controlcard,"ALP_LOW",sigma_low(4,itypsc),0.d0)
376 call reada(controlcard,"ALP_UP",sigma_up(4,itypsc),0.0d0)
378 if (sigma_low(k,itypsc).eq.0.0d0 .and.
379 & sigma_up(k,itypsc).eq.0.0d0) mask_sigma(k,itypsc)=0
382 mod_side_other=mod_side_other.or.mask_sigma(k,itypsc).gt.0
384 write (iout,'(a4,i3,4(i2,2f8.3))') reskind,itypsc,
385 & (mask_sigma(k,itypsc),
386 & sigma_low(k,itypsc),sigma_up(k,itypsc),k=1,4)
387 call card_concat(controlcard,.true.)
388 c write (iout,*) "mod_side_oter ",controlcard
390 write (iout,*) "Optimization flags of one-body SC parameters"
392 write (iout,'(a4,i3,4(i2,2f8.3))') restyp(i),i,
393 & (mask_sigma(k,i),sigma_low(k,i),sigma_up(k,i),k=1,4)
395 call card_concat(controlcard,.true.)
397 c write (iout,*) "mod_side_other ",mod_side_other
398 c write (iout,*) "mod_tor ",controlcard
400 mod_tor = index(controlcard,"MOD_TOR").gt.0
403 do i=-ntortyp,ntortyp
404 do j=-ntortyp,ntortyp
405 mask_tor(0,i,j,iblock)=0
406 weitor(0,i,j,iblock)=1.0d0
407 weitor_low(0,i,j,iblock)=0.0d0
408 weitor_up(0,i,j,iblock)=2.0d0
412 call card_concat(controlcard,.true.)
413 write (iout,*) controlcard
414 do while ( index(controlcard,"END").eq.0 )
415 call split_string(controlcard,item(1),7,nitem)
417 write (*,*) "Error in torsional optimization data;",
418 & " must specify both residues and type"
426 write (iout,*) "item3 ",item(3)," item4 ",item(4),
429 if (nitem.gt.2) read(item(3),*) masktemp
430 if (nitem.gt.3) read(item(4),*) weitemp
431 if (nitem.gt.4) read(item(5),*) weitemp_low
432 if (nitem.gt.5) read(item(6),*) weitemp_up
433 if (nitem.gt.6) read(item(7),*) iblock
434 write (iout,*) controlcard
435 write (iout,*) item(1)," ",item(2),weitemp,
436 & weitemp_low,weitemp_up
437 if (index(item(1),"*").gt.0) then
441 ist1=itortyp(rescode(1,item(1),0))
444 if (index(item(2),"*").gt.0) then
448 ist2=itortyp(rescode(1,item(2),0))
451 c write (iout,*) "ist1",ist1," iet1",iet1," ist2",ist2,
456 c write (iout,*) "itypt1",itypt1," itypt2",itypt2,
457 c & weitemp,weitemp_low,weitemp_up
458 mask_tor(0,itypt1,itypt2,iblock)=masktemp
459 weitor(0,itypt1,itypt2,iblock)=weitemp
460 weitor_low(0,itypt1,itypt2,iblock)=weitemp_low
461 weitor_up(0,itypt1,itypt2,iblock)=weitemp_up
462 c write (iout,*) "itypt1",itypt1," itypt2",itypt2,
463 c & mask_tor(0,itypt1,itypt2,iblock),
464 c & weitor(0,itypt1,itypt2,iblock),
465 c & weitor_low(0,itypt1,itypt2,iblock),
466 c & weitor_up(0,itypt1,itypt2,iblock)
469 call card_concat(controlcard,.true.)
470 write (iout,*) controlcard
473 if (tor_mode.gt.1) then
474 write (iout,*) "TORMODE is",tor_mode,
475 & " torsional constants are computed from energy map expansion."
479 write (iout,*) "Initialized torsional parameters:"
481 do itypt1=-ntortyp,ntortyp
482 do itypt2=-ntortyp,ntortyp
483 write (iout,'(3i5,3f10.5)') itypt1,itypt2,
484 & mask_tor(0,itypt1,itypt2,iblock),
485 & weitor(0,itypt1,itypt2,iblock),
486 & weitor_low(0,itypt1,itypt2,iblock),
487 & weitor_up(0,itypt1,itypt2,iblock)
492 if (tor_mode.eq.1) then
493 c Exchange indices because the residue order in new torsionals is reversed
495 do itypt1=-ntortyp,ntortyp
496 do itypt2=itypt1+1,ntortyp
497 iaux=mask_tor(0,itypt1,itypt2,iblock)
498 mask_tor(0,itypt1,itypt2,iblock)=
499 & mask_tor(0,itypt2,itypt1,iblock)
500 mask_tor(0,itypt2,itypt1,iblock)=iaux
501 aux=weitor(0,itypt1,itypt2,iblock)
502 weitor(0,itypt1,itypt2,iblock)=
503 & weitor(0,itypt2,itypt1,iblock)
504 weitor(0,itypt2,itypt1,iblock)=aux
505 aux=weitor_low(0,itypt1,itypt2,iblock)
506 weitor_low(0,itypt1,itypt2,iblock)=
507 & weitor_low(0,itypt2,itypt1,iblock)
508 weitor_low(0,itypt2,itypt1,iblock)=aux
509 aux=weitor_up(0,itypt1,itypt2,iblock)
510 weitor_up(0,itypt1,itypt2,iblock)=
511 & weitor_up(0,itypt2,itypt1,iblock)
512 weitor_up(0,itypt2,itypt1,iblock)=aux
517 call card_concat(controlcard,.true.)
519 write (iout,*) "mod_sccor ",controlcard
521 mod_sccor = index(controlcard,"MOD_SCCOR").gt.0
523 call card_concat(controlcard,.true.)
526 do i=-nsccortyp,nsccortyp
527 do j=-nsccortyp,nsccortyp
528 mask_tor(l,i,j,iblock)=0
529 weitor(l,i,j,iblock)=1.0d0
530 weitor_low(l,i,j,iblock)=0.0d0
531 weitor_up(l,i,j,iblock)=2.0d0
536 do while ( index(controlcard,"END").eq.0 )
537 call split_string(controlcard,item(1),7,nitem)
539 write (*,*) "Error in torsional optimization data;",
540 & " must specify both residues and type"
546 if (nitem.gt.3) read(item(4),*) masktemp
547 if (nitem.gt.4) read(item(5),*) weitemp
548 if (nitem.gt.5) read(item(6),*) weitemp_low
549 if (nitem.gt.6) read(item(7),*) weitemp_up
550 if (index(item(1),"*").gt.0) then
554 ist1=isccortyp(rescode(1,item(1),0))
557 if (index(item(2),"*").gt.0) then
561 ist2=isccortyp(rescode(1,item(2),0))
564 if (index(item(3),"*").gt.0) then
574 mask_tor(l,itypt1,itypt2,1)=masktemp
575 weitor(l,itypt1,itypt2,1)=weitemp
576 weitor_low(l,itypt1,itypt2,1)=weitemp_low
577 weitor_up(l,itypt1,itypt2,1)=weitemp_up
581 call card_concat(controlcard,.true.)
583 call card_concat(controlcard,.true.)
587 write (iout,*) "Optimizable sidechain-torsional parameters:"
588 do itypt1=-nsccortyp,nsccortyp
589 do itypt2=-nsccortyp,nsccortyp
591 if (mask_tor(l,itypt1,itypt2,1).gt.0)
592 & write (iout,'(4i5,3f10.5)') itypt1,itypt2,l,
593 & mask_tor(l,itypt1,itypt2,1),weitor(l,itypt1,itypt2,1),
594 & weitor_low(l,itypt1,itypt2,1),weitor_up(l,itypt1,itypt2,1)
600 write (iout,*) "mod_fourier ",controlcard
602 mod_fourier(nloctyp)=index(controlcard,"MOD_FOURIER")
604 if (mod_fourier(nloctyp).gt.0) then
605 mod_fourier(nloctyp)=0
619 mask_eenew(ii,j,k,i)=0
627 call card_concat(controlcard,.true.)
628 do while ( index(controlcard,"END").eq.0 )
629 c write(iout,*) controlcard
630 call reads(controlcard,"TYPF",typf," ")
631 itypf=rescode(1,typf,0)
632 c write (iout,*) "TYPF ",typf," itypf",itypf
633 if (itypf.eq.0 .or. itypf.gt.ntyp) then
634 write (*,*) "Error specifying fourier parms"
637 itypf=itype2loc(itypf)
638 write (iout,*) "local type",itypf
640 if (index(controlcard,"B1_LOW").gt.0) then
642 call readi(controlcard,"IND",ind,0)
643 call readi(controlcard,"COEFF",ii,0)
644 if (ind.eq.0 .or. ii.eq.0 .or. ii.gt.3) then
646 & "Error specifying B1, components undefined",ind,ii
649 mask_bnew1(ii,ind,itypf)=1
650 call reada(controlcard,"B1_LOW",bnew1_low(ii,ind,itypf),
652 call reada(controlcard,"B1_UP",bnew1_up(ii,ind,itypf),
654 mod_fourier(itypf)=mod_fourier(itypf)
655 & +mask_bnew1(ii,ind,itypf)
657 else if (index(controlcard,"B2_LOW").gt.0) then
659 mask_bnew2(ii,ind,itypf)=1
660 call readi(controlcard,"IND",ind,0)
661 call readi(controlcard,"COEFF",ii,0)
662 if (ind.eq.0 .or. ii.eq.0 .or. ii.gt.3) then
664 & "Error specifying B2, components undefined",ind,ii
667 call reada(controlcard,"B2_LOW",bnew2_low(ii,ind,itypf),
669 call reada(controlcard,"B2_UP",bnew2_up(ii,ind,itypf),
671 mod_fourier(itypf)=mod_fourier(itypf)
672 & +mask_bnew2(ii,ind,itypf)
674 else if (index(controlcard,"C_LOW").gt.0) then
676 call readi(controlcard,"IND",ind,0)
677 call readi(controlcard,"COEFF",ii,0)
678 if (ind.eq.0 .or. ii.eq.0 .or. ii.gt.3) then
680 & "Error specifying C, components undefined",ind,ii
683 mask_ccnew(ii,ind,itypf)=1
684 call reada(controlcard,"C_LOW",ccnew_low(ii,ind,itypf),.1d0)
685 call reada(controlcard,"C_UP",ccnew_up(ii,ind,itypf),0.0d0)
686 mod_fourier(itypf)=mod_fourier(itypf)
687 & +mask_ccnew(ii,ind,itypf)
689 else if (index(controlcard,"D_LOW").gt.0) then
691 call readi(controlcard,"IND",ind,0)
692 call readi(controlcard,"COEFF",ii,0)
693 if (ind.eq.0 .or. ii.eq.0 .or. ii.gt.3) then
695 & "Error specifying D, components undefined",ind,ii
698 mask_ddnew(ii,ind,itypf)=1
699 call reada(controlcard,"D_LOW",ddnew_low(ii,ind,itypf),
701 call reada(controlcard,"D_UP",ddnew_up(ii,ind,itypf),
703 mod_fourier(itypf)=mod_fourier(itypf)
704 & +mask_ddnew(ii,ind,itypf)
706 else if (index(controlcard,"E0_LOW").gt.0) then
708 call readi(controlcard,"COEFF",ii,0)
709 if (ii.eq.0 .or. ii.gt.3) then
711 & "Error specifying E0, components undefined",ii
714 mask_e0new(ii,itypf)=1
715 call reada(controlcard,"E0_LOW",e0new_low(ii,itypf),
717 call reada(controlcard,"E0_UP",e0new_up(ii,itypf),
719 mod_fourier(itypf)=mod_fourier(itypf)
720 & +mask_e0new(ii,itypf)
722 else if (index(controlcard,"E_LOW").gt.0) then
724 call readi(controlcard,"IND1",ind1,0)
725 call readi(controlcard,"IND2",ind2,0)
726 call readi(controlcard,"COEFF",ii,0)
727 if (ind1.eq.0 .or. ind2.eq.0 .or. ii.eq.0 .or. ii.gt.2) then
729 & "Error specifying E, components undefined",ind1,ind2,ii
732 mask_eenew(ii,ind1,ind2,itypf)=1
733 call reada(controlcard,"E_LOW",
734 & eenew_low(ii,ind1,ind2,itypf),0.1d0)
735 call reada(controlcard,"E_UP",
736 & eenew_up(ii,ind1,ind2,itypf),0.0d0)
737 mod_fourier(itypf)=mod_fourier(itypf)
738 & +mask_eenew(ii,ind1,ind2,itypf)
740 call card_concat(controlcard,.true.)
742 call card_concat(controlcard,.true.)
745 write (iout,*) "itypf",itypf," mod_fourier",mod_fourier(itypf)
746 mod_fourier(nloctyp)=mod_fourier(nloctyp)+mod_fourier(itypf)
748 write (iout,*) "mod_fourier all",mod_fourier(nloctyp)
750 call card_concat(controlcard,.true.)
751 do while ( index(controlcard,"END").eq.0 )
752 call readi(controlcard,"TYPF",typf," ")
754 if (itypf.eq.0 .or. itypf.gt.ntyp) then
755 write (*,*) "Error specifying fourier parms"
758 itypf=itype2loc(itypf)
759 call readi(controlcard,"IND",ind,0)
760 call reada(controlcard,"B_LOW",b_low(ind,itypf),0.1d0)
761 call reada(controlcard,"B_UP",b_up(ind,itypf),0.0d0)
762 mask_fourier(ind,itypf)=1
763 mod_fourier(itypf)=mod_fourier(itypf)
764 & +mask_fourier(ind,itypf)
765 mod_fourier(nloctyp)=mod_fourier(nloctyp)
766 & +mask_fourier(ind,itypf)
767 call card_concat(controlcard,.true.)
769 call card_concat(controlcard,.true.)
779 mod_elec=index(controlcard,"MOD_ELEC").gt.0
782 call card_concat(controlcard,.true.)
783 do while ( index(controlcard,"END").eq.0 )
784 c write (iout,*) "controlcard ",controlcard
785 call readi(controlcard,"TYPE1",itype1,0)
786 call readi(controlcard,"TYPE2",itype2,0)
787 c write (iout,*) "itype1",itype1," itype2",itype2
788 if (itype1.eq.0 .or. itype1.gt.2 .or. itype2.eq.0
789 & .or. itype2.gt.2) then
790 write (iout,*) "Error specifying elec parms"
793 if (index(controlcard,"EPP").gt.0) then
795 mask_elec(itype1,itype2,1)=1
796 mask_elec(itype2,itype1,1)=1
797 call reada(controlcard,"EPP_LOW",epp_low(itype1,itype2),
799 epp_low(itype2,itype1)=epp_low(itype1,itype2)
800 call reada(controlcard,"EPP_UP",epp_up(itype1,itype2),
802 epp_up(itype2,itype1)=epp_up(itype1,itype2)
804 if (index(controlcard,"RPP").gt.0) then
806 mask_elec(itype1,itype2,2)=1
807 mask_elec(itype2,itype1,2)=1
808 call reada(controlcard,"RPP_LOW",rpp_low(itype1,itype2),
810 rpp_low(itype2,itype1)=rpp_low(itype1,itype2)
811 call reada(controlcard,"RPP_UP",rpp_up(itype1,itype2),
813 rpp_up(itype2,itype1)=rpp_up(itype1,itype2)
815 if (index(controlcard,"ELPP6").gt.0) then
817 mask_elec(itype1,itype2,3)=1
818 mask_elec(itype2,itype1,3)=1
819 call reada(controlcard,"ELPP6_LOW",
820 & elpp6_low(itype1,itype2),0.1d0)
821 elpp6_low(itype2,itype1)=elpp6_low(itype1,itype2)
822 call reada(controlcard,"ELPP6_UP",
823 & elpp6_up(itype1,itype2),0.0d0)
824 elpp6_up(itype2,itype1)=elpp6_up(itype1,itype2)
826 if (index(controlcard,"ELPP3").gt.0) then
828 mask_elec(itype1,itype2,4)=1
829 mask_elec(itype2,itype1,4)=1
830 call reada(controlcard,"ELPP3_LOW",
831 & elpp3_low(itype1,itype2),0.1d0)
832 elpp3_low(itype2,itype1)=elpp3_low(itype1,itype2)
833 call reada(controlcard,"ELPP3_UP",
834 & elpp3_up(itype1,itype2),0.0d0)
835 elpp3_up(itype2,itype1)=elpp3_up(itype1,itype2)
837 call card_concat(controlcard,.true.)
839 call card_concat(controlcard,.true.)
848 mod_scp=index(controlcard,"MOD_SCP").gt.0
851 call card_concat(controlcard,.true.)
852 do while (index(controlcard,"END").eq.0)
853 if (index(controlcard,"EPSCP").gt.0) then
855 call readi(controlcard,"ITYPSC",itypsc,0)
856 call readi(controlcard,"ITYPP",itypp,0)
857 if (itypsc.gt.20 .or. itypp.eq.0 .or. itypp.gt.2) then
858 write (iout,*) "Error specifying scp parms"
861 mask_scp(itypsc,itypp,1)=1
862 call reada(controlcard,"EPSCP_LOW",
863 & epscp_low(itypsc,itypp),0.1d0)
864 call reada(controlcard,"EPSCP_UP",
865 & epscp_up(itypsc,itypp),0.0d0)
867 if (index(controlcard,"RSCP").gt.0) then
869 call readi(controlcard,"ITYPSC",itypsc,0)
870 call readi(controlcard,"ITYPP",itypp,0)
871 mask_scp(itypsc,itypp,2)=1
872 call readi(controlcard,"ITYPSC",itypsc,0)
873 call readi(controlcard,"ITYPP",itypp,0)
874 if (itypsc.gt.20 .or. itypp.eq.0 .or. itypp.gt.2) then
875 write (iout,*) "Error specifying scp parms"
878 call reada(controlcard,"RSCP_LOW",
879 & rscp_low(itypsc,itypp),0.1d0)
880 c write(iout,*)itypsc,itypp,rscp_low(itypsc,itypp)
881 call reada(controlcard,"RSCP_UP",
882 & rscp_up(itypsc,itypp),0.0d0)
883 c write(iout,*)itypsc,itypp,rscp_up(itypsc,itypp)
885 call card_concat(controlcard,.true.)
888 write (iout,*) "END ",controlcard
891 & mod_fourier(nloctyp).gt.0 .or. mod_elec .or. mod_scp
893 if (read_stat.lt.2. .and. mod_other_params) then
894 write (iout,*)"Error - only weights and sidechain parameters",
895 & " can be optimized with READ_STAT=",read_stat
899 init_ene = init_ene .or. read_stat.eq.2
901 c write (*,*) "MOD_OTHER_PARAMS ",mod_other_params
902 c write (*,*) "MOD_SIDE ",mod_side," MOD_FOURIER",
903 c & mod_fourier(nloctyp),
904 c & " MOD_ELEC ",mod_elec," MOD_SCP ",mod_scp
905 init_ene=init_ene .or. mod_other_params
906 c write (iout,*) "init_ene",init_ene
911 c-----------------------------------------------------------------------------
912 subroutine print_general_data(*)
915 include "DIMENSIONS.ZSCOPT"
919 integer ierror,kolor,klucz
921 include "COMMON.WEIGHTS"
922 include "COMMON.NAMES"
923 include "COMMON.VMCPAR"
924 include "COMMON.TORSION"
925 include "COMMON.INTERACT"
926 include "COMMON.ENERGIES"
927 include "COMMON.MINPAR"
928 include "COMMON.IOUNITS"
929 include "COMMON.TIME1"
930 include "COMMON.PROTFILES"
931 include "COMMON.CHAIN"
932 include "COMMON.CLASSES"
933 include "COMMON.THERMAL"
934 include "COMMON.FFIELD"
935 include "COMMON.OPTIM"
936 include "COMMON.CONTROL"
937 include "COMMON.SCCOR"
938 character*800 controlcard
939 integer i,j,k,l,ii,n_ene_found,itypt,jtypt
940 integer ind,itype1,itype2,itypf,itypsc,itypp
941 integer ilen,lenpot,lenpre
943 character*4 liczba,liczba1
945 write (iout,*) "Single-point target function evaluation"
946 else if (mode.eq.2) then
947 write (iout,*) "Grid search of the parameter space"
948 else if (mode.eq.3) then
949 write (iout,*) "Minimization of the target function"
951 write (iout,*) "Wrong MODE",mode,", should be 1, 2, or 3"
955 write (iout,*) "RESCALE_MODE",rescale_mode
956 mod_other_params=index(controlcard,"OPTIMIZE_OTHER").gt.0
957 if (read_stat.eq.0 .and. mod_other_params) then
958 write (iout,*) "Error: only optimization of energy-term",
959 & " weights can be performed with READ_STAT=",read_stat
964 write (iout,*) "Parameters of the SUMSL procedure:"
965 write (iout,'(a,t15,i5)') "MAXMIN",maxmin
966 write (iout,'(a,t15,i5)') "MAXFUN",maxfun
967 write (iout,'(a,t15,e15.7)') "TOLF",tolf
968 write (iout,'(a,t15,e15.7)') "RTOLF",rtolf
970 if (mod_other_params) then
972 &"Internal parameters of UNRES energy components will be optimized"
973 call card_concat(controlcard,.true.)
974 mod_side = (index(controlcard,"MOD_SIDE").gt.0)
976 write (iout,*) "SC epsilons to be optimized:"
977 write (iout,*) "Single: eps(i,j)=eps(i,j)+(x(i)+x(j))/2"
979 write (iout,*) restyp(ityp_ssc(i)),epss_low(i),epss_up(i)
981 write (iout,*) "Pairs: eps(i,j)=eps(i,j)+x(i,j):"
983 write (iout,*) restyp(ityp_psc(1,i)),
984 & restyp(ityp_psc(2,i)),epsp_low(i),epsp_up(i)
988 write (iout,*)"Torsional weights/coefficients to be optimized"
989 write(iout,'(a)') "TYP1 TYP2 WEIGHT",
990 & " LOWER BOUND UPPER BOUND"
991 do itypt=-nsccortyp,nsccortyp
992 do jtypt=-nsccortyp,nsccortyp
994 if (mask_tor(l,itypt,jtypt,1).gt.0) then
995 write(iout,'(3a4,3f10.5)')l,restyp(itypt),restyp(jtypt),
996 & weitor(l,itypt,jtypt,1),weitor_low(l,itypt,jtypt,1),
997 & weitor_up(l,itypt,jtypt,1)
1003 if (mod_fourier(nloctyp).gt.0) then
1004 write (iout,*) "Fourier coefficients to be optimized"
1005 do itypf=0,nloctyp-1
1006 if (mod_fourier(itypf).gt.0) then
1007 write (iout,'(3a,i2)') "Type ",restyp(iloctyp(itypf)),
1008 & " number of coeffs",mod_fourier(itypf)
1009 write(iout,'(a)') "NAME COEFF LOWER BOUND UPPER BOUND"
1013 if (mask_bnew1(k,j,itypf).gt.0)
1014 & write (iout,'(2hB1,2i2,f10.5)') k,j,bnew1(k,j,itypf),
1015 & bnew1_low(k,j,itypf),bnew1_up(k,j,itypf)
1020 if (mask_bnew2(k,j,itypf).gt.0)
1021 & write (iout,'(2hB2,2i2,3f11.5)') k,j,bnew2(k,j,itypf),
1022 & bnew2_low(k,j,itypf),bnew2_up(k,j,itypf)
1027 if (mask_ccnew(k,j,itypf).gt.0)
1028 & write (iout,'(2hCC,2i2,3f11.5)') k,j,ccnew(k,j,itypf),
1029 & ccnew_low(k,j,itypf),ccnew_up(k,j,itypf)
1034 if (mask_ddnew(k,j,itypf).gt.0)
1035 & write (iout,'(2hDD,2i2,3f11.5)') k,j,ddnew(k,j,itypf),
1036 & ddnew_low(k,j,itypf),ddnew_up(k,j,itypf)
1040 if (mask_e0new(j,itypf).gt.0)
1041 & write (iout,'(2hE0,i2,3f11.5)') j,e0new(j,itypf),
1042 & e0new_low(j,itypf),e0new_up(j,itypf)
1047 if (mask_eenew(l,k,j,itypf).gt.0)
1048 & write (iout,'(2hEE,3i2,3f11.5)')
1049 & l,k,j,eenew(l,k,j,itypf),eenew_low(l,k,j,itypf),
1050 & eenew_up(l,k,j,itypf)
1056 if (mask_fourier(i,itypf).gt.0) then
1057 write (iout,'(1hB,i2,3f11.5)')
1058 & i,b(i,itypf),b_low(i,itypf),b_up(i,itypf)
1067 write (iout,*) "Electrostatic parameters to be optimized"
1070 if (mask_elec(itype1,itype2,1).gt.0)
1071 & write (iout,'(2i3," EPP",f8.3," EPP_LOW",f8.3,
1073 & itype1,itype2,epp(itype1,itype2),epp_low(itype1,itype2),
1074 & epp_up(itype1,itype2)
1075 if (mask_elec(itype1,itype2,2).gt.0)
1076 & write (iout,'(2i3," RPP",f8.3," RPP_LOW",f8.3,
1078 & itype1,itype2,rpp(itype1,itype2),rpp_low(itype1,itype2),
1079 & rpp_up(itype1,itype2)
1080 if (mask_elec(itype1,itype2,3).gt.0)
1081 & write (iout,'(2i3," ELPP6",f8.3," ELPP6_LOW",f8.3,
1082 & " ELPP6_UP",f8.3)')
1083 & itype1,itype2,elpp6(itype1,itype2),
1084 & elpp6_low(itype1,itype2),elpp6_up(itype1,itype2)
1085 if (mask_elec(itype1,itype2,4).gt.0)
1086 & write (iout,'(2i3," ELPP3",f8.3," ELPP3_LOW",f8.3,
1087 & " ELPP3_UP",f8.3)')
1088 & itype1,itype2,elpp3(itype1,itype2),
1089 & elpp3_low(itype1,itype2),elpp3_up(itype1,itype2)
1096 write (iout,*) "SCP parameters to be optimized:"
1097 if (mask_scp(0,1,1)+mask_scp(0,2,1)+mask_scp(0,1,2)+
1098 & mask_scp(0,2,2) .gt. 0) then
1100 & "SCP parameters are assumed to depend on peptide group type only"
1102 if (mask_scp(0,j,1).gt.0)
1103 & write (iout,'(i3," EPSCP",f8.3," EPSCP_LOW",f8.3,
1104 & " EPSCP_UP",f8.3)') j,eps_scp(1,j),epscp_low(0,j),
1106 if (mask_scp(0,j,2).gt.0)
1107 & write (iout,'(i3," RSCP",f8.3," RSCP_LOW",f8.3,
1108 & " RSCP_UP",f8.3)') j,rscp(1,j),rscp_low(0,j),
1114 if (mask_scp(i,j,1).gt.0)
1115 & write (iout,'(2i3," EPSCP",f8.3," EPSCP_LOW",f8.3,
1116 & " EPSCP_UP",f8.3)') i,j,eps_scp(i,j),epscp_low(i,j),
1118 if (mask_scp(i,j,2).gt.0)
1119 & write (iout,'(2i3," RSCP",f8.3," RSCP_LOW",f8.3,
1120 & " RSCP_UP",f8.3)') i,j,rscp(i,j),rscp_low(i,j),
1127 write (iout,*) "MOD_OTHER_PARAMS ",mod_other_params
1128 write (iout,*) "MOD_SIDE ",mod_side," MOD_FOURIER",
1129 & mod_fourier(nloctyp),
1130 & " MOD_ELEC ",mod_elec," MOD_SCP ",mod_scp
1131 init_ene=init_ene .or. mod_other_params
1132 write (iout,*) "init_ene",init_ene
1137 c-----------------------------------------------------------------------------
1138 subroutine read_protein_data(*)
1140 include "DIMENSIONS"
1141 include "DIMENSIONS.ZSCOPT"
1144 integer IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
1145 include "COMMON.MPI"
1147 include "COMMON.CONTROL"
1148 include "COMMON.CHAIN"
1149 include "COMMON.CLASSES"
1150 include "COMMON.COMPAR"
1151 include "COMMON.ENERGIES"
1152 include "COMMON.IOUNITS"
1153 include "COMMON.PROTFILES"
1154 include "COMMON.PROTNAME"
1155 include "COMMON.VMCPAR"
1156 include "COMMON.OPTIM"
1157 include "COMMON.WEIGHTS"
1158 include "COMMON.NAMES"
1159 include "COMMON.ALLPROT"
1160 include "COMMON.THERMAL"
1161 include "COMMON.TIME1"
1162 include "COMMON.WEIGHTDER"
1163 character*64 nazwa,key
1164 character*16000 controlcard
1165 character*16000 all_protfiles
1166 integer i,j,k,kk,l,iprot,ii,if,ib,ibatch,nn,nn1,iww,maskcheck,
1167 & il,inat,ilevel,weightread,jfrag,jclass,nfragm,iparm
1168 integer nrec,nlines,iscor
1169 double precision energ,wangnorm(maxT),wq(maxT),wrms(maxT),
1170 & wrgy(maxT),wsign(maxT),wangnat(maxT),wqnat(maxT),wrmsnat(maxT),
1171 & wrgynat(maxT),wcorangnorm(maxT),wcorq(maxT),
1172 & wcorrms(maxT),wcorrgy(maxT),wcorsign(maxT),wcorangnat(maxT),
1173 & wcorqnat(maxT),wcorrmsnat(maxT),wcorrgynat(maxT),
1174 & angnormlow(maxT),qlow(maxT),rmslow(maxT),
1175 & rgylow(maxT),signlow(maxT),angnatlow(maxT),
1176 & qnatlow(maxT),rmsnatlow(maxT),rgynatlow(maxT),
1177 & angcorlow(maxT),qcorlow(maxT),rmscorlow(maxT),rgycorlow(maxT),
1178 & signcorlow(maxT),angcornatlow(maxT),qcornatlow(maxT),
1179 & rmscornatlow(maxT),rgycornatlow(maxT),signcornatlow(maxT),
1180 & angnormup(maxT),qup(maxT),rmsup(maxT),rgyup(maxT),signup(maxT),
1181 & angnatup(maxT),qnatup(maxT),rmsnatup(maxT),rgynatup(maxT),
1182 & angcorup(maxT),qcorup(maxT),rmscorup(maxT),rgycorup(maxT),
1184 & angcornatup(maxT),qcornatup(maxT),rmscornatup(maxT),
1185 & rgycornatup(maxT),signcornatup(MaxT)
1188 double precision ebia(maxprot),rjunk
1190 character*64 zeros /
1191 &'0000000000000000000000000000000000000000000000000000000000000000'
1194 c print *,"Processor",me," calls read_protein_data"
1196 C Read seventh record: general data of proteins used for calibration
1197 call card_concat(controlcard,.true.)
1198 c write(2, *)controlcard
1199 call readi(controlcard,"NPROT",nprot,0)
1200 pdbref=index(controlcard,"PDBREF").gt.0
1201 print_refstr=index(controlcard,"PRINT_REFSTR").gt.0
1202 if (nprot.eq.0) then
1203 write(iout,*) "Error: at least one protein must be specified."
1209 read (inp,'(a)') protname(iprot)
1211 write (iout,*) "Reading data of protein",iprot," named ",
1213 call card_concat(controlcard,.true.)
1214 call reada(controlcard,"ENECUT_MIN",enecut_min(iprot),15.0d0)
1215 call reada(controlcard,"ENECUT_MAX",enecut_max(iprot),100.0d0)
1216 call reada(controlcard,"ENECUT",enecut(iprot),enecut_min(iprot))
1217 if (enecut(iprot).lt.enecut_min(iprot))
1218 & enecut(iprot)=enecut_min(iprot)
1219 if (enecut_max(iprot).le.enecut_min(iprot))
1220 & enecut_max(iprot)=2*enecut_min(iprot)
1221 write (iout,'(3(a,f9.1))') "ENECUT",enecut(iprot)," ENECUT_MIN",
1222 & enecut_min(iprot)," ENECUT_MAX",enecut_max(iprot)
1223 call readi(controlcard,"HEFAC",hefac(iprot),50)
1224 call readi(controlcard,"HTFAC",htfac(iprot),50)
1225 call readi(controlcard,"HELOW",hemax_low(iprot),20)
1226 call readi(controlcard,"HTLOW",htmax_low(iprot),20)
1227 write (iout,*) "iprot",iprot,
1228 & " hefac",hefac(iprot)," helow",hemax_low(iprot),
1229 & " htfac",htfac(iprot)," htlow",htmax_low(iprot)
1230 c 7/27/2013 AL Read maximum likelihood data
1231 call card_concat(controlcard,.true.)
1232 call readi(controlcard,"NBETA_L",nbeta(1,iprot),0)
1233 write (iout,*) "NBETA_L",nbeta(1,iprot)
1234 caonly(iprot)=index(controlcard,"CAONLY").gt.0
1235 sconly(iprot)=index(controlcard,"SCONLY").gt.0
1236 rmscomp(iprot)=index(controlcard,"RMSCOMP").gt.0
1237 anglecomp(iprot)=index(controlcard,"ANGLECOMP").gt.0
1238 sidecomp(iprot)=index(controlcard,"SIDECOMP").gt.0
1239 call reada(controlcard,"SIGMA",sigma2(iprot),4.0d0)
1240 call reada(controlcard,"SIGMAANG",sigmaang2(iprot),4.0d0)
1241 call reada(controlcard,"SIGMASIDE",sigmaside2(iprot),4.0d0)
1242 write (iout,*) "RMSCOMP",rmscomp(iprot)," SIGMA",sigma2(iprot),
1243 & " CAONLY ",caonly(iprot)," SCONLY",sconly(iprot)
1244 write (iout,*) "ANGLECOMP",anglecomp(iprot),
1245 & " SIGMAANG",sigmaang2(iprot)
1246 write (iout,*) "SIDECOMP",sidecomp(iprot),
1247 & " SIGMASIDE",sigmaside2(iprot)
1248 do ib=1,nbeta(1,iprot)
1249 read(inp,*)betaT(ib,1,iprot),weilik(ib,iprot),
1251 write (iout,*) i,betaT(ib,1,iprot),weilik(ib,iprot),
1254 c 7/27/2013 AL Read heat-capacity data
1255 call card_concat(controlcard,.true.)
1256 call readi(controlcard,"NBETA_CV",nbeta(2,iprot),0)
1257 call reada(controlcard,"WCV",wcv(iprot),1.0d0)
1258 call reada(controlcard,"BASE",heatbase(iprot),0.0d0)
1259 write (iout,*) "NBETA_CV",nbeta(2,iprot)," WCV",wcv(iprot)
1260 do ib=1,nbeta(2,iprot)
1261 read(inp,*) betaT(ib,2,iprot),target_cv(ib,iprot),
1263 weiCv(ib,iprot)=weiCv(ib,iprot)*wcv(iprot)
1264 write (iout,*) betaT(ib,2,iprot),target_cv(ib,iprot),
1267 write (iout,*) "Experimental heat capacity curve"
1268 do ib=1,nbeta(2,iprot)
1269 write (iout,'(f6.2,2f10.5)') betaT(ib,2,iprot),
1270 & target_cv(ib,iprot),weiCv(ib,iprot)
1272 write (iout,'(a,f10.5)') "Baseline",heatbase(iprot)
1274 c Conformation-dependent averages
1275 call card_concat(controlcard,.true.)
1276 call readi(controlcard,"NATLIKE",natlike(iprot),0)
1277 do i=1,natlike(iprot)
1278 call card_concat(controlcard,.true.)
1279 call reada(controlcard,"WNAT",wnat(i,iprot),1.0d0)
1280 call readi(controlcard,"NUMNAT",numnat(i,iprot),1)
1281 call readi(controlcard,"NATDIM",natdim(i,iprot),1)
1282 do ib=1,nbeta(i+2,iprot)
1283 read(inp,*)betaT(ib,i+2,iprot),(weinat(k,ib,i,iprot),
1284 & nuexp(k,ib,i,iprot),k=1,natdim(i,iprot))
1287 do i=1,natlike(iprot)+2
1288 do j=1,nbeta(i,iprot)
1289 betaT(j,i,iprot)=1.0d0/(Rgas*betaT(j,i,iprot))
1290 write (2,*) "R i",i," j",j," beta",betaT(j,i,iprot)
1295 C Read names of files with the data for protein IPROT
1296 call card_concat(controlcard,.false.)
1298 if (iparm.eq.myparm) then
1299 call split_string(controlcard,protfiles(1,iprot),
1300 & maxfile_prot,nfile_prot(iprot))
1302 write(iout,*)"iprot",iprot," nfile",nfile_prot(iprot)
1304 & (protfiles(i,iprot),i=1,nfile_prot(iprot))
1310 c Read molecular information of the protein
1311 call molread_zs(iprot)
1312 c 3/31/04 AL Read the reference structures of protein iprot
1313 c print *,"Calling read_ref_structure"
1314 call read_ref_structure(iprot,*11)
1316 write (iout,*) "Protein",iprot," left READ_REF_STRUCTURE"
1322 c-------------------------------------------------------------------------------
1323 subroutine read_database(*)
1325 include "DIMENSIONS"
1326 include "DIMENSIONS.ZSCOPT"
1329 integer IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
1330 include "COMMON.MPI"
1332 include "COMMON.CHAIN"
1333 include "COMMON.INTERACT"
1334 include "COMMON.CLASSES"
1335 include "COMMON.ENERGIES"
1336 include "COMMON.IOUNITS"
1337 include "COMMON.PROTFILES"
1338 include "COMMON.PROTNAME"
1339 include "COMMON.VMCPAR"
1340 include "COMMON.WEIGHTS"
1341 include "COMMON.NAMES"
1342 include "COMMON.ALLPROT"
1343 include "COMMON.WEIGHTDER"
1344 include "COMMON.VAR"
1345 include "COMMON.SBRIDGE"
1346 include "COMMON.GEO"
1347 include "COMMON.COMPAR"
1348 include "COMMON.OPTIM"
1350 character*16000 controlcard
1351 character*16000 all_protfiles
1352 character*4 liczba,liczba1
1353 integer i,j,jj,jjj,jj_old,icount,k,kk,l,iprot,ii,if,ib,ibatch,
1355 integer ixdrf,iret,itmp
1356 integer nrec,nlines,iscor
1357 double precision energ,t_acq,tcpu
1360 double precision rjunk
1361 integer ntot_all(0:maxprot,0:maxprocs-1)
1363 double precision energia(0:max_ene),etot
1364 real*4 csingle(3,maxres2),reini,refree,rmsdev,prec
1365 integer Previous,Next
1366 c print *,"Processor",me," calls read_protein_data"
1368 if (me.eq.master) then
1369 Previous=MPI_PROC_NULL
1373 if (me.eq.nprocs-1) then
1379 c Set the scratchfile names
1380 write (liczba,'(bz,i4.4)') me
1381 write (liczba1,'(bz,i4.4)') myparm
1383 c 1/27/05 AL Change stored coordinates to single precision and don't store
1384 c energy components in the binary databases.
1385 lenrec(iprot)=12*(nres_zs(iprot)+nct_zs(iprot)-nnt_zs(iprot)+1)
1386 & +4*(2*nss_zs(1,iprot)+1)+8*natlike(iprot)*maxdimnat+16
1387 c 4/13/04 AL Add space for similarity measure
1388 lenrec_ene(iprot) = (2*nntyp+3*n_ene+2)*8
1389 & +8*natlike(iprot)*maxdimnat
1392 write (iout,*) "Protein i"," lenrec",lenrec(iprot)
1393 write (iout,*) "lenrec_ene",lenrec_ene(iprot)
1396 bprotfiles(iprot) = scratchdir(:ilen(scratchdir))//
1397 & "/"//protname(iprot)(:ilen(protname(iprot)))//
1398 & "_par"//liczba1//"_"//liczba//".xbin"
1399 benefiles(iprot) = scratchdir(:ilen(scratchdir))//
1400 & "/"//protname(iprot)(:ilen(protname(iprot)))//
1401 & "_par"//liczba1//"_"//liczba//".enebin"
1402 c write (iout,*) "scratchfile ",
1403 c & bprotfiles(iprot)(:ilen(bprotfiles(iprot)))
1412 call restore_molinfo(iprot)
1413 open (ientout,file=bprotfiles(iprot),status="unknown",
1414 & form="unformatted",access="direct",recl=lenrec(iprot))
1415 open (istat,file=benefiles(iprot),status="unknown",
1416 & form="unformatted",access="direct",recl=lenrec_ene(iprot))
1417 c Read conformations from binary DA files (one per batch) and write them to
1418 c a binary DA scratchfile.
1421 write (liczba,'(bz,i4.4)') me
1423 IF (ME.EQ.MASTER) THEN
1424 c Only the master reads the database; it'll send it to the other procs
1430 do if=1,nfile_prot(iprot)
1431 nazwa=protfiles(if,iprot)
1432 & (:ilen(protfiles(if,iprot)))//".cx"
1434 write (iout,*) "Opening file ",nazwa(:ilen(nazwa))
1436 #if (defined(AIX) && !defined(JUBL))
1437 call xdrfopen_(ixdrf,nazwa, "r", iret)
1439 call xdrfopen(ixdrf,nazwa, "r", iret)
1441 if (iret.eq.0) goto 1111
1445 #if (defined(AIX) && !defined(JUBL))
1446 call xdrf3dfcoord_(ixdrf, csingle, itmp, prec, iret)
1447 if (iret.eq.0) goto 102
1448 call xdrfint_(ixdrf, nss, iret)
1449 if (iret.eq.0) goto 102
1451 call xdrfint_(ixdrf, ihpb(j), iret)
1452 if (iret.eq.0) goto 102
1453 call xdrfint_(ixdrf, jhpb(j), iret)
1454 if (iret.eq.0) goto 102
1456 call xdrffloat_(ixdrf,reini,iret)
1457 if (iret.eq.0) goto 102
1458 call xdrffloat_(ixdrf,refree,iret)
1459 if (iret.eq.0) goto 102
1460 call xdrfint_(ixdrf,natlik,iret)
1461 if (iret.eq.0) goto 102
1463 call xdrfint(ixdrf,natliktemp(j),iret)
1464 if (iret.eq.0) goto 102
1465 do k=1,natliktemp(j)
1466 call xdrffloat(ixdrf,nutemp(k,j),iret)
1467 if (iret.eq.0) goto 102
1471 c write (0,*) "me",me," iprot",iprot," i",i
1472 call xdrf3dfcoord(ixdrf, csingle, itmp, prec, iret)
1473 if (iret.eq.0) goto 102
1474 call xdrfint(ixdrf, nss, iret)
1475 if (iret.eq.0) goto 102
1477 call xdrfint(ixdrf, ihpb(k), iret)
1478 if (iret.eq.0) goto 102
1479 call xdrfint(ixdrf, jhpb(k), iret)
1480 if (iret.eq.0) goto 102
1482 call xdrffloat(ixdrf,reini,iret)
1483 if (iret.eq.0) goto 102
1484 call xdrffloat(ixdrf,refree,iret)
1485 if (iret.eq.0) goto 102
1487 call xdrfint(ixdrf,natlik,iret)
1488 if (iret.eq.0) goto 102
1490 call xdrfint(ixdrf,natliktemp(j),iret)
1491 if (iret.eq.0) goto 102
1492 do k=1,natliktemp(j)
1493 call xdrffloat(ixdrf,nutemp(k,j),iret)
1494 if (iret.eq.0) goto 102
1499 call xdrffloat(ixdrf,rmsdev,iret)
1500 if (iret.eq.0) goto 102
1501 c write (2,*) "rmsdev",rmsdev
1502 call xdrfint(ixdrf,iscor,iret)
1503 if (iret.eq.0) goto 102
1504 c write (2,*) "iscor",iscor
1507 eini(jj+1,iprot)=reini
1508 entfac(jj+1,iprot)=refree
1516 c(l,nres+k)=csingle(l,nres+k-nnt+1)
1520 write (iout,'(5hREAD ,i5,2f15.4)')
1521 & jj+1,eini(jj+1,iprot),entfac(jj+1,iprot)
1522 write (iout,*) "natlik",natlik
1524 write (iout,*) "natliketemp",natliktemp(l)
1525 write(iout,*) (nutemp(k,l),k=1,natliktemp(l))
1527 write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
1528 write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
1531 call add_new_cconf(jjj,jj,jj_old,icount,iprot,
1535 write (iout,*) "Protein ",protname(iprot),
1536 & i-1," conformations read from DA file ",
1537 & nazwa(:ilen(nazwa))
1538 write (iout,*) jj," conformations read so far"
1539 #if (defined(AIX) && !defined(JUBL))
1540 call xdrfclose_(ixdrf,nazwa,iret)
1542 call xdrfclose(ixdrf,nazwa,iret)
1544 c print *,"file ",nazwa(:ilen(nazwa))," closed"
1548 write (iout,*) "jj_old",jj_old," jj",jj
1550 call write_and_send_cconf(icount,jj_old,jj,iprot,Next)
1551 if (icount.gt.0) call MPI_Send(0,1,MPI_INTEGER,Next,570,
1555 call write_and_send_cconf(icount,jj_old,jj,iprot,Next)
1557 t_acq = tcpu() - t_acq
1558 write (iout,*) "Processor",me," protein",iprot,
1559 & " batch",ibatch," time for conformation read/send",t_acq
1562 c A worker gets the confs from the master and sends them to its neighbor
1564 call receive_and_pass_cconf(icount,jj_old,jj,iprot,
1566 t_acq = tcpu() - t_acq
1567 write (iout,*) "Processor",me," protein",iprot,
1569 & " time for conformation receive/send",t_acq
1573 write (iout,*) "Protein",
1574 & protname(iprot)(:ilen(protname(iprot))),", ",ntot(iprot),
1575 & " conformatons read ",ntot(iprot)," conformations written to ",
1576 & bprotfiles(iprot)(:ilen(bprotfiles(iprot)))
1577 ntot(0) = ntot(0)+ntot(iprot)
1582 write(iout,*)"A total of",ntot(0)," conformations read."
1584 c Check if everyone has the same number of conformations
1585 call MPI_Allgather(ntot(0),maxprot+1,MPI_INTEGER,
1586 & ntot_all(0,0),maxprot+1,MPI_INTEGER,MPI_Comm_World,IERROR)
1591 if (ntot(j).ne.ntot_all(j,i)) then
1592 write (iout,*) "Number of conformations at processor",i,
1593 & " for protein",j," differs from that at processor",me,
1594 & ntot(j),ntot_all(j,i)
1601 c----------- Temporary; reading probs from external file
1602 open (88,file='1LE1_wham_last_2.rms',status='old')
1604 read (88,*) ii,weirms(i,1)
1607 write (iout,*) "i",i," weirms",weirms(i,1)
1610 call MPI_Bcast(weirms(1,1), ntot(1), MPI_Double_Precision,
1611 & Master, MPI_COMM_WORLD, IERROR)
1612 c----------- end temportary stuff
1616 write (iout,*) "Number of conformations read by processors"
1617 write (iout,'(10x,7a10)') (protname(i),i=0,nprot)
1620 write (iout,'(8i10)') i,(ntot_all(j,i),j=0,nprot)
1622 write (iout,*) "Calculation terminated."
1628 1111 write(iout,*) "Error opening coordinate file ",nazwa(:ilen(nazwa))
1631 call MPI_Abort(MPI_COMM_WORLD,IERROR,ERRCODE)
1635 c------------------------------------------------------------------------------
1636 subroutine add_new_cconf(jjj,jj,jj_old,icount,iprot,Next)
1638 include "DIMENSIONS"
1639 include "DIMENSIONS.ZSCOPT"
1640 include "COMMON.CHAIN"
1641 include "COMMON.INTERACT"
1642 include "COMMON.LOCAL"
1643 include "COMMON.CLASSES"
1644 include "COMMON.ENERGIES"
1645 include "COMMON.IOUNITS"
1646 include "COMMON.PROTFILES"
1647 include "COMMON.PROTNAME"
1648 include "COMMON.VMCPAR"
1649 include "COMMON.WEIGHTS"
1650 include "COMMON.NAMES"
1651 include "COMMON.ALLPROT"
1652 include "COMMON.WEIGHTDER"
1653 include "COMMON.VAR"
1654 include "COMMON.SBRIDGE"
1655 include "COMMON.GEO"
1656 include "COMMON.COMPAR"
1660 integer i,j,jj,jjj,jj_old,icount,k,kk,l,iprot,ii,ib,ibatch,
1661 & nn,nn1,inan,Next,itj
1662 double precision etot,energia(0:max_ene)
1664 c if (entfac(jj+1,iprot).gt.-10.0d0
1665 c & .or. entfac(jj+1,iprot).lt.-150.0d0) then
1666 c write (iout,*) "Entropy factor out of range for conformation",
1667 c & jjj,entfac(jj+1,iprot),", conformation skipped."
1670 call int_from_cart1(.false.)
1672 if (vbld(j).lt.2.0d0 .or. vbld(j).gt.5.0d0) then
1673 write (iout,*) "nnt",nnt," nct",nct
1674 write (iout,*) "Bad CA-CA bond length",j," ",vbld(j)
1675 write (iout,*) "Bad CA-SC bond length",ii," ",vbld(nres+j)
1676 write (iout,*) "The Cartesian geometry is:"
1677 write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
1678 write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
1679 write (iout,*) "The internal geometry is:"
1680 write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
1681 write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
1682 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
1683 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
1684 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
1685 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
1687 & "This conformation WILL NOT be added to the database."
1693 if (itype(j).ne.10 .and. (vbld(nres+j)-dsc(itj)).gt.2.0d0) then
1694 write (iout,*) "nnt",nnt," nct",nct
1695 write (iout,*) "Bad CA-SC bond length",ii," ",vbld(nres+j)
1696 write (iout,*) "The Cartesian geometry is:"
1697 write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
1698 write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
1699 write (iout,*) "The internal geometry is:"
1700 write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
1701 write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
1702 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
1703 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
1704 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
1705 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
1707 & "This conformation WILL NOT be added to the database."
1712 if (theta(j).le.0.0d0) then
1714 & "Zero theta angle(s) in conformation",ii
1715 write (iout,*) "The Cartesian geometry is:"
1716 write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
1717 write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
1718 write (iout,*) "The internal geometry is:"
1719 write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
1720 write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
1721 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
1722 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
1723 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
1724 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
1726 & "This conformation WILL NOT be added to the database."
1729 if (theta(j).gt.179.97*deg2rad) theta(j)=179.97*deg2rad
1731 if (.not. init_ene) then
1734 etot=etot+ww(j)*enetb(icount+1,j,iprot)
1740 if (isnan(etot).ne.0) inan=1
1742 if (isnan(etot)) inan=1
1746 idumm=proc_proc(etot,inan)
1748 call proc_proc(etot,inan)
1755 write (iout,*) "NaNs detected in some of the energy",
1756 & " components for protein",iprot," batch",ibatch,
1757 & " conformation",jjj
1758 write (iout,*) "etot",etot
1759 write (iout,*) "The Cartesian geometry is:"
1760 write (iout,'(8f10.5)') ((c(j,i),j=1,3),i=1,nres)
1761 write (iout,'(8f10.5)') ((c(j,i+nres),j=1,3),i=nnt,nct)
1762 write (iout,*) "The internal geometry is:"
1763 write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
1764 write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
1765 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
1766 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
1767 write (iout,'(8f10.4)') (vbld(k+nres),k=nnt,nct)
1768 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
1769 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
1770 write (iout,*) "The components of the energy are:"
1773 energia(k)=enetb(jj+1,k,iprot)
1775 call enerprint(energia(0))
1777 & "This conformation WILL NOT be added to the database."
1782 write (iout,'(e15.5,16i5)') entfac(icount+1,iprot),
1783 & iscore(icount+1,0,iprot),ibatch
1784 write (iout,'(8f10.5)') ((c(j,i),j=1,3),i=1,nres)
1785 write (iout,'(8f10.5)') ((c(j,i+nres),j=1,3),i=nnt,nct)
1786 write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
1787 write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
1788 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
1789 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
1790 write (iout,'(8f10.4)') (vbld(k+nres),k=nnt,nct)
1791 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
1792 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
1793 write (iout,'(16i5)') nss,(ihpb(k),jhpb(k),k=1,nss)
1794 write (iout,'(5e15.5)') (enetb(icount+1,j,iprot),j=1,n_ene)
1795 c write (iout,'(2e15.5)') (eneps(1,j,icount+1,iprot),
1796 c & eneps(2,j,icount+1,iprot),j=1,nntyp)
1798 c write (iout,*) "First nu in readrtms"
1801 list_conf(jj,iprot)=jj
1802 call store_cconf_from_file(jj,icount,iprot)
1803 do j=1,natlike(iprot)
1805 if (k.eq.numnat(j,iprot)) then
1806 do l=1,natdim(j,iprot)
1807 nu(l,k,j,iprot)=nutemp(l,k)
1813 c write (iout,*) "End First nu in readrtms"
1815 if (icount.eq.maxstr_proc) then
1817 write (iout,* ) "jj_old",jj_old," jj",jj
1818 write (iout,*) "Calling write_and_send_cconf"
1821 call write_and_send_cconf(icount,jj_old,jj,iprot,Next)
1824 write (iout,*) "Exited write_and_send_cconf"
1832 c------------------------------------------------------------------------------
1833 subroutine store_cconf_from_file(jj,icount,iprot)
1835 include "DIMENSIONS"
1836 include "DIMENSIONS.ZSCOPT"
1837 include "COMMON.CHAIN"
1838 include "COMMON.SBRIDGE"
1839 include "COMMON.INTERACT"
1840 include "COMMON.IOUNITS"
1841 include "COMMON.CLASSES"
1842 include "COMMON.ALLPROT"
1843 include "COMMON.VAR"
1844 integer i,j,jj,icount,ibatch,iprot
1845 c Store the conformation that has been read in
1848 c_zs(j,i,icount,iprot)=c(j,i)
1851 nss_zs(icount,iprot)=nss
1853 ihpb_zs(i,icount,iprot)=ihpb(i)
1854 jhpb_zs(i,icount,iprot)=jhpb(i)
1858 c------------------------------------------------------------------------------
1859 subroutine write_and_send_cconf(icount,jj_old,jj,iprot,Next)
1861 include "DIMENSIONS"
1862 include "DIMENSIONS.ZSCOPT"
1866 include "COMMON.MPI"
1868 include "COMMON.CHAIN"
1869 include "COMMON.SBRIDGE"
1870 include "COMMON.INTERACT"
1871 include "COMMON.IOUNITS"
1872 include "COMMON.CLASSES"
1873 include "COMMON.VAR"
1874 include "COMMON.ALLPROT"
1875 include "COMMON.ENERGIES"
1876 include "COMMON.WEIGHTDER"
1877 include "COMMON.OPTIM"
1878 include "COMMON.COMPAR"
1879 integer icount,jj_old,jj,Next,iprot
1880 c Write the structures to a scratch file
1882 c Master sends the portion of conformations that have been read in to the neighbor
1884 write (iout,*) "Processor",me," entered WRITE_AND_SEND_CONF"
1887 call MPI_Send(icount,1,MPI_INTEGER,Next,570,WHAM_COMM,IERROR)
1889 write (iout,*) "Processor",me," Next",next," sent icount=",icount
1890 write (iout,*) "Processor",me," jj_old",jj_old," jj",jj
1893 if (icount.gt.0) then
1894 call MPI_Send(nss_zs(1,iprot),icount,MPI_INTEGER,
1895 & Next,571,WHAM_COMM,IERROR)
1896 call MPI_Send(ihpb_zs(1,1,iprot),icount,MPI_INTEGER,
1897 & Next,572,WHAM_COMM,IERROR)
1898 if (.not. init_ene) call MPI_Send(enetb(jj_old,1,iprot),
1900 & MPI_DOUBLE_PRECISION,Next,576,WHAM_COMM,IERROR)
1901 call MPI_Send(nu(1,1,jj_old,iprot),
1902 & maxdimnat*natlike(iprot)*icount,
1903 & MPI_DOUBLE_PRECISION,
1904 & Next,577,WHAM_COMM,IERROR)
1905 call MPI_Send(eini(jj_old,iprot),icount,
1906 & MPI_DOUBLE_PRECISION,Next,578,WHAM_COMM,IERROR)
1907 call MPI_Send(entfac(jj_old,iprot),icount,MPI_DOUBLE_PRECISION,
1908 & Next,579,WHAM_COMM,IERROR)
1909 call MPI_Send(c_zs(1,1,1,iprot),3*icount*maxres2,
1910 & MPI_REAL,Next,580,WHAM_COMM,IERROR)
1911 if (.not. init_ene) call MPI_Send(eneps(1,1,1,iprot),
1913 & MPI_DOUBLE_PRECISION,Next,582,WHAM_COMM,IERROR)
1917 call dawrite_ccoords(iprot,jj_old,jj,ientout)
1918 call dawrite_ene(iprot,jj_old,jj,istat)
1921 c------------------------------------------------------------------------------
1923 subroutine receive_and_pass_cconf(icount,jj_old,jj,iprot,Previous,
1926 include "DIMENSIONS"
1927 include "DIMENSIONS.ZSCOPT"
1929 integer IERROR,STATUS(MPI_STATUS_SIZE)
1930 include "COMMON.MPI"
1931 include "COMMON.CHAIN"
1932 include "COMMON.SBRIDGE"
1933 include "COMMON.INTERACT"
1934 include "COMMON.IOUNITS"
1935 include "COMMON.CLASSES"
1936 include "COMMON.ALLPROT"
1937 include "COMMON.ENERGIES"
1938 include "COMMON.VAR"
1939 include "COMMON.GEO"
1940 include "COMMON.WEIGHTDER"
1941 include "COMMON.COMPAR"
1942 include "COMMON.OPTIM"
1943 integer i,j,k,icount,jj_old,jj,iprot,Previous,Next
1946 write (iout,*) "Processor",me," entered RECEIVE_AND_PASS_CONF"
1949 do while (icount.gt.0)
1950 c call MPI_Probe(Previous,570,WHAM_COMM,STATUS,IERROR)
1951 call MPI_Recv(icount,1,MPI_INTEGER,Previous,570,WHAM_COMM,
1954 write (iout,*)"Processor",me," previous",previous," icount",icount
1957 call MPI_Send(icount,1,MPI_INTEGER,Next,570,WHAM_COMM,
1960 write (iout,*) "Processor",me," icount",icount
1963 if (icount.eq.0) return
1964 call MPI_Recv(nss_zs(1,iprot),icount,MPI_INTEGER,
1965 & Previous,571,WHAM_COMM,STATUS,IERROR)
1966 call MPI_Send(nss_zs(1,iprot),icount,MPI_INTEGER,
1967 & Next,571,WHAM_COMM,IERROR)
1968 call MPI_Recv(ihpb_zs(1,1,iprot),icount,MPI_INTEGER,
1969 & Previous,572,WHAM_COMM,STATUS,IERROR)
1970 call MPI_Send(ihpb_zs(1,1,iprot),icount,MPI_INTEGER,
1971 & Next,572,WHAM_COMM,IERROR)
1972 if (.not. init_ene) then
1973 call MPI_Recv(enetb(jj_old,1,iprot),maxstr*n_ene,
1974 & MPI_DOUBLE_PRECISION,Previous,576,WHAM_COMM,STATUS,IERROR)
1975 call MPI_Send(enetb(jj_old,1,iprot),maxstr*n_ene,
1976 & MPI_DOUBLE_PRECISION,Next,576,WHAM_COMM,STATUS,IERROR)
1978 call MPI_Recv(nu(1,1,jj_old,iprot),
1979 & maxdimnat*natlike(iprot)*icount,
1980 & MPI_DOUBLE_PRECISION,
1981 & Previous,577,WHAM_COMM,STATUS,IERROR)
1982 call MPI_Send(nu(1,1,jj_old,iprot),
1983 & maxdimnat*natlike(iprot)*icount,
1984 & MPI_DOUBLE_PRECISION,
1985 & Next,577,WHAM_COMM,IERROR)
1986 call MPI_Recv(eini(jj_old,iprot),icount,
1987 & MPI_DOUBLE_PRECISION,Previous,578,WHAM_COMM,STATUS,IERROR)
1988 call MPI_Send(eini(jj_old,iprot),icount,
1989 & MPI_DOUBLE_PRECISION,Next,578,WHAM_COMM,IERROR)
1990 call MPI_Recv(entfac(jj_old,iprot),icount,MPI_DOUBLE_PRECISION,
1991 & Previous,579,WHAM_COMM,STATUS,IERROR)
1992 call MPI_Send(entfac(jj_old,iprot),icount,MPI_DOUBLE_PRECISION,
1993 & Next,579,WHAM_COMM,IERROR)
1994 call MPI_Recv(c_zs(1,1,1,iprot),3*icount*maxres2,
1995 & MPI_REAL,Previous,580,WHAM_COMM,STATUS,IERROR)
1996 call MPI_Send(c_zs(1,1,1,iprot),3*icount*maxres2,
1997 & MPI_REAL,Next,580,WHAM_COMM,IERROR)
1998 if (.not. init_ene) then
1999 call MPI_Recv(eneps(1,1,1,iprot),2*icount*nntyp,
2000 & MPI_DOUBLE_PRECISION,Previous,582,WHAM_COMM,STATUS,IERROR)
2001 call MPI_Send(eneps(1,1,1,iprot),2*icount*nntyp,
2002 & MPI_DOUBLE_PRECISION,Next,582,WHAM_COMM,IERROR)
2006 list_conf(i,iprot)=i
2008 call dawrite_ccoords(iprot,jj_old,jj,ientout)
2009 call dawrite_ene(iprot,jj_old,jj,istat)
2012 write (iout,*) "Protein",iprot
2013 write (iout,*) "Processor",me," received",icount," conformations"
2015 write (iout,'(8f10.4)') ((c_zs(l,k,i,iprot),l=1,3,k=1,nres)
2016 write (iout,'(8f10.4)')((c_zs(l,k,i+nres,iprot),l=1,3,k=nnt,nct)
2017 write (iout,'(16i5)') nss_zs(i,iprot),(ihpb_zs(k,i,iprot),
2018 & jhpb_zs(k,i,iprot),k=1,nss_zs(i,iprot))
2019 write (iout,'(5e15.5)') (enetb(i,j,iprot),j=1,n_ene)
2020 write (iout,'(2e15.5)') (eneps(1,j,i,iprot),
2021 & eneps(2,j,i,iprot),j=1,nntyp)
2022 write (iout,'(e15.5,16i5)') entfac(i),iscore(i,0,iprot),
2030 c------------------------------------------------------------------------------
2031 subroutine read_thermal
2033 include "DIMENSIONS"
2034 include "DIMENSIONS.ZSCOPT"
2035 include "COMMON.CHAIN"
2036 include "COMMON.SBRIDGE"
2037 include "COMMON.INTERACT"
2038 include "COMMON.IOUNITS"
2039 include "COMMON.CLASSES"
2040 include "COMMON.VAR"
2041 include "COMMON.THERMAL"
2042 character*800 controlcard
2043 call card_concat(controlcard,.true.)
2044 call readi(controlcard,"NGRIDT",NGridT,200)
2045 call reada(controlcard,"DELTAT",deltaT,5.0d0)
2046 call reada(controlcard,"T0",GridT0,2.0d2)
2047 write (iout,*) "Parameters of thermal curves"
2048 write (iout,*) "NGRIDT",NGridT," DELTAT",deltaT," T0",GridT0
2051 c------------------------------------------------------------------------------
2052 subroutine daread_ene(iprot,istart_conf,iend_conf)
2054 include "DIMENSIONS"
2055 include "DIMENSIONS.ZSCOPT"
2058 include "COMMON.MPI"
2060 include "COMMON.CHAIN"
2061 include "COMMON.CLASSES"
2062 include "COMMON.ENERGIES"
2063 include "COMMON.IOUNITS"
2064 include "COMMON.PROTFILES"
2065 include "COMMON.ALLPROT"
2066 include "COMMON.WEIGHTDER"
2067 include "COMMON.COMPAR"
2068 include "COMMON.VMCPAR"
2069 integer iprot,istart_conf,iend_conf
2070 integer i,ii,iii,j,k
2072 write (iout,*) "Calling DAREAD_ENE"
2074 c write (iout,*) "Reading: n_ene",n_ene
2076 c write (iout,*) "DAREAD_ENE",istart_conf,iend_conf
2078 c Read conformations off a DA scratchfile.
2080 do ii=istart_conf,iend_conf
2081 iii=list_conf(ii,iprot)
2082 i = ii - istart_conf + 1
2083 read(ientin,rec=iii) (enetb(i,j,iprot),j=1,n_ene),
2084 & (enetb_orig(i,j,iprot),j=1,n_ene),
2085 & (enetb_oorig(i,j,iprot),j=1,n_ene),
2086 & eini(ii,iprot),entfac(ii,iprot),
2087 & (eneps(1,j,i,iprot),eneps(2,j,i,iprot),j=1,nntyp),
2088 & ((nu(k,j,i,iprot),k=1,maxdimnat),j=1,natlike(iprot))
2090 write (iout,'(3i5,3e15.4,i5,i10)') ii,iii,i,eini(ii,iprot),
2092 write (iout,'(20(1pe12.4)') (enetb(i,j,iprot),j=1,n_ene)
2093 write (iout,'(18(1pe12.4))')
2094 & ((nu(k,j,i,iprot)k=1,maxdimnat),j=1,natlike(iprot))
2101 c------------------------------------------------------------------------------
2102 subroutine dawrite_ene(iprot,istart_conf,iend_conf,unit_out)
2104 include "DIMENSIONS"
2105 include "DIMENSIONS.ZSCOPT"
2108 include "COMMON.MPI"
2110 include "COMMON.CHAIN"
2111 include "COMMON.CLASSES"
2112 include "COMMON.ENERGIES"
2113 include "COMMON.IOUNITS"
2114 include "COMMON.PROTFILES"
2115 include "COMMON.ALLPROT"
2116 include "COMMON.WEIGHTDER"
2117 include "COMMON.VMCPAR"
2118 include "COMMON.COMPAR"
2119 integer iprot,istart_conf,iend_conf,unit_out
2120 integer i,ii,iii,j,k
2121 c write (iout,*) "Writing: n_ene",n_ene
2123 c write (iout,*) "DAWRITE_ENE",istart_conf,iend_conf
2125 c Write conformations to a DA scratchfile.
2127 do ii=istart_conf,iend_conf
2128 iii=list_conf(ii,iprot)
2129 i = ii - istart_conf + 1
2130 write(unit_out,rec=iii) (enetb(i,j,iprot),j=1,n_ene),
2131 & (enetb_orig(i,j,iprot),j=1,n_ene),
2132 & (enetb_oorig(i,j,iprot),j=1,n_ene),
2133 & eini(ii,iprot),entfac(ii,iprot),
2134 & (eneps(1,j,i,iprot),eneps(2,j,i,iprot),j=1,nntyp),
2135 & ((nu(k,j,i,iprot),k=1,maxdimnat),j=1,natlike(iprot))
2137 write (iout,'(3i5,3e15.4,i5,i10)') ii,iii,i,eini(ii,iprot),
2139 write (iout,'(20(1pe12.4)') (enetb(i,j,iprot),j=1,n_ene)
2140 write (iout,'(18(1pe12.4))')
2141 & ((nu(kj,i,iprot),k=1,maxdimnat),j=1,natlike(iprot))
2148 c------------------------------------------------------------------------------
2149 subroutine daread_ccoords(iprot,istart_conf,iend_conf)
2151 include "DIMENSIONS"
2152 include "DIMENSIONS.ZSCOPT"
2155 include "COMMON.MPI"
2157 include "COMMON.CHAIN"
2158 include "COMMON.CLASSES"
2159 include "COMMON.ENERGIES"
2160 include "COMMON.IOUNITS"
2161 include "COMMON.PROTFILES"
2162 include "COMMON.ALLPROT"
2163 include "COMMON.INTERACT"
2164 include "COMMON.VAR"
2165 include "COMMON.SBRIDGE"
2166 include "COMMON.GEO"
2167 include "COMMON.COMPAR"
2168 include "COMMON.VMCPAR"
2169 include "COMMON.WEIGHTDER"
2170 integer iprot,istart_conf,iend_conf
2171 integer i,j,k,ij,ii,iii
2173 real*4 csingle(3,maxres2)
2174 character*16 form,acc
2177 c Read conformations off a DA scratchfile.
2180 write (iout,*) "DAREAD_COORDS"
2181 write (iout,*) "istart_conf",istart_conf," iend_conf",iend_conf
2182 write (iout,*) "lenrec",lenrec(iprot)
2183 inquire(unit=ientin,name=nam,recl=len,form=form,access=acc)
2184 write (iout,*) "len=",len," form=",form," acc=",acc
2185 write (iout,*) "nam=",nam
2188 do ii=istart_conf,iend_conf
2189 iii=list_conf(ii,iprot)
2190 ij = ii - istart_conf + 1
2192 write (iout,*) "Reading binary file, record",iii," ii",ii
2195 read(icbase,rec=iii) ((csingle(j,i),j=1,3),i=1,nres),
2196 & ((csingle(j,i),j=1,3),i=nnt+nres,nct+nres),
2197 & nss,(ihpb(i),jhpb(i),i=1,nss),eini(ii,iprot),
2199 & ((nu(k,i,ij,iprot),k=1,maxdimnat),i=1,natlike(iprot))
2206 write (iout,*) "iprot",iprot," ii",ii
2207 write (iout,'(8f10.5)') ((c(j,i),j=1,3),i=1,nres)
2208 write (iout,'(8f10.4)') ((c(j,i),j=1,3),i=nnt+nres,nct+nres)
2209 write (iout,'(2e15.5)') eini(ii,iprot),entfac(ii,iprot)
2210 write (iout,'(16i5)') nss,(ihpb(i),jhpb(i),i=1,nss)
2213 call store_ccoords(iprot,ii-istart_conf+1)
2217 c------------------------------------------------------------------------------
2218 subroutine dawrite_ccoords(iprot,istart_conf,iend_conf,unit_out)
2220 include "DIMENSIONS"
2221 include "DIMENSIONS.ZSCOPT"
2224 include "COMMON.MPI"
2226 include "COMMON.CHAIN"
2227 include "COMMON.INTERACT"
2228 include "COMMON.CLASSES"
2229 include "COMMON.ENERGIES"
2230 include "COMMON.IOUNITS"
2231 include "COMMON.PROTFILES"
2232 include "COMMON.ALLPROT"
2233 include "COMMON.VAR"
2234 include "COMMON.SBRIDGE"
2235 include "COMMON.GEO"
2236 include "COMMON.COMPAR"
2237 include "COMMON.WEIGHTDER"
2238 include "COMMON.VMCPAR"
2239 real*4 csingle(3,maxres2)
2240 integer iprot,istart_conf,iend_conf
2241 integer i,j,k,ii,ij,iii,unit_out
2243 character*16 form,acc
2246 c Write conformations to a DA scratchfile.
2249 write (iout,*) "DAWRITE_COORDS"
2250 write (iout,*) "istart_conf",istart_conf," iend_conf",iend_conf
2251 write (iout,*) "lenrec",lenrec(iprot)
2252 inquire(unit=unit_out,name=nam,recl=len,form=form,access=acc)
2253 write (iout,*) "len=",len," form=",form," acc=",acc
2254 write (iout,*) "nam=",nam
2257 do ii=istart_conf,iend_conf
2258 iii=list_conf(ii,iprot)
2259 ij = ii - istart_conf + 1
2260 call restore_ccoords(iprot,ii-istart_conf+1)
2262 write (iout,*) "Writing binary file, record",iii," ii",ii
2270 write(unit_out,rec=iii) ((csingle(j,i),j=1,3),i=1,nres),
2271 & ((csingle(j,i),j=1,3),i=nnt+nres,nct+nres),
2272 & nss,(ihpb(i),jhpb(i),i=1,nss),eini(ii,iprot),
2274 & ((nu(k,i,ij,iprot),k=1,maxdimnat),i=1,natlike(iprot))
2276 write (iout,*) "kbatch",kbatch(ii,iprot)," iscore",
2277 & iscore(ii,0,iprot)
2278 write (iout,'(8f10.5)') ((c(j,i),j=1,3),i=1,nres)
2279 write (iout,'(8f10.4)') ((c(j,i),j=1,3),i=nnt+nres,nct+nres)
2280 write (iout,'(2e15.5)') eini(ii,iprot),entfac(ii,iprot)
2281 write (iout,'(16i5)') nss,(ihpb(i),jhpb(i),i=1,nss)
2287 c------------------------------------------------------------------------------
2288 subroutine store_ccoords(iprot,ii)
2290 include "DIMENSIONS"
2291 include "DIMENSIONS.ZSCOPT"
2292 include "COMMON.VAR"
2293 include "COMMON.CHAIN"
2294 include "COMMON.ALLPROT"
2295 include "COMMON.IOUNITS"
2296 include "COMMON.GEO"
2297 include "COMMON.SBRIDGE"
2298 double precision thetnorm
2299 integer iprot,i,j,ii
2300 do i=1,nres_zs(iprot)
2302 c_zs(j,i,ii,iprot)=c(j,i)
2305 do i=nnt_zs(iprot),nct_zs(iprot)
2307 c_zs(j,i+nres,ii,iprot)=c(j,i+nres)
2310 c 5/7/02 AL: store sbridge info
2311 nss_zs(ii,iprot)=nss
2313 ihpb_zs(i,ii,iprot)=ihpb(i)
2314 jhpb_zs(i,ii,iprot)=jhpb(i)
2318 c------------------------------------------------------------------------------
2319 subroutine restore_ccoords(iprot,ii)
2321 include "DIMENSIONS"
2322 include "DIMENSIONS.ZSCOPT"
2323 include "COMMON.INTERACT"
2324 include "COMMON.VAR"
2325 include "COMMON.ALLPROT"
2326 include "COMMON.SBRIDGE"
2327 include "COMMON.CHAIN"
2328 include "COMMON.IOUNITS"
2329 integer iprot,i,j,ii
2330 do i=1,nres_zs(iprot)
2332 c(j,i)=c_zs(j,i,ii,iprot)
2335 do i=nnt_zs(iprot),nct_zs(iprot)
2337 c(j,i+nres)=c_zs(j,i+nres,ii,iprot)
2340 c 5/7/02 AL: restore sbridge info
2341 nss=nss_zs(ii,iprot)
2343 ihpb(i)=ihpb_zs(i,ii,iprot)+nres
2344 jhpb(i)=jhpb_zs(i,ii,iprot)+nres
2349 write (iout,*) "restore_ccoords",ii
2350 write (iout,'(8f10.5)') ((c(j,i),j=1,3),i=1,nres)
2351 write (iout,'(8f10.4)') ((c(j,i),j=1,3),i=nnt+nres,nct+nres)
2352 write (iout,'(16i5)') nss,(ihpb(i),jhpb(i),i=1,nss)
2357 c------------------------------------------------------------------------------
2358 subroutine card_concat(card,to_upper)
2360 include 'DIMENSIONS.ZSCOPT'
2361 include "COMMON.IOUNITS"
2363 character*80 karta,ucase
2367 read (inp,'(a)') karta
2368 if (to_upper) karta=ucase(karta)
2370 do while (karta(80:80).eq.'&')
2371 card=card(:ilen(card)+1)//karta(:79)
2372 read (inp,'(a)') karta
2373 if (to_upper) karta=ucase(karta)
2375 card=card(:ilen(card)+1)//karta
2378 c------------------------------------------------------------------------------
2379 subroutine readi(rekord,lancuch,wartosc,default)
2381 character*(*) rekord,lancuch
2382 integer wartosc,default
2385 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
2386 if (iread.eq.0) then
2390 iread=iread+ilen(lancuch)+1
2391 read (rekord(iread:),*) wartosc
2394 c----------------------------------------------------------------------------
2395 subroutine reada(rekord,lancuch,wartosc,default)
2397 character*(*) rekord,lancuch
2399 double precision wartosc,default
2402 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
2403 if (iread.eq.0) then
2407 iread=iread+ilen(lancuch)+1
2408 read (rekord(iread:),*) wartosc
2411 c----------------------------------------------------------------------------
2412 subroutine multreadi(rekord,lancuch,tablica,dim,default)
2415 integer tablica(dim),default
2416 character*(*) rekord,lancuch
2423 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
2424 if (iread.eq.0) return
2425 iread=iread+ilen(lancuch)+1
2426 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
2429 c----------------------------------------------------------------------------
2430 subroutine multreada(rekord,lancuch,tablica,dim,default)
2433 double precision tablica(dim),default
2434 character*(*) rekord,lancuch
2441 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
2442 if (iread.eq.0) return
2443 iread=iread+ilen(lancuch)+1
2444 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
2447 c----------------------------------------------------------------------------
2448 subroutine reads(rekord,lancuch,wartosc,default)
2450 character*(*) rekord,lancuch,wartosc,default
2452 integer ilen,lenlan,lenrec,iread,ireade
2456 lenlan=ilen(lancuch)
2458 iread=index(rekord,lancuch(:lenlan)//"=")
2459 c print *,"rekord",rekord," lancuch",lancuch
2460 c print *,"iread",iread," lenlan",lenlan," lenrec",lenrec
2461 if (iread.eq.0) then
2465 iread=iread+lenlan+1
2466 c print *,"iread",iread
2467 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
2468 do while (iread.le.lenrec .and. iblnk(rekord(iread:iread)))
2470 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
2472 c print *,"iread",iread
2473 if (iread.gt.lenrec) then
2478 c print *,"ireade",ireade
2479 do while (ireade.lt.lenrec .and.
2480 & .not.iblnk(rekord(ireade:ireade)))
2483 wartosc=rekord(iread:ireade)
2486 c----------------------------------------------------------------------------
2487 subroutine multreads(rekord,lancuch,tablica,dim,default)
2490 character*(*) rekord,lancuch,tablica(dim),default
2492 integer ilen,lenlan,lenrec,iread,ireade
2499 lenlan=ilen(lancuch)
2501 iread=index(rekord,lancuch(:lenlan)//"=")
2502 c print *,"rekord",rekord," lancuch",lancuch
2503 c print *,"iread",iread," lenlan",lenlan," lenrec",lenrec
2504 if (iread.eq.0) return
2505 iread=iread+lenlan+1
2507 c print *,"iread",iread
2508 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
2509 do while (iread.le.lenrec .and. iblnk(rekord(iread:iread)))
2511 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
2513 c print *,"iread",iread
2514 if (iread.gt.lenrec) return
2516 c print *,"ireade",ireade
2517 do while (ireade.lt.lenrec .and.
2518 & .not.iblnk(rekord(ireade:ireade)))
2521 tablica(i)=rekord(iread:ireade)
2525 c----------------------------------------------------------------------------
2526 subroutine split_string(rekord,tablica,dim,nsub)
2528 integer dim,nsub,i,ii,ll,kk
2529 character*(*) tablica(dim)
2530 character*(*) rekord
2540 C Find the start of term name
2542 do while (ii.le.ll .and. rekord(ii:ii).eq." ")
2545 C Parse the name into TABLICA(i) until blank found
2546 do while (ii.le.ll .and. rekord(ii:ii).ne." ")
2548 tablica(i)(kk:kk)=rekord(ii:ii)
2551 if (kk.gt.0) nsub=nsub+1
2552 if (ii.gt.ll) return
2556 c-------------------------------------------------------------------------------
2557 integer function iroof(n,m)
2559 if (ii*m .lt. n) ii=ii+1