program read_file
  implicit none
  integer, parameter                   :: N_LINES = 20, file_unit = 10
  integer, dimension(N_LINES)          :: i_vec
  integer                              :: line
  double precision, dimension(N_LINES) :: d_vec

! Open the file named infile
  open(unit = file_unit, file = 'infile', form = 'formatted', &
       access = 'sequential', status = 'old')

! Read the data
  do line = 1, N_LINES
    read(file_unit, *) i_vec(line), d_vec(line)
  end do

! Close the file
  close(file_unit, status = 'keep')

! Print what we just read
  do line = 1, N_LINES
    print*, i_vec(line), d_vec(line)
  end do

!------------------------------------------------ 
! If we don't know the number of lines in he file
! we can do like this. Note that i_vec and d_vec
! MUST have room for the elements.

  open(unit = file_unit, file = 'infile', form = 'formatted', &
       access = 'sequential', status = 'old')

  line = 1  ! counts the number of lines

! end = 100 means: jump to the line with label 100 at end of file
  do
    read(file_unit, *, end = 100) i_vec(line), d_vec(line)
    line = line + 1
  end do

100 line = line - 1 ! we did not read anything the last time

  print*, '# of lines = ', line
  close(file_unit, status = 'keep')
!
! Start computing ...
!
end program read_file