Gnu fortran 编译器写入选项

Gnu fortran compiler write option

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

例如,我在源代码中间放置了“write(*,*) 'Check it here'”,这样当有人 运行s 的编译版本时,该消息就会显示在屏幕上代码。

我不明白为什么 window 终端 window 没有显示此消息,而 运行 宁代码,但它写在输出文件中。

非常感谢您帮助解决这个问题!!

>

我正在编译这些源代码:

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

>

谢谢。

更大的图景:您从源代码构建 FDS 而不是直接从 NIST 下载二进制文件,即从 https://pages.nist.gov/fds-smv/downloads.html 下载二进制文件是否有原因?

当然,如果您要使代码符合 safety-related 使用的条件,您可能需要从源代码编译而不是使用其他人的二进制文件。您可能需要向 header 页面添加特定信息,例如代码版本、运行 的日期等,以满足 QA 要求。

如果您只是学习 FDS(练习火灾分析、学习 CFD、评估代码),我强烈建议您使用 NIST 的二进制文件。如果您 need/want 从源代码编译它,我们将需要更多信息来诊断问题。

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

现代 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 环境中写入屏幕是如何工作的,在 MPI 环境中,代码可能 运行 在许多联网机器上并行运行(在这种情况下,我会写入联网日志系统,但那只是我) .但是在代码 运行ning 的单个实例的简单情况下,写入 output_unit 比写入 * 更精确,比写入 6 更便携和易读.

祝FDS好运;我尝试简单地使用它来模拟空气中氢气羽流的层形成。 FDS 使我那可怜的 8 CPU 机器瘫痪了,所以我回去手工估算它,而不是试图让 CFD 工作...