Indice

Tutorial Fortran 77 Stanford pdf html

main_tria_base3_v001.for

mesh_tria_comp.dat

mesh_tria_flex.dat

LABORATORIO 4: INTRO AL FORTRAN

Cos’è il Fortran?

Il FORTRAN è un linguaggio di programmazione standardizzato, nato in ambito scientifico, che realizza programmi compilati. Utilizzeremo la versione del Fortran 77 in quanto è la più utilizzata e leggibile anche dai fortran successivi (Fortran 90, 95, 2003, 2008).

Introduzione al linguaggio Fortran 77

Per scrivere il programma abbiamo bisogno di un editor di testo, ad es. 'gedit' (disponibile sia in ambiente Linux che Windows), che permette di scrivere file di testo non formattati. Posso pertanto scrivere come se avessi righe e colonne. Il programma, scritto con 'gedit', dovrà essere salvato con estensione .for (es. nomeprogramma.for).
Per compilare il programma si apre il terminale (linux) o il prompt dei comandi (windows) e, dal direttorio dove è presente il file nomeprogramma.for, si crea il file eseguibile e lo si esegue digitando nella linea dei comandi:

Il comando di compilazione ed esecuzione del programma, uniti dal comando &&, possono essere scritti nella stessa riga del terminale. Inoltre, si possono introdurre altri due comandi: < e >. Il primo permette di inondare il programma con i valori di ingresso contenuti nel file testo, preesistente nello stesso direttorio dove è collocato il programma, chiamato, ad es., 'input'. Il secondo permette di creare un file testo che conterrà i valori di uscita, chiamato, ad es., 'output':

Per compilare il programma vi sono delle convenzioni da conoscere:

Struttura principale di un programma

Un programma inizia sempre con la dicitura program nomeprogramma e termina con il primo end. Il programma è suddiviso in due parti: dichiarazioni e istruzioni. Dopo l’istruzione end del programma, possono seguire dei sottoprogrammi chiamati SUBROUTINE o FUNCTION. Questi possono essere richiamati nel programma tramite l’istruzione call nomesubroutine_o_nomefunction.

Dichiarazioni

Variabili

In Fortran 77 ci sono due metodi per dichiarare le variabili: un metodo implicito ed uno esplicito. Il metodo di default è quello implicito cioè se una variabile non viene dichiarata esplicitamente verrà allocata in modo automatico: in particolare tutte le variabili, che vengono chiamate con un nome il quale comincia con le lettere i, j, k, l, m, n, saranno allocate come variabili intere, tutte le altre come variabili reali. La dichiarazione esplicita delle variabili non è obbligatoria, ma è fortemente consigliata per evitare futuri errori nel programma. Per questo motivo, nella stesura del programma, si consiglia l'uso del comando implicit none per poter disattivare la dichiarazione implicita di default, che ci obbliga a prendere in considerazione, ogni qualvolta, la dichiarazione esplicita di una variabile.
Inoltre, il nome di una variabile può contenere al massimo 6 caratteri.

Costanti

Le costanti si definiscono con il comando parameter.

Variabili strutturate o Array (Matrici/Vettori)

Un array si dichiara con il comando dimension. In questo caso, il compilatore richiede, al sistema operativo, un’allocazione di memoria per memorizzare tutte le componenti dell'array. Un array può essere monodimensionale, ed in questo caso rappresenta un vettore, oppure bidimensionale, che invece rappresenta una matrice.

Istruzioni

Le istruzioni sono dei comandi che eseguono delle operazioni definite. Un elenco dettagliato di questi comandi è visibile sul file “Tutorial Fortran 77 Stanford”.

Programma visto a lezione

C234567
      PROGRAM POCCIAMEMORIA
      IMPLICIT NONE
      INTEGER NCELLE,I
      PARAMETER (NCELLE=10)
      REAL VEC
      DIMENSION VEC(NCELLE)

      I = 4

      CALL CLEAR( NCELLE , 1 , VEC )

c chiedo all'utente di inserire i valori non nulli
      READ(*,*) I
  101 IF ( I .GT. 0 ) THEN
       READ(*,*) VEC(I)
       READ(*,*) I
       GOTO 101
      ELSE IF ( I .LT. 0 ) THEN
       READ(*,*) VEC(NCELLE+I+1)
       READ(*,*) I
       GOTO 101
      ELSE
       write(*,*) 'fine input'
      ENDIF

C234567
c     DO 10 I=1,NCELLE,1
C      WRITE(*,*) VEC(I)
C  10 CONTINUE  !qui avrei ENDDO
      
      WRITE(*,*) (VEC(I),I=1,NCELLE)

      STOP
      END

C======================================================================
C SOTTOPROGRAMMA PER L'AZZERAMENTO DI VETTORI E MATRICI
C======================================================================
C     SUBROUTINE CLEAR: Inizializzazione a zero degli elementi di una
C     matrice.
C
      SUBROUTINE CLEAR(  K1  ,  K2  ,  A  )
c     ARGOMENTI:
c     INPUT:  K1, numero di righe della matrice
c             K2, numero di colonne della matrice
c     OUTPUT:  A, matrice azzerata dalla subroutine
c
c     la subroutine si può utilizzare su vettori trattandoli come equivalenti
c     matrici riga o colonna

      DIMENSION A(K1,K2)

      DO 10,I10=1,K1
      DO 20,I20=1,K2
      A(I10,I20)=0.
   20 CONTINUE
   10 CONTINUE

      RETURN
      END
gfortran primipassi.for  &&  ./a.out < input > output