PDA

Visualizza la versione completa : Fortran: Array multidimensione


lillo90
29-01-2012, 20:04
Ciao a tutti!
Scusate il quesito di basso profilo, ma sono bloccato in uno script su un problema banale. Devo costruire una matrice in cui ciascuna colonna letta esternamente da file differenti. Dopo aver letto i singoli array (mi fermo a 3 nell'esempio: x(i), y(i) e z(i)) vado a scrivere la matrice con un semplice ciclo:

real, dimension(dim_max, 3)
...
do i= 1, dim_max
do k= 1, 3
if (k==1) A(i,k)= x(i)
if (k==2) A(i,k)= y(i)
if (k==3) A(i,k)= z(i)
enddo
enddo

Mi restituisce una matrice che non ha nulla a che fare con quello che vorrei!
Qualcuno mi sa dire dov' l'errore?

oregon
29-01-2012, 21:25
Originariamente inviato da lillo90
Scusate il quesito di basso profilo

Non questa la cosa importante, piuttosto essere chiari nel quesito ...


Mi restituisce una matrice che non ha nulla a che fare con quello che vorrei!

Ecco ... questo non chiaro ... cosa ottieni e cosa vorresti ottenere dovresti dircelo tu ...

ramy89
29-01-2012, 21:38
Posta il contenuto del file e l' output che hai.
Comunque ti ricordo che in fortran le matrici sono memorizzate per colonne, non per righe come in C.

lillo90
29-01-2012, 21:40
Si, scusa.
Quello che vorrei ottenere una matrice a tre colonne composta dai tre vettori x, y e z. Quello che ottengo un array monodimensionale (quindi una sola colonna) con i dati "esatti" (cio quelli contenuti nei vettori in input) inframmezati da "0.0000".

oregon
29-01-2012, 21:45
No ... non ho capito ... ma che vuoi dire ...?

A(i,k)

un matrice ... che vuoi dire che hai un "array monodimensionale"?

ramy89
29-01-2012, 21:50
Mi sa che stai confondendo le righe con le colonne, prova cos:



do i= 1, dim_max
do k= 1, 3
if (k==1) A(k,i)= x(i)
if (k==2) A(k,i)= y(i)
if (k==3) A(k,i)= z(i)
enddo
enddo



Non sono pratico di fortran, ma dovrebbe andare.

Loading