我是FORTRAN的絕對初學者,並且爲了我自己的使用而苦心地將1000行FORTRAN源文件轉換爲MATLAB。到目前爲止,我一直在通過放入大量PRINT
報表來記錄變量並確保數學運行正常。我在FORTRAN中遇到了一個奇怪的事情,我無法解決這個問題。FORTRAN從哪裏獲取這些值?
存在被定義爲這樣
subroutine addprc
complex tmat,b,ci,c1,c2,cim,ab1(50),ab2(50),acans(10,2),fg1(50),fg2(50)
common dtr,rtd,pi
common /mtxcom/ nrank,nranki,tmat(50,50),b(50,50),cmxnrm(25)
common /cmvcom/ nm,kmv,cmv,twm,prodm
還有更多略低於common
和dimension
分配子程序,但他們不應該是相關的。第一次定義數組是在這個子程序中。對於我的MATLAB腳本,我已將其初始化爲ab1=zeros(1,50);
。它然後在這個循環(在FORTRAN)使用:
do 20 n = 1,nrank
np = n+nrank
cn = real(n)
n1 = n+1
c1 = 4.0*ci**n
c2 = 4.0*ci**n1
p1 = cn*costh*pnmllg(n1)-(cn+cmv)*pnmllg(n)
p2 = cmv*pnmllg(n1)
ab1(n-ij) = c1*p2*uu1
ab1(np-ijt) = -c2*p1*uu1
ab2(n-ij) = -c1*p1*uu2
ab2(np-ijt) = c2*p2*uu2
我已經檢查在這一點上的所有其他變量的值,他們同意我的MATLAB程序。反向工作我已經發現了ab1
已經包含值的問題。在循環之前的打印命令例如
PRINT *,'before ab1', SUM(ab1)
do 20 n = 1,1
返回(107.500008, 5.38305187)
。這是一個複雜的數字,所以這兩個值都很好,但是什麼都不好,它究竟有什麼內容?事實上,唯一的時間ab1
是在這個代碼塊。
有什麼我在這裏失蹤?我查看了源文件(ctrl-f:ab1)以查找它的任何實例。原始的源代碼是一個.for文件,我使用gfortran在Eclipse下編譯它們。謝謝你的時間。
回覆:公用塊無關緊要,請注意,如果該符號是一個公共塊,某個其他程序單元可能會用不同的符號名稱訪問該公用塊。 – agentp
'ij''ijt'循環在哪裏? – ja72
@george:我確實注意到了其他變量的這種行爲。唯一我不確定的是如何知道使用它是什麼,因爲這是第一次定義'ab1'。 @ ja72'ij'' ijt'循環的定義如下所示。 'ij = kmv-1,if(ij.lt.0),ij = 0 ijt = 2 * ij'所以沒什麼太花哨。 –