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 工作...
我使用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 工作...