2016-12-01 9 views
0

私のendgameは、私が書いた数々の異なるFortranスクリプトをPython経由で取り込むことです。スクリプト自体は比較的単純です。本質的には、配列よりも複雑なプログラミング構造を必要とせず、数学的な計算だけです。しかし、私はこれでかなり新しいので、私はそれを試している小さなテストスクリプトを持っています。f2py Fortranモジュールから変数を回復する

メインスクリプトは、(省略形で)以下である:

subroutine addwake 
use geometry 
implicit none 

    integer::i,j,k,m 
    real(kind=8),allocatable::xn2(:,:),yn2(:,:),zn2(:,:) 
    real(kind=8)::avg,m1,m2,m0 
    character(50)::namefile 

!f2py intent(out) i,j,k,m 
!f2py intent(out),allocatable xn2,yn2,zn2 
!f2py intent(out) avg,m1,m2,m0 
!f2py intout(out) namefile 

! Check if surface node arrays are allocated 
if(allocated(xn))then 
    deallocate(xn,yn,zn) 
end if 

! Read in sectional point distribution 

... 

end subroutine addwake 

これは私の悲しみのソースであるモジュール(geometry.f95)を利用します。

module geometry 
    implicit none 

    ! panel coordinates and connectivity 
    integer::jmax,kmax 
    integer::npts_wake 
    real(kind=8)::dspan 
    real(kind=8),allocatable::xn(:,:),yn(:,:),zn(:,:) 
    !f2py intent(out) jmax,kmax,npts_wake 
    !f2py intent(out) dspan 
    !f2py intent(out),allocatable xn,yn,zn 
end module geometry 

私はf2py -c -m wake geometry.f95 addwake.f95経由で直接コードをコンパイルし、それを実行するために、Pythonインタプリタに入ります。それはうまく動作し、期待される出力(数字の順序付きリストを持つテキストファイル)を与えていますが、私は統合フレームワークでできることが必要な変数値を抽出しようとします。私はそれをしようとすると、私は次のような結果を得る:

>>> print wake.geometry.xn 
[[ 2.01331785 2.01331785 2.01331785 2.01331785 2.01331785] 
[ 2.00308232 2.00308232 2.00308232 2.00308232 2.00308232] 
[ 1.99284679 1.99284679 1.99284679 1.99284679 1.99284679] 
..., 
[ 0.979798 0.979798 0.979798 0.979798 0.979798 ] 
[ 0.989899 0.989899 0.989899 0.989899 0.989899 ] 
[ 1.   1.   1.   1.   1.  ]] 
>>> print wake.geometry.yn 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: yn 
>>> print wake.geometry.zn 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: zn 

私は各変数は独自の行に定義されるようなgeometry.f95にf2py宣言を変更した場合、私はすべての3つの変数の属性エラーが発生します。私はここでかなり困惑しているので、どんなアイデアですか?

答えて

0

申し訳ありませんが、の理由で何も説明されていません。なぜ投稿が機能しませんが、一時的な解決策はあります。私がgeometry.f95(モジュール)内の割り当て可能変数のf2py宣言を省略しただけでは、すべてが大変です。言い換えれば、

module geometry 
    implicit none 

    ! panel coordinates and connectivity 
    integer::jmax,kmax 
    integer::npts_wake 
    real(kind=8)::dspan 
    real(kind=8),allocatable::xn(:,:),yn(:,:),zn(:,:) 
!f2py intent(out) jmax,kmax,npts_wake 
!f2py intent(out) dspan 

end module geometry 

...私は3つのすべての行列の値をプルするためにインタープリタを使用できます。しかし、他の変数(jmax、kmaxなど)の値を取得しようとすると、私は失敗に終わります。これらの変数宣言に関する何かが、明らかに作品を混乱させています。なぜそうはわかりません。

関連する問題