2012-02-26 49 views
1

這是我的程序來解決三維圓柱鰭的問題。但是當我在Fortran 6.2中運行此程序時,此錯誤顯示:」錯誤:數組表達式的形狀不符合「

Error: The shapes of the array expressions do not conform. [T]"

現在我不明白爲什麼會發生這種情況。我需要快速幫助。任何人都請幫助我。

 PROGRAM CYLINDRICAL FIN 
    DIMENSION T(500,500,500), OLDT(500,500,500),ERR(500,500,500) 
    DIMENSION R(500),Y(500),Z(500) 

    REAL CC,H,DR,DY,DZ,A,D,RY,YZ,ZR,B,E,TA,RL,YL,ZL 
    +P,AC,QF,MF,Q,EF,EFF,QMAX,AS,LC,QT,QF1,QF2 
    INTEGER I,J,K,M,N,L,M1,N1,L1,M2,M4,M34,N2,N4,N34,L2,L4,L34 

    RL=0.5 
    YL=6.283 
    ZL=0.04 
    M=100 
    N=40 
    L=20 
    M2=((M/2)+1) 
    M4=((M/4)+1) 
    M34=((3*M/4)+1) 
    N2=((N/2)+1) 
    N4=((N/4)+1) 
    N34=((3*N/4)+1) 
    L2=((L/2)+1) 
    L4=((L/4)+1) 
    L34=((3*L/4)+1) 



    DR=RL/M 
    DY=YL/N 
    DZ=ZL/L 

    CC=400.0 
    H=10.0 
    TA=25 
    M1=M-1 
    N1=N-1 
    L1=L-1 

************VARIABLES************ 
    A=DR*DY*DZ 
    D=DR+DY+DZ 
    RY=DR*DY 
    YZ=DY*DZ 
    ZR=DZ*DR 
     E=RY+YZ+ZR 

************VARIABLES FOR EFFICIENCY AND EFFECTIVENESS (CROSS-SECTION AREA,PERIMETER,M,SURFACE AREA OF FIN)************ 
    AC=3.1416*DR**2 
    P=2*(3.1416*DR+DZ) 
    MF=((H*P)/(CC*AC))**(0.5) 
    AS=2*3.1416*DR*DZ+3.1416*DR**2 
************************************** distance discritization ****************** 

    R(1)=0.0 
    Y(1)=0.0 
    Z(1)=0.0 


    R(M+1)=RL 
    Y(N+1)=YL 
    Z(L+1)=ZL 

    DO I=2,M 
    R(I)=R(I-1)+DR 
    END DO 
    DO J=2,N 
    Y(J)=Y(J-1)+DY 
    END DO 
    DO K=2,L 
    Z(K)=Z(K-1)+DZ 
    END DO 


    DO I=1,M 
    DO J=1,N 
    DO K=1,L 
    T(I,J,K)=0.0 
    END DO 
    END DO 
    END DO 

    DO I=1,M 
    DO J=1,N 
    T(I,J,1)=400 
    END DO 
    END DO 

    ITER=0.0 


    READ(*,*) LAST 

31 CONTINUE 


    ITER=ITER+1 
*************************************** FORMULAS********************************** 

     DO I=2,M1 
    DO J=2,N1 
    DO K=2,L1 


     T(I,J,K)=((R*DR*T(I+1,J,K)*(YZ)**2.0)-((T(I+1,J,K)+T(I-1,J,K))* 
    +(R*YZ)**2.0)-((T(I,J+1,K)+T(I,J-1,K))*(ZR**2.0))-((T(I,J,K+1)+ 
    +T(I,J,K-1))*(R*RY)**2.0))/((R*DR*(YZ)**2.0)-(2.0*(R*YZ)**2.0)- 
    +(2.0*(ZR)**2.0)-(2.0*(R*RY)**2.0)) 
    END DO 
    END DO 
    END DO 




