1 |
!------------------------------------------------------------------------ |
2 |
! Files Module |
3 |
!----------------------------------------------------------------------- |
4 |
! Functions: |
5 |
! |
6 |
! NEXT_UNIT Returns the next available fortran unit number. |
7 |
! |
8 |
! Uses the fortran 90 inquire statement to find next unit. |
9 |
! |
10 |
!----------------------------------------------------------------------- |
11 |
module file_units |
12 |
|
13 |
use definitions, ONLY : max_units |
14 |
use io_units, ONLY : INPUT_UNIT,OUTPUT_UNIT |
15 |
|
16 |
|
17 |
contains |
18 |
|
19 |
function next_unit() result(unit_number) |
20 |
|
21 |
! result variable |
22 |
integer :: unit_number |
23 |
|
24 |
! local scalar variables |
25 |
integer :: i, unit |
26 |
logical :: is_opened |
27 |
|
28 |
!. initialize unit number to return -1 |
29 |
! we can use this to error check |
30 |
unit = -1 |
31 |
|
32 |
is_opened = .true. |
33 |
|
34 |
! do while unit is opened |
35 |
|
36 |
find_unit: do i = 10, max_units |
37 |
|
38 |
! check to make sure that we don't assign input or |
39 |
! output streams |
40 |
|
41 |
if ( ( i /= input_unit) .and. (i /= output_unit) ) then |
42 |
|
43 |
inquire (i, opened = is_opened) |
44 |
|
45 |
if ( .not. is_opened ) then |
46 |
unit = i |
47 |
exit find_unit |
48 |
end if |
49 |
end if |
50 |
end do find_unit |
51 |
|
52 |
unit_number = unit |
53 |
|
54 |
end function next_unit |
55 |
|
56 |
end module file_units |