Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要让f2py工作,但不要';我不懂fortran_Python_Fortran_F2py - Fatal编程技术网

Python 需要让f2py工作,但不要';我不懂fortran

Python 需要让f2py工作,但不要';我不懂fortran,python,fortran,f2py,Python,Fortran,F2py,我想使用以下源代码中的OPAC函数: 我不太理解这些代码,我只想将其用作Python模块。我运行以下命令: f2py -c xztrin21.f -m opal_opacity xztrin21.f:1025.72: IF (H.EQ.0.) PAUSE 'Bad XA input.'

我想使用以下源代码中的OPAC函数:

我不太理解这些代码,我只想将其用作Python模块。我运行以下命令:

f2py -c xztrin21.f -m opal_opacity
xztrin21.f:1025.72:

      IF (H.EQ.0.) PAUSE 'Bad XA input.'                                
                                                                        1
Warning: Deleted feature: PAUSE statement at (1)
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status
但我总是犯这样的错误:

/tmp/tmpWe2VM7/src.linux-x86_64-2.7/opal_opacitymodule.c:1819:71: error: expected ‘;’, ‘,’ or ‘)’ before ‘!’ token
/tmp/tmpWe2VM7/src.linux-x86_64-2.7/opal_opacitymodule.c: In function ‘f2py_init_cst’:
/tmp/tmpWe2VM7/src.linux-x86_64-2.7/opal_opacitymodule.c:1828:35: error: ‘f2py_setup_cst’ undeclared (first use in this function)
/tmp/tmpWe2VM7/src.linux-x86_64-2.7/opal_opacitymodule.c:1828:35: note: each undeclared identifier is reported only once for each function it appears in
/tmp/tmpWe2VM7/src.linux-x86_64-2.7/opal_opacitymodule.c:1819:71: error: expected ‘;’, ‘,’ or ‘)’ before ‘!’ token
/tmp/tmpWe2VM7/src.linux-x86_64-2.7/opal_opacitymodule.c: In function ‘f2py_init_cst’:
/tmp/tmpWe2VM7/src.linux-x86_64-2.7/opal_opacitymodule.c:1828:35: error: ‘f2py_setup_cst’ undeclared (first use in this function)
/tmp/tmpWe2VM7/src.linux-x86_64-2.7/opal_opacitymodule.c:1828:35: note: each undeclared identifier is reported only once for each function it appears in
error: Command "gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/tmp/tmpWe2VM7/src.linux-x86_64-2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c /tmp/tmpWe2VM7/src.linux-x86_64-2.7/opal_opacitymodule.c -o /tmp/tmpWe2VM7/tmp/tmpWe2VM7/src.linux-x86_64-2.7/opal_opacitymodule.o" failed with exit status 1
我认为代码没有什么问题。我相信其他人的工作正常,所以我想我一定是有一个错误的Fortran编译器或什么的。不过我不知道该怎么办

有什么帮助吗

编辑: 如果我尝试使用gfortran编译代码,我会得到以下结果:

f2py -c xztrin21.f -m opal_opacity
xztrin21.f:1025.72:

      IF (H.EQ.0.) PAUSE 'Bad XA input.'                                
                                                                        1
Warning: Deleted feature: PAUSE statement at (1)
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

好吧,这看起来不像是你链接的Fortran代码的问题

您的实际错误都在函数“f2py\u init\u cst”中找到

  • :1828:35:错误:“f2py\u setup\u cst”未声明(首次在此函数中使用)
  • :1819:71:错误:应为“;”,“,”或者“在”之前令牌
从名称来看,这表明python包
f2py
存在问题。 上述语法意味着编译器在
f2py
代码中的
行:1828,列:35和
行:1819,列:71上发现了错误

  • 我建议您检查
    f2py
    网站上的文档,并确保编译正确
  • 作为测试,请参见
    f2py
    文档,并确保您可以编译它们

所以我首先创建了一个签名文件,解决了这个问题。我负责指挥

f2py -h opal.pyf -m opal xztrin21.f

f2py -c add.pyf add.f95
现在一切正常。我使用了本教程:

这个命令应该有效


这是一个非常简单的文档,介绍了如何在python中使用fortran模块。这对我很有帮助

我毫不费力地运行了第一个示例。毕竟编译器可能有问题。查看我的编辑器我是否需要在代码中的某个地方使用main()函数?我认为编译器没有问题,这一定是您调用它的方式。只需仔细阅读
f2py
上的文档即可。此外,您遇到的第二个问题是,您正在编译一个没有
程序的
子例程
。它正在寻找一个
程序
结束程序
,但我猜你没有。因此它无法找到
main
,因为您没有要编译的程序!请参阅如何编写一个简单的
Fortran
程序,它应该以这种方式找到
main
。我建议您先从一些基本的
Fortran
代码中调用该程序,然后再将其与python接口。我现在在本教程中得到了它。请参阅我自己的答案。在使用f2py之前,感谢您的努力。您需要确保正确定义了变量的“意图”。无论是它的意图(in)还是意图(out)。如果默认情况下fortran代码中未执行此操作。您可以使用“!f2py intent(in)var_name”,这将被视为fortran代码中的注释,但将由f2py拾取。