function get_free_unit() result(free_unit)
! Returns:
! The first free file unit above 10 and less than or equal to
! the paramater max_unit (currently set to 200).
!
! If max_unit is exceeded, the function returns -1
integer, parameter :: max_unit = 100
integer :: free_unit
integer :: i
logical :: t_open, t_exist
free_unit = -1
do i = 10, max_unit
inquire(unit=i, opened=t_open, exist=t_exist)
if(.not. t_open .and. t_exist) then
free_unit = i
exit
end if
end do
if(i == max_unit + 1) call stop_all('get_free_unit', 'Cannot find a free unit below max_unit.')
end function get_free_unit