![](/img/trans.png)
[英]Fortran runtime error: Bad real number in item 1 of list input:Error termination. Backtrace:
[英]fortran error backtrace leads to a where loop
我正在處理大型的fortran代碼,並且在使用快速選項進行編譯(以便在大型數據庫上執行測試)之前,通常會使用“警告”選項進行編譯,以便檢測並回溯所有問題。
因此,使用gfortran -fbacktrace -ffpe-trap=invalid,zero,overflow,underflow -Wall -fcheck=all -ftrapv -g2
編譯,我得到以下錯誤:
Program received signal SIGFPE: Floating-point exception - erroneous arithmetic operation.
Backtrace for this error:
#0 0x7fec64cdfef7 in ???
#1 0x7fec64cdf12d in ???
#2 0x7fec6440e4af in ???
#3 0x7fec64a200b4 in ???
#4 0x7fec649dc5ce in ???
#5 0x4cf93a in __f_mod_MOD
at /f_mod.f90:132
#6 0x407d55 in main_loop_
at main.f90:419
#7 0x40cf5c in main_prog
at main.f90:180
#8 0x40d5d3 in main
at main.f90:68
代碼f_mod.f90:132的一部分包含一個where循環:
! Compute s parameter
do i = 1, Imax
where (dprim .ne. 1.0)
s(:,:,:, :) = s(:,:,:, :) +vprim(:,:,:, i,:)*dprim(:,:,:, :)*dprim(:,:,:, :)/(1.0 -dprim(:,:,:, :))
endwhere
enddo
但我在這里看不到任何錯誤。 其他所有位置都是通向該部分的子例程的調用。 當然,由於它是SIGFPE錯誤,因此我在編譯gfortran -g1
時必須在執行時遇到問題。 (我在Linux上使用gfortran 6.4.0)
此外,隨着代碼完全不同部分的修改,此錯誤會出現並消失。 因此,問題出在哪里? 還是其他地方的回溯是錯誤的? 如果是這種情況,我怎么能找到這個錯誤?
編輯:
由於我無法在一個最小的示例中重現此錯誤(它們正在工作),因此我認為問題出在其他地方。 但是如何在大代碼中查找問題?
由於代碼即將死於SIGFPE,請使用每個單獨的陷阱來了解它是FE_DIVBYZERO,FE_INVALID,FE_OVERFLOW還是FE_UNDERFLOW。 如果是下溢,則將掩碼更改為'1-dprim .ne。 0'。
PS:當可以使用整個數組引用代替時,請不要使用數組節符號。
PPS:您可能要在do循環之外計算dprim * drpim /(1-dprim),因為它是循環不變的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.