X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=source%2Funres%2Fcontrol.F90;h=828a1997d6518284325685dfa7d2d6fd8fbf497d;hb=0f5304c0d44e3ec4d6538de7d274c4b1a1930049;hp=8b908c1247a47619aacda5cb56ed8ad9b0ec950e;hpb=705644e0cbb7678faefd6fe1bc436159d38ad85d;p=unres4.git diff --git a/source/unres/control.F90 b/source/unres/control.F90 index 8b908c1..828a199 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 @@ -243,9 +244,15 @@ isidep_peppho=144 iliptranpar=60 + itube=61 +! LIPID MARTINI + ilipbond=301 + ilipnonbond=302 ! IONS iion=401 + iionnucl=402 + iiontran=403 ! this is parameter file for transition metals #if defined(WHAM_RUN) || defined(CLUSTER) ! ! setting the mpi variables for WHAM @@ -507,12 +514,13 @@ 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 + my_scp_inde_nucl,ind_scpint_nucl,ind_scpint_old_nucl,impishi + integer,dimension(nres,nres) :: 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) @@ -990,6 +998,7 @@ 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(nct_molec(2)-nnt_molec(2)-2,iphi_nucl_start,iphi_nucl_end) iphi_nucl_start=iphi_nucl_start+nnt_molec(2)+2 @@ -1008,6 +1017,7 @@ iphid_end=iturn4_end+2 iturn4_start=iturn4_start-1 iturn4_end=iturn4_end-1 + 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 @@ -1020,10 +1030,15 @@ 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(nct_molec(2)-nnt_molec(2),ibondp_nucl_start,ibondp_nucl_end) - ibondp_nucl_start=ibondp_nucl_start+nnt_molec(2) - ibondp_nucl_end=ibondp_nucl_end+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 @@ -1051,7 +1066,64 @@ 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)-2,ilipang_start,ilipang_end) + ilipang_start=2+itmp + ilipang_end=itmp+nres_molec(4)-1 +! create LJ LIST MAXIMUM +! Eliminate branching from list + 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 + allocate (mlipljlisti(nres_molec(4)*nres_molec(4)/2)) + allocate (mlipljlistj(nres_molec(4)*nres_molec(4)/2)) + 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 + allocate (mlipeleclisti(nres_molec(4)*nres_molec(4)/2)) + allocate (mlipeleclistj(nres_molec(4)*nres_molec(4)/2)) + 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 @@ -1162,6 +1234,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 @@ -1338,6 +1414,7 @@ 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 ) @@ -1345,10 +1422,12 @@ ! call flush(iout) enddo 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) @@ -1360,6 +1439,7 @@ j=ielstart(ii),ielend(ii)) call flush(iout) enddo + 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),& @@ -1370,6 +1450,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) @@ -1378,6 +1459,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) @@ -1926,7 +2017,7 @@ #ifdef WHAM_RUN if (itype(i,1).ne.10) then #else - if (itype(i,1).ne.10 .and. itype(i,mnum).ne.ntyp1_molec(mnum) .and. mnum.ne.5) 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 @@ -1944,83 +2035,6 @@ return end subroutine setup_var !----------------------------------------------------------------------------- -! rescode.f -!----------------------------------------------------------------------------- - integer function rescode(iseq,nam,itype,molecule) - - 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 - integer :: molecule - print *,molecule,nam - if (molecule.eq.1) then - if (itype.eq.0) then - - do i=-ntyp1_molec(molecule),ntyp1_molec(molecule) - if (ucase(nam).eq.restyp(i,molecule)) then - rescode=i - return - endif - enddo - - else - - do i=-ntyp1_molec(molecule),ntyp1_molec(molecule) - if (nam(1:1).eq.onelet(i)) then - rescode=i - return - endif - enddo - - endif - else if (molecule.eq.2) then - do i=1,ntyp1_molec(molecule) - print *,nam(1:1),restyp(i,molecule)(1:1) - if (nam(2:2).eq.restyp(i,molecule)(1:1)) then - rescode=i - return - endif - enddo - else if (molecule.eq.3) then - write(iout,*) "SUGAR not yet implemented" - stop - else if (molecule.eq.4) then - write(iout,*) "Explicit LIPID not yet implemented" - stop - else if (molecule.eq.5) then - do i=1,ntyp1_molec(molecule) - print *,i,restyp(i,molecule)(1:2) - if (ucase(nam(1:2)).eq.restyp(i,molecule)(1:2)) then - rescode=i - return - endif - enddo - else - write(iout,*) "molecule not defined" - endif - write (iout,10) iseq,nam - stop - 10 format ('**** Error - residue',i4,' has an unresolved name ',a3) - end function rescode - integer function sugarcode(sugar,ires) - character sugar - integer ires - if (sugar.eq.'D') then - sugarcode=1 - else if (sugar.eq.' ') then - sugarcode=2 - else - write (iout,*) 'UNKNOWN sugar type for residue',ires,' ',sugar - stop - endif - return - end function sugarcode - -!----------------------------------------------------------------------------- ! timing.F !----------------------------------------------------------------------------- ! $Date: 1994/10/05 16:41:52 $