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