F2PY将整数更改为数组???

我有一个简单的模块,该模块在plot3d文件上执行基本操作
(以下).我包裹着:
f2py -fcompiler = gfortran -m plot3d -c prec.f90 plot3d.f90
这似乎很好,但是我得到了一些意外的结果...
['imax','jmax','kmax','mg','prc','printall','readit'
'writeit2d']
阵列(409)
" 409"是正确的,但是" iMax"被声明为fortran和
现在是Python中的一个数组???有任何想法吗?
#prec.f90
模块prec
隐式没有
Integer,参数::单= selected_real_kind(p = 6,r = 37)
integer,参数:: double = selected_real_kind(p = 15,r = 200)
结束模块Prec
#plot3d.f90
模块plot3d
使用Prec
隐式没有
整数,参数:: prc =单
真实(prc),可分配,尺寸(:,:,:,::::: :: x,y,z
Integer :: MG,Imax,Jmax,Kmax
包含
!-------------
子例程readit(fname,ftype,fmg)
呢在xyz中读取plot3d,格式化,mg文件
隐式没有
字符(len = 20),意图(in):: fname,ftype
逻辑:: FMG
integer :: i,j,k,n,f = 1
选择案例(ftype)
案例("格式")
打开(单位= f,file = fname,status ='old',action ='read',
form = ftype)
如果(fmg)读(f,*)mg!仅阅读Multigrid
读(f,*)imax,jmax,kmax
分配(x(mg,imax,jmax,kmax)))
分配(y(mg,imax,jmax,kmax)))
分配(z(mg,imax,jmax,kmax)))
读(f,*)(((((x(n,,),
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg),&
((((y(n,,,)
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg),&
((((z(n,,
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg)
案例('nofformated')
打开(单位= f,file = fname,status ='old',action ='read',
form = ftype)
如果(fmg)读(f)mg!仅阅读Multigrid
阅读(f)imax,jmax,kmax
分配(x(mg,imax,jmax,kmax)))
分配(y(mg,imax,jmax,kmax)))
分配(z(mg,imax,jmax,kmax)))
读(f)((((x(n,,))
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg),&
((((y(n,,,)
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg),&
((((z(n,,
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg)
案例默认
写(*,*)'filetype在'中不支持
停止
结束选择
关闭(f)
结束子例程读取
结束模块plot3d

# 回答1


约翰写道:
['imax','jmax','kmax','mg','prc','printall','readit'
'writeit2d']
阵列(409)
" 409"是正确的,但是" iMax"被声明为fortran和
现在是Python中的一个数组???有任何想法吗?
#prec.f90
模块prec
隐式没有
Integer,参数::单= selected_real_kind(p = 6,r = 37)
integer,参数:: double = selected_real_kind(p = 15,r = 200)
结束模块Prec
#plot3d.f90
模块plot3d
使用Prec
隐式没有
整数,参数:: prc =单
真实(prc),可分配,尺寸(:,:,:,::::: :: x,y,z
Integer :: MG,Imax,Jmax,Kmax
包含
!-------------
子例程readit(fname,ftype,fmg)
呢在xyz中读取plot3d,格式化,mg文件
隐式没有
字符(len = 20),意图(in):: fname,ftype
逻辑:: FMG
integer :: i,j,k,n,f = 1
选择案例(ftype)
案例("格式")
打开(单位= f,file = fname,status ='old',acti on ='read',
form = ftype)
如果(fmg)读(f,*)mg!仅阅读Multigrid
读(f,*)imax,jmax,kmax
分配(x(mg,imax,jmax,kmax)))
分配(y(mg,imax,jmax,kmax)))
分配(z(mg,imax,jmax,kmax)))
读(f,*)(((((x(n,,),
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg),&
((((y(n,,,)
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg),&
((((z(n,,
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg)
案例('nofformated')
打开(单位= f,file = fname,status ='old',action ='read',
form = ftype)
如果(fmg)读(f)mg!仅阅读Multigrid
阅读(f)imax,jmax,kmax
分配(x(mg,imax,jmax,kmax)))
分配(y(mg,imax,jmax,kmax)))
分配(z(mg,imax,jmax,kmax)))
读(f)((((x(n,,))
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg),&
((((y(n,,,)
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg),&
((((z(n,,
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg)
案例默认
写(*,*)'filetype在'中不支持
停止
结束选择
关闭(f)
结束子例程读取
结束模块plot3d
我不确定为什么您要获得数组(409)而不是409,但是您可以使用此数字
输入Python作为正常整数.例如数组(409)+409给出整数
价值818.
问候
- -
Marek
# 回答2


嗯...我什至没有尝试...我认为这可能是造成的
路上的问题将此Var传递给其他班级等,但是我
可能不会!
谢谢.
# 回答3


在9月9日,18:41,John ['imax','jmax','kmax','mg','prc','printall','readit'
'writeit2d'] >> p3.ReadIt(" mesh.xrtz.dat","格式"," .true.")
阵列(409)
" 409"是正确的,但是" iMax"被声明为fortran和
现在是Python中的一个数组??? *有任何想法吗?
#prec.f90
模块prec
隐式没有
Integer,参数::单= selected_real_kind(p = 6,r = 37)
integer,参数:: double = selected_real_kind(p = 15,r = 200)
结束模块Prec
#plot3d.f90
模块plot3d
使用Prec
隐式没有
整数,参数:: prc =单
真实(prc),可分配,尺寸(:,:,:,::::: :: x,y,z
Integer :: MG,Imax,Jmax,Kmax
包含
!-------------
* * subroutine readit(fname,ftype,fmg)
* *!在xyz中读取plot3d,格式化,mg文件
* *隐含无
* *字符(len = 20),意图(in):: fname,ftype
* *逻辑:: FMG
* *整数:: i,j,k,n,f = 1
* *选择案例(ftype)
* * * *案例('格式')
* * * * * * * open(单位= f,file = fname,status ='old',action ='read',
form = ftype)
* * * * * * if(fmg)读(f, *)mg!仅阅读Multigrid
* * * * * * *读(f, *)imax,jmax,kmax
* * * * * *分配(x(mg,imax,jmax,kmax)))
* * * * * *分配(y(mg,imax,jmax,kmax)))
* * * * * *分配(z(mg,imax,jmax,kmax)))
* * * * * * *读(f, *)(((((x(n,,,,))
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg),&
* * * * * * * * * * * *((((y(n,,)
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg),&
* * * * * * * * * * *(((((Z(n,,,))
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg)
* * * * case('未形式')
* * * * * * * open(单位= f,file = fname,status ='old',action ='read',
form = ftype)
* * * * *如果(fmg)读(f)mg!仅阅读Multigrid
* * * * * *读(f)imax,jmax,kmax
* * * * * *分配(x(mg,imax,jmax,kmax)))
* * * * * *分配(y(mg,imax,jmax,kmax)))
* * * * * *分配(z(mg,imax,jmax,kmax)))
* * * * * *读(f)((((x(n,,,,)
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg),&
* * * * * * * * * * *((((y(n,,,,)
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg),&
* * * * * * * * * *((((Z(n,,,)
i,j,k),i = 1,imax),j = 1,jmax),k = 1,kmax),n = 1,mg)
* * * *案例默认
* * * * * * * write( *, *)'filetype在'中不支持
* * * * * * 停止
* *结束选择
* *关闭(f)
* *结束子例程readit
结束模块plot3d
您可以使用一些命令行标志i生成依据.pyf文件
忘记.
在那里,您可以看到解析器从Fortran代码和

可以编辑此文件以进一步配置生成的Python
模块.
问候,uwe

标签: python

添加新评论