亲爱的 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 例程,但我不会淹没帖子。
我同意弗拉基米尔,你应该提供更多信息。我认为您提供的行不包含错误。在上面的行中,您写入单元 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
它将为您提供发生这种情况的特定行。