Fortran 90과 f2py를 처음 사용하게되어 죄송합니다.F2PY에서 모듈 범위 변수를 볼 수 없습니다
저는 Windows 64 비트, Python 3.4 64 비트, gfortran을 사용하고 있습니다. NumPy와 버전은 1.9.1이며,이 링크의 지시에 따라 나는 "NotImplementedError 인상의 gnu.py에서 ("오직 MS 컴파일러의 Win64에 gfortran와 지원 ")"의 주석 부분 : http://scientificcomputingco.blogspot.com.au/2013/02/f2py-on-64bit-windows-python27.html
나는이 로 작성 포트란의 모듈은 dp
변수 모듈-범위로, 다음과
! testf2py.f90
module testf2py
implicit none
private
public dp, i1
integer, parameter :: dp=kind(0.d0)
contains
real(dp) function i1(m)
real(dp), intent(in) :: m(3, 3)
i1 = m(1, 1) + m(2, 2) + m(3, 3)
return
end function i1
end module testf2py
을 그럼, 그것은 그 DP 선언되지 않은 진술 오류를보고 할 f2py -c testf2py.f90 -m testf2py
를 실행합니다.
module-scope를 function-scope에 복사하면 작동합니다. 꽤 "젖은"입니다 로
! testf2py.f90
module testf2py
implicit none
private
public i1
integer, parameter :: dp=kind(0.d0)
contains
real(dp) function i1(m)
integer, parameter :: dp=kind(0.d0)
real(dp), intent(in) :: m(3, 3)
i1 = m(1, 1) + m(2, 2) + m(3, 3)
return
end function i1
end module testf2py
그러나,이,하지만 가장 좋은 코딩 관행처럼 보이지 않는다.
아이디어가 있으십니까?
니스. 나는 승인한다 (그리고 f2py Fortran-python days ... : -). – mgilson
@ 워렌 귀하의 회신에 감사드립니다! 그리고 늦은 응답에 대해 유감스럽게 생각합니다. 나는 또한 메일 링리스트에서 이메일을 받았지만 여기에있는 토론이 아마 더 많은 사람들이 접근 할 수있을 것이라고 생각했다. 나는 이것이 왜 일어나는지 이해하지 못한다는 의문을 가지고있다. 나는 f2py가 kind (kind)의 함수 호출이 사용 되었기 때문에'kind = kind (0.d0)'를 취하지 않는다는 것을 이해한다. 내 질문은 : –
1) 모듈'types'을 먼저 컴파일하면 왜'dp'가 이런 식으로 괜찮을까요? 그것은 더 이상 함수 호출이 아니기 때문에 먼저 컴파일 되었기 때문입니까? 2)'use types, only : dp' 문이 모듈 수준에 있다면 왜 실패할까요? 그리고 그것이 기능 수준에 놓여 있다면 그것은 왜 효과가 있을까요? –