program cellfix real u(3,3),iv(3) real,allocatable::r(:) integer,allocatable::z(:) character*80 s80 open(7,file='CELL.X',status='old') read(7,80)s80 80 format(a80) read(7,*)nat allocate(r(3*nat),z(nat)) do 1 i=1,nat 1 read(7,*)z(i),(r(ix+3*(i-1)),ix=1,3) close(7) open(7,file='CELL.TXT',status='old') read(7,*)(u(1,ix),ix=1,3) read(7,*)(u(2,ix),ix=1,3) read(7,*)(u(3,ix),ix=1,3) close(7) io=0 open(7,file='FIX.OPT',status='old') 2 read(7,*,end=77,err=77)ia,iv io=io+1 do 3 ii=1,3 do 3 ix=1,3 3 r(ix+3*(ia-1))=r(ix+3*(ia-1))+iv(ii)*u(ii,ix) goto 2 77 close(7) open(7,file='CELLf.X') write(7,80)s80 write(7,700)nat 700 format(i6,3f12.6) do 4 i=1,nat 4 write(7,700)z(i),(r(ix+3*(i-1)),ix=1,3) close(7) write(6,*)nat,' atoms, ',io,' shifted, CELLf.X written' end