私はFortranでf2pyでコンパイルするために書いているサブルーチンを持っており、コンパイルに失敗しています。私はここで完全なサブルーチンを投稿しませんが、MWEは次のとおりです。配列出力でf2pyを使用してサブルーチンをコンパイルできません
SUBROUTINE mwe(Vars, nxc, nyc, vCorr)
IMPLICIT NONE
real(kind=8), dimension(:,:,:,:) :: Vars
integer :: nxc, nyc
integer :: dims(4), nv, nt, nx, ny
real(kind=8), intent(out), allocatable :: vCorr(:,:,:,:)
dims = shape(Vars)
nv=dims(1)
nt=dims(2)
nx=dims(3)
ny=dims(4)
allocate(vCorr(nv, nt, 2*nxc+1, 2*nyc+1))
print*,size(vCorr)
print*,size(Vars)
END SUBROUTINE
これは明らかにf2pyが割り当て出力配列を受け付けないことを意味
/tmp/tmpy43di1/src.linux-x86_64-2.7/mwe-f2pywrappers.f:30:31:
call mwe(vars, nxc, nyc, vcorr)
1
Error: Actual argument for ‘vcorr’ must be ALLOCATABLE at (1)
で失敗します。だから私はこのコード
このエラー/tmp/tmp0Y1S9x/src.linux-x86_64-2.7/mwemodule.c:296:39: error: called object ‘dims’ is not a function or function pointer
vcorr_Dims[0]=dims(1),vcorr_Dims[1]=dims(2),vcorr_Dims[2]=2 * nxc + 1,vcorr_Dims[3]=2 * nyc + 1;
で失敗
SUBROUTINE mwe(Vars, nxc, nyc, dims, vCorr)
IMPLICIT NONE
real(kind=8), dimension(:,:,:,:) :: Vars
integer :: nxc, nyc
integer :: dims(4)
real(kind=8) :: vCorr(dims(1),dims(2),2*nxc+1,2*nyc+1)
print*,size(vCorr)
print*,size(Vars)
END SUBROUTINE
に私を導いているので、vCorr
が割り当てられることはありません、配列のような形状Vars
を渡すことで、この問題を回避しようとしました
私はthis pageを見て回ったところで、これはバグだと信じています(私はf2py2を使っていても3ではありません)。
これに関するご提案はありますか?
提案は、割り当て可能な配列引数を使用することではありません。 F2pyはそれらをサポートしていません。おそらく周りに重複があります。もう1つはバグのようです。 –
@VladimirFええ、割り当て可能な配列を使用するオプションがサポートされておらず、もう1つが私にバグを与えた場合、他のオプションは何ですか? – TomCho
dims配列は使用しないでください。ただし、単一のスカラ変数dim1とdim2は使用しないでください。 –