program path implicit none integer nb,i1,i,nu,ii,un,iu,j,np real r1,x1,y1,z1,du,umin,umax,off integer,allocatable::a(:),b(:),q(:),nd(:),ud(:,:) real,allocatable::d(:),u(:),t(:),z(:),ut(:),u1(:),u2(:) character*3 s3 character*80 s80 open(9,file='path0.mol',status='old') read(9,80)s80 read(9,*)nb 80 format(a80) allocate(a(nb),b(nb),q(nb),d(nb),u(nb),t(nb),z(nb),ut(nb)) read(9,*)i1,r1 read(9,*)x1,y1,z1 do 1 j=1,nb 1 read(9,*)a(j),b(j),q(j),d(j),u(j),t(j),z(j) close(9) open(9,file='PATH.OPT',status='old') read(9,*)nu,np allocate(u1(nu),u2(nu),nd(nu),ud(nu,nu*2)) do 2 i=1,nu 2 read(9,*)u1(i),u2(i),nd(i),(ud(i,j),j=1,nd(i)) close(9) do 3 i=1,np write(s3,300)i 300 format(i3) do 4 j=1,len(s3) 4 if(s3(j:j).eq.' ')s3(j:j)='0' write(6,*)s3//'.mol' open(9,file=s3//'.mol') write(9,80)s80 write(9,900)nb,i1,r1,x1,y1,z1 900 format(i6,/,i6,f7.3,/,3f15.6) ut=t do 6 iu=1,nu umin=u1(iu) umax=u2(iu) if(abs(umin-umax-360.).lt.abs(umin-umax))umax=umax+360.0 if(abs(umin-umax+360.).lt.abs(umin-umax))umax=umax-360.0 du=(umax-umin)/real(np-1) off=umin-t(ud(iu,1)) write(6,*)iu,umin,umax do 6 ii=1,nd(iu) un=ud(iu,ii) write(6,888)un,a(un),b(un),t(un),t(un)+off+real(i-1)*du 888 format('angle',i2,' bond ',2i3,' from',f8.1,'to',f8.1) 6 ut(un)=t(un)+off+real(i-1)*du do 5 j=1,nb 5 write(9,901)a(j),b(j),q(j),d(j),u(j),ut(j),z(j) 901 format(3i6,f10.6,2f10.3,f10.6) write(9,902) 902 format('XX') 3 close(9) end