Gnu fortran编译器写选项

时间:2017-10-05 07:49:04

标签: linux compiler-errors compilation fortran gfortran

我使用 FORTRAN gnu编译器编译一段使用 fortran(.f90)编写的代码。与其他编译器不同,write语句的输出不会显示在屏幕上而是写在输出文件中。

例如,我在源代码的中间放置了“write(*,*)'在此处检查'”,以便当有人运行代码的编译版本时,此消息显示在屏幕上。

我不明白为什么在运行代码时这个消息没有显示在终端窗口中,但是它写在输出文件中。

感谢您帮助我们解决此问题!

>

我正在编译这些源代码:

https://github.com/firemodels/fds/tree/master/Source

我用来编译代码的

makefile位于:

https://github.com/firemodels/fds/tree/master/Build/mpi_intel_linux_64

我使用makefile创建的可执行文件运行程序

我正在使用的编译器版本是

GNU Fortran(Ubuntu 5.4.0-6ubuntu1~16.04.5)5.4.0 20160609

>

谢谢。

1 个答案:

答案 0 :(得分:0)

大局:您是否有理由从源代码构建FDS而不是直接从NIST下载二进制文件,即从https://pages.nist.gov/fds-smv/downloads.html开始?

当然,如果您要使代码符合安全相关用途,您可能需要从源代码编译而不是使用其他人的二进制文件。您可能需要将特定信息添加到标题页,例如代码版本,运行日期等,以满足QA要求。

如果你刚刚学习FDS(练习火灾分析,学习差价合约,评估代码),我强烈建议使用NIST的二进制文件。如果您需要/想要从源代码编译它,我们需要更多信息来诊断问题。

也就是说,假设您有一个需要构建代码的用例,您的具体问题似乎是写入默认输出单元*并不会产生输出你期待的地方。

现代Fortran提供了iso_fortran_env模块,它模仿了Fortran的许多模糊琐事,在本例中是默认的输入和输出单元。

在您要编辑的模块中,查找以下内容:

use iso_fortran_env

use iso_fortran_env, only: output_unit

use, intrinsic:: iso_fortran_env, only: STDOUT => output_unit

如果您看到导入output_unit或(如上一种情况)导入别名,请写入该单元而不是*

如果您没有从iso_fortran_env导入,请将上面的最后一行添加到您要打印的例程或模块中,然后写入STDOUT而不是* }。

这可能会或可能不会解决问题,具体取决于FDS作者是否对重定向IO做了一些奇怪的事情。他们可能;我不确定如何在MPI环境中写入屏幕是如何工作的,其中代码可以在许多联网机器上并行运行(在这种情况下我会写入联网的日志系统,但是那个'只是我)。但是,在运行代码的单个实例的简单情况下,写入output_unit比写入*更准确,并且比写入6更易于阅读。

祝福FDS好运;我试着简单地用它来模拟空气中一股氢气的层形成。 FDS让我糟糕的8台CPU机器瘫痪,所以我回去估算它,而不是试图让CFD工作......