1 subroutine read_coords(ncon,*)
7 integer IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
10 include "COMMON.CONTROL"
11 include "COMMON.CHAIN"
12 include "COMMON.INTERACT"
13 include "COMMON.IOUNITS"
15 include "COMMON.SBRIDGE"
17 include "COMMON.CLUSTER"
20 integer i,j,jj,jjj,jj_old,icount,k,kk,l,ii,if,ib,
22 integer ixdrf,iret,itmp
23 real*4 prec,reini,refree,rmsdev
24 integer nrec,nlines,iscor,lenrec,lenrec_in
25 double precision energ,t_acq,tcpu
28 double precision rjunk
29 integer ntot_all(0:maxprocs-1)
31 double precision energia(0:max_ene),etot
32 real*4 csingle(3,maxres2+2)
34 character*256 bprotfiles
35 c print *,"Processor",me," calls read_protein_data"
37 if (me.eq.master) then
38 Previous=MPI_PROC_NULL
42 if (me.eq.nprocs-1) then
47 c Set the scratchfile names
48 write (liczba,'(bz,i3.3)') me
50 c 1/27/05 AL Change stored coordinates to single precision and don't store
51 c energy components in the binary databases.
52 lenrec=12*(nres+nct-nnt+1)+4*(2*nss+2)+16
53 lenrec_in=12*(nres+nct-nnt+1)+4*(2*nss+2)+24
55 write (iout,*) "nres",nres," nnt",nnt," nct",nct," nss", nss
56 write (iout,*) "lenrec_in",lenrec_in
58 bprotfiles=scratchdir(:ilen(scratchdir))//
59 & "/"//prefix(:ilen(prefix))//liczba//".xbin"
64 if (from_cart .and. .not. from_bx .and. .not. from_cx) then
66 read (intin,*,end=13,err=11) energy(icon),totfree(icon),
68 & nss_all(icon),(ihpb_all(ii,icon),jhpb_all(i,icon),
69 & i=1,nss_all(icon)),iscore(icon)
71 read (intin,*,end=13,err=11) energy(icon),rmstb(icon),
72 & nss_all(icon),(ihpb_all(ii,icon),jhpb_all(i,icon),
73 & i=1,nss_all(icon)),iscore(icon)
75 read (intin,'(8f10.5)',end=13,err=10)
76 & ((allcart(j,i,icon),j=1,3),i=1,nres),
77 & ((allcart(j,i+nres,icon),j=1,3),i=nnt,nct)
78 print *,icon,energy(icon),nss_all(icon),rmstb(icon)
80 read(intin,'(a80)',end=13,err=12) lineh
81 read(lineh(:5),*,err=8) ic
83 read(lineh(6:),*,err=8) energy(icon)
85 read(lineh(6:),*,err=8) energy(icon)
89 print *,'error, assuming e=1d10',lineh
93 cold read(lineh(18:),*,end=13,err=11) nss_all(icon)
94 ii = index(lineh(15:)," ")+15
95 read(lineh(ii:),*,end=13,err=11) nss_all(icon)
96 IF (NSS_all(icon).LT.9) THEN
97 read (lineh(20:),*,end=102)
98 & (IHPB_all(I,icon),JHPB_all(I,icon),I=1,NSS_all(icon)),
101 read (lineh(20:),*,end=102)
102 & (IHPB_all(I,icon),JHPB_all(I,icon),I=1,8)
103 read (intin,*) (IHPB_all(I,icon),JHPB_all(I,icon),
104 & I=9,NSS_all(icon)),iscore(icon)
109 PRINT *,'IC:',IC,' ENERGY:',ENERGY(ICON)
110 call read_angles(intin,*13)
112 phiall(i,icon)=phi(i)
113 thetall(i,icon)=theta(i)
114 alphall(i,icon)=alph(i)
115 omall(i,icon)=omeg(i)
121 C CALCULATE DISTANCES
123 10 print *,'something wrong with angles'
125 11 print *,'something wrong with NSS',nss
127 12 print *,'something wrong with header'
134 open (icbase,file=bprotfiles,status="unknown",
135 & form="unformatted",access="direct",recl=lenrec)
136 c Read conformations from binary DA files (one per batch) and write them to
137 c a binary DA scratchfile.
141 write (liczba,'(bz,i3.3)') me
142 IF (ME.EQ.MASTER) THEN
143 c Only the master reads the database; it'll send it to the other procs
151 open (intin,file=intinname,status="old",form="unformatted",
152 & access="direct",recl=lenrec_in)
154 else if (from_cx) then
155 #if (defined(AIX) && !defined(JUBL))
156 call xdrfopen_(ixdrf,intinname, "r", iret)
158 call xdrfopen(ixdrf,intinname, "r", iret)
161 write (iout,*) "xdrfopen: iret",iret
163 write (iout,*) "Error: coordinate file ",
164 & intinname(:ilen(intinname))," does not exist."
167 call MPI_ABORT(MPI_COMM_WORLD,IERROR,ERRCODE)
172 write (iout,*) "Error: coordinate format not specified"
175 call MPI_ABORT(MPI_COMM_WORLD,IERROR,ERRCODE)
183 write (iout,*) "Opening file ",intinname(:ilen(intinname))
184 write (iout,*) "lenrec",lenrec_in
188 c write (iout,*) "maxconf",maxconf
192 if (i.gt.maxconf) then
193 write (iout,*) "Error: too many conformations ",
194 & "(",maxconf,") maximum."
196 call MPI_Abort(MPI_COMM_WORLD,errcode,ierror)
200 c write (iout,*) "i",i
203 read(intin,err=101,end=101)
204 & ((csingle(l,k),l=1,3),k=1,nres),
205 & ((csingle(l,k+nres),l=1,3),k=nnt,nct),
206 & nss,(ihpb(k),jhpb(k),k=1,nss),
208 & entfac(jj+1),rmstb(jj+1),iscor
215 #if (defined(AIX) && !defined(JUBL))
216 call xdrf3dfcoord_(ixdrf, csingle, itmp, prec, iret)
217 if (iret.eq.0) goto 101
218 call xdrfint_(ixdrf, nss, iret)
219 if (iret.eq.0) goto 101
221 call xdrfint_(ixdrf, ihpb(j), iret)
222 if (iret.eq.0) goto 101
223 call xdrfint_(ixdrf, jhpb(j), iret)
224 if (iret.eq.0) goto 101
226 call xdrffloat_(ixdrf,reini,iret)
227 if (iret.eq.0) goto 101
228 call xdrffloat_(ixdrf,refree,iret)
229 if (iret.eq.0) goto 101
230 call xdrffloat_(ixdrf,rmsdev,iret)
231 if (iret.eq.0) goto 101
232 call xdrfint_(ixdrf,iscor,iret)
233 if (iret.eq.0) goto 101
235 c write (iout,*) "calling xdrf3dfcoord"
236 call xdrf3dfcoord(ixdrf, csingle, itmp, prec, iret)
237 c write (iout,*) "iret",iret
239 if (iret.eq.0) goto 101
240 call xdrfint(ixdrf, nss, iret)
241 c write (iout,*) "iret",iret
242 c write (iout,*) "nss",nss
244 if (iret.eq.0) goto 101
246 call xdrfint(ixdrf, ihpb(k), iret)
247 if (iret.eq.0) goto 101
248 call xdrfint(ixdrf, jhpb(k), iret)
249 if (iret.eq.0) goto 101
251 call xdrffloat(ixdrf,reini,iret)
252 if (iret.eq.0) goto 101
253 call xdrffloat(ixdrf,refree,iret)
254 if (iret.eq.0) goto 101
255 call xdrffloat(ixdrf,rmsdev,iret)
256 if (iret.eq.0) goto 101
257 call xdrfint(ixdrf,iscor,iret)
258 if (iret.eq.0) goto 101
270 c(l,nres+k)=csingle(l,nres+k-nnt+1)
275 write (iout,'(5hREAD ,i5,3f15.4,i10)')
276 & jj+1,energy(jj+1),entfac(jj+1),
278 write (iout,*) "Conformation",jjj+1,jj+1
279 write (iout,'(8f10.5)') ((c(j,i),j=1,3),i=1,nres)
280 write (iout,'(8f10.5)') ((c(j,i+nres),j=1,3),i=nnt,nct)
283 call add_new_cconf(jjj,jj,jj_old,icount,Next)
286 write (iout,*) i-1," conformations read from DA file ",
287 & intinname(:ilen(intinname))
288 write (iout,*) jj," conformations read so far"
292 #if (defined(AIX) && !defined(JUBL))
293 call xdrfclose_(ixdrf, iret)
295 call xdrfclose(ixdrf, iret)
300 write (iout,*) "jj_old",jj_old," jj",jj
302 call write_and_send_cconf(icount,jj_old,jj,Next)
303 call MPI_Send(0,1,MPI_INTEGER,Next,570,
304 & MPI_COMM_WORLD,IERROR)
307 call write_and_send_cconf(icount,jj_old,jj,Next)
309 t_acq = tcpu() - t_acq
311 write (iout,*) "Processor",me,
312 & " time for conformation read/send",t_acq
314 c A worker gets the confs from the master and sends them to its neighbor
316 call receive_and_pass_cconf(icount,jj_old,jj,
318 t_acq = tcpu() - t_acq
325 write(iout,*)"A total of",ncon," conformations read."
328 c Check if everyone has the same number of conformations
329 call MPI_Allgather(ncon,1,MPI_INTEGER,
330 & ntot_all(0),1,MPI_INTEGER,MPI_Comm_World,IERROR)
334 if (ncon.ne.ntot_all(i)) then
335 write (iout,*) "Number of conformations at processor",i,
336 & " differs from that at processor",me,
344 write (iout,*) "Number of conformations read by processors"
347 write (iout,'(8i10)') i,ntot_all(i)
349 write (iout,*) "Calculation terminated."
355 1111 write(iout,*) "Error opening coordinate file ",
356 & intinname(:ilen(intinname))
360 c------------------------------------------------------------------------------
361 subroutine add_new_cconf(jjj,jj,jj_old,icount,Next)
364 include "sizesclu.dat"
365 include "COMMON.CLUSTER"
366 include "COMMON.CHAIN"
367 include "COMMON.INTERACT"
368 include "COMMON.LOCAL"
369 include "COMMON.IOUNITS"
370 include "COMMON.NAMES"
372 include "COMMON.SBRIDGE"
374 integer i,j,jj,jjj,jj_old,icount,k,kk,l,ii,ib
375 & nn,nn1,inan,Next,itj
376 double precision etot,energia(0:max_ene)
378 call int_from_cart1(.false.)
380 if (vbld(j).lt.2.0d0 .or. vbld(j).gt.5.0d0) then
381 write (iout,*) "Conformation",jjj,jj+1
382 write (iout,*) "Bad CA-CA bond length",j," ",vbld(j)
383 write (iout,*) "The Cartesian geometry is:"
384 write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
385 write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
386 write (iout,*) "The internal geometry is:"
387 write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
388 write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
389 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
390 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
391 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
392 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
394 & "This conformation WILL NOT be added to the database."
400 if (itype(j).ne.10 .and. (vbld(nres+j)-dsc(itj)).gt.2.0d0) then
401 write (iout,*) "Conformation",jjj,jj+1
402 write (iout,*) "Bad CA-SC bond length",j," ",vbld(nres+j)
403 write (iout,*) "The Cartesian geometry is:"
404 write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
405 write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
406 write (iout,*) "The internal geometry is:"
407 write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
408 write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
409 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
410 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
411 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
412 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
414 & "This conformation WILL NOT be added to the database."
419 if (theta(j).le.0.0d0) then
421 & "Zero theta angle(s) in conformation",jjj,jj+1
422 write (iout,*) "The Cartesian geometry is:"
423 write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
424 write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
425 write (iout,*) "The internal geometry is:"
426 write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
427 write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
428 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
429 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
430 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
431 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
433 & "This conformation WILL NOT be added to the database."
436 if (theta(j).gt.179.97*deg2rad) theta(j)=179.97*deg2rad
440 write (iout,*) "Conformation",jjj,jj
441 write (iout,'(8f10.5)') ((c(j,i),j=1,3),i=1,nres)
442 write (iout,'(8f10.5)') ((c(j,i+nres),j=1,3),i=nnt,nct)
443 write (iout,'(8f10.4)') (vbld(k),k=nnt+1,nct)
444 write (iout,'(8f10.4)') (vbld(k),k=nres+nnt,nres+nct)
445 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
446 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
447 write (iout,'(8f10.4)') (vbld(k+nres),k=nnt,nct)
448 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
449 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
450 write (iout,'(16i5)') nss,(ihpb(k),jhpb(k),k=1,nss)
451 write (iout,'(e15.5,16i5)') entfac(icount+1),
455 call store_cconf_from_file(jj,icount)
456 if (icount.eq.maxstr_proc) then
458 write (iout,* ) "jj_old",jj_old," jj",jj
460 call write_and_send_cconf(icount,jj_old,jj,Next)
466 c------------------------------------------------------------------------------
467 subroutine store_cconf_from_file(jj,icount)
470 include "sizesclu.dat"
471 include "COMMON.CLUSTER"
472 include "COMMON.CHAIN"
473 include "COMMON.SBRIDGE"
474 include "COMMON.INTERACT"
475 include "COMMON.IOUNITS"
477 integer i,j,jj,icount
478 c Store the conformation that has been read in
481 allcart(j,i,icount)=c(j,i)
486 ihpb_all(i,icount)=ihpb(i)
487 jhpb_all(i,icount)=jhpb(i)
491 c------------------------------------------------------------------------------
492 subroutine write_and_send_cconf(icount,jj_old,jj,Next)
495 include "sizesclu.dat"
501 include "COMMON.CHAIN"
502 include "COMMON.SBRIDGE"
503 include "COMMON.INTERACT"
504 include "COMMON.IOUNITS"
505 include "COMMON.CLUSTER"
507 integer icount,jj_old,jj,Next
508 c Write the structures to a scratch file
510 c Master sends the portion of conformations that have been read in to the neighbor
512 write (iout,*) "Processor",me," entered WRITE_AND_SEND_CONF"
515 call MPI_Send(icount,1,MPI_INTEGER,Next,570,MPI_COMM_WORLD,IERROR)
516 call MPI_Send(nss_all(1),icount,MPI_INTEGER,
517 & Next,571,MPI_COMM_WORLD,IERROR)
518 call MPI_Send(ihpb_all(1,1),icount,MPI_INTEGER,
519 & Next,572,MPI_COMM_WORLD,IERROR)
520 call MPI_Send(jhpb_all(1,1),icount,MPI_INTEGER,
521 & Next,573,MPI_COMM_WORLD,IERROR)
522 call MPI_Send(rmstb(jj_old),icount,MPI_DOUBLE_PRECISION,
523 & Next,577,MPI_COMM_WORLD,IERROR)
524 call MPI_Send(entfac(jj_old),icount,MPI_DOUBLE_PRECISION,
525 & Next,579,MPI_COMM_WORLD,IERROR)
526 call MPI_Send(allcart(1,1,1),3*icount*maxres2,
527 & MPI_REAL,Next,580,MPI_COMM_WORLD,IERROR)
529 call dawrite_ccoords(jj_old,jj,icbase)
532 c------------------------------------------------------------------------------
534 subroutine receive_and_pass_cconf(icount,jj_old,jj,Previous,
538 include "sizesclu.dat"
540 integer IERROR,STATUS(MPI_STATUS_SIZE)
542 include "COMMON.CHAIN"
543 include "COMMON.SBRIDGE"
544 include "COMMON.INTERACT"
545 include "COMMON.IOUNITS"
548 include "COMMON.CLUSTER"
549 integer i,j,k,icount,jj_old,jj,Previous,Next
552 write (iout,*) "Processor",me," entered RECEIVE_AND_PASS_CONF"
555 do while (icount.gt.0)
556 call MPI_Recv(icount,1,MPI_INTEGER,Previous,570,MPI_COMM_WORLD,
558 call MPI_Send(icount,1,MPI_INTEGER,Next,570,MPI_COMM_WORLD,
561 write (iout,*) "Processor",me," icount",icount
563 if (icount.eq.0) return
564 call MPI_Recv(nss_all(1),icount,MPI_INTEGER,
565 & Previous,571,MPI_COMM_WORLD,STATUS,IERROR)
566 call MPI_Send(nss_all(1),icount,MPI_INTEGER,
567 & Next,571,MPI_COMM_WORLD,IERROR)
568 call MPI_Recv(ihpb_all(1,1),icount,MPI_INTEGER,
569 & Previous,572,MPI_COMM_WORLD,STATUS,IERROR)
570 call MPI_Send(ihpb_all(1,1),icount,MPI_INTEGER,
571 & Next,572,MPI_COMM_WORLD,IERROR)
572 call MPI_Recv(jhpb_all(1,1),icount,MPI_INTEGER,
573 & Previous,573,MPI_COMM_WORLD,STATUS,IERROR)
574 call MPI_Send(jhpb_all(1,1),icount,MPI_INTEGER,
575 & Next,573,MPI_COMM_WORLD,IERROR)
576 call MPI_Recv(rmstb(jj_old),icount,MPI_DOUBLE_PRECISION,
577 & Previous,577,MPI_COMM_WORLD,STATUS,IERROR)
578 call MPI_Send(rmstb(jj_old),icount,MPI_DOUBLE_PRECISION,
579 & Next,577,MPI_COMM_WORLD,IERROR)
580 call MPI_Recv(entfac(jj_old),icount,MPI_DOUBLE_PRECISION,
581 & Previous,579,MPI_COMM_WORLD,STATUS,IERROR)
582 call MPI_Send(entfac(jj_old),icount,MPI_DOUBLE_PRECISION,
583 & Next,579,MPI_COMM_WORLD,IERROR)
584 call MPI_Recv(allcart(1,1,1),3*icount*maxres2,
585 & MPI_REAL,Previous,580,MPI_COMM_WORLD,STATUS,IERROR)
586 call MPI_Send(allcart(1,1,1),3*icount*maxres2,
587 & MPI_REAL,Next,580,MPI_COMM_WORLD,IERROR)
589 call dawrite_ccoords(jj_old,jj,icbase)
592 write (iout,*) "Processor",me," received",icount," conformations"
594 write (iout,'(8f10.4)') (allcart(l,k,i),l=1,3,k=1,nres)
595 write (iout,'(8f10.4)')((allcart(l,k,i+nres),l=1,3,k=nnt,nct)
596 write (iout,'(e15.5,16i5)') entfac(i)
603 c------------------------------------------------------------------------------
604 subroutine daread_ccoords(istart_conf,iend_conf)
607 include "sizesclu.dat"
612 include "COMMON.CHAIN"
613 include "COMMON.CLUSTER"
614 include "COMMON.IOUNITS"
615 include "COMMON.INTERACT"
617 include "COMMON.SBRIDGE"
619 integer istart_conf,iend_conf
620 integer i,j,ij,ii,iii
622 character*16 form,acc
625 c Read conformations off a DA scratchfile.
628 write (iout,*) "DAREAD_COORDS"
629 write (iout,*) "istart_conf",istart_conf," iend_conf",iend_conf
630 inquire(unit=icbase,name=nam,recl=len,form=form,access=acc)
631 write (iout,*) "len=",len," form=",form," acc=",acc
632 write (iout,*) "nam=",nam
635 do ii=istart_conf,iend_conf
636 ij = ii - istart_conf + 1
639 write (iout,*) "Reading binary file, record",iii," ii",ii
642 read(icbase,rec=iii) ((allcart(j,i,ij),j=1,3),i=1,nres),
643 & ((allcart(j,i,ij),j=1,3),i=nnt+nres,nct+nres),
644 & nss_all(ij),(ihpb_all(i,ij),jhpb_all(i,ij),i=1,nss),
645 & entfac(ii),rmstb(ii)
647 write (iout,*) ii,iii,ij,entfac(ii)
648 write (iout,'(8f10.5)') ((allcart(j,i,ij),j=1,3),i=1,nres)
649 write (iout,'(8f10.4)') ((allcart(j,i,ij),j=1,3),
650 & i=nnt+nres,nct+nres)
651 write (iout,'(2e15.5)') entfac(ij)
652 write (iout,'(16i5)') nss_all(ij),(ihpb_all(i,ij),
653 & jhpb_all(i,ij),i=1,nss)
659 c------------------------------------------------------------------------------
660 subroutine dawrite_ccoords(istart_conf,iend_conf,unit_out)
663 include "sizesclu.dat"
668 include "COMMON.CHAIN"
669 include "COMMON.INTERACT"
670 include "COMMON.IOUNITS"
672 include "COMMON.SBRIDGE"
674 include "COMMON.CLUSTER"
675 integer istart_conf,iend_conf
676 integer i,j,ii,ij,iii,unit_out
678 character*16 form,acc
681 c Write conformations to a DA scratchfile.
684 write (iout,*) "DAWRITE_COORDS"
685 write (iout,*) "istart_conf",istart_conf," iend_conf",iend_conf
686 write (iout,*) "lenrec",lenrec
687 inquire(unit=unit_out,name=nam,recl=len,form=form,access=acc)
688 write (iout,*) "len=",len," form=",form," acc=",acc
689 write (iout,*) "nam=",nam
692 do ii=istart_conf,iend_conf
694 ij = ii - istart_conf + 1
696 write (iout,*) "Writing binary file, record",iii," ii",ii
699 write(unit_out,rec=iii) ((allcart(j,i,ij),j=1,3),i=1,nres),
700 & ((allcart(j,i,ij),j=1,3),i=nnt+nres,nct+nres),
701 & nss_all(ij),(ihpb_all(i,ij),jhpb_all(i,ij),i=1,nss_all(ij)),
702 & entfac(ii),rmstb(ii)
704 write (iout,'(8f10.5)') ((allcart(j,i,ij),j=1,3),i=1,nres)
705 write (iout,'(8f10.4)') ((allcart(j,i,ij),j=1,3),i=nnt+nres,
707 write (iout,'(2e15.5)') entfac(ij)
708 write (iout,'(16i5)') nss_all(ij),(ihpb(i,ij),jhpb(i,ij),i=1,