Compaq fortran可執行,但Intel Fortran卻不行

看板Fortran作者 (sammy)時間10年前 (2014/06/05 08:42), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
版上各位大大好: 小弟剛從Compaq fortran 轉用 Intel Fortran 不過原來在Compaq可以使用的執行的Code 在Intel Fortran卻不行 Code如下: ************************************************************************ * * * Inverse matrix Calculating module (Including some subroutines) * * * ************************************************************************ module LinearAlgebra implicit none contains ************************************************************************ * * * Main Inverse Matrix subroutines * * * ************************************************************************ subroutine main_inverse (A,IA) implicit none real*8 :: A(:,:),IA(:,:) real*8,allocatable ::B(:,:) integer ::i,j,N N = size(A,1) allocate(B(N,N)) !先把IA設定成單位矩陣 forall(i=1:N,j=1:N,i==j) IA(i,j)=1.0 forall(i=1:N,j=1:N,i/=j) IA(i,j)=0.0 !保存原本的矩陣A,使用B來計算 B=A !把B化成對角線矩陣(除了對角線外,都為0) call Upper(B,IA,N) !先把B化成上三角矩陣 call Lower(B,IA,N) !再把B化成下三角矩陣 !求解 forall(i=1:N) IA(i,:)=IA(i,:)/B(i,i) return end subroutine ************************************************************************ * * * UPPER Matrix subroutines * * * ************************************************************************ subroutine Upper(M,S,N) implicit none integer :: N real*8 :: M(N,N) real*8 :: S(N,N) integer :: I,J real*8 :: E do I=1,N-1 do J=I+1,N E=M(J,I)/M(I,I) M(J,I:N)=M(J,I:N)-M(I,I:N)*E S(J,:)=S(J,:)-S(I,:)*E end do end do return end subroutine Upper ************************************************************************ * * * LOWER Matrix subroutines * * * ************************************************************************ subroutine Lower(M,S,N) implicit none integer :: N real*8 :: M(N,N) real*8 :: S(N,N) integer :: I,J real*8 :: E do I=N,2,-1 do J=I-1,1,-1 E=M(J,I)/M(I,I) M(J,1:N)=M(J,1:N)-M(I,1:N)*E S(J,:)=S(J,:)-S(I,:)*E end do end do return end subroutine Lower end module ************************************************************************ * * * The connecting-subroutine * * * ************************************************************************ subroutine inverse(B,BI,M) use LinearAlgebra implicit real*8 (a-h,o-z) real*8 :: A(M,M) real*8 :: IA(M,M) integer :: i real*8 :: B(M,M),BI(M,M) do imn = 1,M do jmn = 1,M A(imn,jmn) = B(imn,jmn) end do end do call main_inverse(A,IA) do imn = 1,M do jmn = 1,M BI(imn,jmn) = IA(imn,jmn) end do end do return end 執行時,會出現下列狀況, allocatable array is already allocated 在這應該是指我的B矩陣。 不曉得是不是語法上出了點問題,還請各位大大指教。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.115.62.41 ※ 文章網址: http://www.ptt.cc/bbs/Fortran/M.1401928926.A.71E.html

06/05 10:09, , 1F
module B最後要解掉?
06/05 10:09, 1F

06/05 12:34, , 2F
你是不是開錯檔了?
06/05 12:34, 2F
文章代碼(AID): #1JZxpUSU (Fortran)