- module geometry
+ module geometry
!-----------------------------------------------------------------------------
use io_units
use names
alph(i)=alpha(nres+i,i,nres2+2)
theta(i+1)=alpha(i-1,i,i+1)
vbld(i)=dist(i-1,i)
+! print *,i,vbld(i),"vbld(i)"
vbld_inv(i)=1.0d0/vbld(i)
vbld(nres+i)=dist(nres+i,i)
if (itype(i,1).ne.10) then
endif
return 1
endif
- it1=iabs(itype(i-1,1))
- it2=iabs(itype(i-2,1))
- it=iabs(itype(i,1))
+ it1=iabs(itype(i-1,molnum(i-1)))
+ it2=iabs(itype(i-2,molnum(i-2)))
+ it=iabs(itype(i,molnum(i)))
! print *,'Gen_Rand_Conf: i=',i,' it=',it,' it1=',it1,' it2=',it2,
! & ' nit=',nit,' niter=',niter,' maxgen=',maxgen
phi(i+1)=gen_phi(i+1,it1,it)
! print *,'>>overlap_sc nnt=',nnt,' nct=',nct
ind=0
do i=iatsc_s,iatsc_e
- itypi=iabs(itype(i,1))
+ if (itype(i,molnum(i)).eq.ntyp1_molec(molnum(i))) cycle
+ itypi=iabs(itype(i,molnum(i)))
itypi1=iabs(itype(i+1,1))
xi=c(1,nres+i)
yi=c(2,nres+i)
!
do iint=1,nint_gr(i)
do j=istart(i,iint),iend(i,iint)
+ if (itype(j,molnum(j)).eq.ntyp1_molec(molnum(j))) cycle
ind=ind+1
- itypj=iabs(itype(j,1))
+ itypj=iabs(itype(j,molnum(j)))
dscj_inv=dsc_inv(itypj)
sig0ij=sigma(itypi,itypj)
chi1=chi(itypi,itypj)
endif
endif
do i=1,nres-1
- if (molnum(i).ne.1) cycle
+! if (molnum(i).ne.1) cycle
!in wham do i=1,nres
iti=itype(i,1)
- if ((dist(i,i+1).lt.2.0D0 .or. dist(i,i+1).gt.5.0D0).and.&
- (iti.ne.ntyp1 .and. itype(i+1,1).ne.ntyp1)) then
+ if (((dist(i,i+1).lt.2.0D0 .or. dist(i,i+1).gt.5.0D0).and.&
+ (iti.ne.ntyp1 .and. itype(i+1,1).ne.ntyp1)).and.molnum(i).eq.1) then
write (iout,'(a,i4)') 'Bad Cartesians for residue',i
!test stop
endif
! include 'COMMON.INTERACT'
! include 'COMMON.CHAIN'
do i=1,nres-1
+
vbld(i+1)=vbl
vbld_inv(i+1)=1.0d0/vbld(i+1)
- vbld(i+1+nres)=dsc(itype(i+1,1))
- vbld_inv(i+1+nres)=dsc_inv(itype(i+1,1))
+ vbld(i+1+nres)=dsc(itype(i+1,molnum(i)))
+ vbld_inv(i+1+nres)=dsc_inv(itype(i+1,molnum(i)))
! print *,vbld(i+1),vbld(i+1+nres)
enddo
return
do j=1,3
gcart(j,1)=gcart(j,1)+gloc(1,icg)*dphi(j,1,4) &
+gloc(nres-2,icg)*dtheta(j,1,3)
- if(itype(2,1).ne.10) then
+ if ((itype(2,1).ne.10).and.&
+ (itype(2,molnum(2)).ne.ntyp1_molec(molnum(2)))) then
gcart(j,1)=gcart(j,1)+gloc(ialph(2,1),icg)*dalpha(j,1,2)+ &
gloc(ialph(2,1)+nside,icg)*domega(j,1,2)
endif
gcart(j,3)=gcart(j,3)+gloc(1,icg)*dphi(j,3,4)+gloc(2,icg)* &
dphi(j,2,5)+gloc(nres-1,icg)*dtheta(j,2,4)+gloc(nres,icg)* &
dtheta(j,1,5)
- if(itype(3,1).ne.10) then
+! if(itype(3,1).ne.10) then
+ if ((itype(3,1).ne.10).and.&
+ (itype(3,molnum(3)).ne.ntyp1_molec(molnum(3)))) then
gcart(j,3)=gcart(j,3)+gloc(ialph(3,1),icg)* &
dalpha(j,2,3)+gloc(ialph(3,1)+nside,icg)*domega(j,2,3)
endif
- if(itype(4,1).ne.10) then
+! if(itype(4,1).ne.10) then
+ if ((itype(4,1).ne.10).and.&
+ (itype(4,molnum(4)).ne.ntyp1_molec(molnum(4)))) then
gcart(j,3)=gcart(j,3)+gloc(ialph(4,1),icg)* &
dalpha(j,1,4)+gloc(ialph(4,1)+nside,icg)*domega(j,1,4)
endif
do j=1,3
if((itype(2,1).ne.10).and. &
(itype(2,molnum(2)).ne.ntyp1_molec(molnum(2)))) then
- if (itype(1,1).ne.10) gxcart(j,2)=gxcart(j,2)+ &
+ if ((itype(1,1).ne.10).and.&
+ ((itype(1,molnum(1)).ne.ntyp1_molec(molnum(1)))))&
+ gxcart(j,2)=gxcart(j,2)+ &
gloc_sc(3,0,icg)*dtauangle(j,3,3,3)
if ((itype(3,1).ne.10).and.(nres.ge.3).and.(itype(3,molnum(3)).ne.ntyp1_molec(3))) &
then
gcart(j,2)=gcart(j,2)+gloc_sc(3,1,icg)*dtauangle(j,3,2,4)
endif
if (nres.gt.3) then
+! if ((itype(1,1).ne.10).and.&
+! ((itype(1,molnum(1)).ne.ntyp1_molec(molnum(1))))) &
gxcart(j,2)=gxcart(j,2)-gloc_sc(1,1,icg)*dtauangle(j,1,1,4)
!c the - above is due to different vector direction
gcart(j,2)=gcart(j,2)+gloc_sc(1,1,icg)*dtauangle(j,1,2,4)
*dtauangle(j,1,2,i+2)
! write(iout,*) "new",j,i,
! & gcart(j,i),gloc_sc(1,i-1,icg),dtauangle(j,1,2,i+2)
- if (itype(i-1,1).ne.10) then
+! if (itype(i-1,1).ne.10) then
+ if ((itype(i-1,1).ne.10).and.&
+ (itype(i-1,molnum(i-1)).ne.ntyp1_molec(molnum(i-1)))) then
+
gxcart(j,i)=gxcart(j,i)+gloc_sc(3,i-2,icg) &
*dtauangle(j,3,3,i+1)
endif
- if (itype(i+1,1).ne.10) then
- gxcart(j,i)=gxcart(j,i)-gloc_sc(3,i-1,icg) &
+! if (itype(i+1,1).ne.10) then
+ if ((itype(i+1,1).ne.10).and.&
+ (itype(i+1,molnum(i+1)).ne.ntyp1_molec(molnum(i+1)))) then
+ gxcart(j,i)=gxcart(j,i)-gloc_sc(3,i-1,icg) &
*dtauangle(j,3,1,i+2)
gcart(j,i)=gcart(j,i)+gloc_sc(3,i-1,icg) &
*dtauangle(j,3,2,i+2)
endif
endif
- if (itype(i-1,1).ne.10) then
+! if (itype(i-1,1).ne.10) then
+ if ((itype(i-1,1).ne.10).and.&
+ (itype(i-1,molnum(i-1)).ne.ntyp1_molec(molnum(i-1)))) then
gcart(j,i)=gcart(j,i)+gloc_sc(1,i-2,icg)* &
dtauangle(j,1,3,i+1)
endif
- if (itype(i+1,1).ne.10) then
+! if (itype(i+1,1).ne.10) then
+ if ((itype(i+1,1).ne.10).and.&
+ (itype(i+1,molnum(i+1)).ne.ntyp1_molec(molnum(i+1)))) then
gcart(j,i)=gcart(j,i)+gloc_sc(2,i-1,icg)* &
dtauangle(j,2,2,i+2)
! write(iout,*) "numer",i,gloc_sc(2,i-1,icg),
! & dtauangle(j,2,2,i+2)
endif
- if (itype(i+2,1).ne.10) then
+! if (itype(i+2,1).ne.10) then
+ if ((itype(i+2,1).ne.10).and.&
+ (itype(i+2,molnum(i+2)).ne.ntyp1_molec(molnum(i+2)))) then
gcart(j,i)=gcart(j,i)+gloc_sc(2,i,icg)* &
dtauangle(j,2,1,i+3)
endif
*dtauangle(j,2,3,nres)
! write (iout,*) "gxcart(nres-1)", gloc_sc(2,nres-3,icg),
! & dtauangle(j,2,3,nres), gxcart(j,nres-1)
- if (itype(nres-2,1).ne.10) then
- gxcart(j,nres-1)=gxcart(j,nres-1)+gloc_sc(3,nres-3,icg) &
+! if (itype(nres-2,1).ne.10) then
+ if ((itype(nres-2,1).ne.10).and.&
+ (itype(nres-2,molnum(nres-2)).ne.ntyp1_molec(molnum(nres-2)))) then
+ gxcart(j,nres-1)=gxcart(j,nres-1)+gloc_sc(3,nres-3,icg) &
*dtauangle(j,3,3,nres)
endif
if ((itype(nres,1).ne.10).and.&
end subroutine alloc_geo_arrays
!-----------------------------------------------------------------------------
!-----------------------------------------------------------------------------
+ subroutine returnbox
+ integer :: allareout,i,j,k,nojumpval,chain_beg,mnum
+ integer :: chain_end,ireturnval
+ real*8 :: difference
+!C change suggested by Ana - end
+ j=1
+ chain_beg=1
+!C do i=1,nres
+!C write(*,*) 'initial', i,j,c(j,i)
+!C enddo
+!C change suggested by Ana - begin
+ allareout=1
+!C change suggested by Ana -end
+ do i=1,nres-1
+ mnum=molnum(i)
+ if ((itype(i,mnum).eq.ntyp1_molec(mnum))&
+ .and.(itype(i+1,mnum).eq.ntyp1_molec(mnum))) then
+ chain_end=i
+ if (allareout.eq.1) then
+ ireturnval=int(c(j,i)/boxxsize)
+ if (c(j,i).le.0) ireturnval=ireturnval-1
+ do k=chain_beg,chain_end
+ c(j,k)=c(j,k)-ireturnval*boxxsize
+ c(j,k+nres)=c(j,k+nres)-ireturnval*boxxsize
+ enddo
+!C Suggested by Ana
+ if (chain_beg.eq.1) &
+ dc_old(1,0)=dc_old(1,0)-ireturnval*boxxsize
+!C Suggested by Ana -end
+ endif
+ chain_beg=i+1
+ allareout=1
+ else
+ if (int(c(j,i)/boxxsize).eq.0) allareout=0
+ endif
+ enddo
+ if (allareout.eq.1) then
+ ireturnval=int(c(j,i)/boxxsize)
+ if (c(j,i).le.0) ireturnval=ireturnval-1
+ do k=chain_beg,nres
+ c(j,k)=c(j,k)-ireturnval*boxxsize
+ c(j,k+nres)=c(j,k+nres)-ireturnval*boxxsize
+ enddo
+ endif
+!C NO JUMP
+!C do i=1,nres
+!C write(*,*) 'befor no jump', i,j,c(j,i)
+!C enddo
+ nojumpval=0
+ do i=2,nres
+ mnum=molnum(i)
+ if (itype(i,mnum).eq.ntyp1_molec(mnum)&
+ .and. itype(i-1,mnum).eq.ntyp1_molec(mnum)) then
+ difference=abs(c(j,i-1)-c(j,i))
+!C print *,'diff', difference
+ if (difference.gt.boxxsize/2.0) then
+ if (c(j,i-1).gt.c(j,i)) then
+ nojumpval=1
+ else
+ nojumpval=-1
+ endif
+ else
+ nojumpval=0
+ endif
+ endif
+ c(j,i)=c(j,i)+nojumpval*boxxsize
+ c(j,i+nres)=c(j,i+nres)+nojumpval*boxxsize
+ enddo
+ nojumpval=0
+ do i=2,nres
+ mnum=molnum(i)
+ if (itype(i,mnum).eq.ntyp1_molec(mnum) .and. itype(i-1,mnum).eq.ntyp1_molec(mnum)) then
+ difference=abs(c(j,i-1)-c(j,i))
+ if (difference.gt.boxxsize/2.0) then
+ if (c(j,i-1).gt.c(j,i)) then
+ nojumpval=1
+ else
+ nojumpval=-1
+ endif
+ else
+ nojumpval=0
+ endif
+ endif
+ c(j,i)=c(j,i)+nojumpval*boxxsize
+ c(j,i+nres)=c(j,i+nres)+nojumpval*boxxsize
+ enddo
+
+!C do i=1,nres
+!C write(*,*) 'after no jump', i,j,c(j,i)
+!C enddo
+
+!C NOW Y dimension
+!C suggesed by Ana begins
+ allareout=1
+ j=2
+ chain_beg=1
+ do i=1,nres-1
+ mnum=molnum(i)
+ if ((itype(i,mnum).eq.ntyp1_molec(mnum))&
+ .and.(itype(i+1,mnum).eq.ntyp1_molec(mnum))) then
+ chain_end=i
+ if (allareout.eq.1) then
+ ireturnval=int(c(j,i)/boxysize)
+ if (c(j,i).le.0) ireturnval=ireturnval-1
+ do k=chain_beg,chain_end
+ c(j,k)=c(j,k)-ireturnval*boxysize
+ c(j,k+nres)=c(j,k+nres)-ireturnval*boxysize
+ enddo
+!C Suggested by Ana
+ if (chain_beg.eq.1) &
+ dc_old(1,0)=dc_old(1,0)-ireturnval*boxxsize
+!C Suggested by Ana -end
+ endif
+ chain_beg=i+1
+ allareout=1
+ else
+ if (int(c(j,i)/boxysize).eq.0) allareout=0
+ endif
+ enddo
+ if (allareout.eq.1) then
+ ireturnval=int(c(j,i)/boxysize)
+ if (c(j,i).le.0) ireturnval=ireturnval-1
+ do k=chain_beg,nres
+ c(j,k)=c(j,k)-ireturnval*boxysize
+ c(j,k+nres)=c(j,k+nres)-ireturnval*boxysize
+ enddo
+ endif
+ nojumpval=0
+ do i=2,nres
+ mnum=molnum(i)
+ if (itype(i,mnum).eq.ntyp1_molec(mnum)&
+ .and. itype(i-1,mnum).eq.ntyp1_molec(mnum)) then
+ difference=abs(c(j,i-1)-c(j,i))
+ if (difference.gt.boxysize/2.0) then
+ if (c(j,i-1).gt.c(j,i)) then
+ nojumpval=1
+ else
+ nojumpval=-1
+ endif
+ else
+ nojumpval=0
+ endif
+ endif
+ c(j,i)=c(j,i)+nojumpval*boxysize
+ c(j,i+nres)=c(j,i+nres)+nojumpval*boxysize
+ enddo
+ nojumpval=0
+ do i=2,nres
+ mnum=molnum(i)
+ if (itype(i,mnum).eq.ntyp1_molec(mnum)&
+ .and. itype(i-1,mnum).eq.ntyp1) then
+ difference=abs(c(j,i-1)-c(j,i))
+ if (difference.gt.boxysize/2.0) then
+ if (c(j,i-1).gt.c(j,i)) then
+ nojumpval=1
+ else
+ nojumpval=-1
+ endif
+ else
+ nojumpval=0
+ endif
+ endif
+ c(j,i)=c(j,i)+nojumpval*boxysize
+ c(j,i+nres)=c(j,i+nres)+nojumpval*boxysize
+ enddo
+!C Now Z dimension
+!C Suggested by Ana -begins
+ allareout=1
+!C Suggested by Ana -ends
+ j=3
+ chain_beg=1
+ do i=1,nres-1
+ mnum=molnum(i)
+ if ((itype(i,mnum).eq.ntyp1_molec(mnum))&
+ .and.(itype(i+1,mnum).eq.ntyp1_molec(mnum))) then
+ chain_end=i
+ if (allareout.eq.1) then
+ ireturnval=int(c(j,i)/boxysize)
+ if (c(j,i).le.0) ireturnval=ireturnval-1
+ do k=chain_beg,chain_end
+ c(j,k)=c(j,k)-ireturnval*boxzsize
+ c(j,k+nres)=c(j,k+nres)-ireturnval*boxzsize
+ enddo
+!C Suggested by Ana
+ if (chain_beg.eq.1) dc_old(1,0)=dc_old(1,0)-ireturnval*boxxsize
+!C Suggested by Ana -end
+ endif
+ chain_beg=i+1
+ allareout=1
+ else
+ if (int(c(j,i)/boxzsize).eq.0) allareout=0
+ endif
+ enddo
+ if (allareout.eq.1) then
+ ireturnval=int(c(j,i)/boxzsize)
+ if (c(j,i).le.0) ireturnval=ireturnval-1
+ do k=chain_beg,nres
+ c(j,k)=c(j,k)-ireturnval*boxzsize
+ c(j,k+nres)=c(j,k+nres)-ireturnval*boxzsize
+ enddo
+ endif
+ nojumpval=0
+ do i=2,nres
+ mnum=molnum(i)
+ if (itype(i,mnum).eq.ntyp1_molec(mnum) .and. itype(i-1,mnum).eq.ntyp1_molec(mnum)) then
+ difference=abs(c(j,i-1)-c(j,i))
+ if (difference.gt.(boxzsize/2.0)) then
+ if (c(j,i-1).gt.c(j,i)) then
+ nojumpval=1
+ else
+ nojumpval=-1
+ endif
+ else
+ nojumpval=0
+ endif
+ endif
+ c(j,i)=c(j,i)+nojumpval*boxzsize
+ c(j,i+nres)=c(j,i+nres)+nojumpval*boxzsize
+ enddo
+ nojumpval=0
+ do i=2,nres
+ mnum=molnum(i)
+ if (itype(i,mnum).eq.ntyp1_molec(mnum) &
+ .and. itype(i-1,mnum).eq.ntyp1_molec(mnum)) then
+ difference=abs(c(j,i-1)-c(j,i))
+ if (difference.gt.boxzsize/2.0) then
+ if (c(j,i-1).gt.c(j,i)) then
+ nojumpval=1
+ else
+ nojumpval=-1
+ endif
+ else
+ nojumpval=0
+ endif
+ endif
+ c(j,i)=c(j,i)+nojumpval*boxzsize
+ c(j,i+nres)=c(j,i+nres)+nojumpval*boxzsize
+ enddo
+ do i=1,nres
+ if (molnum(i).eq.5) then
+ c(1,i)=dmod(c(1,i),boxxsize)
+ c(2,i)=dmod(c(2,i),boxysize)
+ c(3,i)=dmod(c(3,i),boxzsize)
+ c(1,i+nres)=dmod(c(1,i+nres),boxxsize)
+ c(2,i+nres)=dmod(c(2,i+nres),boxysize)
+ c(3,i+nres)=dmod(c(3,i+nres),boxzsize)
+ endif
+ enddo
+ return
+ end subroutine returnbox
+!-------------------------------------------------------------------------------------------------------
end module geometry