subroutine qp_read_twiss_data (unit, err_flag, z, bx, by, eta) ! read in the data. use bmad implicit none real(rp), allocatable :: bx(:), by(:), z(:), eta(:), ax(:), ay(:), etap(:) integer n, ios, unit, n_tot logical err_flag ! character*16, allocatable :: ele_name(:) character*100 string n=0 do while(.true.) read(unit,'(a100)', IOSTAT=ios)string if(ios == -1) exit n=n+1 ! if(ios /= 0)print *, ' Error reading fort.22' end do print *, 'n points = ', n ! n=n+1 if(.not. allocated(bx))then allocate(bx(1:n), by(1:n), ax(1:n), ay(1:n), z(1:n), eta(1:n), etap(1:n)) print *, 'allocate' ! allocate (ele_name(1:n)) endif n_tot = n print *,' rewind ' rewind(unit) do n=1,n_tot read(unit,'(16x,7es12.4)', IOSTAT=ios) z(n), bx(n), & by(n), ax(n), ay(n), & eta(n), etap(n) if(ios == -1) exit ! if(ios /=0)print *, ' Error reading fort.22' end do rewind(unit) print *,' rewind again' end subroutine