[COLOR=#0000ff]C __________________________________________________[/color]
[COLOR=#0000ff]C |__________________________________________________|[/color]
[COLOR=#0000ff]C T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11[/color]
[COLOR=#0000ff]C[/color]
[COLOR=#0000ff]C L=1 m[/color]
[COLOR=#0000ff]C T(x)=(100.x)/L[/color]
[COLOR=#2e8b57][b]dimension[/b][/color] T([COLOR=#ff00ff]11[/color]), T_old([COLOR=#ff00ff]11[/color]), R([COLOR=#ff00ff]11[/color])
[COLOR=#0000ff]! Initial values for temperatures[/color]
[COLOR=#2e8b57][b]data[/b][/color] T_old[COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]0[/color].,[COLOR=#ff00ff]0[/color].,[COLOR=#ff00ff]0[/color].,[COLOR=#ff00ff]0[/color].,[COLOR=#ff00ff]0[/color].,[COLOR=#ff00ff]0[/color].,[COLOR=#ff00ff]0[/color].,[COLOR=#ff00ff]0[/color].,[COLOR=#ff00ff]0[/color].,[COLOR=#ff00ff]0[/color].,[COLOR=#ff00ff]0[/color].[COLOR=#804040][b]/[/b][/color]
[COLOR=#2e8b57][b]data[/b][/color] T[COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]0[/color].,[COLOR=#ff00ff]1[/color].,[COLOR=#ff00ff]1[/color].,[COLOR=#ff00ff]1[/color].,[COLOR=#ff00ff]1[/color].,[COLOR=#ff00ff]1[/color].,[COLOR=#ff00ff]1[/color].,[COLOR=#ff00ff]1[/color].,[COLOR=#ff00ff]1[/color].,[COLOR=#ff00ff]1[/color].,[COLOR=#ff00ff]100[/color].[COLOR=#804040][b]/[/b][/color]
[COLOR=#804040][b]print[/b][/color] [COLOR=#804040][b]*[/b][/color],[COLOR=#ff00ff]'i T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11'[/color]
[COLOR=#804040][b]print[/b][/color] [COLOR=#ff00ff]10[/color],[COLOR=#ff00ff]0[/color],T
[COLOR=#0000ff]c accuracy[/color]
eps [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0.00005[/color]
[COLOR=#a020f0]call[/color] residual(T, T_old, R, [COLOR=#ff00ff]11[/color])
i [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color]
[COLOR=#804040][b]do[/b][/color]
[COLOR=#0000ff]c save previous values of T to T_old[/color]
[COLOR=#a020f0]call[/color] save_old_vec(T, T_old, [COLOR=#ff00ff]11[/color])
T([COLOR=#ff00ff]1[/color]) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
T([COLOR=#ff00ff]2[/color]) [COLOR=#804040][b]=[/b][/color] (T([COLOR=#ff00ff]1[/color])[COLOR=#804040][b]+[/b][/color]T([COLOR=#ff00ff]3[/color]))[COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]2[/color]
T([COLOR=#ff00ff]3[/color]) [COLOR=#804040][b]=[/b][/color] (T([COLOR=#ff00ff]2[/color])[COLOR=#804040][b]+[/b][/color]T([COLOR=#ff00ff]4[/color]))[COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]2[/color]
T([COLOR=#ff00ff]4[/color]) [COLOR=#804040][b]=[/b][/color] (T([COLOR=#ff00ff]3[/color])[COLOR=#804040][b]+[/b][/color]T([COLOR=#ff00ff]5[/color]))[COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]2[/color]
T([COLOR=#ff00ff]5[/color]) [COLOR=#804040][b]=[/b][/color] (T([COLOR=#ff00ff]4[/color])[COLOR=#804040][b]+[/b][/color]T([COLOR=#ff00ff]6[/color]))[COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]2[/color]
T([COLOR=#ff00ff]6[/color]) [COLOR=#804040][b]=[/b][/color] (T([COLOR=#ff00ff]5[/color])[COLOR=#804040][b]+[/b][/color]T([COLOR=#ff00ff]7[/color]))[COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]2[/color]
T([COLOR=#ff00ff]7[/color]) [COLOR=#804040][b]=[/b][/color] (T([COLOR=#ff00ff]6[/color])[COLOR=#804040][b]+[/b][/color]T([COLOR=#ff00ff]8[/color]))[COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]2[/color]
T([COLOR=#ff00ff]8[/color]) [COLOR=#804040][b]=[/b][/color] (T([COLOR=#ff00ff]7[/color])[COLOR=#804040][b]+[/b][/color]T([COLOR=#ff00ff]9[/color]))[COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]2[/color]
T([COLOR=#ff00ff]9[/color]) [COLOR=#804040][b]=[/b][/color] (T([COLOR=#ff00ff]8[/color])[COLOR=#804040][b]+[/b][/color]T([COLOR=#ff00ff]10[/color]))[COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]2[/color]
T([COLOR=#ff00ff]10[/color]) [COLOR=#804040][b]=[/b][/color] (T([COLOR=#ff00ff]9[/color])[COLOR=#804040][b]+[/b][/color]T([COLOR=#ff00ff]11[/color]))[COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]2[/color]
T([COLOR=#ff00ff]11[/color]) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]100[/color]
[COLOR=#804040][b]print[/b][/color] [COLOR=#ff00ff]10[/color],i,T
[COLOR=#0000ff]c compute R = T-T_old [/color]
[COLOR=#a020f0]call[/color] residual(T, T_old, R, [COLOR=#ff00ff]11[/color])
[COLOR=#0000ff]c exit loop if accuracy reached [/color]
[COLOR=#804040][b]if[/b][/color] (VecNorm(R,[COLOR=#ff00ff]11[/color]) [COLOR=#804040][b]<=[/b][/color] eps) [COLOR=#804040][b]then[/b][/color]
[COLOR=#804040][b]go to[/b][/color] [COLOR=#ff00ff]20[/color]
[COLOR=#804040][b]end if[/b][/color]
i [COLOR=#804040][b]=[/b][/color] i[COLOR=#804040][b]+[/b][/color][COLOR=#ff00ff]1[/color]
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#6a5acd]20[/color] [COLOR=#804040][b]continue[/b][/color]
[COLOR=#6a5acd]10[/color] [COLOR=#804040][b]format[/b][/color] (i5,[COLOR=#008080]1X[/color],[COLOR=#008080]f7.3[/color],[COLOR=#008080]1X[/color],[COLOR=#008080]f7.3[/color],[COLOR=#008080]1X[/color],[COLOR=#008080]f7.3[/color],[COLOR=#008080]1X[/color],[COLOR=#008080]f7.3[/color],[COLOR=#008080]1X[/color],[COLOR=#008080]f7.3[/color],[COLOR=#008080]1X[/color],[COLOR=#008080]f7.3[/color],[COLOR=#008080]1X[/color],
[highlight #ffff00][COLOR=#0000ff]&[/color][/highlight] [COLOR=#008080]f7.3[/color],[COLOR=#008080]1X[/color],[COLOR=#008080]f7.3[/color],[COLOR=#008080]1X[/color],[COLOR=#008080]f7.3[/color],[COLOR=#008080]1X[/color],[COLOR=#008080]f7.3[/color],[COLOR=#008080]1X[/color],[COLOR=#008080]f7.3[/color])
[COLOR=#804040][b]stop[/b][/color]
[COLOR=#a020f0]end[/color]
[COLOR=#2e8b57][b] real[/b][/color] [COLOR=#a020f0]function[/color] VecNorm(Vec, n)
[COLOR=#0000ff]c computes Norm of the vector of a given dimension [/color]
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b]integer[/b][/color] :: n, i
[COLOR=#2e8b57][b] real[/b][/color] :: Vec(n), s
s [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
[COLOR=#804040][b]do[/b][/color] i [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color], n
s [COLOR=#804040][b]=[/b][/color] s [COLOR=#804040][b]+[/b][/color] Vec(i)[COLOR=#804040][b]*[/b][/color]Vec(i)
[COLOR=#804040][b]end do[/b][/color]
VecNorm [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]sqrt[/color](s)
[COLOR=#a020f0]end[/color]
[COLOR=#a020f0]subroutine[/color] save_old_vec(T, T_old, n)
[COLOR=#0000ff]c saves T to T_old (i.e. T_old = T)[/color]
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b]integer[/b][/color] :: n, i
[COLOR=#2e8b57][b] real[/b][/color] :: T(n), T_old(n)
[COLOR=#804040][b]do[/b][/color] i [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color], n
T_old(i) [COLOR=#804040][b]=[/b][/color] T(i)
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#a020f0]end[/color]
[COLOR=#a020f0]subroutine[/color] residual(T, T_old, R, n)
[COLOR=#0000ff]c computes residual vector R = T-T_old[/color]
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b]integer[/b][/color] :: n, i
[COLOR=#2e8b57][b] real[/b][/color] :: T(n), T_old(n), R(n)
[COLOR=#804040][b]do[/b][/color] i [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color], n
R(i) [COLOR=#804040][b]=[/b][/color] T(i) [COLOR=#804040][b]-[/b][/color] T_old(i)
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#a020f0]end[/color]