2010-08-28 72 views
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是包含錯誤的日誌文件。

+0

什麼是錯誤? – kennytm 2010-08-28 19:52:24

+0

現在不在正確的計算機上...我會盡量在明天更新這個問題。但是我一開始並沒有包含錯誤信息,因爲其中有成百上千個錯誤信息,這裏的f2py用戶可能更容易複製粘貼我的代碼並查看錯誤是什麼。 – Nigu 2010-08-28 21:35:59

+0

什麼操作系統版本你使用和編譯? – kennytm 2010-08-29 09:11:05

回答

0

把我的評論說,終於解決了這個問題到答案:

繼在網絡上發現了一些建議(cd34.com/blog/programming/python/mysql-python-and-snow-leopard - >評論37),我用10.5 SDK的一個替換了10.4文件夾。 stdarg.h錯誤不再存在。不是很乾淨和正統,但它似乎工作。 .so文件現在創建!感謝大家的幫助。