爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 12843|回复: 9

[求助] f2py调用Fortran程序中的一点疑惑

[复制链接]

新浪微博达人勋

发表于 2018-5-6 23:35:09 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
最近在研究python和Fortran混编的问题,有个问题不是很明白,向各位朋友请教一下!
我们大气海洋中的计算模式f90文件常常都是嵌套的,也就是一个module里面要use 另一个module或者subroutine,这种情况下,是不是必须解除这种依赖性?也就是说,用python调用fortran计算,由python出图,这种想法只能适用于单独的一个subroutine计算,该subroutine不能牵连到其他f90文件中的subroutine。有没有解决的方法呢?最近在弄这个,这一点有点困惑,我想的解决方法是把所有关联的f90文件都整合在一个f90文件中,让其变成一个单独的subroutine。但是鉴于有一些计算模式f90文件相当多,适用范围太窄,有没有更好的解决方法呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-7-30 16:56:01 | 显示全部楼层
最好把function改成subroutine
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2018-5-7 12:14:13 | 显示全部楼层
可以先编译module 然后再用f2py
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-5-7 16:07:24 | 显示全部楼层
本帖最后由 凉茶啦啦啦啦啦 于 2018-5-7 16:11 编辑
又是那隻貓 发表于 2018-5-7 12:14
可以先编译module 然后再用f2py

module util

contains

FUNCTION gasdev
(idum)
implicit none
INTEGER
(kind=4),intent(inout)::idum
REAL(kind=8)::gasdev,ran2
print*,idum
gasdev =ran2(idum)

return

END FUNCTION

FUNCTION ran2
(idum)

implicit none
INTEGER
(kind=4),intent(inout)::idum
REAL(kind=8)::ran2
print*,idum
ran2=2.D0

return

END FUNCTION
end module util



像这个module,我用如下编译

f2py  -m test -c test.f90

在python中导入模块

In [2]: import test



ImportError: ./test.so: undefined symbol: ran2_

会显示这个错误。遇到这种模块中的函数调用模块内部函数的,必须把内部函数提取出来,用单独的f90文件,先编译再链接吗?




密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-5-12 17:02:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-8-19 16:50:49 | 显示全部楼层
虫儿飞 发表于 2018-7-30 16:56
最好把function改成subroutine

嗯嗯,谢谢,我已经明白了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-8-19 16:50:52 | 显示全部楼层
虫儿飞 发表于 2018-7-30 16:56
最好把function改成subroutine

嗯嗯,谢谢,我已经明白了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-8-19 16:50:56 | 显示全部楼层
虫儿飞 发表于 2018-7-30 16:56
最好把function改成subroutine

嗯嗯,谢谢,我已经明白了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-8-19 16:51:17 | 显示全部楼层
虫儿飞 发表于 2018-7-30 16:56
最好把function改成subroutine

嗯嗯,谢谢,我已经明白了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-8-19 16:51:23 | 显示全部楼层
虫儿飞 发表于 2018-7-30 16:56
最好把function改成subroutine

嗯嗯,谢谢,我已经明白了
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表