fortran的gui开发 python_python和fortran的接口
由于历史缘故,很多成熟的计算代码都是用fortran写成的。在python中调用fortran代码,要用到f2py这个程序。现在该项目已经合并到numpy中了,先安装python再装好numpy,就可以使用f2py。
一个简单的例子:
foo.f90
subroutine hello (a)
integer a
write(*,*)'Hello from Fortran90!!!', a
end subroutine hello
用终端编译:
f2py -m foo -c foo.f90
在python控制台中运行:
$ python
>>> import foo
>>> foo.hello(15)
Hello from Fortran90!!! 15
明确定义接口的参数:
另外一个例子,非常明确地定义了接口的输入、输出参数:
!SUBROUTINE
SUBROUTINE ADDSUB(A,B,C,D)
IMPLICIT NONE
DOUBLE PRECISION A,B,C,D
!f2py intent(in) :: A,B
!f2py intent(out) :: C,D
C = A + B
D = A - B
print*, "ADDSUB From Fortran!"
print*, "ADD=",C
print*, "SUB=",D
RETURN
END
注意这两行的代码:
!f2py intent(in) :: A,B
!f2py intent(out) :: C,D
对于Fortran只是注释,但对于f2py却很重要,相当于”签名”.
注意签名的注释前面不能有空格!
当然也可以写成如下的形式:
Cf2py intent(in) :: A,B
Cf2py intent(out) :: C,D
下面开始编译Fortran代码为python模块,打开CMD窗口,输入如下命令:
f2py -m testfortran -c testfortran.f90
会在当前目录下生成testfortran.pyd的文件. 下面就可以再python中使用这个模块了:
In [1]: import testfortran
In [2]: print testfortran.__doc__
This module 'testfortran' is auto-generated with f2py (version:2).
Functions:
c,d = addsub(a,b)
In [3]: x=testfortran.addsub(4,9)
ADDSUB From Fortran!
ADD= 13.000
SUB= -5.000
In [4]: x
Out[4]: (13.0, -5.0)
接口参数是数组:
接口参数是数组的情况比较复杂。需要Python中必须确定数组的维数,并且NumPy定义的数组存储方式必须是Fortran的按列存储。
实现方式:
在Python中使用NumPy定义Fortran方式存储的二维数组,利用ndpointer定义数组类型和维数,用ctypes模块调用其data属性将数组首地址传入将二维数组的首地址和维数信息传入Fortran中进行计算并返回。
fortran代码:py2f90.f90
module py2f90
use,intrinsic::iso_c_binding
implicit none
contains
subroutine transferMat2For(matrix,n1,n2)bind(c,name='array2py')
implicit none
integer(c_int),intent(in),value::n1,n2
real(c_float),intent(out)::matrix(n1,n2)
integer::i,j
! initialize matrix
matrix = 0.0E0
! loop
do i=1,n1
do j=1,n2
matrix(i,j) = real(i,4)*1.E1+real(j,4)*2.E0
write(*,"('Row:',i4,1x,'Col:',i4,1x,'Value:',1x,F5.2)")i,j,matrix(i,j)
enddo
enddo
return
end subroutine
end module
test_mat.f90:
program test
use py2f90
implicit none
real(kind=4)::aa(4,5)
call transferMat2For(aa,4,5)
end program
python调用代码:test_mat.py
#! /usr/bin/env python
#coding=utf-8
import numpy as np
from numpy.ctypeslib import load_library,ndpointer
from ctypes import c_int
# shape of 2d array
n1,n2 = 2, 5
# create an empty 2d array
data = np.empty(shape=(n1,n2),dtype='f4',order='f')
flib = load_library("test_mat","./")
flib.argtypes = [ndpointer(dtype='f4',ndim=2),c_int,c_int]
flib.array2py(data.ctypes.data,n1,n2)
print("*"*80)
print(data)
终端编译指令:
f2py -m test_mat -c test_mat.f90 py2f90.f90
在终端输入:python test_mat.py,得到:
image.png
作者:Alex_lxy
原文地址:https://www.jianshu.com/p/1f04e2a81798
fortran的gui开发 python_python和fortran的接口相关推荐
- R语言图形编辑器GUI开发环境RStudio安装(Windows操作系统下、RStudio开发环境安装)
R语言图形编辑器GUI开发环境RStudio安装(Windows操作系统下.RStudio开发环境安装) RStudio是R语言的集成开发环境(IDE),它是一个独立的开源项目,它将许多功能强大的编程 ...
- Eclipse进行可视化的GUI开发3大GUI插件
Eclipse进行可视化的GUI开发3大GUI插件 转自http://www.cnblogs.com/NationWoo/archive/2011/05/31/2065176.html Eclipse ...
- python gui开发工具_深入解析Python,透析应用开发,涵盖9大应用领域的Python框架...
前言 当前,Python 已经成为最流行的程序设计语言之一,被越来越多的人作为首选语言来学习和应用.作为一种解释型的语言,Python具有内置的高级数据结构和简单有效的面向对象编程机制.同时,其语法简 ...
- php7可以做什么开发,php7 图形用户界面GUI 开发怎么做?看完这个代码你就明白了...
[摘要]php7作为PHP的一个版本,也能实现很多功能,不过今天环球网校的小编要为大家讲解php7 图形用户界面GUI 开发怎么做?看完这个代码你就明白了,因为只要你了解了php7 图形用户界面GUI ...
- python编程工具p-python Gui开发工具选择
Python最大的特点就在于她的快速开发功能.作为一种胶水型语言,python几乎可以渗透在我们编程过程中的各个领域.这里我简单介绍一下用python进行gui开发的一些选择. 1.Tkinter T ...
- V2EX › 郁闷于Python GUI开发,有没有好的框架啊?
V2EX › 郁闷于Python GUI开发,有没有好的框架啊? 郁闷于Python GUI开发,有没有好的框架啊? By ectotherm at 2 months, 2 weeks ago, 11 ...
- python自带gui_Python GUI开发工具中五种类型的相关介绍
Python这一计算机语言不仅具有十分简捷的操作功能,它还具有十分快速的相关开发功能,此文主要向你介绍的是关于Python GUI开发工具在实际相关应用操作过程中的具体操作,以及这几种开发工具相关内容 ...
- Java GUI 开发专题
Java GUI 开发专题 IBM http://www.ibm.com/developerworks/cn/java/j-gui/#N10095 作者:wenhai_zhang 发表于2009-11 ...
- 【.NET Core 跨平台 GUI 开发】第一篇:编写你的第一个 Gtk# 应用
本文是[.NET Core 跨平台 GUI 开发]系列博文的第一篇.该系列博文是一个关于 Gtk# 跨平台应用开发的初级随笔集合.该随笔集合介绍了 GTK 和 Gtk# 的基本信息以及开发方法,并展示 ...
最新文章
- TYVJ P1053 字符串的展开 Label:字符 水
- JavaScirpt类型检测函数总结
- 再学 GDI+[98]: TGPImage(18) - 获取 GDI+ 图像格式对应的 GUID
- kali创建python脚本_kali下编译学习python3
- 给你出道题 红绿灯问题
- 预处理、const、static与sizeof-static全局变量与普通的全局变量有什么区别
- 两用物项许可证办理流程_[进出口管制类]两用物项和技术进口许可证之易制毒化学品(6)欣海丁丁检务工作室(272)...
- python在数字后添加字符_用python生成数字、字母和特殊字符混合的字符串
- winform调用大华相机
- 使用CSS过滤器让透明的彩色png图像变纯白
- 【沧海拾昧】微机原理:并行接口电路8255芯片
- 在电脑上安装Linux系统步骤
- 2019Python人工智能前景怎么样?
- 告别“停车难”,条形智能停车场导视牌推动城市智能停车建设
- python 解决 mismatch问题
- browsersync——代码变动实时更新到页面
- 计算机网络————Wireshark 实验
- 孩子stem教育特殊之处
- 关于十六进制数输入输出
- MOOC高级语言程序设计第七章课后作业