25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

6.5 Array allocabili 319<br />

Gli array allocabili sono spesso chiamati deferred-shape array poiché, quando essi vengono<br />

dichiarati, la loro estensione lungo ciascuna dimensione non viene specificata, bensì rimandata<br />

(deferred) ad una fase successiva.<br />

Una cosa importante da osservare è che, contrariamente a quanto avviene con tutte le altre<br />

forme di array, la dichiarazione di un array allocabile non alloca spazio alcuno per l’array<br />

sicché non è possibile usare detto array fino a che esso non venga allocato. Difatti, un array<br />

allocabile è detto avere uno stato di associazione per cui, fintanto che non venga allocato spazio<br />

in memoria per i suoi elementi, il suo stato di allocazione è detto correntemente non allocato<br />

o, più semplicemente, non allocato.<br />

Un array non allocato può essere allocato a mezzo dell’istruzioneALLOCATE che ha la funzione<br />

di riservare spazio in memoria per i suoi elementi. La sintassi dell’istruzione di allocazione è la<br />

seguente:<br />

ALLOCATE(lista_di_specificazioni_di_array [, STAT=variabile_di_stato])<br />

in cui ogni specificazione_di_array consiste nel nome dell’array allocabile seguito dai limiti<br />

degli indici, per ciascuna dimensione, racchiusi tra parentesi. La clausola opzionale:<br />

STAT=variabile_di_stato<br />

fa sì che il processore sia in grado di fornire indicazioni riguardo il successo o meno dell’operazione<br />

di allocazione, allo stesso modo in cui la clausola IOSTAT=variabile_di_stato informa<br />

circa la riuscita o meno di una operazione di I/O su file. Se l’allocazione dell’array ha avuto<br />

successo variabile_di_stato assumerà valore nullo, in caso contrario essa assumerà un valore<br />

positivo dipendente dal processore. Si noti che, pur essendo opzionale, l’uso della clausola<br />

STAT= è sempre consigliabile poiché, in sua assenza, un eventuale fallimento nell’allocazione di<br />

un array comporterebbe un inevitabile arresto del programma. A titolo di esempio, si guardi<br />

la seguente istruzione:<br />

ALLOCATE(arr1(20),arr2(10:30,-10:10),arr3(20,30:50,10),STAT=error)<br />

Essa alloca tre vettori di cui uno (arr1) monodimensionale di 20 elementi, un altro (arr2)<br />

bidimensionale di 21×21 elementi, l’ultimo (arr3) tridimensionale di 20×21×10 elementi. Si<br />

noti che in una stessa istruzione ALLOCATE possono essere allocati array non solo di diversa<br />

forma e dimensioni ma anche di tipo differente, come mostrato dal seguente frammento di<br />

codice:<br />

INTEGER, ALLOCATABLE :: matrix(:,:)<br />

REAL, ALLOCATABLE :: vector(:)<br />

...<br />

ALLOCATE(matrix(3,5),vector(-2:N+2))<br />

<strong>Il</strong> programma che segue mostra un esempio di impiego di array allocabili. Lo scopo del<br />

programma è quello di verificare se un valore reale ed un vettore siano o meno un autovalore ed<br />

il corrispondente autovettore di una matrice quadrata assegnata. Si ricorda che, detta A una

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!