f2py模块级别的字符可变长度通过来自其他模块的参数

问题描述

考虑以下Fortran模块:

input.f95

module input

  integer,parameter :: identifier_max_length = 8

end module input

utils.f95

module utilities
 use input,only: identifier_max_length

 integer(kind=identifier_max_length) :: ix             ! works !
 character(len=identifier_max_length) :: output_dir    ! DOES NOT work !

contains

 subroutine test
   character(len=identifier_max_length) :: output_dir  ! works !
   write(*,*) ix,output_dir
 end subroutine
end module

要使用f2py进行编译,我首先将input.f95编译为共享库:

gfortran -shared -O2 -o libinput.so -fPIC input.f95

,然后utils.f95python模块

python -m numpy.f2py -c --fcompiler=gfortran -L. -I. -linput -m utils utils.f95

当具有该变量的整数定义起作用时,模块级变量output_dir的字符长度定义将返回错误use of undeclared identifier 'identifier_max_length'。奇怪的是,子例程级别的相同字符定义实际上可以正常工作。我钻入了numpy.f2py.capi_maps.py代码,其中进行了类型映射和种类转换,并且看起来像字符类型的变量一样,字符长度的变量没有得到很好的照顾。

在同一utils模块中定义identifier_max_length参数也可以解决此问题,但这不是我的代码库中的选项。

有人对此有解决方案吗?有没有一种方法可以通过.f2py_f2cmap转换长度语句,还是可以让C代码知道input:identifier_max_length变量?

欢呼

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)