Monthly Archives: March 2015

Array allocabili nel Fortran


FORTRANLe funzionalità di elaborazione degli Array nel Fortran 90 rappresentano i più significativi miglioramenti del linguaggio offerti dal nuovo standard. Tra queste assumono particolare importanza gli Array allocabili nel Fortran, cioè la possibilità di dichiarare un array con l’attributo ALLOCATABLE. Tale attributo indica che lo spazio per quell’array non viene riservato all’inizio dell’esecuzione del programma ma solo dopo l’esecuzione dell’istruzione ALLOCATE(), in cui si determina anche la dimensione dell’array.

Gli array possono essere molto grandi, in tal caso, richiedono molta memoria; pertanto, è spesso utile riservare questo spazio solo durante i tempi in cui è richiesto l’utilizzo dell’array. Questo non può essere fatto quando la dimensione dell’array è dichiarato durante la compilazione. Per questo motivo è conveniente utilizzare, per tali risorse, la cosiddetta ”free store” una memoria di run time per allocare così tale memoria solo durante l’esecuzione del programma. Questa memoria può essere utilizzata e ripristinata utilizzando i seguenti comandi.

Per dichiarare un array come allocabile utilizzeremo la seguente sintassi:

type, DIMENSION(:), ALLOCATABLE ::nome_array

Ad esempio scriveremo:

INTEGER, DIMENSION(:), ALLOCATABLE :: VETTORE

che crea un array intero di nome  VETTORE  a cui sarà allocata della memoria solo durante l’esecuzione ed in misura della sua grandezza.

Una volta che l’array non risulta più necessario, è importante deallocare la memoria in modo che possa essere utilizzata per altre risorse. Per fare questo utilizzeremo il comando DEALLOCATE. Quindi sarà importante utilizzare l’opzione STAT onde verificare che la deallocazione abbia avuto successo.

 DEALLOCATE (VETTORE)

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Come formattare i numeri nel formato esponenziale nel Fortran


FORTRANPer formattare i numeri nel formato esponenziale nel Fortran si utilizza il descrittore E che ci consente di controllare la rappresentazione dei numeri nel formato esponenziale. La forma generale di tale descrittore è:

rEw.d

dove r,w e d assumono il seguente significato:

  • d = Numero di cifre da visualizzare a destra del punto decimale
  • r = Fattore di ripetizione: specifica il numero di volte che un descrittore deve essere utilizzato
  • w = Larghezza di campo: numero di caratteri da utilizzare

Per meglio comprendere il concetto appena esposto analizziamo allora il seguente esempio di istruzione di uscita formattata:

E15.5

che indica di rapresentare il numero in notazione esponenziale con 15 caratteri di cui 5 a destra del punto.

Quindi se dovessimo rappresentare il numero 5.37939E6 con il formato precedente avremmo:

       0.53794E+07
   ____|____|____|
       5   10    15

infatti occorrono:

  • 1 carattere per il segno della mantissa;
  • 2 caratteri per lo zero ed il punto decimale;
  • 5 caratteri per la mantissa;
  • 1 carattere per la lettera E;
  • 1 carattere per il segno dell’esponente;
  • 2caratteri per l’esponente;

per un totale di 12 caratteri, avendo utilizzato 15 caratteri rendiamo il tutto più leggibile.

In generale deve valere la seguente espressione:

w >= d+7

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Come formattare i numeri reali nel Fortran

FORTRANPer formattare i numeri reali nel Fortran si utilizza il descrittore F che ci consente di controllare la rappresentazione dei numeri reali. La forma generale di tale descrittore è:

rFw.d

dove r,w e d assumono il seguente significato:

  • d = Numero di cifre da visualizzare a destra del punto decimale
  • r = Fattore di ripetizione: specifica il numero di volte che un descrittore deve essere utilizzato
  • w = Larghezza di campo: numero di caratteri da utilizzare

Per meglio comprendere il concetto appena esposto analizziamo allora il seguente esempio di istruzione di uscita formattata:

2F8.3

che indica di ripetere per due variabili il formato di numero reale con l’utilizzo di 8 caratteri di cui 3 a destra del punto.

Quando viene stampato un numero reale, la sua parte intera viene stampato come se si utilizzasse il descrittre Im-(d+1). Pertanto, se il numero di posizioni non è sufficiente per stampare completamente la parte intera, tutte le posizioni w saranno riempite con asterischi. Si noti che la parte intera contiene un segno e di conseguenza w deve essere maggiore o uguale a d + 2.
La parte frazionaria può avere più di d cifre. In questo caso, la (D+1)-esima cifra sarà arrotondata alla desima cifra.

Come formattare i numeri reali nel Fortran

Ad esempio, se il numero 1,73 è stampato con il formato F3.1 (usando cioè 3 posizioni per stampare un numero reale con la posizione più a destra utilizzata per la parte frazionaria), poiché la seconda cifra della parte frazionaria è 3, il risultato sarà 1.7 in quanto l’ultima cifra è arrotondata per difetto. Tuttavia, se si stampa il numero 1,76 con lo stesso formato F3.1, il risultato diventa 1.8 perché l’ultima cifra è arrotondata per eccesso.

La parte frazionaria può avere meno di d cifre. In questo caso, verranno aggiunti degli zeri finali.
Si noti che d può essere zero. In questo caso, nessuna parte frazionaria verrà stampata. Più precisamente, la posizione più a destra è il punto decimale.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO: