[Fortran] f90 problemi
Ciao a tutti!!!
vi posto qui sotto il programma che ho scritto poi vi dico il problema:
Prima le dichiarazioni:
Li ho allocati ne seguente modo:
Ora il codice:
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
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
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.
ok, quello lo avevo intuito ed ho provato a rimediare così:
Dichiarazione:
ed il programma (l'allocate rimane invariato)
Ma mi da errore...
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...
Perché non qualcosa tipo il seguente?
alRe(j+1) = REAL(alm(1:1,ell,j)) alIm(j+1) =AIMAG(alm(1:1,ell,j))
Ho provato ma mi da il seguente errore:
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...
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...
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?
Ho risolto!
GRazie mille!!!
La soluzione era:
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