【问题标题】:Python ctypes data-type for passing to F90 real(8) data-type用于传递给 F90 real(8) 数据类型的 Python ctypes 数据类型
【发布时间】:2012-10-15 11:38:41
【问题描述】:

我正在使用 ctypes (Pthyon3.2) 从 64 位 Debian Linux 机器上的共享库中调用 F90 例程。如果 F90 例程采用和参数类型,

! We're in fortran (F90) 
subroutine MyFunc(FooF90)   
real(8),intent(in) :: FooF90
! do some stuff...
return

我应该从 Python 传递什么?我的猜测是,

# We're in Python3.2
F90func(ctypes.byref(ctypes.c_double(FooPy)))

这是正确的吗?我无法轻松找到从 Python 传递 real(n) 类型的 fortran 参数的参考。

提前致谢。

【问题讨论】:

  • 你可能想看看 numpy 的 f2py 来包装 fortran 代码。我发现它总体上很容易使用...
  • 如果子程序是 c 互操作的,我认为这没有必要,而且它是不需要的互连。

标签: python python-3.x fortran ctypes


【解决方案1】:

real(8) 没有被标准定义,所以任何事情都可能发生(您应该通过selected_real_kindiso_c_bindingiso_fortran_env 获得种类编号)。在实践中,对于大多数编译器来说,它相当于c_double。您可能正在使用默认情况下适用的 gfortran。

如果 Python 解释器期望 value 参数默认传递,则可能存在问题。在ctypes中搜索byref()函数。

【讨论】:

  • 是的,我正在使用 gfortran - 我应该提到这一点。我也在使用 byref() 但忘了提(我会修改)。谢谢。任何 ctypes/fortran 参考资料?
  • 我不知道任何具体的材料,但我建议阅读 C - Fortran interoperability using iso_c_binding。
猜你喜欢
  • 2016-04-08
  • 2023-03-08
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多