利用f2py实现python调用fortran

  • 利用f2py实现python调用fortran

    • 参考文献
    • 引言
    • 最快的直接使用方式
    • 生成.pyf文件的使用方法
    • 在fortran源码中加入注释的使用方式
    • 生成的具体python函数
    • 与生成函数的参数传递

参考文献

https://docs.scipy.org/doc/numpy/f2py/getting-started.html#the-smart-way

引言

f2py是包含在numpy中的一个工具,可以实现产生fortran程序的python接口功能。

由于fortran函数可能不区分输入输出参数,而python函数是必须区分的,为了明确输入输出参数,f2py有三种使用方式:

  1. 不做任何修改直接执行命令生成python模块。f2py会自己识别输入输出参数,但不一定准确,可能会出错。
  2. 先生成.pyf文件,在其中修改内容指定输入输出后生成python模块。
  3. 修改fortran程序源码加入注释明确输入输出后执行命令生成python模块。

下面详细介绍每种方式的使用流程:

最快的直接使用方式

f2py -c fname.f -m fname

其中fname.f为fortran文件的名字,fname为生成的python模块的名字。

生成.pyf文件的使用方法

f2py fib1.f -m fib2 -h fib1.pyf

使用以上的命令会生成名为fib1.pyf的文件,其内容如下:

!    -*- f90 -*-
python module fib2 ! in interface  ! in :fib2subroutine fib(a,n) ! in :fib2:fib1.freal*8 dimension(n) :: ainteger optional,check(len(a)>=n),depend(a) :: n=len(a)end subroutine fibend interface
end python module fib2! This file was auto-generated with f2py (version:2.28.198-1366).
! See http://cens.ioc.ee/projects/f2py2e/

其主要内容为解析的fortran文件的内容,会列出所有包含的subroutine的标题,参数和参数定义。

生成此文件的目的为可以在其中加入intent(in),intent(out),depend(n)字符来明确参数的输入输出和依赖特性。

修改后的.pyf 文件如下:

!    -*- f90 -*-
python module fib2 interfacesubroutine fib(a,n)real*8 dimension(n),intent(out),depend(n) :: ainteger intent(in) :: nend subroutine fibend interface
end python module fib2

随后执行如下命令生成python模块。

f2py -c fib2.pyf fib1.f

在fortran源码中加入注释的使用方式

直接在fortran源码中加入注释:

!f2py intent(in) n
!f2py intent(out) a
!f2py depend(n) a

来明确输入输出及依赖,例子如下:

! FILE: FIB3.FSUBROUTINE FIB(A,N)
!
!     CALCULATE FIRST N FIBONACCI NUMBERS
!INTEGER NREAL*8 A(N)
!f2py intent(in) n
!f2py intent(out) a
!f2py depend(n) aDO I=1,NIF (I.EQ.1) THENA(I) = 0.0D0ELSEIF (I.EQ.2) THENA(I) = 1.0D0ELSE A(I) = A(I-1) + A(I-2)ENDIFENDDOEND
! END FILE FIB3.F

随后执行命令:

f2py -c -m fib3 fib3.f

即可生成python模块。

生成的具体python函数

在使用过程中,具体生成的python函数需要从运行过程中显示的信息来判断。

与生成函数的参数传递

如果涉及到数组,最好使用numpy模块来解决。

