c------------------------------------------------------------------------ c only update bond-length r(i,i+1) and ddx which will be used to update c forces and c setup common/ddx/d_x(maxa,3),r(i,i+1) c for linear dna, r(n,1) have no use, but it's ok to update it as well. c also update u(maxa,3) (useful for force evaluation) subroutine update_bond(n) implicit double precision(a-h,o-z) parameter(maxa=500) integer n double precision l,l2 common/matrix/x(maxa,3),bangle(maxa) common/matrix2/ r(maxa,maxa) common/ddx/d_x(maxa,3) common/bf_coords/f(maxa,3),v(maxa,3),u(maxa,3) do i=1,n-1 l2=0.0 ii=i+1 do j=1,3 d_x(i,j)=x(ii,j)-x(i,j) l2=l2+d_x(i,j)**2 enddo r(i,ii)=dsqrt(l2) do j=1,3 u(i,j)=d_x(i,j)/r(i,ii) enddo enddo l2=0.0 do j=1,3 d_x(n,j)=x(1,j)-x(n,j) l2=l2+d_x(n,j)**2 enddo r(n,1)=dsqrt(l2) do j=1,3 u(n,j)=d_x(n,j)/r(n,1) enddo return end