“output statement overflows record, unit -5, file Internal Formatted Write”错误的原因是什么?

问题描述 投票:0回答:1

亲爱的 Stack over flow 社区, 我正在使用 KPP 处理器运行一个简单的模拟,在第 9 个输出 .dat 文件(共 150 个)之后,模拟终止并显示以下错误消息:

forrtl: severe (66): output statement overflows record, unit -5, file Internal Formatted Write

使用的编译器:Intel Fortran Compiler 2022.2.1 .

这可能是涉及的Fortran代码的一部分:

 * OPEN( unit=10, file="dyno_"//ex_no(1)//ex_no(2)//ex_no(3)//".dat")

......
......

  INTEGER i

      WRITE(10,999) (TIME-TSTART)/3600.D0,  &
                   (C(LOOKAT(i))/CFACTOR, i=1,NLOOKAT)
999   FORMAT(E24.16,100(1X,E24.16))*

我希望你能帮忙。

提前谢谢你。

我尝试检查 Fortran Integrator.f90 脚本中的 WRITE 语句,但我没有找到足够的内联资源来检查到底是什么问题。


也许这个更长的描述有帮助:

在使用英特尔 Fortran 编译器 2022.2.1 和 chw21 建议的选项成功编译 Makefile 后,我得到一个名为 dynho.exe.

的可执行文件

为了获得所需的输出,我使用 ./ 命令执行 dynho.exe。 输出应该由 150 个 .dat 文件组成,因为模拟使用了 150 组不同的初始条件。

模拟运行但在仅生成 150 个预期的 .dat 文件中的 9 个后终止。

dynho.exe 的执行已经在 bwunicluster 中提交 salloc 脚本:

#!/bin/bash  
#SBATCH   --nodes=1
#SBATCH   --cpus-per-task=5
#SBATCH   --mem=600mb
#SBATCH   --time=27:00:00           
#SBATCH   -J  test_bwbatch               # Specify job name
#SBATCH   [email protected]
#SBATCH   --mail-type=BEGIN,END,FAIL

echo "Start kpp script execution at $(date)"

./dynho.exe

生成一个 .out 文件。这是提到forrtl错误的部分:

forrtl: severe (66): output statement overflows record, unit -5, file Internal Formatted Write
Image              PC                Routine            Line        Source
dynho.exe          0000000000455A3A  Unknown               Unknown  Unknown
dynho.exe          0000000000454737  Unknown               Unknown  Unknown
dynho.exe          0000000000408629  dynho_util_mp_ini          66  dynho_Util.f90
dynho.exe          0000000000430EE6  MAIN__                     82  dynho_Main.f90
dynho.exe          000000000040385D  Unknown               Unknown  Unknown
libc-2.28.so       000014B9B1F6D493  __libc_start_main     Unknown  Unknown
dynho.exe          000000000040377E  Unknown               Unknown  Unknown

============================= JOB FEEDBACK =============================

NodeName=uc2n501
Job ID: 21896960
Cluster: uc2
User/Group: ii5664/imk-tro
State: FAILED (exit code 66)
Nodes: 1
Cores per node: 6
CPU Utilized: 00:12:52
CPU Efficiency: 9.02% of 02:22:36 core-walltime
Job Wall-clock time: 00:23:46
Memory Utilized: 5.89 MB
Memory Efficiency: 0.98% of 600.00 MB

我可以发布 dynho_Util.f90 和 dynho_Main.f90 例程,但我不会淹没帖子。

fortran intel-fortran
1个回答
0
投票

我同意弗拉基米尔,你应该提供更多信息。我认为您提供的行不包含错误。在上面的行中,您写入单元 10 上的文件,但错误引用单元 -5 上的内部写入。

这通常发生在你试图写入一个字符串变量,但是要写入的内容太大时,像这样:

program overflow
    implicit none
    character(len=10) :: some_string
    write(some_string, *) "Some content longer than", 10, "characters"
end program overflow

我最近遇到过这样的情况:

character(len=256) :: fullname
character(len=200) :: dirpath, filename

write(fullname, "(A, A1, A)") trim(dirpath), "/", filename

因为

filename
没有被修剪,在
dirpath
的一百多个尾随空格变得太长以至于
filename
无法处理之前,
fullname
变量只剩下 55 个字符。当目录路径包含的字符少于 56 个时,一切正常,但当它达到 59 个时突然中断。

我建议使用以下选项进行编译:

-O0 -g -traceback
它将为您提供发生这种情况的特定行。

© www.soinside.com 2019 - 2024. All rights reserved.