[COLOR=#a020f0]module[/color] vector_functions
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#a020f0]contains[/color]
[COLOR=#a020f0]function[/color] MatrixVector(M, x)
[COLOR=#0000ff]! Matrix-Vector multiplication /for square Matrices only/[/color]
[COLOR=#2e8b57][b] real[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color](:,:), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: M
[COLOR=#2e8b57][b] real[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: x
[COLOR=#2e8b57][b]integer[/b][/color] ::n, i, j
[COLOR=#2e8b57][b] real[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color](n) :: MatrixVector
n[COLOR=#804040][b]=[/b][/color][COLOR=#008080]SIZE[/color](x)
[COLOR=#0000ff]!print *, n[/color]
[COLOR=#804040][b]do[/b][/color] i[COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]1[/color], n
MatrixVector(i)[COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]0[/color].
[COLOR=#804040][b]do[/b][/color] j[COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]1[/color], n
MatrixVector(i) [COLOR=#804040][b]=[/b][/color] MatrixVector(i) [COLOR=#804040][b]+[/b][/color] M(i,j)[COLOR=#804040][b]*[/b][/color]x(j)
[COLOR=#804040][b]enddo[/b][/color]
[COLOR=#804040][b]enddo[/b][/color]
[COLOR=#a020f0]end function[/color] MatrixVector
[COLOR=#a020f0]end module[/color] vector_functions
[COLOR=#a020f0]program[/color] main
[COLOR=#a020f0]use[/color] vector_functions
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b] real[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color]([COLOR=#ff00ff]2[/color]) :: v, w
[COLOR=#2e8b57][b] real[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color]([COLOR=#ff00ff]2[/color],[COLOR=#ff00ff]2[/color]) :: A
[COLOR=#2e8b57][b] real[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color]([COLOR=#ff00ff]3[/color]) :: u, t
[COLOR=#2e8b57][b] real[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color]([COLOR=#ff00ff]3[/color],[COLOR=#ff00ff]3[/color]) :: B
[COLOR=#2e8b57][b]integer[/b][/color] :: j
[COLOR=#0000ff]!****************************************************************[/color]
[COLOR=#0000ff]!*** Example 1: [/color]
[COLOR=#0000ff]!****************************************************************[/color]
[COLOR=#0000ff]! construct Vector[/color]
v[COLOR=#804040][b]=[/b][/color]([COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]1[/color]., [COLOR=#ff00ff]2[/color].[COLOR=#804040][b]/[/b][/color])
[COLOR=#0000ff]!print *, v ! print Vector[/color]
[COLOR=#0000ff]! construct Matrix by columns and reshape[/color]
A [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]reshape[/color](([COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]1[/color].,[COLOR=#ff00ff]3[/color].,[COLOR=#ff00ff]2[/color].,[COLOR=#ff00ff]4[/color].[COLOR=#804040][b]/[/b][/color]), ([COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]2[/color], [COLOR=#ff00ff]2[/color][COLOR=#804040][b]/[/b][/color]))
[COLOR=#0000ff]!print *, A ! print Matrix by columns[/color]
w [COLOR=#804040][b]=[/b][/color] MatrixVector(A, v)
[COLOR=#804040][b]print[/b][/color] [COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]"u = "[/color], (w(j), j [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color], [COLOR=#ff00ff]2[/color])
[COLOR=#0000ff]!****************************************************************[/color]
[COLOR=#0000ff]!*** Example 2: [/color]
[COLOR=#0000ff]!****************************************************************[/color]
[COLOR=#0000ff]! construct Vector[/color]
u [COLOR=#804040][b]=[/b][/color]([COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]1[/color]., [COLOR=#ff00ff]1[/color]., [COLOR=#ff00ff]1[/color].[COLOR=#804040][b]/[/b][/color])
[COLOR=#0000ff]!print *, u ! print Vector[/color]
[COLOR=#0000ff]! construct Matrix by columns and reshape[/color]
B [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]reshape[/color](([COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]1[/color].,[COLOR=#ff00ff]2[/color].,[COLOR=#ff00ff]3[/color].,[COLOR=#ff00ff]1[/color].,[COLOR=#ff00ff]2[/color].,[COLOR=#ff00ff]3[/color].,[COLOR=#ff00ff]1[/color].,[COLOR=#ff00ff]2[/color].,[COLOR=#ff00ff]3[/color].[COLOR=#804040][b]/[/b][/color]), ([COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]3[/color], [COLOR=#ff00ff]3[/color][COLOR=#804040][b]/[/b][/color]))
[COLOR=#0000ff]!print *, B ! print Matrix by columns[/color]
t [COLOR=#804040][b]=[/b][/color] MatrixVector(B, u)
[COLOR=#804040][b]print[/b][/color] [COLOR=#804040][b]*[/b][/color], [COLOR=#ff00ff]"t = "[/color], (t(j), j [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color], [COLOR=#ff00ff]3[/color])
[COLOR=#a020f0]end program[/color] main