
La funzione MatrixVectorOperations già proposta in un ‘esempio precedente poteva essere inserito in un modulo e utilizzata così in qualsiasi programma che necessitava di effettuare la moltiplicazione matrice-vettore. Un esempio di tale modulo è riportato qui sotto. Un vantaggio significativo di procedure di modulo è la loro interfaccia esplicita - il compilatore Fortran 90 è in grado di rilevare discordanze tipo di chiamate a sottoprogrammi all’interno di un modulo.
module MatrixVectorOperations
integer, parameter :: N = 3 ! A global constant.
contains ! Module procedure definitions appear below.
function matrixVectorMultiply( A, b ) result( c )
implicit none
! Assume the shape of A and b.
real, dimension( :, : ), intent( in ) :: A
real, dimension( : ), intent( in ) :: b
real, dimension( size( b ) ) :: c
integer N
integer i
N = size( b )
c = 0.0
do i = 1, N
c = c + b( i ) * A( :, i )
end do
end function matrixVectorMultiply
end module MatrixVectorOperations
program MatrixVector
use MatrixVectorOperations
implicit none
real, dimension( N, N ) :: A
real, dimension( N ) :: b, c
! Fill A and b with random entries.
call random_number( A )
call random_number( b )
! Compute the matrix-vector product, A*b.
c = matrixVectorMultiply( A, b )
print *, ‘The matrix-vector product is ‘, c
end program MatrixVector
Link correlati all’argomento
- Elementi di calcolo numerico con il Fortran

Giuseppe Ciaburro








