I moduli nel Fortran


FORTRANNelle 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:

Leave a Reply

Your email address will not be published. Required fields are marked *