[COLOR=#a020f0]program[/color] config_file
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b]integer[/b][/color] stat
[COLOR=#2e8b57][b]character[/b][/color]([COLOR=#ff00ff]80[/color]) :: line
[COLOR=#2e8b57][b]character[/b][/color]([COLOR=#ff00ff]10[/color]) :: iter_method
[COLOR=#2e8b57][b]integer[/b][/color] :: nr_iters
[COLOR=#2e8b57][b]real[/b][/color] :: time_step
[COLOR=#0000ff]! open file[/color]
[COLOR=#804040][b]open[/b][/color] ([COLOR=#ff00ff]1[/color], [COLOR=#804040][b]file[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]'config_file.txt'[/color], [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]) [COLOR=#ff00ff]'File cannot be opened !'[/color]
[COLOR=#804040][b]go to[/b][/color] [COLOR=#ff00ff]99[/color]
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]'(80A)'[/color]) [COLOR=#ff00ff]'*******************************************************'[/color]
[COLOR=#0000ff]! process file[/color]
[COLOR=#804040][b]do[/b][/color] [COLOR=#804040][b]while[/b][/color] ([COLOR=#ff00ff].true.[/color])
[COLOR=#804040][b]read[/b][/color]([COLOR=#ff00ff]1[/color], [COLOR=#ff00ff]'(A)'[/color], [COLOR=#804040][b]end[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#804040][b]99[/b][/color]) line
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]'(80A)'[/color]) line [COLOR=#0000ff]! write on screen [/color]
[COLOR=#a020f0]call[/color] process_line([COLOR=#008080]adjustl[/color]([COLOR=#008080]trim[/color](line)), iter_method, nr_iters, time_step)
[COLOR=#804040][b]enddo[/b][/color]
[COLOR=#0000ff]! close file[/color]
[COLOR=#6a5acd]99[/color] [COLOR=#804040][b]continue[/b][/color]
[COLOR=#804040][b]close[/b][/color]([COLOR=#ff00ff]1[/color])
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]'(80A)'[/color]) [COLOR=#ff00ff]'*******************************************************'[/color]
[COLOR=#0000ff]! Print the parameters found in config file[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]*[/b][/color])
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]'(80A)'[/color]) [COLOR=#ff00ff]'Config parameters found:'[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Iterative Method = '[/color], iter_method
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Number of Iterations = '[/color], nr_iters
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color], [COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Time Step = '[/color], time_step
[COLOR=#a020f0]end program[/color] config_file
[COLOR=#a020f0]subroutine[/color] process_line(line, iter_method, nr_iters, time_step)
[COLOR=#0000ff]! parse settings from config line[/color]
[COLOR=#0000ff]! line = input line[/color]
[COLOR=#2e8b57][b]character[/b][/color]([COLOR=#804040][b]*[/b][/color]), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: line
[COLOR=#0000ff]! output parameters[/color]
[COLOR=#2e8b57][b]character[/b][/color]([COLOR=#ff00ff]10[/color]), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]out[/b][/color]) :: iter_method
[COLOR=#2e8b57][b]integer[/b][/color] :: nr_iters
[COLOR=#2e8b57][b] real[/b][/color], [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]out[/b][/color]) :: time_step
[COLOR=#2e8b57][b]character[/b][/color]([COLOR=#ff00ff]30[/color]) :: cfg_param
[COLOR=#0000ff]! parameter part of config line[/color]
cfg_param [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]adjustl[/color](line([COLOR=#008080]index[/color](line,[COLOR=#ff00ff]':'[/color])[COLOR=#804040][b]+[/b][/color][COLOR=#ff00ff]1[/color]:))
[COLOR=#804040][b]if[/b][/color] ([COLOR=#008080]index[/color](line,[COLOR=#ff00ff]'Iterative Method'[/color]) [COLOR=#804040][b]>[/b][/color] [COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
iter_method [COLOR=#804040][b]=[/b][/color] cfg_param
[COLOR=#804040][b]else[/b][/color] [COLOR=#804040][b]if[/b][/color] ([COLOR=#008080]index[/color](line,[COLOR=#ff00ff]'Iterations'[/color]) [COLOR=#804040][b]>[/b][/color] [COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#0000ff]! convert substring into integer number[/color]
[COLOR=#804040][b]read[/b][/color] (cfg_param,[COLOR=#ff00ff]'(I3)'[/color]) nr_iters
[COLOR=#804040][b]else[/b][/color] [COLOR=#804040][b]if[/b][/color] ([COLOR=#008080]index[/color](line,[COLOR=#ff00ff]'Timestep'[/color]) [COLOR=#804040][b]>[/b][/color] [COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#0000ff]! convert substring into real number[/color]
[COLOR=#804040][b]read[/b][/color] (cfg_param,[COLOR=#ff00ff]'(F5.3)'[/color]) time_step
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#a020f0]end subroutine[/color] process_line