[Fortran] f90 problemi

stuzzi1
Ciao a tutti!!!
vi posto qui sotto il programma che ho scritto poi vi dico il problema:
Prima le dichiarazioni:
real, allocatable, dimension(:) :: alRe(:)
real, allocatable, dimension(:) :: alIm(:)
complex, allocatable, dimension(:,:,:) :: alm

Li ho allocati ne seguente modo:
 allocate(alIm(ell), alRe(ell))
allocate(alm(1:1, 0:nlmax, 0:nlmax))

Ora il codice:
do j=0,ell           
    alRe= REAL(alm(1:1,ell,j))
    alIm=AIMAG(alm(1:1,ell,j))
    WRITE(*,*) 'Re(',j,')=', alRe
    WRITE(*,*) 'Im=(',j,')', alIm 
 end do

In sostanza ho un array e da esso voglio estrarre parte reale ed immaginaria. In tal modo funziona ma se controllo fuori dal ciclo do in memoria ho solo il valore dell'ultimo j (j=ell)...
Qualcuno mi riesce a spiegare il perchè non ha in memoria tutti i valori associati a j=0,ell???
grazie mille a tutti!!
ciao ciao

Risposte
apatriarca
Ad una prima occhiata direi che i valori scritti in alRe e alIm vengono sovrascritti ad ogni iterazione del ciclo con i nuovi valori, cancellando di fatto quelli precedenti.

stuzzi1
ok, quello lo avevo intuito ed ho provato a rimediare così:
Dichiarazione:
 character(len=15), allocatable, dimension(:) :: alRe
 character(len=15), allocatable, dimension(:) :: alIm

ed il programma (l'allocate rimane invariato)
j=0
 do j=0,ell            
   write(alRe(j),"(A15)"), REAL(alm(1:1,ell,j))
   write(alIm(j),"(A15)"), AIMAG(alm(1:1,ell,j))
    WRITE(*,*) 'Re(',j,')=', alRe(j)
    WRITE(*,*) 'Im=(',j,')', alIm(j)
    end do

Ma mi da errore...

apatriarca
Perché non qualcosa tipo il seguente?
alRe(j+1) = REAL(alm(1:1,ell,j))
alIm(j+1) =AIMAG(alm(1:1,ell,j))

stuzzi1
Ho provato ma mi da il seguente errore:
Error: Incompatible ranks 0 and 1 in assignment at (1)

Il problema è che alm(1:1,ell,j) ha 3 dimensioni e alRe ne ha solo 1...inoltre il primo è un complex mentre il secondo deve essere un character...

apatriarca
Ma alRe e alIm non erano, almeno inizialmente, delle matrici di reali? Non mi è chiaro in che modo il passaggio a delle stringhe possa cambiare la situazione.. Cosa stai cercando esattamente di fare?

stuzzi1
Ho risolto!
GRazie mille!!!
La soluzione era:
do i=0,ell
     write(alRe1(i), "(F10.5)") REAL(alm(1:1,ell,i))
     write(alIm1(i), "(F10.5)") AIMAG(alm(1:1,ell,i))
end do

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.