*************************************** END OF ITERATIONG FORMULAS**************** 
    DO I=1,M 
    DO J=1,N 
    DO K=1,L 
    OLDT(I,J,K)=T(I,J,K) 
    END DO 
    END DO 
    END DO 


    DO I=1,M 
    DO J=1,N 
    DO K=1,L 
    ERR(I,J,K)=T(I,J,K)-OLDT(I,J,K) 
    END DO 
    END DO 
    END DO 

    EMAX=0.0 
    EMAX=MAX(EMAX,ERR(I,J,K)) 

    WRITE(*,*) ITER, EMAX 

    IF (ITER.LT.LAST) GOTO 31 


    WRITE(*,*) DR,A,B,E 

    END PROGRAM CYLINDRICAL FIN 
+0

錯誤是否給出了行號的任何指示?沒有一些更具體的信息,這是有點多的代碼來診斷。 – 2012-02-26 19:03:13

+0

更不用說它被寫入的方式,它絕對不是實際代碼的複製粘貼。評論標誌在哪裏?程序名不能有空格... – Rook 2012-02-26 19:33:09

+1

@ldigas:正如所寫的,它看起來像完全精細的固定源代碼形式給我(不看一行開頭的空格數,因爲這可能是一個神器降價系統)。 – eriktous 2012-02-26 20:38:35

回答

5

在你的長公式中,你有R沒有索引。但是R是一個向量,所以這就是爲什麼你會得到這個錯誤。

DO I=1,M 
DO J=1,N 
T(I,J,1)=400 
END DO 
END DO 

可以更迅速地寫成 T(1:M,1:N,1) = 400400是一個整數,所以你最好使用400.

2

我迅速轉換程序自由格式,並與gfortran編譯它。問題行是:

T(I,J,K)=((R*DR*T(I+1,J,K)*(YZ)**2.0)-((T(I+1,J,K)+T(I-1,J,K))* & 
(R*YZ)**2.0)-((T(I,J+1,K)+T(I,J-1,K))*(ZR**2.0))-((T(I,J,K+1)+ & 
T(I,J,K-1))*(R*RY)**2.0))/((R*DR*(YZ)**2.0)-(2.0*(R*YZ)**2.0)- & 
(2.0*(ZR)**2.0)-(2.0*(R*RY)**2.0)) 

的gfortran錯誤信息是: 「錯誤:不兼容的行列0和在分配1(1)」 與(1)在LHS指定的 「T」。很明顯,T(I,J,K)是等級爲0的縮放器。在RHS的某個地方,你有一系列等級1 - 由Azrael3000確定爲「R」。

P.S.我建議使用「隱式無」並輸入所有變量。隱式類型是有害的,例如,它允許編譯器接受變量名中的拼寫錯誤。

+0

人們總是抱怨沒有使用'implicit none',雖然他們有一個觀點,但在某些情況下,隱式鍵入可能會很有用。在任何情況下,使用'-Wuninitialized'都必須避免使用隱式類型時的錯誤(包含在'-Wall'中)。 – steabert 2012-02-27 09:50:32

+0

CAN U請告訴我這個代碼是什麼意思:「IF(ITER.LT.LAST)GOTO 31」 – nafiz27me 2012-06-14 04:37:10

+0

以及如何爲ITERATION END添加條件以使ERROR = 0? – nafiz27me 2012-06-14 04:38:35

0

您的問題來自您嘗試執行的數組操作。

如果簡化行:

T(I,J,K)=((R*DR*T(I+1,J,K)*(YZ)**2.0)-((T(I+1,J,K)+T(I-1,J,K))* 
+(R*YZ)**2.0)-((T(I,J+1,K)+T(I,J-1,K))*(ZR**2.0))-((T(I,J,K+1)+ 
+T(I,J,K-1))*(R*RY)**2.0))/((R*DR*(YZ)**2.0)-(2.0*(R*YZ)**2.0)- 
+(2.0*(ZR)**2.0)-(2.0*(R*RY)**2.0)) 

你可以用這個其它行也顯示了同樣的錯誤結束:

T(I,J,K)= T(I,J,K-1)*R 


The shapes of the array expressions do not conform. [T] 

所以,你可以看到你的問題來自於試圖將數組R分配給標量T(I,J,K)。