c *********************************************************************** subroutine update_vector(n) c update the Euler vectors. implicit double precision(a-h, o-z) parameter(maxa=500,maxn=maxa*3) integer nout, nn double precision ft(3),du(3),newu(3) common/matrix/x(maxa,3),bangle(maxa),rz(maxa) common/matrix2/ r(maxa,maxa) common/bf_coords/f(maxa,3),v(maxa,3),u(maxa,3) common/ddx/d_x(maxa,3) do i = 1, n ii = i+1 if (i.eq.n) then ii=1 endif do j = 1, 3 newu(j) = (x(ii,j)-x(i,j))/r(i,ii) du(j) = newu(j) - u(i,j) enddo du_f = du(1)*f(i,1)+du(2)*f(i,2)+du(3)*f(i,3) do j = 1, 3 ft(j) = f(i,j) - du_f*u(i,j) u(i,j) = newu(j) enddo c project out any component of ft that is paralle to u c newf = ft (dot) (I - uu) c where I and uu are 3x3 tensors. xy = newu(1)*newu(2) xz = newu(1)*newu(3) yz = newu(2)*newu(3) f1=ft(1)*(1.d0-newu(1)*newu(1))-ft(2)*xy-ft(3)*xz f2=ft(2)*(1.d0-newu(2)*newu(2))-ft(1)*xy-ft(3)*yz f3=ft(3)*(1.d0-newu(3)*newu(3))-ft(1)*xz-ft(2)*yz c normalize vector f ftotal = dsqrt(f1*f1+f2*f2+f3*f3) f(i,1)=f1/ftotal f(i,2)=f2/ftotal f(i,3)=f3/ftotal c calculate vector: v = u x f v(i,1)=u(i,2)*f(i,3)-f(i,2)*u(i,3) v(i,2)=-u(i,1)*f(i,3)+f(i,1)*u(i,3) v(i,3)=u(i,1)*f(i,2)-f(i,1)*u(i,2) enddo return end