2013-10-01 31 views
1

我在程序中遇到错误。为了显示错误,我添加了这个小程序和相关的错误。我会赞赏一些帮助。Fortran错误:数组表达式的形状不符合

PROGRAM TRY 
     IMPLICIT NONE 
     REAL(KIND=8) :: A(6,6),B(6,6) 
     INTEGER :: I, J 
     REAL(KIND=8) :: RHO, H 
     REAL(KIND=8) :: C(5,2),D(2,5),E(5,5) 
! 
     RHO=780 
     H=0.5D0 
     DO I=1,6 
     DO J=1,6 
      A(I,J)=1 
     ENDDO 
     ENDDO 

     B=RHO*H**2.0D0*A 
     DO I=1,5 
     DO J=1,2 
      C(I,J)=I+J 
     ENDDO  
     ENDDO 

     OPEN(1,FILE='OUTPUT.DAT') 
     DO I=1,6 
      WRITE(1,20) (B(I,J), J=1,6) 
     ENDDO 
     DO I=1,5 
     DO J=1,2 
       D(J,I)=C(I,J) 
     ENDDO 
     ENDDO 
     E=C*D 
     DO I=1,5 
      WRITE(1,20) (E(I,J), J=1,5) 
     ENDDO 
     CLOSE(1) 

20 FORMAT (999(2x,EN14.4))  

     END PROGRAM TRY 

我收到以下错误信息:

fortran_worksheet.f(32): error #6366: The shapes of the array expressions do not conform. 
     E=C*D 
---------^ 
fortran_worksheet.f(32): error #6366: The shapes of the array expressions do not conform. [E] 
     E=C*D 
------^ 
compilation aborted for fortran_worksheet.f (code 1) 

回答

-1

您试图乘以5 x 2矩阵中各个元素的时尚2 x 5矩阵。这肯定会失败!

对于矩阵矩阵乘法,应该使用例如BLAS例程DGEMM。有关使用英特尔MKL时的详细信息,请参见here

+3

或者,使用内在的'matmul'函数。当数组只有'2 x 5'左右时,任何关于它相对于'blas'例程的性能可以被忽略。 –