Abbiamo imparato ad usare i moduli nel Fortran, e ne abbiamo apprezzato l’enorme utilità quale deposito di variabili e costanti a cui ogni unità di programma può attingere. Ma i moduli sono ben altro e ci consentono di definire al proprio interno delle vere e proprie procedure che ogni unità di programma che accede al modulo potrà in questo modo utilizzare, facendo uso dell’istruzione USE.
Ricordiamo a tal proposito che un modulo di programma è reso accessibile alle varie unità di programma attraverso l’istruzione USE. Tali procedure vengono, pertanto, chiamate procedure di modulo nel Fortran e vengono compilate come parte del modulo.
Le procedure che si trovano all’interno di un modulo devono essere posizionate dopo le dichiarazioni dei dati e devono essere precedute dall’istruzione CONTAINS. Questa istruzione indica al compilatore che le istruzioni successive rappresentano delle procedure di modulo.
Di seguito si riporta un programma che fa uso di una procedura di modulo per calcolare il prodotto di una matrice per un vettore.
module OperazioniMatriceVettore integer, parameter :: N = 3 ! costante globale. contains function moltiplicazioneMatriceVettore ( A, b ) result( c ) implicit none ! Definizione delle dimensioni di A e 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 moltiplicazioneMatriceVettore end module OperazioniMatriceVettore program MatriceVettore use OperazioniMatriceVettore implicit none real, dimension( N, N ) :: A real, dimension( N ) :: b, c ! Riempie A è b with con numeri random. call random_number( A ) call random_number( b ) ! Calcola il prodotto matrice * vettore, A*b. c = moltiplicazioneMatriceVettore ( A, b ) print *, ‘Prodotto matrice vettore = ‘, c end program MatriceVettore
LINK DI APPROFONDIMENTO PER L’ARGOMENTO:
- Programmare con Fortran
- I moduli nel Fortran
- Cicli a condizione iniziale nel Fortran
- Istruzione Select Case nel Fortran
- Istruzione if nel Fortran