mfix运行过程终止,无报错信息

2022.5.31更新:

发现这是WSL 1特有的问题,遇到除0的情况,不会报错,只会直接终止程序,并且用文中提到的编译参数:

gfortran -g main2.f90 -ffpe-trap=invalid,zero,overflow

也不会给出报错信息,导致无法排查错误。换成WSL 2,编译的时候用上面的参数就可以了。


原文:

今天踩了个坑,很难排查,比如:

C = 0.0
A = B/C
if(A < xxx) then
...
endif

在mfix里,这种出现除0的情况,然后A又在判断语句里,程序就直接退出,没有任何报错(原因未知,单独的fortran程序并不会出现这种情况)。所以在变量做分母的时候,最好加一个SMALL_NUMBER,例如:

C = 0.0
A = B/(C+SMALL_NUMBER)
if(A < xxx) then
...
endif

其中,SMALL_NUMBER通常可以取一个很小的值,例如1e-7

posted @   JayYin  阅读(161)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示