我使用 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
>
谢谢。
答案 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工作......