利用f2py实现python调用fortran相关推荐

  1. anaconda3对应的python版本_利用SWIG实现Python调用C/C++!速度快就算了,代码量还特少!...

    SWIG简介 SWIG是Simplified Wrapper and Interface Generator的简称,它是一个能将C和C++的程序与其他各种高级语言诸如Perl,Python,Ruby和 ...

  2. python fortran混编 ctypes_关于python调用fortran编译的dll的问题

    [Fortran] 纯文本查看 复制代码Module proc Use, Intrinsic :: ISO_C_BINDING Implicit None ! 将常量.模型参数定义为一个结构体(全局变 ...

  3. fortran和python_python调用fortran

    登录后查看更多精彩内容~ 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 王磊 于 2016-12-13 10:49 编辑 python调用fortran主要目的是节省时间同时利用 ...

  4. windows下python利用f2py调用Fortran

    目录 1.运行环境 2.测试实例 3.参考文章 Fortran(Formula Translation)是世界上第一个被正式推广使用的高级语言,其目前仍然是数值计算领域最重要的编程语言之一,虽然有ju ...

  5. python fortran混合编程_python调用fortran模块

    在python中调用fortran代码,要用到f2py这个程序.它的项目主页在此.现在该项目已经合并到numpy中了,先安装python再装好numpy,就可以使用f2py.不过对windows平台必 ...

  6. 如何利用Python调用一些搜索引擎网站?

    简 介: 利用 urllib.request 可以调用一些搜索引擎 BING 的搜索引擎结果.但是通过测试发现尚无法对中文进行传递函数进行搜索.具体解决方法现在尚未得知. 关键词: bing,pyth ...

  7. Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法

    Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)-命令提示符cmd的几种方法 目录 利用python语言实现调用内部命令-命令提示符cmd的几种方法 T1. ...

  8. python eel 多线程_利用Eel使JavaScript调用Python程序

    利用Eel使JavaScript调用Python程序 Eel简介 Eel是一个轻量的python桌面GUI开发第三方库, 它使用HTML/JS作为界面开发语言, 但是能够访问所有的python功能, ...

  9. python powerbi知乎_利用Python调用Power BI REST API

    本文是D-BI之Power BI REST API系列第三篇,讲解如何利用一段简单的Python脚本实现Power BI REST API的调用,将使用与上文完全不同的方法 前述 上文<Powe ...

最新文章

  1. Linux6版本系统搭建Open***远程访问
  2. 如何快速学会别人的代码和思维
  3. 自动驾驶公交车开上苏州街头,这次不是“试运营”了,市民乘车依然免费
  4. 架构师之路 — API 经济 — Swagger OpenAPI Specification
  5. wxWidgets:wxDir类用法
  6. STM32F1xx系列单片机通过程序获取MCU信息
  7. 曝华为新成立10大预备军团;被罚2500万欧元,苹果开放第三方支付;GitLab 14.8发布 | 极客头条...
  8. 字节跳动回应抖音上市;苹果公司:全球多个国家的 App 价格将上涨;GDB 10.1 发布|极客头条
  9. 数据结构笔记(二十七)-- 图的深度优先遍历
  10. Java基础教程【第二章:Java数据类型和变量】
  11. 【Jmeter】元件实战:Jmeter 连接 mysql 数据库 / 数据池配置 —— JDBC Connection  Configuration
  12. STATA 和 SAS 输入输出示范
  13. Slf4j+logback的使用与配置以及详情介绍
  14. 元宵快乐!!!! 自己做的贺卡。。 :)
  15. 区块链应用场景:物联网和物流供应链
  16. git服务器搭建用账号和密码,git服务器搭建过程
  17. ABAP术语-ALE
  18. 100天单词学习计划
  19. 数据大屏领导驾驶舱大数据分析UI1-4(PSD-持续更新)
  20. 微信小程序助力社区便利店利润破百万

热门文章

  1. 【Android 】零基础到飞升 | AbsoluteLayout(绝对布局)
  2. 02-组件注册-@ComponentScan-自动扫描组件指定扫描规则
  3. GUI界面连接Mysql数据库
  4. VC++ MFC资源中添加PNG,JPG等图片资源
  5. 首届中国国际新型储能技术及工程应用大会今日在长沙召开
  6. 计算机控制电梯如需改变功能 则,电梯维修项目教程 教学课件 作者 孙文涛附加答案试卷综合实训三模拟试题(13).doc...
  7. 荣耀30s是否搭载鸿蒙系统,荣耀30S来袭 3月30日发布或配麒麟820芯片
  8. wim工具扫描linux磁盘,WinPE环境下WinNTSetup使用说明(WIM_ESD系统如何安装)
  9. Rx第四部分--并发
  10. 【个人网站搭建】GitHub pages+hexo框架下为next主题添加分类及标签