MODULE free_unit_mod PRIVATE INTEGER, PARAMETER :: start_unit=1000 PUBLIC :: free_unit CONTAINS FUNCTION free_unit() INTEGER :: free_unit LOGICAL :: out out=.FALSE. free_unit=start_unit DO WHILE (.NOT. out) free_unit=free_unit+1 INQUIRE(unit=free_unit, exist=out) END DO END FUNCTION free_unit END MODULE free_unit_mod