python调用fortran学习笔记

news/2024/11/17 6:26:09/

起因:不想把fortran结果手动搬到excel里画图表

先在window系统试,

使用f2py方法的时候总是报错has fortran sources but no fortran compiler found,或者not supported between instances of 'nonetype' and 'str'。

使用dll+ctypes库的时候,总是报错try using the full path with constructor syntax,或者could not find module 'xx.dll' (or one of its dependencies)。

网上的各种解决方法都试过了,都没用,可能是因为我的python和fortran编译器装在不同的盘里?非计算机类专业,无法理解环境变量之类的东西。

为了实现用python调用fortran的执念,我给电脑装了ubuntu,不是虚拟机,然后装了conda(网上有很多教程,tb也有代装)。这时候系统已经带有python了。而且没有安装编译器,点开py文件和f90文件,里面已经有那种彩色标注方便阅读了,没有撤销选项,但用ctrl+z可以撤销,所以不用安装编译器了。

建立一个文件夹,右键在终端打开。先了解两个linux系统常用操作:cd和touch

touch cal_es.py  !建立一个py文件
touch test.f90  !建立一个f90文件
cd where\where  !从当前文件夹进入里面的哪个文件夹
cd ..  !退出一层文件夹

按下面这样在终端输入,来安装gfortran,一点小问题就是输密码的时候密码不会显示在终端上,正常输就好了。我写了一个名为test.f90的简单program试用一下。遇到一个报错-Werror=line-truncation,原因是把一行写得太长了,解决方法是在较长的行里插入换行连续符&并换行。

sudo apt-get install gfortran
gfortran --version
touch test.f90!创建,然后点开这个文件写一段可执行的fortran代码
gfortran test.f90!生成a.out
./a.out!执行结果

然后写了一个名为es.f90的subroutine,如下。注意subroutine里面要写标签,就是以!f2py开头的那两句,以及一个f90文件里可以有多个subroutine。

subroutine es1(t,e)
implicit none
double precision t,e
!f2py intent(in)::t
!f2py intent(out)::e
e=t+1
return
end

用f2py生成把它转换成包,这是在终端输入的: 

f2py -c es.f90 -m es  !生成es.os

报错python.h:no such file or directory,就在终端如下输入,来安装python.h。

sudo apt-get install python-dev

os文件就生成在当前文件夹里了,这时候python还缺很多包,可以用sudo直接安装,也可以安装pip然后安装,但比如sudo能安装的python-tk这个包pip反而安装不了。

pydoc modules  !查看安装了哪些python包
pip --version  !查看是否安装了xx
sudo apt-get install python-pip  !方法一,sudo安装
pip install matplotlib  !方法二:pip安装
sudo apt-get install python-tk  !解决matplotlib缺少python-tk

然后就可以用之前提到的touch建立py文件,点进去写代码,像这样使用Fortran生成的包:

import es
print(es.es1(2))

 es是我取的os文件名,es1是我取的subroutine名,然后开始画我的图了。在linux下python调用fortran算是没怎么遇到error了。


http://www.ppmy.cn/news/598612.html

相关文章

在Linux环境下,使用ifortran编译 带有结构的和.inc头文件 的fortran项目生成.so文件

在Linux环境下,使用ifortran编译 带有结构的和.inc头文件 的fortran项目生成.so文件 1 致谢2 参考文章和手册3 需求描述3.1 文件结构3.2 文件调用关系 4 主程序改造为函数5 项目编译方法5.1 方案一 直接对所有.f90源文件进行编译5.1.1 具体实现5.1.2 注意事项 5.2 方…

Fortran入门——菜鸟级基础语法

前言: 最近需要自学Fortran,本人菜鸟,零基础,这篇文章也是帮助我自己更好的记住一些基础语法。所以,有Fortran基础的,可以跳过本篇啦~ 本文的环境是mingw vscode 哈 1.后缀 Fortran文件的后缀是 .f90(还…

Fortran编译初步

写在前面 注意:本文是关于 gfortran 的文章。如果你不清楚 gfortran,g77,g95 等等的概念的话,不妨看看GCC 的 Fortran 语言编译器介绍;如果你要用 g77 的话,这是一篇g77入门。 [编辑]Fortran 编程中相关文…

idea中有个目录不显示,磁盘中是有的

java项目src下有个目录data不显示 通过打开D盘看目录是有的,运行项目的时候报错,找不到目录下的文件。 解决方案: idea -> file -> seetings -> EDitor -> file types 打开页面后右侧显示有ignore files and folders 查看这里面有…

linux f95编译器,gfortran如何告诉我是否正在编译f90或f95代码?

gfortran可以从文件扩展名中猜出某些东西;如果文件的扩展名为.f,.f90,f95,.f03或.f08,则它将采用具有适当标准的固定(.f)或自由格式。但你可以强制它使用选项-std f2003编译(比方说)fortran2003代码。例如,来自docume…

笔记:CLM5.0模型运行一些参数

Introduction 因为研究涉及CLM和其他模型couple运行,需要把一些CLM运算的变量传递到另一个模型 . 主要涉及的数据都以type形式,罗列在$CESM/components/clm/src/main/clm_instMod.F90 相当于一个个结构体,里面包含很多歌变量 想找出具体…

在Abaqus中使用f90格式的子程序

Abaqus默认支持的是固定(fortran77)格式的Fortran子程序。编译或者调用子程序时会自动搜索文件后缀为:*.for, *.f, *.C, *.c, *.cc, *.CPP, *.cpp, *.CXX, *.cxx 的源代码文件。 如果想使用f90自由格式的Fortran子程序,需要修改Abaqus的环境配置文件。A…

C与Fortran之间的相互调用

此文章鸣谢 Dragon 竹叶知风飘 排名不分先后 运行环境 C/C编译器:MSVS2019(VC9),对VS2008也适用。 Fortran编译器:Intel Visual Fortran Compiler 11.0,IVF的其它版本也适用。 C调用Fortran函数 一、…