Nelle applicazioni di programmazione ingegneristiche, si incontra spesso il caso di parametri, variabili e sottoprogrammi che devono essere ripartiti in diverse unità di programma. Per risolvere tale problema si possono utilizzare i moduli nel Fortran che rappresentano un’unità speciale di programma che raccoglie le collezioni di dichiarazioni e di subprograms in modo da poterle importare in altre unità di programma.
La funzionalità dell’unità modulo è simile a quella dell’archivio di intestazione di C. I Moduli semplici vengono definiti attraverso al seguente struttura:
MODULE name
corpo
END MODULE name
Si noti che questa è la forma più semplice dell’unità del modulo. Esistono forme più generali che ci permettono l’inclusione dei subprograms e delle procedure. Richiameremo soltanto la forma più semplice dell’unità del modulo .
Un modulo di programma è reso accessibile alle varie unità di programma attraverso l’istruzione USE. Per meglio comprendere l’utilizzo dei moduli nel Fortran consideriamo il seguente programma che usa un modulo nel calcolo dell’area d’un cerchio:
MODULE Circle !--------------------------------------------------------------------- ! ! Modulo che contiene le definizioni delle variabili necessarie per ! il calcolo dell'area di un cerchio noto il raggio ! !--------------------------------------------------------------------- REAL, PARAMETER :: Pi = 3.1415927 REAL :: radius END MODULE Circle PROGRAM Area !--------------------------------------------------------------------- ! ! Questo programma calcola l'area di un cerchio noto che sia il raggio ! Uses: MODULE Circle ! FUNCTION Area_Circle (r) ! !--------------------------------------------------------------------- USE Circle, ONLY : radius IMPLICIT NONE INTERFACE FUNCTION Area_Circle (r) REAL, INTENT(IN) :: r END FUNCTION Area_Circle END INTERFACE ! Prompt user per il valore del raggio write(*, '(A)', ADVANCE ="NO") "Digita il valore del raggio: " read(*,*) radius ! Scrive l'area utilizzando la function call write(*,100) "Area del cerchio di raggio", radius, " e", & Area_Circle(radius) 100 format (A, 2x, F6.2, A, 2x, F11.2) END PROGRAM Area !-----Area_Circle---------------------------------------------------- ! ! Funzione per il calcolo dell'area del cerchio ! !--------------------------------------------------------------------- FUNCTION Area_Circle(r) USE Circle, ONLY : Pi IMPLICIT NONE REAL :: Area_Circle REAL, INTENT(IN) :: r Area_Circle = Pi * r * r END FUNCTION Area_Circle
In questo esempio, definiamo un modulo che dichiara il tipo delle due variabili reali pi e raggio. In più, in questo modulo, dichiariamo il valore del parametro pi. Per usare il modulo nel programma principale, impieghiamo l’istruzione USE.
Usiamo poi una forma speciale dell’ istruzione USE che specifica che siamo soltanto interessati al valore del raggio nel programma principale, cioè nel programma del modulo viene utilizzato un solo componente. Similmente, usiamo soltanto il parametro pi nel subprogram Area_Circle attraverso l’istruzione USE che compare in quella procedura.
L’istruzione USE deve comparire all’inizio della parte di dichiarazione dell’unità di programma che usa il modulo!! Deve comparire anche prima dell’istruzione IMPLICIT NONE!
LINK DI APPROFONDIMENTO PER L’ARGOMENTO:
- Programmare con Fortran
- Le subroutine nel Fortran
- Le funzioni nel Fortran
- Sottoprogrammi nel Fortran
- Gli array bidimensionali in Fortran
- Gli array monodimensionali nel Fortran