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 @ 2022-04-06 22:31  JayYin  阅读(138)  评论(0编辑  收藏  举报