返回顶部
首页 > 资讯 > 后端开发 > Python >Python调用Fortran的方法有哪些
  • 451
分享到

Python调用Fortran的方法有哪些

2023-07-06 02:07:56 451人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容介绍了“python调用Fortran的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 简介在一些研究领域很多经典算法

本篇内容介绍了“python调用Fortran的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    1. 简介

    在一些研究领域很多经典算法工具都由上古语言Fortran编写,而这部分代码又没有对应的C/C++Python版本。因此,掌握Python语言调用Fortran程序这一技能,在一些研究领域有助于我们站在巨人的肩上看的更远。Python调用Fortran可以总结为如下三种:
    1)通过 F2PY:F2PY 是 NumPy 团队开发的一个工具,可以把 Fortran 程序转换为 Python 模块,从而在 Python 中调用 Fortran 程序。
    2)通过 ctypes 库:ctypes 是 Python 内置的一个库,可以用来调用外部 C 动态链接库,因此也可以用于调用 Fortran 程序。通过 ctypes 可以让 Python 调用 Fortran 程序,也可以从 Fortran 中调用 Python 函数。
    3)利用Python的os包调用Fortran。

    2. Python调用Fortran的三种方法

    2.1 基于 F2PY的f2py调用Fortran

    步骤1:

    计算圆面积的Fortran函数。接下来将用下面的函数进行演示。这里的例子是返回一个参数的,返回多个参数以及修改参数的Fortran用法。
    Fortran77定义变量时候不用加::

    function area_of_circle (r)  ! function result     implicit none         ! dummy arguments           real :: area_of_circle      ! local variables    real :: r        real :: pi   pi = 4 * atan (1.0)        area_of_circle = pi * r**2  end function area_of_circle

    function area_of_circle (r) result(a)implicit none   real :: a   real :: r   real :: pi   pi = 4 * atan (1.0)   a = pi * r**2end

    subroutine area_of_circle (r,a)implicit none   real, intent(out) :: a   real, intent(in) :: r   real :: pi   pi = 4 * atan (1.0)   a = pi * r**2end

    步骤2:

    新建circle.f90后,在终端中运行如下代码:

    python -m numpy.f2py -c circle.f90 -m circle

    具体步骤如下图,然后可以看到生成的circle.cpython-36m-x86_64-linux-gnu.so

    Python调用Fortran的方法有哪些

    步骤3:

    在Python中,可以直接import上面的函数名

    import circleprint(circle.__doc__)print(circle.area_of_circle(2))

    Python调用Fortran的方法有哪些

    注意上面的__doc __是f2py自动生成的,可以看到fortran模块里面包含几个函数,每个函数里面还可以再调用doc看到接口参数类型。

    2.2 使用动态链接库调用Fortran

    步骤1:

    修改上面的Fortran代码,用result返回函数结果,指定输入和返回数据类型。

    function area_of_circle(r) result(area) bind(c, name='area_of_circle')    use iso_c_binding    implicit none    real(c_double) :: area    real(c_double), intent(in) :: r    real :: pi    pi = 4 * atan (1.0)    area = pi * r**2end function area_of_circle

    步骤2:

    2.1节 所示,在系统终端或者PyCharm终端中输入命令:

     gfortran -shared circle2.f90 -o circle2.so

    步骤3:

    编写Python调用脚本

    import ctypes as ct# import the shared libraryfortlib = ct.CDLL('./circle2.so')# Specify arguments and result typesfortlib.area_of_circle.argtypes = [ct.POINTER(ct.c_double)]fortlib.area_of_circle.restype = ct.c_double# Create a double and pass it to Fotran (by reference)a = ct.c_double(2)b = fortlib.area_of_circle(ct.byref(a))print(b)

    Python调用Fortran的方法有哪些

    2.3 利用Python的os包调用Fortran

    步骤1:

    以2.1节中的Fortran代码为例,稍作修改,这种方式需要Fortran代码是完整的程序可编译为可执行程序。下面代码包含了主函数,即调用函数的函数主体。

    program calling_func   real :: a   a = area_of_circle(2.0)   Print *, "The area of a circle with radius 2.0 is"   Print *, aend program calling_funcfunction area_of_circle(r)! function resultimplicit none   ! dummy arguments   real :: area_of_circle   ! local variables   real :: r   real :: pi   pi = 4 * atan (1.0)   area_of_circle = pi * r**2end function area_of_circle

    步骤2:

    编译和调用,windows系统注意修改路径,以及可执行程序名后缀应该是exe,Linux可执行程序后缀可以是out或者没有。

    import os#编译os.system(r"gfortran  ./circle3.f90 -o circle")#调用编译的circle程序os.system('./circle')

    上述代码就是类似于Windows中调用cmd。

    “Python调用Fortran的方法有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

    --结束END--

    本文标题: Python调用Fortran的方法有哪些

    本文链接: https://lsjlt.com/news/357439.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Python调用Fortran的方法有哪些
      本篇内容介绍了“Python调用Fortran的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 简介在一些研究领域很多经典算法...
      99+
      2023-07-06
    • Python调用Fortran的三种形式
      目录1. 简介2. Python调用Fortran的三种方法2.1 基于 F2PY的f2py调用Fortran2.2 使用动态链接库调用Fortran2.3 利用Python的os包...
      99+
      2023-05-15
      Python调用Fortran三种形式 Python调用Fortran
    • css调用方法有哪些
      这篇文章主要介绍了css调用方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 css调用方法:1、在文档...
      99+
      2024-04-02
    • WSDL语法调用的方法有哪些
      WSDL语法调用的方法有以下几种:1. SOAP(Simple Object Access Protocol):SOAP是一种基于X...
      99+
      2023-10-12
      WSDL
    • unity调用android的方法有哪些
      在Unity中调用Android的方法可以使用以下几种方式:1. 使用Java Native Interface(JNI):这是一种...
      99+
      2023-09-16
      unity android
    • php的api调用方法有哪些
      PHP的API调用方法有以下几种:1. cURL:cURL是一个强大的开源库,用于在PHP中进行HTTP请求,包括GET、POST、...
      99+
      2023-08-18
      php
    • Python类的定义继承调用方法有哪些
      这篇文章主要讲解了“Python类的定义继承调用方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python类的定义继承调用方法有哪些”吧!一、类的约束# _开头:&nbs...
      99+
      2023-07-02
    • android调用activity方法有哪些
      在Android中,可以使用以下几种方式调用Activity的方法:1. 直接调用方法:如果Activity的实例已经存在,可以直接...
      99+
      2023-09-13
      Android activity
    • Python调试的方式有哪些
      本篇内容主要讲解“Python调试的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python调试的方式有哪些”吧!Print对于脚本语言,调试最简单的方式就是打印输出,而print函...
      99+
      2023-06-15
    • javascript调用函数的方法有哪些
      javascript中调用函数的方法有:1.使用函数调用形式调用;2.使用方法调用;3.使用apply动态调用;4.使用new间接调用;javascript中调用函数的方法有以下几种使用函数调用形式调用函数function f(x,y) {...
      99+
      2024-04-02
    • java调用父类的方法有哪些
      在Java中,调用父类的方法有以下几种方式:1. 使用super关键字:使用super关键字可以调用父类的方法。可以通过super....
      99+
      2023-08-09
      java
    • java接口调用的方法有哪些
      Java接口调用的方法有以下几种:1. 实现接口:通过实现接口的类来调用接口中定义的方法。实现接口的类必须实现接口中所有的方法。2....
      99+
      2023-08-08
      java
    • php调用函数的方法有哪些
      PHP调用函数的方法有以下几种:1. 直接调用函数:直接使用函数名来调用函数,例如`functionName();`2. 通过变量间...
      99+
      2023-08-16
      php
    • IDEA调试的方法有哪些
      本篇内容介绍了“IDEA调试的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一、条件...
      99+
      2024-04-02
    • python中有哪些线程调用的方式
      这期内容当中小编将会给大家带来有关python中有哪些线程调用的方式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 直接调用import threadingimport time&n...
      99+
      2023-06-04
    • java构造方法的调用方式有哪些
      Java构造方法的调用方式有以下几种:1. 通过new关键字调用:使用new关键字创建对象时,会自动调用该类的构造方法。```MyC...
      99+
      2023-09-01
      java
    • Node.js调试方法有哪些
      这篇文章给大家分享的是有关Node.js调试方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。第一种打开 vscode 内置终端,右上角选择 JavaScript Debug Terminal在代码里面打...
      99+
      2023-06-14
    • JavaScript调试方法有哪些
      JavaScript调试的方法有以下几种:1. 使用console.log():在代码中插入console.log()语句,将变量或...
      99+
      2023-10-11
      JavaScript
    • Linux中常用的调优方法有哪些
      这篇文章主要介绍了Linux中常用的调优方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux中常用的调优方法有哪些文章都会有所收获,下面我们一起来看看吧。关闭selinux功能selinux是美国...
      99+
      2023-06-27
    • php调用webservice接口的方法有哪些
      PHP调用Web Service接口的方法有以下几种:1. 使用PHP内置的SoapClient类:SoapClient类是PHP提...
      99+
      2023-08-08
      php webservice
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作