私は FORTRAN のまったくの初心者で、1000 行の FORTRAN ソース ファイルを自分で使用するために苦労して MATLAB に変換しています。PRINT
変数を追跡し、数学が正しく機能していることを確認するために、大量のステートメントを挿入することで、これまでのところ順調に進んでいます。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
が、それらは関係ありません。ab1(50)
配列が最初に定義されるのは、このサブルーチンです。私の 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)
。これは複素数なので 2 つの値は問題ありませんが、実際に何かが含まれているという事実は問題ではありませんか? ab1
実際、このコード ブロックでのみ使用される時間があります。
ここに欠けているものはありますか?ソース ファイル (ctrl-f: ab1) を調べて、そのインスタンスを見つけました。元のソースは .for ファイルで、gfortran を使用して Eclipse でコンパイルしました。御時間ありがとうございます。