7 include 'COMMON.LANGEVIN.lang0.5diag'
9 include 'COMMON.LANGEVIN.lang0'
12 include 'COMMON.LANGEVIN'
15 & /'pool','chain regrow','multi-bond','phi','theta','side chain',
17 c Conversion from poises to molecular unit and the gas constant
18 data cPoise /2.9361d0/, Rb /0.001986d0/
20 c--------------------------------------------------------------------------
23 C Define constants and zero out tables.
33 cMS$ATTRIBUTES C :: proc_proc
36 include 'COMMON.IOUNITS'
37 include 'COMMON.CHAIN'
38 include 'COMMON.INTERACT'
40 include 'COMMON.LOCAL'
41 include 'COMMON.TORSION'
42 include 'COMMON.FFIELD'
43 include 'COMMON.SBRIDGE'
45 include 'COMMON.MINIM'
46 include 'COMMON.DERIV'
47 include 'COMMON.SPLITELE'
49 c Common blocks from the diagonalization routines
50 integer IR,IW,IP,IJK,IPK,IDAF,NAV,IODA,KDIAG,ICORFL,IXDR
51 integer i,idumm,j,k,l,ichir1,ichir2,iblock,m
53 COMMON /IOFILE/ IR,IW,IP,IJK,IPK,IDAF,NAV,IODA(400)
54 COMMON /MACHSW/ KDIAG,ICORFL,IXDR
55 c real*8 text1 /'initial_i'/
76 C The following is just to define auxiliary variables used in angle conversion
115 crc for write_rmsbank1
117 cdr include secondary structure prediction bias
120 C CSA I/O units (separated from others especially for Jooyoung)
131 icsa_bank_reminimized=38
134 crc for ifc error 118
137 C Lipidic input file for parameters range 60-79
139 C input file for transfer sidechain and peptide group inside the
140 C lipidic environment if lipid is implicite
142 C DNA input files for parameters range 80-99
143 C Sugar input files for parameters range 100-119
144 C All-atom input files for parameters range 120-149
146 C Set default weights of the energy terms.
157 c print '(a,$)','Inside initialize'
158 c call memmon_print_usage()
193 athet(j,i,ichir1,ichir2)=0.0D0
194 bthet(j,i,ichir1,ichir2)=0.0D0
214 gaussc(l,k,j,i)=0.0D0
224 cc write (iout,*) "TU DOCHODZE",i,itortyp(i)
228 v1(k,j,i,iblock)=0.0D0
229 v2(k,j,i,iblock)=0.0D0
239 v1c(1,l,i,j,k,iblock)=0.0D0
240 v1s(1,l,i,j,k,iblock)=0.0D0
241 v1c(2,l,i,j,k,iblock)=0.0D0
242 v1s(2,l,i,j,k,iblock)=0.0D0
246 v2c(m,l,i,j,k,iblock)=0.0D0
247 v2s(m,l,i,j,k,iblock)=0.0D0
259 C Initialize the bridge arrays
273 C Initialize correlation arrays
304 C Initialize variables used in minimization.
313 C Initialize the variables responsible for the mode of gradient storage.
319 C Initialize constants used to split the energy into long- and short-range
325 nprint_ene=nprint_ene-1
329 c-------------------------------------------------------------------------
333 include 'COMMON.NAMES'
334 include 'COMMON.FFIELD'
336 &'DD','DAU','DAI','DDB','DSM','DPR','DLY','DAR','DHI','DAS','DGL',
337 & 'DSG','DGN','DSN','DTH',
338 &'DYY','DAL','DTY','DTR','DVA','DLE','DIL','DPN','MED','DCY','ZER',
339 &'CYS','MET','PHE','ILE','LEU','VAL','TRP','TYR','ALA','GLY','THR',
340 &'SER','GLN','ASN','GLU','ASP','HIS','ARG','LYS','PRO','SME','DBZ',
343 &'z','z','z','z','z','p','k','r','h','d','e','n','q','s','t','g',
344 &'a','y','w','v','l','i','f','m','c','x',
345 &'C','M','F','I','L','V','W','Y','A','G','T',
346 &'S','Q','N','E','D','H','R','K','P','z','z','z','z','X'/
347 data potname /'LJ','LJK','BP','GB','GBV'/
350 1 "WSC ","WSCP ","WELEC","WCORR","WCORR5","WCORR6","WEL_LOC",
352 8 "WTURN3","WTURN4","WTURN6","WANG","WSCLOC","WTOR ","WTORD ",
353 ! 15 16 17 18 19 20 21
354 5 "WSTRAIN","WVDWPP","WBOND","SCAL14","WDIHC","WUMB","WSCCOR",
355 ! 22 23 24 25 26 27 28
356 2 "WLT","WAFM","WTHETCNSR","WTUBE","WSAXS","WHOMO","WDFAD",
358 3 "WDFAT","WDFAN","WDFAB"/
392 #if defined(SCP14) && defined(SPLITELE)
394 data print_order/1,2,18,3,16,17,11,12,13,14,4,5,6,7,8,9,10,21,19,
395 & 24,15,26,27,28,29,30,31,22,23,25,20/
398 data print_order/1,2,18,3,17,11,12,13,14,4,5,6,7,8,9,10,21,19,
399 & 24,15,26,27,28,29,30,31,22,23,25,20,0/
400 #elif defined(SPLITELE)
402 data print_order/1,2,3,16,17,11,12,13,14,4,5,6,7,8,9,10,21,19,
403 & 24,15,26,27,28,29,30,31,22,23,25,20,0/
406 data print_order/1,2,3,16,17,11,12,13,14,4,5,6,7,8,9,10,21,19,
407 & 24,15,26,27,28,29,30,31,22,23,25,20,2*0/
410 #if defined(SCP14) && defined(SPLITELE)
412 data print_order/1,2,18,3,16,17,11,12,13,14,4,5,6,7,8,9,10,21,19,
413 & 24,15,26,27,22,23,25,20,4*0/
416 data print_order/1,2,18,3,17,11,12,13,14,4,5,6,7,8,9,10,21,19,
417 & 24,15,26,27,22,23,25,20,5*0/
418 #elif defined(SPLITELE)
420 data print_order/1,2,3,16,17,11,12,13,14,4,5,6,7,8,9,10,21,19,
421 & 24,15,26,27,22,23,25,20,5*0/
424 data print_order/1,2,3,16,17,11,12,13,14,4,5,6,7,8,9,10,21,19,
425 & 24,15,26,27,22,23,25,20,6*0/
429 c---------------------------------------------------------------------------
430 subroutine init_int_table
436 integer blocklengths(15),displs(15)
438 include 'COMMON.CONTROL'
439 include 'COMMON.SAXS'
440 include 'COMMON.SETUP'
441 include 'COMMON.CHAIN'
442 include 'COMMON.INTERACT'
443 include 'COMMON.LOCAL'
444 include 'COMMON.SBRIDGE'
445 include 'COMMON.TORCNSTR'
446 include 'COMMON.IOUNITS'
447 include 'COMMON.DERIV'
448 include 'COMMON.CORRMAT'
449 integer iturn3_start_all,iturn3_end_all,iturn4_start_all,
450 & iturn4_end_all,iatel_s_all,
451 & iatel_e_all,ielstart_all,ielend_all,ntask_cont_from_all,
452 & itask_cont_from_all,ntask_cont_to_all,itask_cont_to_all,
453 & n_sc_int_tot,my_sc_inds,my_sc_inde,ind_sctint,ind_scint_old
454 common /przechowalnia/ iturn3_start_all(0:max_fg_procs),
455 & iturn3_end_all(0:max_fg_procs),iturn4_start_all(0:max_fg_procs),
456 & iturn4_end_all(0:max_fg_procs),iatel_s_all(0:max_fg_procs),
457 &iatel_e_all(0:max_fg_procs),ielstart_all(maxres,0:max_fg_procs-1),
458 & ielend_all(maxres,0:max_fg_procs-1),
459 & ntask_cont_from_all(0:max_fg_procs-1),
460 & itask_cont_from_all(0:max_fg_procs-1,0:max_fg_procs-1),
461 & ntask_cont_to_all(0:max_fg_procs-1),
462 & itask_cont_to_all(0:max_fg_procs-1,0:max_fg_procs-1)
463 integer FG_GROUP,CONT_FROM_GROUP,CONT_TO_GROUP
464 logical scheck,lprint,flag
465 integer i,j,k,ii,jj,iint,npept,nele_int_tot,ind_eleint,ind_scint,
466 & my_ele_inds,my_ele_inde,ind_eleint_old,nele_int_tot_vdw,
467 & my_ele_inds_vdw,my_ele_inde_vdw,ind_eleint_vdw,ijunk,
468 & ind_eleint_vdw_old,nscp_int_tot,my_scp_inds,my_scp_inde,
469 & ind_scpint,ind_scpint_old,nsumgrad,nlen,ngrad_start,ngrad_end,
470 & iaux,ind_typ,ncheck_from,ncheck_to,ichunk
472 integer my_sc_int(0:max_fg_Procs-1),my_sc_intt(0:max_fg_Procs),
473 & my_ele_int(0:max_fg_Procs-1),my_ele_intt(0:max_fg_Procs)
474 C... Determine the numbers of start and end SC-SC interaction
475 C... to deal with by current processor.
478 itask_cont_from(i)=fg_rank
479 itask_cont_to(i)=fg_rank
484 &write (iout,*) 'INIT_INT_TABLE nres=',nres,' nnt=',nnt,' nct=',nct
485 n_sc_int_tot=(nct-nnt+1)*(nct-nnt)/2-nss
486 call int_bounds(n_sc_int_tot,my_sc_inds,my_sc_inde)
488 & write (iout,*) 'Processor',fg_rank,' CG group',kolor,
489 & ' absolute rank',MyRank,
490 & ' n_sc_int_tot',n_sc_int_tot,' my_sc_inds=',my_sc_inds,
491 & ' my_sc_inde',my_sc_inde
511 cd write (iout,*) 'ns=',ns,' nss=',nss,' ihpb,jhpb',
512 cd & (ihpb(i),jhpb(i),i=1,nss)
517 if (ihpb(ii).eq.i+nres) then
524 cd write (iout,*) 'i=',i,' scheck=',scheck,' jj=',jj
528 c write (iout,*) 'jj=i+1'
529 call int_partition(ind_scint,my_sc_inds,my_sc_inde,i,
530 & iatsc_s,iatsc_e,i+2,nct,nint_gr(i),istart(i,1),iend(i,1),*12)
536 else if (jj.eq.nct) then
538 c write (iout,*) 'jj=nct'
539 call int_partition(ind_scint,my_sc_inds,my_sc_inde,i,
540 & iatsc_s,iatsc_e,i+1,nct-1,nint_gr(i),istart(i,1),iend(i,1),*12)
548 call int_partition(ind_scint,my_sc_inds,my_sc_inde,i,
549 & iatsc_s,iatsc_e,i+1,jj-1,nint_gr(i),istart(i,1),iend(i,1),*12)
551 call int_partition(ind_scint,my_sc_inds,my_sc_inde,i,
552 & iatsc_s,iatsc_e,jj+1,nct,nint_gr(i),istart(i,ii),iend(i,ii),*12)
563 call int_partition(ind_scint,my_sc_inds,my_sc_inde,i,
564 & iatsc_s,iatsc_e,i+1,nct,nint_gr(i),istart(i,1),iend(i,1),*12)
569 ind_scint=ind_scint+nct-i
573 ind_scint_old=ind_scint
581 if (iatsc_s.eq.0) iatsc_s=1
583 if (lprint) write (*,*) 'Processor',fg_rank,' CG Group',kolor,
584 & ' absolute rank',myrank,' iatsc_s=',iatsc_s,' iatsc_e=',iatsc_e
587 write (iout,'(a)') 'Interaction array:'
589 write (iout,'(i3,2(2x,2i3))')
590 & i,(istart(i,iint),iend(i,iint),iint=1,nint_gr(i))
595 C Now partition the electrostatic-interaction array
597 nele_int_tot=(npept-ispp)*(npept-ispp+1)/2
598 call int_bounds(nele_int_tot,my_ele_inds,my_ele_inde)
600 & write (*,*) 'Processor',fg_rank,' CG group',kolor,
601 & ' absolute rank',MyRank,
602 & ' nele_int_tot',nele_int_tot,' my_ele_inds=',my_ele_inds,
603 & ' my_ele_inde',my_ele_inde
610 call int_partition(ind_eleint,my_ele_inds,my_ele_inde,i,
611 & iatel_s,iatel_e,i+ispp,nct-1,ijunk,ielstart(i),ielend(i),*13)
614 if (iatel_s.eq.0) iatel_s=1
615 nele_int_tot_vdw=(npept-2)*(npept-2+1)/2
616 c write (iout,*) "nele_int_tot_vdw",nele_int_tot_vdw
617 call int_bounds(nele_int_tot_vdw,my_ele_inds_vdw,my_ele_inde_vdw)
618 c write (iout,*) "my_ele_inds_vdw",my_ele_inds_vdw,
619 c & " my_ele_inde_vdw",my_ele_inde_vdw
626 call int_partition(ind_eleint_vdw,my_ele_inds_vdw,
628 & iatel_s_vdw,iatel_e_vdw,i+2,nct-1,ijunk,ielstart_vdw(i),
630 c write (iout,*) i," ielstart_vdw",ielstart_vdw(i),
631 c & " ielend_vdw",ielend_vdw(i)
633 if (iatel_s_vdw.eq.0) iatel_s_vdw=1
644 do i=iatel_s_vdw,iatel_e_vdw
650 write (*,'(a)') 'Processor',fg_rank,' CG group',kolor,
651 & ' absolute rank',MyRank
652 write (iout,*) 'Electrostatic interaction array:'
654 write (iout,'(i3,2(2x,2i3))') i,ielstart(i),ielend(i)
659 C Partition the SC-p interaction array
661 nscp_int_tot=(npept-iscp+1)*(npept-iscp+1)
662 call int_bounds(nscp_int_tot,my_scp_inds,my_scp_inde)
663 if (lprint) write (iout,*) 'Processor',fg_rank,' CG group',kolor,
664 & ' absolute rank',myrank,
665 & ' nscp_int_tot',nscp_int_tot,' my_scp_inds=',my_scp_inds,
666 & ' my_scp_inde',my_scp_inde
672 if (i.lt.nnt+iscp) then
673 cd write (iout,*) 'i.le.nnt+iscp'
674 call int_partition(ind_scpint,my_scp_inds,my_scp_inde,i,
675 & iatscp_s,iatscp_e,i+iscp,nct,nscp_gr(i),iscpstart(i,1),
677 else if (i.gt.nct-iscp) then
678 cd write (iout,*) 'i.gt.nct-iscp'
679 call int_partition(ind_scpint,my_scp_inds,my_scp_inde,i,
680 & iatscp_s,iatscp_e,nnt,i-iscp,nscp_gr(i),iscpstart(i,1),
683 call int_partition(ind_scpint,my_scp_inds,my_scp_inde,i,
684 & iatscp_s,iatscp_e,nnt,i-iscp,nscp_gr(i),iscpstart(i,1),
687 call int_partition(ind_scpint,my_scp_inds,my_scp_inde,i,
688 & iatscp_s,iatscp_e,i+iscp,nct,nscp_gr(i),iscpstart(i,ii),
697 if (i.lt.nnt+iscp) then
699 iscpstart(i,1)=i+iscp
701 elseif (i.gt.nct-iscp) then
709 iscpstart(i,2)=i+iscp
714 if (iatscp_s.eq.0) iatscp_s=1
716 write (iout,'(a)') 'SC-p interaction array:'
717 do i=iatscp_s,iatscp_e
718 write (iout,'(i3,2(2x,2i3))')
719 & i,(iscpstart(i,j),iscpend(i,j),j=1,nscp_gr(i))
722 C Partition local interactions
724 call int_bounds(nres-2,loc_start,loc_end)
725 loc_start=loc_start+1
727 call int_bounds(nres-2,ithet_start,ithet_end)
728 call int_bounds(nsaxs,isaxs_start,isaxs_end)
729 write (iout,*) me," isaxs_start",isaxs_start,
730 & " isaxs_end",isaxs_end
731 ithet_start=ithet_start+2
732 ithet_end=ithet_end+2
733 call int_bounds(nct-nnt-2,iturn3_start,iturn3_end)
734 iturn3_start=iturn3_start+nnt
735 iphi_start=iturn3_start+2
736 iturn3_end=iturn3_end+nnt
737 iphi_end=iturn3_end+2
738 iturn3_start=iturn3_start-1
739 iturn3_end=iturn3_end-1
740 call int_bounds(nres-3,itau_start,itau_end)
741 itau_start=itau_start+3
743 call int_bounds(nres-3,iphi1_start,iphi1_end)
744 iphi1_start=iphi1_start+3
745 iphi1_end=iphi1_end+3
746 call int_bounds(nct-nnt-3,iturn4_start,iturn4_end)
747 iturn4_start=iturn4_start+nnt
748 iphid_start=iturn4_start+2
749 iturn4_end=iturn4_end+nnt
750 iphid_end=iturn4_end+2
751 iturn4_start=iturn4_start-1
752 iturn4_end=iturn4_end-1
753 call int_bounds(nres-2,ibond_start,ibond_end)
754 ibond_start=ibond_start+1
755 ibond_end=ibond_end+1
756 call int_bounds(nct-nnt,ibondp_start,ibondp_end)
757 ibondp_start=ibondp_start+nnt
758 ibondp_end=ibondp_end+nnt
759 call int_bounds(nres,ilip_start,ilip_end)
760 c ilip_start=ilip_start
761 call int_bounds1(nres-1,ivec_start,ivec_end)
762 c print *,"Processor",myrank,fg_rank,fg_rank1,
763 c & " ivec_start",ivec_start," ivec_end",ivec_end
764 iset_start=loc_start+2
766 if (ndih_constr.eq.0) then
770 call int_bounds(ndih_constr,idihconstr_start,idihconstr_end)
772 if (ntheta_constr.eq.0) then
777 & (ntheta_constr,ithetaconstr_start,ithetaconstr_end)
779 c nsumgrad=(nres-nnt)*(nres-nnt+1)/2
781 nsumgrad=(nres-nnt)*(nres-nnt+1)/2
783 call int_bounds(nsumgrad,ngrad_start,ngrad_end)
784 igrad_start=((2*nlen+1)
785 & -sqrt(float((2*nlen-1)**2-8*(ngrad_start-1))))/2
786 jgrad_start(igrad_start)=
787 & ngrad_start-(2*nlen-igrad_start)*(igrad_start-1)/2
789 jgrad_end(igrad_start)=nres
790 igrad_end=((2*nlen+1)
791 & -sqrt(float((2*nlen-1)**2-8*(ngrad_end-1))))/2
792 if (igrad_end.gt.igrad_start) jgrad_start(igrad_end)=igrad_end+1
793 jgrad_end(igrad_end)=ngrad_end-(2*nlen-igrad_end)*(igrad_end-1)/2
795 do i=igrad_start+1,igrad_end-1
800 write (*,*) 'Processor:',fg_rank,' CG group',kolor,
801 & ' absolute rank',myrank,
802 & ' loc_start',loc_start,' loc_end',loc_end,
803 & ' ithet_start',ithet_start,' ithet_end',ithet_end,
804 & ' iphi_start',iphi_start,' iphi_end',iphi_end,
805 & ' iphid_start',iphid_start,' iphid_end',iphid_end,
806 & ' ibond_start',ibond_start,' ibond_end',ibond_end,
807 & ' ibondp_start',ibondp_start,' ibondp_end',ibondp_end,
808 & ' iturn3_start',iturn3_start,' iturn3_end',iturn3_end,
809 & ' iturn4_start',iturn4_start,' iturn4_end',iturn4_end,
810 & ' ivec_start',ivec_start,' ivec_end',ivec_end,
811 & ' iset_start',iset_start,' iset_end',iset_end,
812 & ' idihconstr_start',idihconstr_start,' idihconstr_end',
814 & ' ithetaconstr_start',ithetaconstr_start,' ithetaconstr_end',
817 write (*,*) 'Processor:',fg_rank,myrank,' igrad_start',
818 & igrad_start,' igrad_end',igrad_end,' ngrad_start',ngrad_start,
819 & ' ngrad_end',ngrad_end
820 do i=igrad_start,igrad_end
821 write(*,*) 'Processor:',fg_rank,myrank,i,
822 & jgrad_start(i),jgrad_end(i)
825 if (nfgtasks.gt.1) then
826 call MPI_Allgather(ivec_start,1,MPI_INTEGER,ivec_displ(0),1,
827 & MPI_INTEGER,FG_COMM1,IERROR)
828 iaux=ivec_end-ivec_start+1
829 call MPI_Allgather(iaux,1,MPI_INTEGER,ivec_count(0),1,
830 & MPI_INTEGER,FG_COMM1,IERROR)
831 call MPI_Allgather(iset_start-2,1,MPI_INTEGER,iset_displ(0),1,
832 & MPI_INTEGER,FG_COMM,IERROR)
833 iaux=iset_end-iset_start+1
834 call MPI_Allgather(iaux,1,MPI_INTEGER,iset_count(0),1,
835 & MPI_INTEGER,FG_COMM,IERROR)
836 call MPI_Allgather(ibond_start,1,MPI_INTEGER,ibond_displ(0),1,
837 & MPI_INTEGER,FG_COMM,IERROR)
838 iaux=ibond_end-ibond_start+1
839 call MPI_Allgather(iaux,1,MPI_INTEGER,ibond_count(0),1,
840 & MPI_INTEGER,FG_COMM,IERROR)
841 call MPI_Allgather(ithet_start,1,MPI_INTEGER,ithet_displ(0),1,
842 & MPI_INTEGER,FG_COMM,IERROR)
843 iaux=ithet_end-ithet_start+1
844 call MPI_Allgather(iaux,1,MPI_INTEGER,ithet_count(0),1,
845 & MPI_INTEGER,FG_COMM,IERROR)
846 call MPI_Allgather(iphi_start,1,MPI_INTEGER,iphi_displ(0),1,
847 & MPI_INTEGER,FG_COMM,IERROR)
848 iaux=iphi_end-iphi_start+1
849 call MPI_Allgather(iaux,1,MPI_INTEGER,iphi_count(0),1,
850 & MPI_INTEGER,FG_COMM,IERROR)
851 call MPI_Allgather(iphi1_start,1,MPI_INTEGER,iphi1_displ(0),1,
852 & MPI_INTEGER,FG_COMM,IERROR)
853 iaux=iphi1_end-iphi1_start+1
854 call MPI_Allgather(iaux,1,MPI_INTEGER,iphi1_count(0),1,
855 & MPI_INTEGER,FG_COMM,IERROR)
856 do i=0,max_fg_procs-1
862 call MPI_Allgather(iturn3_start,1,MPI_INTEGER,
863 & iturn3_start_all(0),1,MPI_INTEGER,FG_COMM,IERROR)
864 call MPI_Allgather(iturn4_start,1,MPI_INTEGER,
865 & iturn4_start_all(0),1,MPI_INTEGER,FG_COMM,IERROR)
866 call MPI_Allgather(iturn3_end,1,MPI_INTEGER,
867 & iturn3_end_all(0),1,MPI_INTEGER,FG_COMM,IERROR)
868 call MPI_Allgather(iturn4_end,1,MPI_INTEGER,
869 & iturn4_end_all(0),1,MPI_INTEGER,FG_COMM,IERROR)
870 call MPI_Allgather(iatel_s,1,MPI_INTEGER,
871 & iatel_s_all(0),1,MPI_INTEGER,FG_COMM,IERROR)
872 call MPI_Allgather(iatel_e,1,MPI_INTEGER,
873 & iatel_e_all(0),1,MPI_INTEGER,FG_COMM,IERROR)
874 call MPI_Allgather(ielstart(1),maxres,MPI_INTEGER,
875 & ielstart_all(1,0),maxres,MPI_INTEGER,FG_COMM,IERROR)
876 call MPI_Allgather(ielend(1),maxres,MPI_INTEGER,
877 & ielend_all(1,0),maxres,MPI_INTEGER,FG_COMM,IERROR)
879 write (iout,*) "iatel_s_all",(iatel_s_all(i),i=0,nfgtasks)
880 write (iout,*) "iatel_e_all",(iatel_e_all(i),i=0,nfgtasks)
881 write (iout,*) "iturn3_start_all",
882 & (iturn3_start_all(i),i=0,nfgtasks-1)
883 write (iout,*) "iturn3_end_all",
884 & (iturn3_end_all(i),i=0,nfgtasks-1)
885 write (iout,*) "iturn4_start_all",
886 & (iturn4_start_all(i),i=0,nfgtasks-1)
887 write (iout,*) "iturn4_end_all",
888 & (iturn4_end_all(i),i=0,nfgtasks-1)
889 write (iout,*) "The ielstart_all array"
891 write (iout,'(20i4)') i,(ielstart_all(i,j),j=0,nfgtasks-1)
893 write (iout,*) "The ielend_all array"
895 write (iout,'(20i4)') i,(ielend_all(i,j),j=0,nfgtasks-1)
902 itask_cont_from(0)=fg_rank
903 itask_cont_to(0)=fg_rank
905 do ii=iturn3_start,iturn3_end
906 call add_int(ii,ii+2,iturn3_sent(1,ii),
907 & ntask_cont_to,itask_cont_to,flag)
909 do ii=iturn4_start,iturn4_end
910 call add_int(ii,ii+3,iturn4_sent(1,ii),
911 & ntask_cont_to,itask_cont_to,flag)
913 do ii=iturn3_start,iturn3_end
914 call add_int_from(ii,ii+2,ntask_cont_from,itask_cont_from)
916 do ii=iturn4_start,iturn4_end
917 call add_int_from(ii,ii+3,ntask_cont_from,itask_cont_from)
920 write (iout,*) "After turn3 ntask_cont_from",ntask_cont_from,
921 & " ntask_cont_to",ntask_cont_to
922 write (iout,*) "itask_cont_from",
923 & (itask_cont_from(i),i=1,ntask_cont_from)
924 write (iout,*) "itask_cont_to",
925 & (itask_cont_to(i),i=1,ntask_cont_to)
928 c write (iout,*) "Loop forward"
931 c write (iout,*) "from loop i=",i
933 do j=ielstart(i),ielend(i)
934 call add_int_from(i,j,ntask_cont_from,itask_cont_from)
937 c write (iout,*) "Loop backward iatel_e-1",iatel_e-1,
938 c & " iatel_e",iatel_e
942 c write (iout,*) "i",i," ielstart",ielstart(i),
943 c & " ielend",ielend(i)
946 do j=ielstart(i),ielend(i)
947 call add_int(i,j,iint_sent(1,j,nat_sent+1),ntask_cont_to,
948 & itask_cont_to,flag)
956 write (iout,*)"After longrange ntask_cont_from",ntask_cont_from,
957 & " ntask_cont_to",ntask_cont_to
958 write (iout,*) "itask_cont_from",
959 & (itask_cont_from(i),i=1,ntask_cont_from)
960 write (iout,*) "itask_cont_to",
961 & (itask_cont_to(i),i=1,ntask_cont_to)
963 write (iout,*) "iint_sent"
966 write (iout,'(20i4)') ii,(j,(iint_sent(k,j,i),k=1,4),
967 & j=ielstart(ii),ielend(ii))
969 write (iout,*) "iturn3_sent iturn3_start",iturn3_start,
970 & " iturn3_end",iturn3_end
971 write (iout,'(20i4)') (i,(iturn3_sent(j,i),j=1,4),
972 & i=iturn3_start,iturn3_end)
973 write (iout,*) "iturn4_sent iturn4_start",iturn4_start,
974 & " iturn4_end",iturn4_end
975 write (iout,'(20i4)') (i,(iturn4_sent(j,i),j=1,4),
976 & i=iturn4_start,iturn4_end)
979 call MPI_Gather(ntask_cont_from,1,MPI_INTEGER,
980 & ntask_cont_from_all,1,MPI_INTEGER,king,FG_COMM,IERR)
981 c write (iout,*) "Gather ntask_cont_from ended"
983 call MPI_Gather(itask_cont_from(0),max_fg_procs,MPI_INTEGER,
984 & itask_cont_from_all(0,0),max_fg_procs,MPI_INTEGER,king,
986 c write (iout,*) "Gather itask_cont_from ended"
988 call MPI_Gather(ntask_cont_to,1,MPI_INTEGER,ntask_cont_to_all,
989 & 1,MPI_INTEGER,king,FG_COMM,IERR)
990 c write (iout,*) "Gather ntask_cont_to ended"
992 call MPI_Gather(itask_cont_to,max_fg_procs,MPI_INTEGER,
993 & itask_cont_to_all,max_fg_procs,MPI_INTEGER,king,FG_COMM,IERR)
994 c write (iout,*) "Gather itask_cont_to ended"
996 if (fg_rank.eq.king) then
997 write (iout,*)"Contact receive task map (proc, #tasks, tasks)"
999 write (iout,'(20i4)') i,ntask_cont_from_all(i),
1000 & (itask_cont_from_all(j,i),j=1,ntask_cont_from_all(i))
1004 write (iout,*) "Contact send task map (proc, #tasks, tasks)"
1006 write (iout,'(20i4)') i,ntask_cont_to_all(i),
1007 & (itask_cont_to_all(j,i),j=1,ntask_cont_to_all(i))
1011 C Check if every send will have a matching receive
1015 ncheck_to=ncheck_to+ntask_cont_to_all(i)
1016 ncheck_from=ncheck_from+ntask_cont_from_all(i)
1018 write (iout,*) "Control sums",ncheck_from,ncheck_to
1019 if (ncheck_from.ne.ncheck_to) then
1020 write (iout,*) "Error: #receive differs from #send."
1021 write (iout,*) "Terminating program...!"
1027 do j=1,ntask_cont_to_all(i)
1028 ii=itask_cont_to_all(j,i)
1029 do k=1,ntask_cont_from_all(ii)
1030 if (itask_cont_from_all(k,ii).eq.i) then
1031 if(lprint)write(iout,*)"Matching send/receive",i,ii
1035 if (k.eq.ntask_cont_from_all(ii)+1) then
1037 write (iout,*) "Error: send by",j," to",ii,
1038 & " would have no matching receive"
1044 write (iout,*) "Unmatched sends; terminating program"
1048 call MPI_Bcast(flag,1,MPI_LOGICAL,king,FG_COMM,IERROR)
1049 c write (iout,*) "flag broadcast ended flag=",flag
1052 call MPI_Finalize(IERROR)
1053 stop "Error in INIT_INT_TABLE: unmatched send/receive."
1055 call MPI_Comm_group(FG_COMM,fg_group,IERR)
1056 c write (iout,*) "MPI_Comm_group ended"
1058 call MPI_Group_incl(fg_group,ntask_cont_from+1,
1059 & itask_cont_from(0),CONT_FROM_GROUP,IERR)
1060 call MPI_Group_incl(fg_group,ntask_cont_to+1,itask_cont_to(0),
1061 & CONT_TO_GROUP,IERR)
1064 iaux=4*(ielend(ii)-ielstart(ii)+1)
1065 call MPI_Group_translate_ranks(fg_group,iaux,
1066 & iint_sent(1,ielstart(ii),i),CONT_TO_GROUP,
1067 & iint_sent_local(1,ielstart(ii),i),IERR )
1068 c write (iout,*) "Ranks translated i=",i
1071 iaux=4*(iturn3_end-iturn3_start+1)
1072 call MPI_Group_translate_ranks(fg_group,iaux,
1073 & iturn3_sent(1,iturn3_start),CONT_TO_GROUP,
1074 & iturn3_sent_local(1,iturn3_start),IERR)
1075 iaux=4*(iturn4_end-iturn4_start+1)
1076 call MPI_Group_translate_ranks(fg_group,iaux,
1077 & iturn4_sent(1,iturn4_start),CONT_TO_GROUP,
1078 & iturn4_sent_local(1,iturn4_start),IERR)
1080 write (iout,*) "iint_sent_local"
1083 write (iout,'(20i4)') ii,(j,(iint_sent_local(k,j,i),k=1,4),
1084 & j=ielstart(ii),ielend(ii))
1087 write (iout,*) "iturn3_sent_local iturn3_start",iturn3_start,
1088 & " iturn3_end",iturn3_end
1089 write (iout,'(20i4)') (i,(iturn3_sent_local(j,i),j=1,4),
1090 & i=iturn3_start,iturn3_end)
1091 write (iout,*) "iturn4_sent_local iturn4_start",iturn4_start,
1092 & " iturn4_end",iturn4_end
1093 write (iout,'(20i4)') (i,(iturn4_sent_local(j,i),j=1,4),
1094 & i=iturn4_start,iturn4_end)
1097 call MPI_Group_free(fg_group,ierr)
1098 call MPI_Group_free(cont_from_group,ierr)
1099 call MPI_Group_free(cont_to_group,ierr)
1101 call MPI_Type_contiguous(3,MPI_DOUBLE_PRECISION,MPI_UYZ,IERROR)
1102 call MPI_Type_commit(MPI_UYZ,IERROR)
1103 call MPI_Type_contiguous(18,MPI_DOUBLE_PRECISION,MPI_UYZGRAD,
1105 call MPI_Type_commit(MPI_UYZGRAD,IERROR)
1106 call MPI_Type_contiguous(2,MPI_DOUBLE_PRECISION,MPI_MU,IERROR)
1107 call MPI_Type_commit(MPI_MU,IERROR)
1108 call MPI_Type_contiguous(4,MPI_DOUBLE_PRECISION,MPI_MAT1,IERROR)
1109 call MPI_Type_commit(MPI_MAT1,IERROR)
1110 call MPI_Type_contiguous(8,MPI_DOUBLE_PRECISION,MPI_MAT2,IERROR)
1111 call MPI_Type_commit(MPI_MAT2,IERROR)
1112 call MPI_Type_contiguous(6,MPI_DOUBLE_PRECISION,MPI_THET,IERROR)
1113 call MPI_Type_commit(MPI_THET,IERROR)
1114 call MPI_Type_contiguous(9,MPI_DOUBLE_PRECISION,MPI_GAM,IERROR)
1115 call MPI_Type_commit(MPI_GAM,IERROR)
1117 c 9/22/08 Derived types to send matrices which appear in correlation terms
1119 if (ivec_count(i).eq.ivec_count(0)) then
1125 do ind_typ=lentyp(0),lentyp(nfgtasks-1)
1126 if (ind_typ.eq.0) then
1127 ichunk=ivec_count(0)
1129 ichunk=ivec_count(1)
1136 c displs(i)=displs(i-1)+blocklengths(i-1)*maxres
1139 c blocklengths(i)=blocklengths(i)*ichunk
1141 c write (iout,*) "blocklengths and displs"
1143 c write (iout,*) i,blocklengths(i),displs(i)
1146 c call MPI_Type_indexed(4,blocklengths(1),displs(1),
1147 c & MPI_DOUBLE_PRECISION,MPI_ROTAT1(ind_typ),IERROR)
1148 c call MPI_Type_commit(MPI_ROTAT1(ind_typ),IERROR)
1149 c write (iout,*) "MPI_ROTAT1",MPI_ROTAT1
1155 c displs(i)=displs(i-1)+blocklengths(i-1)*maxres
1158 c blocklengths(i)=blocklengths(i)*ichunk
1160 c write (iout,*) "blocklengths and displs"
1162 c write (iout,*) i,blocklengths(i),displs(i)
1165 c call MPI_Type_indexed(4,blocklengths(1),displs(1),
1166 c & MPI_DOUBLE_PRECISION,MPI_ROTAT2(ind_typ),IERROR)
1167 c call MPI_Type_commit(MPI_ROTAT2(ind_typ),IERROR)
1168 c write (iout,*) "MPI_ROTAT2",MPI_ROTAT2
1174 displs(i)=displs(i-1)+blocklengths(i-1)*maxres
1177 blocklengths(i)=blocklengths(i)*ichunk
1179 call MPI_Type_indexed(8,blocklengths,displs,
1180 & MPI_DOUBLE_PRECISION,MPI_PRECOMP11(ind_typ),IERROR)
1181 call MPI_Type_commit(MPI_PRECOMP11(ind_typ),IERROR)
1187 displs(i)=displs(i-1)+blocklengths(i-1)*maxres
1190 blocklengths(i)=blocklengths(i)*ichunk
1192 call MPI_Type_indexed(8,blocklengths,displs,
1193 & MPI_DOUBLE_PRECISION,MPI_PRECOMP12(ind_typ),IERROR)
1194 call MPI_Type_commit(MPI_PRECOMP12(ind_typ),IERROR)
1200 displs(i)=displs(i-1)+blocklengths(i-1)*maxres
1203 blocklengths(i)=blocklengths(i)*ichunk
1205 call MPI_Type_indexed(6,blocklengths,displs,
1206 & MPI_DOUBLE_PRECISION,MPI_PRECOMP22(ind_typ),IERROR)
1207 call MPI_Type_commit(MPI_PRECOMP22(ind_typ),IERROR)
1213 displs(i)=displs(i-1)+blocklengths(i-1)*maxres
1216 blocklengths(i)=blocklengths(i)*ichunk
1218 call MPI_Type_indexed(2,blocklengths,displs,
1219 & MPI_DOUBLE_PRECISION,MPI_PRECOMP23(ind_typ),IERROR)
1220 call MPI_Type_commit(MPI_PRECOMP23(ind_typ),IERROR)
1226 displs(i)=displs(i-1)+blocklengths(i-1)*maxres
1229 blocklengths(i)=blocklengths(i)*ichunk
1231 call MPI_Type_indexed(4,blocklengths,displs,
1232 & MPI_DOUBLE_PRECISION,MPI_ROTAT_OLD(ind_typ),IERROR)
1233 call MPI_Type_commit(MPI_ROTAT_OLD(ind_typ),IERROR)
1237 iint_start=ivec_start+1
1240 iint_count(i)=ivec_count(i)
1241 iint_displ(i)=ivec_displ(i)
1242 ivec_displ(i)=ivec_displ(i)-1
1243 iset_displ(i)=iset_displ(i)-1
1244 ithet_displ(i)=ithet_displ(i)-1
1245 iphi_displ(i)=iphi_displ(i)-1
1246 iphi1_displ(i)=iphi1_displ(i)-1
1247 ibond_displ(i)=ibond_displ(i)-1
1249 if (nfgtasks.gt.1 .and. fg_rank.eq.king
1250 & .and. (me.eq.0 .or. .not. out1file)) then
1251 write (iout,*) "IVEC_DISPL, IVEC_COUNT, ISET_START, ISET_COUNT"
1253 write (iout,*) i,ivec_displ(i),ivec_count(i),iset_displ(i),
1256 write (iout,*) "iphi_start",iphi_start," iphi_end",iphi_end,
1257 & " iphi1_start",iphi1_start," iphi1_end",iphi1_end
1258 write (iout,*)"IPHI_COUNT, IPHI_DISPL, IPHI1_COUNT, IPHI1_DISPL"
1260 write (iout,*) i,iphi_count(i),iphi_displ(i),iphi1_count(i),
1263 write(iout,'(i10,a,i10,a,i10,a/a,i3,a)') n_sc_int_tot,' SC-SC ',
1264 & nele_int_tot,' electrostatic and ',nscp_int_tot,
1265 & ' SC-p interactions','were distributed among',nfgtasks,
1266 & ' fine-grain processors.'
1282 idihconstr_end=ndih_constr
1283 ithetaconstr_start=1
1284 ithetaconstr_end=ntheta_constr
1285 iphid_start=iphi_start
1286 iphid_end=iphi_end-1
1308 c---------------------------------------------------------------------------
1309 subroutine add_int(ii,jj,itask,ntask_cont_to,itask_cont_to,flag)
1311 include "DIMENSIONS"
1312 include "COMMON.INTERACT"
1313 include "COMMON.SETUP"
1314 include "COMMON.IOUNITS"
1315 integer ii,jj,itask(4),ntask_cont_to,
1316 &itask_cont_to(0:max_fg_procs-1)
1318 integer iturn3_start_all,iturn3_end_all,iturn4_start_all,
1319 & iturn4_end_all,iatel_s_all,iatel_e_all,ielstart_all,ielend_all
1320 common /przechowalnia/ iturn3_start_all(0:max_fg_procs),
1321 & iturn3_end_all(0:max_fg_procs),iturn4_start_all(0:max_fg_procs),
1322 & iturn4_end_all(0:max_fg_procs),iatel_s_all(0:max_fg_procs),
1323 &iatel_e_all(0:max_fg_procs),ielstart_all(maxres,0:max_fg_procs-1),
1324 & ielend_all(maxres,0:max_fg_procs-1)
1325 integer iproc,isent,k,l
1326 c Determines whether to send interaction ii,jj to other processors; a given
1327 c interaction can be sent to at most 2 processors.
1328 c Sets flag=.true. if interaction ii,jj needs to be sent to at least
1329 c one processor, otherwise flag is unchanged from the input value.
1335 c write (iout,*) "ii",ii," jj",jj
1336 c Loop over processors to check if anybody could need interaction ii,jj
1337 do iproc=0,fg_rank-1
1338 c Check if the interaction matches any turn3 at iproc
1339 do k=iturn3_start_all(iproc),iturn3_end_all(iproc)
1341 if (k.eq.ii-1 .and. l.eq.jj-1 .or. k.eq.ii-1 .and. l.eq.jj+1
1342 & .or. k.eq.ii+1 .and. l.eq.jj+1 .or. k.eq.ii+1 .and. l.eq.jj-1)
1344 c write (iout,*) "turn3 to iproc",iproc," ij",ii,jj,"kl",k,l
1347 if (iproc.ne.itask(1).and.iproc.ne.itask(2)
1348 & .and.iproc.ne.itask(3).and.iproc.ne.itask(4)) then
1351 call add_task(iproc,ntask_cont_to,itask_cont_to)
1355 C Check if the interaction matches any turn4 at iproc
1356 do k=iturn4_start_all(iproc),iturn4_end_all(iproc)
1358 if (k.eq.ii-1 .and. l.eq.jj-1 .or. k.eq.ii-1 .and. l.eq.jj+1
1359 & .or. k.eq.ii+1 .and. l.eq.jj+1 .or. k.eq.ii+1 .and. l.eq.jj-1)
1361 c write (iout,*) "turn3 to iproc",iproc," ij",ii,jj," kl",k,l
1364 if (iproc.ne.itask(1).and.iproc.ne.itask(2)
1365 & .and.iproc.ne.itask(3).and.iproc.ne.itask(4)) then
1368 call add_task(iproc,ntask_cont_to,itask_cont_to)
1372 if (iatel_s_all(iproc).gt.0 .and. iatel_e_all(iproc).gt.0 .and.
1373 & iatel_s_all(iproc).le.ii-1 .and. iatel_e_all(iproc).ge.ii-1)then
1374 if (ielstart_all(ii-1,iproc).le.jj-1.and.
1375 & ielend_all(ii-1,iproc).ge.jj-1) then
1377 if (iproc.ne.itask(1).and.iproc.ne.itask(2)
1378 & .and.iproc.ne.itask(3).and.iproc.ne.itask(4)) then
1381 call add_task(iproc,ntask_cont_to,itask_cont_to)
1384 if (ielstart_all(ii-1,iproc).le.jj+1.and.
1385 & ielend_all(ii-1,iproc).ge.jj+1) then
1387 if (iproc.ne.itask(1).and.iproc.ne.itask(2)
1388 & .and.iproc.ne.itask(3).and.iproc.ne.itask(4)) then
1391 call add_task(iproc,ntask_cont_to,itask_cont_to)
1398 c---------------------------------------------------------------------------
1399 subroutine add_int_from(ii,jj,ntask_cont_from,itask_cont_from)
1401 include "DIMENSIONS"
1402 include "COMMON.INTERACT"
1403 include "COMMON.SETUP"
1404 include "COMMON.IOUNITS"
1405 integer ii,jj,itask(2),ntask_cont_from,
1406 & itask_cont_from(0:max_fg_procs-1)
1408 integer iturn3_start_all,iturn3_end_all,iturn4_start_all,
1409 & iturn4_end_all,iatel_s_all,iatel_e_all,ielstart_all,ielend_all
1410 common /przechowalnia/ iturn3_start_all(0:max_fg_procs),
1411 & iturn3_end_all(0:max_fg_procs),iturn4_start_all(0:max_fg_procs),
1412 & iturn4_end_all(0:max_fg_procs),iatel_s_all(0:max_fg_procs),
1413 &iatel_e_all(0:max_fg_procs),ielstart_all(maxres,0:max_fg_procs-1),
1414 & ielend_all(maxres,0:max_fg_procs-1)
1416 do iproc=fg_rank+1,nfgtasks-1
1417 do k=iturn3_start_all(iproc),iturn3_end_all(iproc)
1419 if (k.eq.ii+1 .and. l.eq.jj+1 .or. k.eq.ii+1.and.l.eq.jj-1
1420 & .or. k.eq.ii-1 .and. l.eq.jj-1 .or. k.eq.ii-1 .and. l.eq.jj+1)
1422 c write (iout,*)"turn3 from iproc",iproc," ij",ii,jj," kl",k,l
1423 call add_task(iproc,ntask_cont_from,itask_cont_from)
1426 do k=iturn4_start_all(iproc),iturn4_end_all(iproc)
1428 if (k.eq.ii+1 .and. l.eq.jj+1 .or. k.eq.ii+1.and.l.eq.jj-1
1429 & .or. k.eq.ii-1 .and. l.eq.jj-1 .or. k.eq.ii-1 .and. l.eq.jj+1)
1431 c write (iout,*)"turn4 from iproc",iproc," ij",ii,jj," kl",k,l
1432 call add_task(iproc,ntask_cont_from,itask_cont_from)
1435 if (iatel_s_all(iproc).gt.0 .and. iatel_e_all(iproc).gt.0) then
1436 if (ii+1.ge.iatel_s_all(iproc).and.ii+1.le.iatel_e_all(iproc))
1438 if (jj+1.ge.ielstart_all(ii+1,iproc).and.
1439 & jj+1.le.ielend_all(ii+1,iproc)) then
1440 call add_task(iproc,ntask_cont_from,itask_cont_from)
1442 if (jj-1.ge.ielstart_all(ii+1,iproc).and.
1443 & jj-1.le.ielend_all(ii+1,iproc)) then
1444 call add_task(iproc,ntask_cont_from,itask_cont_from)
1447 if (ii-1.ge.iatel_s_all(iproc).and.ii-1.le.iatel_e_all(iproc))
1449 if (jj-1.ge.ielstart_all(ii-1,iproc).and.
1450 & jj-1.le.ielend_all(ii-1,iproc)) then
1451 call add_task(iproc,ntask_cont_from,itask_cont_from)
1453 if (jj+1.ge.ielstart_all(ii-1,iproc).and.
1454 & jj+1.le.ielend_all(ii-1,iproc)) then
1455 call add_task(iproc,ntask_cont_from,itask_cont_from)
1462 c---------------------------------------------------------------------------
1463 subroutine add_task(iproc,ntask_cont,itask_cont)
1465 include "DIMENSIONS"
1466 integer iproc,ntask_cont,itask_cont(0:max_fg_procs-1)
1469 if (itask_cont(ii).eq.iproc) return
1471 ntask_cont=ntask_cont+1
1472 itask_cont(ntask_cont)=iproc
1475 c---------------------------------------------------------------------------
1476 subroutine int_bounds(total_ints,lower_bound,upper_bound)
1478 include 'DIMENSIONS'
1480 include 'COMMON.SETUP'
1481 integer total_ints,lower_bound,upper_bound
1482 integer int4proc(0:max_fg_procs),sint4proc(0:max_fg_procs)
1483 integer i,nint,nexcess
1484 nint=total_ints/nfgtasks
1488 nexcess=total_ints-nint*nfgtasks
1490 int4proc(nfgtasks-i)=int4proc(nfgtasks-i)+1
1494 lower_bound=lower_bound+int4proc(i)
1496 upper_bound=lower_bound+int4proc(fg_rank)
1497 lower_bound=lower_bound+1
1500 c---------------------------------------------------------------------------
1501 subroutine int_bounds1(total_ints,lower_bound,upper_bound)
1503 include 'DIMENSIONS'
1505 include 'COMMON.SETUP'
1506 integer total_ints,lower_bound,upper_bound
1507 integer int4proc(0:max_fg_procs),sint4proc(0:max_fg_procs)
1508 integer i,nint,nexcess
1509 nint=total_ints/nfgtasks1
1513 nexcess=total_ints-nint*nfgtasks1
1515 int4proc(nfgtasks1-i)=int4proc(nfgtasks1-i)+1
1519 lower_bound=lower_bound+int4proc(i)
1521 upper_bound=lower_bound+int4proc(fg_rank1)
1522 lower_bound=lower_bound+1
1525 c---------------------------------------------------------------------------
1526 subroutine int_partition(int_index,lower_index,upper_index,atom,
1527 & at_start,at_end,first_atom,last_atom,int_gr,jat_start,jat_end,*)
1529 include 'DIMENSIONS'
1530 include 'COMMON.IOUNITS'
1531 integer int_index,lower_index,upper_index,atom,at_start,at_end,
1532 & first_atom,last_atom,int_gr,jat_start,jat_end,int_index_old
1535 if (lprn) write (iout,*) 'int_index=',int_index
1536 int_index_old=int_index
1537 int_index=int_index+last_atom-first_atom+1
1539 & write (iout,*) 'int_index=',int_index,
1540 & ' int_index_old',int_index_old,
1541 & ' lower_index=',lower_index,
1542 & ' upper_index=',upper_index,
1543 & ' atom=',atom,' first_atom=',first_atom,
1544 & ' last_atom=',last_atom
1545 if (int_index.ge.lower_index) then
1547 if (at_start.eq.0) then
1549 jat_start=first_atom-1+lower_index-int_index_old
1551 jat_start=first_atom
1553 if (lprn) write (iout,*) 'jat_start',jat_start
1554 if (int_index.ge.upper_index) then
1556 jat_end=first_atom-1+upper_index-int_index_old
1561 if (lprn) write (iout,*) 'jat_end',jat_end
1566 c------------------------------------------------------------------------------
1567 subroutine hpb_partition
1569 include 'DIMENSIONS'
1573 include 'COMMON.SBRIDGE'
1574 include 'COMMON.IOUNITS'
1575 include 'COMMON.SETUP'
1577 call int_bounds(nhpb,link_start,link_end)
1578 write (iout,*) 'Processor',fg_rank,' CG group',kolor,
1579 & ' absolute rank',MyRank,
1580 & ' nhpb',nhpb,' link_start=',link_start,
1581 & ' link_end',link_end
1588 c------------------------------------------------------------------------------
1589 subroutine homology_partition
1591 include 'DIMENSIONS'
1595 include 'COMMON.SBRIDGE'
1596 include 'COMMON.IOUNITS'
1597 include 'COMMON.SETUP'
1598 include 'COMMON.CONTROL'
1599 include 'COMMON.INTERACT'
1600 include 'COMMON.HOMOLOGY'
1601 cd write(iout,*)"homology_partition: lim_odl=",lim_odl,
1602 cd & " lim_dih",lim_dih
1604 if (me.eq.king .or. .not. out1file) write (iout,*) "MPI"
1605 call int_bounds(lim_odl,link_start_homo,link_end_homo)
1606 call int_bounds(lim_dih,idihconstr_start_homo,
1607 & idihconstr_end_homo)
1608 idihconstr_start_homo=idihconstr_start_homo+nnt-1+3
1609 idihconstr_end_homo=idihconstr_end_homo+nnt-1+3
1610 if (me.eq.king .or. .not. out1file)
1611 & write (iout,*) 'Processor',fg_rank,' CG group',kolor,
1612 & ' absolute rank',MyRank,
1613 & ' lim_odl',lim_odl,' link_start=',link_start_homo,
1614 & ' link_end',link_end_homo,' lim_dih',lim_dih,
1615 & ' idihconstr_start_homo',idihconstr_start_homo,
1616 & ' idihconstr_end_homo',idihconstr_end_homo
1618 write (iout,*) "Not MPI"
1620 link_end_homo=lim_odl
1621 idihconstr_start_homo=nnt+3
1622 idihconstr_end_homo=lim_dih+nnt-1+3
1624 & ' lim_odl',lim_odl,' link_start=',link_start_homo,
1625 & ' link_end',link_end_homo,' lim_dih',lim_dih,
1626 & ' idihconstr_start_homo',idihconstr_start_homo,
1627 & ' idihconstr_end_homo',idihconstr_end_homo
1631 c------------------------------------------------------------------------------
1632 subroutine NMRpeak_partition
1634 include 'DIMENSIONS'
1638 include 'COMMON.SBRIDGE'
1639 include 'COMMON.IOUNITS'
1640 include 'COMMON.SETUP'
1642 call int_bounds(npeak,link_start_peak,link_end_peak)
1643 write (iout,*) 'Processor',fg_rank,' CG group',kolor,
1644 & ' absolute rank',MyRank,
1645 & ' npeak',npeak,' link_start_peak=',link_start_peak,
1646 & ' link_end_peak',link_end_peak