[COLOR=#a020f0]program[/color] read_subr
[COLOR=#0000ff]! ********************** Main program *********************************[/color]
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b]double precision[/b][/color], [COLOR=#2e8b57][b]allocatable[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color] (:) :: x
[COLOR=#0000ff]! Read Data[/color]
[COLOR=#a020f0]call[/color] read_data([COLOR=#ff00ff]'inpt.dat'[/color], x)
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#0000ff]! next line[/color]
[COLOR=#0000ff]! Print Data[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Array of X-values: '[/color]
[COLOR=#a020f0]call[/color] print_array([COLOR=#ff00ff]'X'[/color], x)
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color])
[COLOR=#a020f0]contains[/color]
[COLOR=#0000ff]! ********************** Functions/Procedures *************************[/color]
[COLOR=#a020f0]subroutine[/color] read_data(fname, array)
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b]character[/b][/color]([COLOR=#804040][b]*[/b][/color]), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: fname
[COLOR=#2e8b57][b]double precision[/b][/color], [COLOR=#2e8b57][b]allocatable[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color] [COLOR=#2e8b57][b]out[/b][/color]) :: array
[COLOR=#2e8b57][b]integer[/b][/color] :: i, nr_lines, nr_elements, stat
[COLOR=#2e8b57][b]double precision[/b][/color] :: dummy
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]"Reading the Data from file '"[/color], fname, [COLOR=#ff00ff]"' :"[/color]
[COLOR=#804040][b]open[/b][/color]([COLOR=#ff00ff]1[/color],[COLOR=#804040][b]file[/b][/color][COLOR=#804040][b]=[/b][/color]fname,[COLOR=#804040][b]status[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]'old'[/color],[COLOR=#804040][b]iostat[/b][/color][COLOR=#804040][b]=[/b][/color]stat)
[COLOR=#804040][b]if[/b][/color] (stat [COLOR=#804040][b].ne.[/b][/color] [COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) fname, [COLOR=#ff00ff]' cannot be opened !'[/color]
[COLOR=#804040][b]go to[/b][/color] [COLOR=#ff00ff]20[/color]
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#0000ff]! count number of lines in the file[/color]
nr_lines [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
[COLOR=#804040][b]do[/b][/color]
[COLOR=#804040][b]read[/b][/color]([COLOR=#ff00ff]1[/color],[COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]end[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#804040][b]10[/b][/color],[COLOR=#804040][b]err[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#804040][b]20[/b][/color]) dummy
nr_lines [COLOR=#804040][b]=[/b][/color] nr_lines [COLOR=#804040][b]+[/b][/color] [COLOR=#ff00ff]1[/color]
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#0000ff]! rewind back to the beginning of the file for unit=1[/color]
[COLOR=#6a5acd]10[/color] [COLOR=#804040][b]rewind[/b][/color]([COLOR=#ff00ff]1[/color])
[COLOR=#0000ff]! number of array elements = number of data lines in the file[/color]
nr_elements[COLOR=#804040][b]=[/b][/color]nr_lines
[COLOR=#0000ff]! allocate the arrays of given size [/color]
[COLOR=#804040][b]allocate[/b][/color] (array(nr_elements))
[COLOR=#0000ff]! read array elements from the file[/color]
[COLOR=#804040][b]do[/b][/color] i [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color], nr_elements
[COLOR=#804040][b]read[/b][/color]([COLOR=#ff00ff]1[/color],[COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]err[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#804040][b]20[/b][/color]) array(i)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#ff00ff]'(a)'[/color],[COLOR=#804040][b]advance[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]'no'[/color]) [COLOR=#ff00ff]'.'[/color]
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#0000ff]! next line[/color]
[COLOR=#804040][b]close[/b][/color]([COLOR=#ff00ff]1[/color])
[COLOR=#0000ff]![/color]
[COLOR=#6a5acd]20[/color] [COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'End of Reading Data'[/color]
[COLOR=#a020f0]end subroutine[/color] read_data
[COLOR=#a020f0]subroutine[/color] print_array(array_name, array)
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b]integer[/b][/color] :: n, i
[COLOR=#2e8b57][b]double precision[/b][/color], [COLOR=#2e8b57][b]allocatable[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: array
[COLOR=#2e8b57][b]character[/b][/color] :: array_name
[COLOR=#0000ff]! process only if the array is allocated[/color]
[COLOR=#804040][b]if[/b][/color] ([COLOR=#008080]allocated[/color](array)) [COLOR=#804040][b]then[/b][/color]
n [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]size[/color](array)
[COLOR=#804040][b]do[/b][/color] i [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color], n
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) array_name, [COLOR=#ff00ff]'['[/color], i, [COLOR=#ff00ff]'] = '[/color], array(i)
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#804040][b]else[/b][/color]
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Error: Argument Array not allocated !'[/color]
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#a020f0]end subroutine[/color] print_array
[COLOR=#a020f0]end program[/color] read_subr