0
我有一些例程是用fortran編寫的,我想在我的python代碼中使用。一個快速的網絡搜索通知我關於f2py,我試了一下。使用使用f2py的問題
f2py -c numericalMethods.f -m numericalMethods
它似乎工作了一段時間,直到轉換過程中出現大量錯誤。任何想法,爲什麼下面的一段代碼無法使用f2py?
SUBROUTINE n_bezier(t, nx2, BezX, BezY)
PARAMETER (N_SEG=130)
PARAMETER (nmax=130)
DOUBLE PRECISION t(nmax)
DOUBLE PRECISION nx2(nmax)
DOUBLE PRECISION BezX(N_SEG), BezY(N_SEG)
DOUBLE PRECISION coeff(nmax)
INTEGER i, j
DOUBLE PRECISION r,fact
do i = 1, N_SEG
r = real(i)/real(N_SEG)
BezX(i) = 0
BezY(i) = 0
do j=1,nmax
coeff(j) = BICO(nmax,j) *
. (1-r)**(nmax-j) * r**j
print*, 'coeff for j= ', j, ' --> ', coeff(j)
if(coeff(j).ne.0) then
BezX(i) = BezX(i) + coeff(j)*t(j)
BezY(i) = BezY(i) + coeff(j)*nx2(j)
endif
enddo
enddo
END
function fact(n)
INTEGER n, p
DOUBLE PRECISION fact
p = 1
do i = 1, n
p = p * i
end do
fact = p
end
FUNCTION BICO(N,K)
BICO=ANINT(EXP(FACTLN(N)-FACTLN(K)-FACTLN(N-K)))
RETURN
END
FUNCTION FACTLN(N)
DIMENSION A(100)
DATA A/100*-1./
IF (N.LT.0) PAUSE 'negative factorial'
IF (N.LE.99) THEN
IF (A(N+1).LT.0.) A(N+1)=GAMMLN(N+1.)
FACTLN=A(N+1)
ELSE
FACTLN=GAMMLN(N+1.)
ENDIF
RETURN
END
FUNCTION GAMMLN(XX)
REAL*8 COF(6),STP,HALF,ONE,FPF,X,TMP,SER
DATA COF,STP/76.18009173D0,-86.50532033D0,24.01409822D0,
. -1.231739516D0,.120858003D-2,-.536382D-5,2.50662827465D0/
DATA HALF,ONE,FPF/0.5D0,1.0D0,5.5D0/
X=XX-ONE
TMP=X+FPF
TMP=(X+HALF)*LOG(TMP)-TMP
SER=ONE
DO 11 J=1,6
X=X+ONE
SER=SER+COF(J)/X
11 CONTINUE
GAMMLN=TMP+LOG(STP*SER)
RETURN
END
編輯:Here是包含錯誤的日誌文件。
什麼是錯誤? – kennytm 2010-08-28 19:52:24
現在不在正確的計算機上...我會盡量在明天更新這個問題。但是我一開始並沒有包含錯誤信息,因爲其中有成百上千個錯誤信息,這裏的f2py用戶可能更容易複製粘貼我的代碼並查看錯誤是什麼。 – Nigu 2010-08-28 21:35:59
什麼操作系統版本你使用和編譯? – kennytm 2010-08-29 09:11:05