X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=source%2Funres%2Fcontrol.F90;h=599a1080d693f269e5bb7b31d668788e2fb05a42;hb=refs%2Fheads%2FUCGM;hp=cc50b02e66daecbdc29fc006ad1e16a528763298;hpb=8d2ab9ba185dbbc31bfe3d1c66d7e1c9d632463b;p=unres4.git diff --git a/source/unres/control.F90 b/source/unres/control.F90 index cc50b02..599a108 100644 --- a/source/unres/control.F90 +++ b/source/unres/control.F90 @@ -148,6 +148,7 @@ ! ! The following is just to define auxiliary variables used in angle conversion ! +! ifirstrun=0 pi=4.0D0*datan(1.0D0) dwapi=2.0D0*pi dwapi3=dwapi/3.0D0 @@ -214,6 +215,7 @@ icsa_in=40 !rc for ifc error 118 icsa_pdb=42 + irotam_end=43 #endif iscpp=25 icbase=16 @@ -229,8 +231,32 @@ iweight=31 izsc=32 #endif + ibond_nucl=126 + ithep_nucl=127 + irotam_nucl=128 + itorp_nucl= 129 + itordp_nucl= 130 +! ielep_nucl= 131 + isidep_nucl=132 + iscpp_nucl=133 + isidep_scbase=141 + isidep_pepbase=142 + isidep_scpho=143 + isidep_peppho=144 + iliptranpar=60 + itube=61 +! LIPID MARTINI + ilipbond=301 + ilipnonbond=302 + imartprot=303 ! this parameters are between protein and martini form of lipid +! IONS + iion=401 + iionnucl=402 + iiontran=403 ! this is parameter file for transition metals + iwaterwater=404 + iwatersc=405 #if defined(WHAM_RUN) || defined(CLUSTER) ! ! setting the mpi variables for WHAM @@ -349,7 +375,7 @@ ! enddo !iblock ! do i=1,maxres -! itype(i)=0 +! itype(i,1)=0 ! itel(i)=0 ! enddo ! Initialize the bridge arrays @@ -375,8 +401,8 @@ ! !c maxfun=5000 !c maxit=2000 - maxfun=500 - maxit=200 + maxfun=1000 + maxit=1000 tolf=1.0D-2 rtolf=5.0D-4 ! @@ -477,35 +503,70 @@ logical :: scheck,lprint,flag !el local variables - integer :: ind_scint=0,ind_scint_old,ii,jj,i,j,iint - + integer :: ind_scint=0,ind_scint_old,ii,jj,i,j,iint,itmp + integer :: ind_scint_nucl=0 #ifdef MPI integer :: my_sc_int(0:nfgtasks-1),my_ele_int(0:nfgtasks-1) integer :: my_sc_intt(0:nfgtasks),my_ele_intt(0:nfgtasks) integer :: n_sc_int_tot,my_sc_inde,my_sc_inds,ind_sctint,npept + integer :: n_sc_int_tot_nucl,my_sc_inde_nucl,my_sc_inds_nucl, & + ind_sctint_nucl,npept_nucl + integer :: nele_int_tot,my_ele_inds,my_ele_inde,ind_eleint_old,& ind_eleint,ijunk,nele_int_tot_vdw,my_ele_inds_vdw,& my_ele_inde_vdw,ind_eleint_vdw,ind_eleint_vdw_old,& nscp_int_tot,my_scp_inds,my_scp_inde,ind_scpint,& ind_scpint_old,nsumgrad,nlen,ngrad_start,ngrad_end,& ierror,k,ierr,iaux,ncheck_to,ncheck_from,ind_typ,& - ichunk,int_index_old - + ichunk,int_index_old,ibra + integer :: nele_int_tot_nucl,my_ele_inds_nucl,my_ele_inde_nucl,& + ind_eleint_old_nucl,ind_eleint_nucl,nele_int_tot_vdw_nucl,& + my_ele_inds_vdw_nucl,my_ele_inde_vdw_nucl,ind_eleint_vdw_nucl,& + ind_eleint_vdw_old_nucl,nscp_int_tot_nucl,my_scp_inds_nucl,& + my_scp_inde_nucl,ind_scpint_nucl,ind_scpint_old_nucl,impishi + integer(kind=1),dimension(:,:),allocatable :: remmat +! integer,dimension(5) :: nct_molec,nnt_molec !el allocate(itask_cont_from(0:nfgtasks-1)) !(0:max_fg_procs-1) !el allocate(itask_cont_to(0:nfgtasks-1)) !(0:max_fg_procs-1) !... Determine the numbers of start and end SC-SC interaction !... to deal with by current processor. !write (iout,*) '******INIT_INT_TABLE nres=',nres,' nnt=',nnt,' nct=',nct + print *,"in spliting contacts" do i=0,nfgtasks-1 itask_cont_from(i)=fg_rank itask_cont_to(i)=fg_rank enddo lprint=energy_dec + itmp=0 + do i=1,5 + print *,i,nres_molec(i) + if (nres_molec(i).eq.0) cycle + itmp=itmp+nres_molec(i) + if (itype(itmp,i).eq.ntyp1_molec(i)) then + nct_molec(i)=itmp-1 + else + nct_molec(i)=itmp + endif + enddo +! nct_molec(1)=nres_molec(1)-1 + itmp=0 + do i=2,5 + itmp=itmp+nres_molec(i-1) + if (itype(itmp+1,i).eq.ntyp1_molec(i)) then + nnt_molec(i)=itmp+2 + else + nnt_molec(i)=itmp+1 + endif + enddo +! if (.not.allocated(nres_molec)) print *,"WHATS WRONG" + print *,"nres_molec",nres_molec(:) + print *,"nnt_molec",nnt_molec(:) + print *,"nct_molec",nct_molec(:) ! lprint=.true. if (lprint) & write (iout,*)'INIT_INT_TABLE nres=',nres,' nnt=',nnt,' nct=',nct - n_sc_int_tot=(nct-nnt+1)*(nct-nnt)/2-nss + n_sc_int_tot=(nct_molec(1)-nnt+1)*(nct_molec(1)-nnt)/2-nss call int_bounds(n_sc_int_tot,my_sc_inds,my_sc_inde) !write (iout,*) 'INIT_INT_TABLE nres=',nres,' nnt=',nnt,' nct=',nct if (lprint) & @@ -517,6 +578,7 @@ iatsc_s=0 iatsc_e=0 #endif + if(.not.allocated(ielstart_all)) then !el common /przechowalnia/ allocate(iturn3_start_all(0:nfgtasks)) allocate(iturn3_end_all(0:nfgtasks)) @@ -532,7 +594,9 @@ allocate(itask_cont_from_all(0:nfgtasks-1,0:nfgtasks-1)) allocate(itask_cont_to_all(0:nfgtasks-1,0:nfgtasks-1)) !el---------- + endif ! lprint=.false. + print *,"NCT",nct_molec(1),nct do i=1,nres !el !maxres nint_gr(i)=0 nscp_gr(i)=0 @@ -549,7 +613,9 @@ ind_scint_old=0 !d write (iout,*) 'ns=',ns,' nss=',nss,' ihpb,jhpb', !d & (ihpb(i),jhpb(i),i=1,nss) - do i=nnt,nct-1 +! print *,nnt,nct_molec(1) + do i=nnt,nct_molec(1)-1 +! print*, "inloop",i scheck=.false. if (dyn_ss) goto 10 do ii=1,nss @@ -560,27 +626,28 @@ endif enddo 10 continue +! print *,'i=',i,' scheck=',scheck,' jj=',jj !d write (iout,*) 'i=',i,' scheck=',scheck,' jj=',jj if (scheck) then if (jj.eq.i+1) then #ifdef MPI ! write (iout,*) 'jj=i+1' call int_partition(ind_scint,my_sc_inds,my_sc_inde,i,& - iatsc_s,iatsc_e,i+2,nct,nint_gr(i),istart(i,1),iend(i,1),*12) + iatsc_s,iatsc_e,i+2,nct_molec(1),nint_gr(i),istart(i,1),iend(i,1),*12) #else nint_gr(i)=1 istart(i,1)=i+2 iend(i,1)=nct #endif - else if (jj.eq.nct) then + else if (jj.eq.nct_molec(1)) then #ifdef MPI ! write (iout,*) 'jj=nct' call int_partition(ind_scint,my_sc_inds,my_sc_inde,i,& - iatsc_s,iatsc_e,i+1,nct-1,nint_gr(i),istart(i,1),iend(i,1),*12) + iatsc_s,iatsc_e,i+1,nct_molec(1)-1,nint_gr(i),istart(i,1),iend(i,1),*12) #else nint_gr(i)=1 istart(i,1)=i+1 - iend(i,1)=nct-1 + iend(i,1)=nct_molecule(1)-1 #endif else #ifdef MPI @@ -588,24 +655,29 @@ iatsc_s,iatsc_e,i+1,jj-1,nint_gr(i),istart(i,1),iend(i,1),*12) ii=nint_gr(i)+1 call int_partition(ind_scint,my_sc_inds,my_sc_inde,i,& - iatsc_s,iatsc_e,jj+1,nct,nint_gr(i),istart(i,ii),iend(i,ii),*12) + iatsc_s,iatsc_e,jj+1,nct_molec(1),nint_gr(i),istart(i,ii),iend(i,ii),*12) + #else nint_gr(i)=2 istart(i,1)=i+1 iend(i,1)=jj-1 istart(i,2)=jj+1 - iend(i,2)=nct + iend(i,2)=nct_molec(1) #endif endif else #ifdef MPI +! print *,"i for EVDW",iatsc_s,iatsc_e,istart(i,1),iend(i,1),& +! i+1,nct_molec(1),nint_gr(i),ind_scint,my_sc_inds,my_sc_inde,i call int_partition(ind_scint,my_sc_inds,my_sc_inde,i,& - iatsc_s,iatsc_e,i+1,nct,nint_gr(i),istart(i,1),iend(i,1),*12) + iatsc_s,iatsc_e,i+1,nct_molec(1),nint_gr(i), & + istart(i,1),iend(i,1),*12) +! print *,"i for EVDW",iatsc_s,iatsc_e,istart(i,1),iend(i,1) #else nint_gr(i)=1 istart(i,1)=i+1 - iend(i,1)=nct - ind_scint=ind_scint+nct-i + iend(i,1)=nct_molec(1) + ind_scint=ind_scint+nct_molec(1)-i #endif endif #ifdef MPI @@ -613,26 +685,77 @@ #endif enddo 12 continue +! print *,"i for EVDW",iatsc_s,iatsc_e,istart(i,1),iend(i,1) + #ifndef MPI iatsc_s=nnt iatsc_e=nct-1 #endif if (iatsc_s.eq.0) iatsc_s=1 +!----------------- scaling for nucleic acid GB + n_sc_int_tot_nucl=(nct_molec(2)-nnt_molec(2)+1)*(nct_molec(2)-nnt_molec(2))/2 + call int_bounds(n_sc_int_tot_nucl,my_sc_inds_nucl,my_sc_inde_nucl) +!write (iout,*) 'INIT_INT_TABLE nres=',nres,' nnt=',nnt,' nct=',nct + if (lprint) & + write (iout,*) 'Processor',fg_rank,' CG group',kolor,& + ' absolute rank',MyRank,& + ' n_sc_int_tot',n_sc_int_tot_nucl,' my_sc_inds=',my_sc_inds_nucl,& + ' my_sc_inde',my_sc_inde_nucl + ind_sctint_nucl=0 + iatsc_s_nucl=0 + iatsc_e_nucl=0 + do i=1,nres !el !maxres + nint_gr_nucl(i)=0 + nscp_gr_nucl(i)=0 + ielstart_nucl(i)=0 + ielend_nucl(i)=0 + do j=1,maxint_gr + istart_nucl(i,j)=0 + iend_nucl(i,j)=0 + iscpstart_nucl(i,j)=0 + iscpend_nucl(i,j)=0 + enddo + enddo + do i=nnt_molec(2),nct_molec(2)-1 + print*, "inloop2",i + call int_partition(ind_scint_nucl,my_sc_inds_nucl,my_sc_inde_nucl,i,& + iatsc_s_nucl,iatsc_e_nucl,i+1,nct_molec(2),nint_gr_nucl(i), & + istart_nucl(i,1),iend_nucl(i,1),*112) + print *,istart_nucl(i,1) + enddo + 112 continue + if (iatsc_s_nucl.eq.0) iatsc_s_nucl=1 + print *,"tu mam",iatsc_s_nucl,iatsc_e_nucl + #ifdef MPI if (lprint) write (*,*) 'Processor',fg_rank,' CG Group',kolor,& ' absolute rank',myrank,' iatsc_s=',iatsc_s,' iatsc_e=',iatsc_e #endif +! lprint=.true. if (lprint) then write (iout,'(a)') 'Interaction array:' do i=iatsc_s,iatsc_e write (iout,'(i3,2(2x,2i3))') & i,(istart(i,iint),iend(i,iint),iint=1,nint_gr(i)) enddo +! endif +! lprint=.false. + write (iout,'(a)') 'Interaction array2:' + do i=iatsc_s_nucl,iatsc_e_nucl + write (iout,'(i3,2(2x,2i4))') & + i,(istart_nucl(i,iint),iend_nucl(i,iint),iint=1,nint_gr_nucl(i)) + enddo endif ispp=4 !?? wham ispp=2 #ifdef MPI ! Now partition the electrostatic-interaction array - npept=nct-nnt + if (nres_molec(1).eq.0) then + npept=0 + elseif (itype(nres_molec(1),1).eq.ntyp1_molec(1)) then + npept=nres_molec(1)-nnt-1 + else + npept=nres_molec(1)-nnt + endif nele_int_tot=(npept-ispp)*(npept-ispp+1)/2 call int_bounds(nele_int_tot,my_ele_inds,my_ele_inde) if (lprint) & @@ -644,13 +767,51 @@ iatel_e=0 ind_eleint=0 ind_eleint_old=0 - do i=nnt,nct-3 +! if (itype(nres_molec(1),1).eq.ntyp1_molec(1)) then +! nct_molec(1)=nres_molec(1)-1 +! else +! nct_molec(1)=nres_molec(1) +! endif +! print *,"nct",nct,nct_molec(1),itype(nres_molec(1),1),ntyp_molec(1) + do i=nnt,nct_molec(1)-3 ijunk=0 call int_partition(ind_eleint,my_ele_inds,my_ele_inde,i,& - iatel_s,iatel_e,i+ispp,nct-1,ijunk,ielstart(i),ielend(i),*13) + iatel_s,iatel_e,i+ispp,nct_molec(1)-1,ijunk,ielstart(i),ielend(i),*13) enddo ! i 13 continue if (iatel_s.eq.0) iatel_s=1 +!----------now nucleic acid +! if (itype(nres_molec(2),2).eq.ntyp1_molec(2)) then + npept_nucl=nct_molec(2)-nnt_molec(2) +! else +! npept_nucl=nct_molec(2)-nnt_molec(2) +! endif + nele_int_tot_nucl=(npept_nucl-ispp)*(npept_nucl-ispp+1)/2 + call int_bounds(nele_int_tot_nucl,my_ele_inds_nucl,my_ele_inde_nucl) + if (lprint) & + write (*,*) 'Processor',fg_rank,' CG group',kolor,& + ' absolute rank',MyRank,& + ' nele_int_tot',nele_int_tot,' my_ele_inds=',my_ele_inds,& + ' my_ele_inde',my_ele_inde + iatel_s_nucl=0 + iatel_e_nucl=0 + ind_eleint_nucl=0 + ind_eleint_old_nucl=0 +! if (itype(nres_molec(1),1).eq.ntyp1_molec(1)) then +! nct_molec(1)=nres_molec(1)-1 +! else +! nct_molec(1)=nres_molec(1) +! endif +! print *,"nct",nct,nct_molec(1),itype(nres_molec(1),1),ntyp_molec(1) + do i=nnt_molec(2),nct_molec(2)-3 + ijunk=0 + call int_partition(ind_eleint_nucl,my_ele_inds_nucl,my_ele_inde_nucl,i,& + iatel_s_nucl,iatel_e_nucl,i+ispp,nct_molec(2)-1,& + ijunk,ielstart_nucl(i),ielend_nucl(i),*113) + enddo ! i + 113 continue + if (iatel_s_nucl.eq.0) iatel_s_nucl=1 + nele_int_tot_vdw=(npept-2)*(npept-2+1)/2 ! write (iout,*) "nele_int_tot_vdw",nele_int_tot_vdw call int_bounds(nele_int_tot_vdw,my_ele_inds_vdw,my_ele_inde_vdw) @@ -660,29 +821,54 @@ ind_eleint_vdw_old=0 iatel_s_vdw=0 iatel_e_vdw=0 - do i=nnt,nct-3 + do i=nnt,nct_molec(1)-3 ijunk=0 call int_partition(ind_eleint_vdw,my_ele_inds_vdw,& my_ele_inde_vdw,i,& - iatel_s_vdw,iatel_e_vdw,i+2,nct-1,ijunk,ielstart_vdw(i),& + iatel_s_vdw,iatel_e_vdw,i+2,nct_molec(1)-1,ijunk,ielstart_vdw(i),& ielend_vdw(i),*15) ! write (iout,*) i," ielstart_vdw",ielstart_vdw(i), ! & " ielend_vdw",ielend_vdw(i) enddo ! i if (iatel_s_vdw.eq.0) iatel_s_vdw=1 15 continue + if (iatel_s.eq.0) iatel_s=1 + if (iatel_s_vdw.eq.0) iatel_s_vdw=1 + nele_int_tot_vdw_nucl=(npept_nucl-2)*(npept_nucl-2+1)/2 +! write (iout,*) "nele_int_tot_vdw",nele_int_tot_vdw + call int_bounds(nele_int_tot_vdw_nucl,my_ele_inds_vdw_nucl,& + my_ele_inde_vdw_nucl) +! write (iout,*) "my_ele_inds_vdw",my_ele_inds_vdw, +! & " my_ele_inde_vdw",my_ele_inde_vdw + ind_eleint_vdw_nucl=0 + ind_eleint_vdw_old_nucl=0 + iatel_s_vdw_nucl=0 + iatel_e_vdw_nucl=0 + do i=nnt_molec(2),nct_molec(2)-3 + ijunk=0 + call int_partition(ind_eleint_vdw_nucl,my_ele_inds_vdw_nucl,& + my_ele_inde_vdw_nucl,i,& + iatel_s_vdw_nucl,iatel_e_vdw_nucl,i+2,nct_molec(2)-1,& + ijunk,ielstart_vdw_nucl(i),& + ielend_vdw(i),*115) +! write (iout,*) i," ielstart_vdw",ielstart_vdw(i), +! & " ielend_vdw",ielend_vdw(i) + enddo ! i + if (iatel_s_vdw.eq.0) iatel_s_vdw_nucl=1 + 115 continue + #else iatel_s=nnt - iatel_e=nct-5 ! ?? wham iatel_e=nct-3 + iatel_e=nct_molec(1)-5 ! ?? wham iatel_e=nct-3 do i=iatel_s,iatel_e ielstart(i)=i+4 ! ?? wham +2 - ielend(i)=nct-1 + ielend(i)=nct_molec(1)-1 enddo iatel_s_vdw=nnt - iatel_e_vdw=nct-3 + iatel_e_vdw=nct_molec(1)-3 do i=iatel_s_vdw,iatel_e_vdw ielstart_vdw(i)=i+2 - ielend_vdw(i)=nct-1 + ielend_vdw(i)=nct_molec(1)-1 enddo #endif if (lprint) then @@ -695,6 +881,7 @@ endif ! lprint ! iscp=3 iscp=2 + iscp_nucl=2 ! Partition the SC-p interaction array #ifdef MPI nscp_int_tot=(npept-iscp+1)*(npept-iscp+1) @@ -707,11 +894,11 @@ iatscp_e=0 ind_scpint=0 ind_scpint_old=0 - do i=nnt,nct-1 + do i=nnt,nct_molec(1)-1 if (i.lt.nnt+iscp) then !d write (iout,*) 'i.le.nnt+iscp' call int_partition(ind_scpint,my_scp_inds,my_scp_inde,i,& - iatscp_s,iatscp_e,i+iscp,nct,nscp_gr(i),iscpstart(i,1),& + iatscp_s,iatscp_e,i+iscp,nct_molec(1),nscp_gr(i),iscpstart(i,1),& iscpend(i,1),*14) else if (i.gt.nct-iscp) then !d write (iout,*) 'i.gt.nct-iscp' @@ -724,19 +911,61 @@ iscpend(i,1),*14) ii=nscp_gr(i)+1 call int_partition(ind_scpint,my_scp_inds,my_scp_inde,i,& - iatscp_s,iatscp_e,i+iscp,nct,nscp_gr(i),iscpstart(i,ii),& + iatscp_s,iatscp_e,i+iscp,nct_molec(1),nscp_gr(i),iscpstart(i,ii),& iscpend(i,ii),*14) endif enddo ! i 14 continue + print *,"before inloop3",iatscp_s,iatscp_e,iscp_nucl + nscp_int_tot_nucl=(npept_nucl-iscp_nucl+1)*(npept_nucl-iscp_nucl+1) + call int_bounds(nscp_int_tot_nucl,my_scp_inds_nucl,my_scp_inde_nucl) + if (lprint) write (iout,*) 'Processor',fg_rank,' CG group',kolor,& + ' absolute rank',myrank,& + ' nscp_int_tot',nscp_int_tot_nucl,' my_scp_inds=',my_scp_inds_nucl,& + ' my_scp_inde',my_scp_inde_nucl + print *,"nscp_int_tot_nucl",nscp_int_tot_nucl,my_scp_inds_nucl,my_scp_inde_nucl + iatscp_s_nucl=0 + iatscp_e_nucl=0 + ind_scpint_nucl=0 + ind_scpint_old_nucl=0 + do i=nnt_molec(2),nct_molec(2)-1 + print *,"inloop3",i,nnt_molec(2)+iscp,nct_molec(2)-iscp + if (i.lt.nnt_molec(2)+iscp) then +!d write (iout,*) 'i.le.nnt+iscp' + call int_partition(ind_scpint_nucl,my_scp_inds_nucl,& + my_scp_inde_nucl,i,iatscp_s_nucl,iatscp_e_nucl,i+iscp,& + nct_molec(2),nscp_gr_nucl(i),iscpstart_nucl(i,1),& + iscpend_nucl(i,1),*114) + else if (i.gt.nct_molec(2)-iscp) then +!d write (iout,*) 'i.gt.nct-iscp' + call int_partition(ind_scpint_nucl,my_scp_inds_nucl,& + my_scp_inde_nucl,i,& + iatscp_s_nucl,iatscp_e_nucl,nnt_molec(2),i-iscp,nscp_gr_nucl(i),& + iscpstart_nucl(i,1),& + iscpend_nucl(i,1),*114) + else + call int_partition(ind_scpint_nucl,my_scp_inds_nucl,& + my_scp_inde_nucl,i,iatscp_s_nucl,iatscp_e_nucl,nnt_molec(2),& + i-iscp,nscp_gr_nucl(i),iscpstart_nucl(i,1),& + iscpend_nucl(i,1),*114) + ii=nscp_gr_nucl(i)+1 + call int_partition(ind_scpint_nucl,my_scp_inds_nucl,& + my_scp_inde_nucl,i,iatscp_s_nucl,iatscp_e_nucl,i+iscp,& + nct_molec(2),nscp_gr_nucl(i),iscpstart_nucl(i,ii),& + iscpend_nucl(i,ii),*114) + endif + enddo ! i + 114 continue + print *, "after inloop3",iatscp_s_nucl,iatscp_e_nucl + if (iatscp_s_nucl.eq.0) iatscp_s_nucl=1 #else iatscp_s=nnt - iatscp_e=nct-1 - do i=nnt,nct-1 + iatscp_e=nct_molec(1)-1 + do i=nnt,nct_molec(1)-1 if (i.lt.nnt+iscp) then nscp_gr(i)=1 iscpstart(i,1)=i+iscp - iscpend(i,1)=nct + iscpend(i,1)=nct_molec(1) elseif (i.gt.nct-iscp) then nscp_gr(i)=1 iscpstart(i,1)=nnt @@ -746,7 +975,7 @@ iscpstart(i,1)=nnt iscpend(i,1)=i-iscp iscpstart(i,2)=i+iscp - iscpend(i,2)=nct + iscpend(i,2)=nct_molec(1) endif enddo ! i #endif @@ -760,47 +989,77 @@ endif ! lprint ! Partition local interactions #ifdef MPI - call int_bounds(nres-2,loc_start,loc_end) + call int_bounds(nres_molec(1)-2,loc_start,loc_end) loc_start=loc_start+1 loc_end=loc_end+1 - call int_bounds(nres-2,ithet_start,ithet_end) + call int_bounds(nres_molec(2)-2,loc_start_nucl,loc_end_nucl) + loc_start_nucl=loc_start_nucl+1+nres_molec(1) + loc_end_nucl=loc_end_nucl+1+nres_molec(1) + call int_bounds(nres_molec(1)-2,ithet_start,ithet_end) ithet_start=ithet_start+2 ithet_end=ithet_end+2 - call int_bounds(nct-nnt-2,iturn3_start,iturn3_end) + call int_bounds(nres_molec(2)-2,ithet_nucl_start,ithet_nucl_end) + ithet_nucl_start=ithet_nucl_start+2+nres_molec(1) + ithet_nucl_end=ithet_nucl_end+2+nres_molec(1) + call int_bounds(nct_molec(1)-nnt-2,iturn3_start,iturn3_end) iturn3_start=iturn3_start+nnt iphi_start=iturn3_start+2 iturn3_end=iturn3_end+nnt iphi_end=iturn3_end+2 iturn3_start=iturn3_start-1 + if (iturn3_start.eq.0) iturn3_start=1 iturn3_end=iturn3_end-1 - call int_bounds(nres-3,itau_start,itau_end) + call int_bounds(nct_molec(2)-nnt_molec(2)-2,iphi_nucl_start,iphi_nucl_end) + iphi_nucl_start=iphi_nucl_start+nnt_molec(2)+2 + iphi_nucl_end=iphi_nucl_end+nnt_molec(2)+2 + print *,"KURDE",iphi_nucl_start,iphi_nucl_end + call int_bounds(nres_molec(1)-3,itau_start,itau_end) itau_start=itau_start+3 itau_end=itau_end+3 - call int_bounds(nres-3,iphi1_start,iphi1_end) + call int_bounds(nres_molec(1)-3,iphi1_start,iphi1_end) iphi1_start=iphi1_start+3 iphi1_end=iphi1_end+3 - call int_bounds(nct-nnt-3,iturn4_start,iturn4_end) + call int_bounds(nct_molec(1)-nnt-3,iturn4_start,iturn4_end) iturn4_start=iturn4_start+nnt iphid_start=iturn4_start+2 iturn4_end=iturn4_end+nnt iphid_end=iturn4_end+2 iturn4_start=iturn4_start-1 iturn4_end=iturn4_end-1 - call int_bounds(nres-2,ibond_start,ibond_end) + if (iturn4_start.eq.0) iturn4_start=1 +! print *,"TUTUTU",nres_molec(1),nres + call int_bounds(nres_molec(1)-2,ibond_start,ibond_end) ibond_start=ibond_start+1 ibond_end=ibond_end+1 - call int_bounds(nct-nnt,ibondp_start,ibondp_end) +! print *,ibond_start,ibond_end + call int_bounds(nct_molec(1)-nnt,ibondp_start,ibondp_end) ibondp_start=ibondp_start+nnt ibondp_end=ibondp_end+nnt - call int_bounds1(nres-1,ivec_start,ivec_end) + call int_bounds(nres_molec(2)-2,ibond_nucl_start,ibond_nucl_end) + ibond_nucl_start=ibond_nucl_start+nnt_molec(2)-1 + ibond_nucl_end=ibond_nucl_end+nnt_molec(2)-1 + print *,"NUCLibond",ibond_nucl_start,ibond_nucl_end + if (nres_molec(2).ne.0) then + print *, "before devision",nnt_molec(2),nct_molec(2)-nnt_molec(2) + call int_bounds(nres_molec(2)-1,ibondp_nucl_start,ibondp_nucl_end) + ibondp_nucl_start=ibondp_nucl_start+nnt_molec(2)-1 + ibondp_nucl_end=ibondp_nucl_end+nnt_molec(2)-1 + else + ibondp_nucl_start=1 + ibondp_nucl_end=0 + endif + print *,"NUCLibond2",ibondp_nucl_start,ibondp_nucl_end + + + call int_bounds1(nres_molec(1)-1,ivec_start,ivec_end) ! print *,"Processor",myrank,fg_rank,fg_rank1, ! & " ivec_start",ivec_start," ivec_end",ivec_end iset_start=loc_start+2 iset_end=loc_end+2 - call int_bounds(nres,ilip_start,ilip_end) + call int_bounds(nres_molec(1),ilip_start,ilip_end) ilip_start=ilip_start ilip_end=ilip_end - call int_bounds(nres-1,itube_start,itube_end) + call int_bounds(nres_molec(1)-1,itube_start,itube_end) itube_start=itube_start itube_end=itube_end if (ndih_constr.eq.0) then @@ -816,7 +1075,74 @@ call int_bounds & (ntheta_constr,ithetaconstr_start,ithetaconstr_end) endif +! HERE MAKING LISTS FOR MARTINI + itmp=0 + do i=1,3 + itmp=itmp+nres_molec(i) + enddo +!First bonding +! call int_bounds(nres_molec(4)-1,ilipbond_start,ilipbond_end) + ilipbond_start=1+itmp + ilipbond_end=nres_molec(4)-1+itmp +!angles + call int_bounds(nres_molec(4)-1,ilipbond_start_tub,ilipbond_end_tub) + ilipbond_start_tub=1+itmp + ilipbond_end_tub=nres_molec(4)-1+itmp +! call int_bounds(nres_molec(4)-2,ilipang_start,ilipang_end) + ilipang_start=2+itmp + ilipang_end=itmp+nres_molec(4)-1 +! create LJ LIST MAXIMUM +! Eliminate branching from list + if(.not.allocated(remmat))& + allocate(remmat(itmp+1:nres_molec(4)+itmp,itmp+1:nres_molec(4)+itmp)) + remmat=0 + do i=1+itmp,nres_molec(4)-1+itmp + if (itype(i,4).eq.12) ibra=i + if (itype(i,4).eq.ntyp1_molec(4)-1) then +! remmat(ibra-1,i+1)=1 + remmat(ibra,i+1)=1 +! remmat(ibra+1,i+1)=1 + endif + enddo + maxljliplist=0 + if (.not.allocated(mlipljlisti)) then + allocate (mlipljlisti(nres_molec(4)*nres_molec(4)/2)) + allocate (mlipljlistj(nres_molec(4)*nres_molec(4)/2)) + endif + do i=1+itmp,nres_molec(4)-1+itmp + do j=i+2,nres_molec(4)+itmp + if ((itype(i,4).le.ntyp_molec(4)).and.(itype(j,4).le.ntyp_molec(4))& + .and.(remmat(i,j).eq.0)) then + maxljliplist=maxljliplist+1 + mlipljlisti(maxljliplist)=i + mlipljlistj(maxljliplist)=j + if (energy_dec) print *,i,j,remmat(i,j),"lj lip list" + endif + enddo + enddo +! split the bound of the list + call int_bounds(maxljliplist,iliplj_start,iliplj_end) + iliplj_start=iliplj_start + iliplj_end=iliplj_end +! now the electrostatic list + maxelecliplist=0 + if (.not.allocated(mlipeleclisti)) then + allocate (mlipeleclisti(nres_molec(4)*nres_molec(4)/2)) + allocate (mlipeleclistj(nres_molec(4)*nres_molec(4)/2)) + endif + do i=1+itmp,nres_molec(4)-1+itmp + do j=i+2,nres_molec(4)+itmp + if ((itype(i,4).le.4).and.(itype(j,4).le.4)) then + maxelecliplist=maxelecliplist+1 + mlipeleclisti(maxelecliplist)=i + mlipeleclistj(maxelecliplist)=j + endif + enddo + enddo + call int_bounds(maxelecliplist,ilip_elec_start,ilipelec_end) + ilip_elec_start=ilip_elec_start + ilipelec_end=ilipelec_end ! nsumgrad=(nres-nnt)*(nres-nnt+1)/2 ! nlen=nres-nnt+1 nsumgrad=(nres-nnt)*(nres-nnt+1)/2 @@ -839,6 +1165,17 @@ jgrad_start(i)=i+1 jgrad_end(i)=nres enddo +! THIS SHOULD BE FIXED + itmp=0 + do i=1,4 + itmp=itmp+nres_molec(i) + enddo + call int_bounds(nres_molec(5),icatb_start,icatb_end) + icatb_start=icatb_start+itmp + icatb_end=icatb_end+itmp + + + if (lprint) then write (*,*) 'Processor:',fg_rank,' CG group',kolor,& ' absolute rank',myrank,& @@ -857,10 +1194,10 @@ write (*,*) 'Processor:',fg_rank,myrank,' igrad_start',& igrad_start,' igrad_end',igrad_end,' ngrad_start',ngrad_start,& ' ngrad_end',ngrad_end - do i=igrad_start,igrad_end - write(*,*) 'Processor:',fg_rank,myrank,i,& - jgrad_start(i),jgrad_end(i) - enddo +! do i=igrad_start,igrad_end +! write(*,*) 'Processor:',fg_rank,myrank,i,& +! jgrad_start(i),jgrad_end(i) +! enddo endif if (nfgtasks.gt.1) then call MPI_Allgather(ivec_start,1,MPI_INTEGER,ivec_displ(0),1,& @@ -927,6 +1264,10 @@ write (iout,*) "iturn4_end_all",& (iturn4_end_all(i),i=0,nfgtasks-1) write (iout,*) "The ielstart_all array" +! do i=0,nfgtasks-1 +! if (iturn3_start_all(i).le.0) iturn3_start_all(i)=1 +! if (iturn4_start_all(i).le.0) iturn4_start_all(i)=1 +! enddo do i=nnt,nct write (iout,'(20i4)') i,(ielstart_all(i,j),j=0,nfgtasks-1) enddo @@ -978,6 +1319,7 @@ ! write (iout,*) "Loop backward iatel_e-1",iatel_e-1, ! & " iatel_e",iatel_e ! call flush(iout) +#ifndef NEWCORR nat_sent=0 do i=iatel_s,iatel_e ! write (iout,*) "i",i," ielstart",ielstart(i), @@ -993,6 +1335,7 @@ iat_sent(nat_sent)=i endif enddo +#endif if (lprint) then write (iout,*)"After longrange ntask_cont_from",ntask_cont_from,& " ntask_cont_to",ntask_cont_to @@ -1001,12 +1344,14 @@ write (iout,*) "itask_cont_to",& (itask_cont_to(i),i=1,ntask_cont_to) call flush(iout) +#ifndef NEWCORR write (iout,*) "iint_sent" do i=1,nat_sent ii=iat_sent(i) write (iout,'(20i4)') ii,(j,(iint_sent(k,j,i),k=1,4),& j=ielstart(ii),ielend(ii)) enddo +#endif write (iout,*) "iturn3_sent iturn3_start",iturn3_start,& " iturn3_end",iturn3_end write (iout,'(20i4)') (i,(iturn3_sent(j,i),j=1,4),& @@ -1100,24 +1445,31 @@ itask_cont_from(0),CONT_FROM_GROUP,IERR) call MPI_Group_incl(fg_group,ntask_cont_to+1,itask_cont_to(0),& CONT_TO_GROUP,IERR) +#ifndef NEWCORR do i=1,nat_sent ii=iat_sent(i) iaux=4*(ielend(ii)-ielstart(ii)+1) + if (iaux.lt.0) iaux=0 call MPI_Group_translate_ranks(fg_group,iaux,& iint_sent(1,ielstart(ii),i),CONT_TO_GROUP,& iint_sent_local(1,ielstart(ii),i),IERR ) ! write (iout,*) "Ranks translated i=",i ! call flush(iout) enddo +#endif iaux=4*(iturn3_end-iturn3_start+1) + if (iaux.lt.0) iaux=0 call MPI_Group_translate_ranks(fg_group,iaux,& iturn3_sent(1,iturn3_start),CONT_TO_GROUP,& iturn3_sent_local(1,iturn3_start),IERR) iaux=4*(iturn4_end-iturn4_start+1) + if (iaux.lt.0) iaux=0 call MPI_Group_translate_ranks(fg_group,iaux,& iturn4_sent(1,iturn4_start),CONT_TO_GROUP,& iturn4_sent_local(1,iturn4_start),IERR) if (lprint) then +#ifndef NEWCORR + write (iout,*) "iint_sent_local" do i=1,nat_sent ii=iat_sent(i) @@ -1125,6 +1477,8 @@ j=ielstart(ii),ielend(ii)) call flush(iout) enddo +#endif + if (iturn3_end.gt.0) then write (iout,*) "iturn3_sent_local iturn3_start",iturn3_start,& " iturn3_end",iturn3_end write (iout,'(20i4)') (i,(iturn3_sent_local(j,i),j=1,4),& @@ -1135,6 +1489,7 @@ i=iturn4_start,iturn4_end) call flush(iout) endif + endif call MPI_Group_free(fg_group,ierr) call MPI_Group_free(cont_from_group,ierr) call MPI_Group_free(cont_to_group,ierr) @@ -1143,6 +1498,16 @@ call MPI_Type_contiguous(18,MPI_DOUBLE_PRECISION,MPI_UYZGRAD,& IERROR) call MPI_Type_commit(MPI_UYZGRAD,IERROR) + call MPI_Type_contiguous(maxcontsshi,MPI_INTEGER,MPI_I50,IERROR) + call MPI_Type_commit(MPI_I50,IERROR) + call MPI_Type_contiguous(maxcontsshi,MPI_DOUBLE_PRECISION,MPI_D50,IERROR) + call MPI_Type_commit(MPI_D50,IERROR) + + impishi=maxcontsshi*3 +! call MPI_Type_contiguous(impishi,MPI_DOUBLE_PRECISION, & +! MPI_SHI,IERROR) +! call MPI_Type_commit(MPI_SHI,IERROR) +! print *,MPI_SHI,"MPI_SHI",MPI_D50 call MPI_Type_contiguous(2,MPI_DOUBLE_PRECISION,MPI_MU,IERROR) call MPI_Type_commit(MPI_MU,IERROR) call MPI_Type_contiguous(4,MPI_DOUBLE_PRECISION,MPI_MAT1,IERROR) @@ -1309,17 +1674,21 @@ endif #else loc_start=2 - loc_end=nres-1 + loc_end=nres_molec(1)-1 ithet_start=3 - ithet_end=nres + ithet_end=nres_molec(1) + ithet_nucl_start=3+nres_molec(1) + ithet_nucl_end=nres_molec(1)+nres_molec(2) iturn3_start=nnt - iturn3_end=nct-3 + iturn3_end=nct_molec(1)-3 iturn4_start=nnt - iturn4_end=nct-4 + iturn4_end=nct_molec(1)-4 iphi_start=nnt+3 - iphi_end=nct + iphi_end=nct_molec(1) iphi1_start=4 - iphi1_end=nres + iphi1_end=nres_molec(1) + iphi_nucl_start=4+nres_molec(1) + iphi_nucl_end=nres_molec(1)+nres_molec(2) idihconstr_start=1 idihconstr_end=ndih_constr ithetaconstr_start=1 @@ -1327,21 +1696,25 @@ iphid_start=iphi_start iphid_end=iphi_end-1 itau_start=4 - itau_end=nres + itau_end=nres_molec(1) ibond_start=2 - ibond_end=nres-1 + ibond_end=nres_molec(1)-1 + ibond_nucl_start=2+nres_molec(1) + ibond_nucl_end=nres_molec(2)-1 ibondp_start=nnt - ibondp_end=nct-1 + ibondp_end=nct_molec(1)-1 + ibondp_nucl_start=nnt_molec(2) + ibondp_nucl_end=nct_molec(2) ivec_start=1 - ivec_end=nres-1 + ivec_end=nres_molec(1)-1 iset_start=3 - iset_end=nres+1 + iset_end=nres_molec(1)+1 iint_start=2 - iint_end=nres-1 + iint_end=nres_molec(1)-1 ilip_start=1 - ilip_end=nres + ilip_end=nres_molec(1) itube_start=1 - itube_end=nres + itube_end=nres_molec(1) #endif !el common /przechowalnia/ ! deallocate(iturn3_start_all) @@ -1655,7 +2028,7 @@ !----------------------------------------------------------------------------- subroutine setup_var - integer :: i + integer :: i,mnum ! implicit real*8 (a-h,o-z) ! include 'DIMENSIONS' ! include 'COMMON.IOUNITS' @@ -1678,10 +2051,12 @@ nvar=ntheta+nphi nside=0 do i=2,nres-1 + mnum=molnum(i) + write(iout,*) "i",molnum(i) #ifdef WHAM_RUN - if (itype(i).ne.10) then + if (itype(i,1).ne.10) then #else - if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then + if (itype(i,1).ne.10 .and. itype(i,mnum).ne.ntyp1_molec(mnum) .and. mnum.lt.4) then #endif nside=nside+1 ialph(i,1)=nvar+nside @@ -1699,42 +2074,6 @@ return end subroutine setup_var !----------------------------------------------------------------------------- -! rescode.f -!----------------------------------------------------------------------------- - integer function rescode(iseq,nam,itype) - - use io_base, only: ucase -! implicit real*8 (a-h,o-z) -! include 'DIMENSIONS' -! include 'COMMON.NAMES' -! include 'COMMON.IOUNITS' - character(len=3) :: nam !,ucase - integer :: iseq,itype,i - - if (itype.eq.0) then - - do i=-ntyp1,ntyp1 - if (ucase(nam).eq.restyp(i)) then - rescode=i - return - endif - enddo - - else - - do i=-ntyp1,ntyp1 - if (nam(1:1).eq.onelet(i)) then - rescode=i - return - endif - enddo - - endif - write (iout,10) iseq,nam - stop - 10 format ('**** Error - residue',i4,' has an unresolved name ',a3) - end function rescode -!----------------------------------------------------------------------------- ! timing.F !----------------------------------------------------------------------------- ! $Date: 1994/10/05 16:41:52 $ @@ -2178,5 +2517,48 @@ end subroutine print_detailed_timing #endif !----------------------------------------------------------------------------- + subroutine homology_partition + implicit none +! include 'DIMENSIONS' +!#ifdef MPI +! include 'mpif.h' +!#endif +! include 'COMMON.SBRIDGE' +! include 'COMMON.IOUNITS' +! include 'COMMON.SETUP' +! include 'COMMON.CONTROL' +! include 'COMMON.INTERACT' +! include 'COMMON.HOMOLOGY' +!d write(iout,*)"homology_partition: lim_odl=",lim_odl, +!d & " lim_dih",lim_dih +#ifdef MPI + if (me.eq.king .or. .not. out1file) write (iout,*) "MPI" + call int_bounds(lim_odl,link_start_homo,link_end_homo) + call int_bounds(lim_dih,idihconstr_start_homo, & + idihconstr_end_homo) + idihconstr_start_homo=idihconstr_start_homo+nnt-1+3 + idihconstr_end_homo=idihconstr_end_homo+nnt-1+3 + if (me.eq.king .or. .not. out1file)& + write (iout,*) 'Processor',fg_rank,' CG group',kolor,& + ' absolute rank',MyRank,& + ' lim_odl',lim_odl,' link_start=',link_start_homo,& + ' link_end',link_end_homo,' lim_dih',lim_dih,& + ' idihconstr_start_homo',idihconstr_start_homo,& + ' idihconstr_end_homo',idihconstr_end_homo +#else + write (iout,*) "Not MPI" + link_start_homo=1 + link_end_homo=lim_odl + idihconstr_start_homo=nnt+3 + idihconstr_end_homo=lim_dih+nnt-1+3 + write (iout,*) & + ' lim_odl',lim_odl,' link_start=',link_start_homo, & + ' link_end',link_end_homo,' lim_dih',lim_dih,& + ' idihconstr_start_homo',idihconstr_start_homo,& + ' idihconstr_end_homo',idihconstr_end_homo +#endif + return + end subroutine homology_partition + !----------------------------------------------------------------------------- end module control