Fluent版本:19.0
究其原因,一般是因為我們編寫的UDF當中指針錯誤,導致未能正確獲取Fluent一些變量的值,從而造成該錯誤。
下面我們通過調試手段來為了重現該錯誤,直觀查看錯誤原因。
我們編寫如下示例代碼:
調試步驟和算例參考《GCC編譯UDF和gdb調試UDF》
鏈接:http://blog.sina.com.cn/s/blog_14d64daa10102xxlf.html
我們直接運行算例和UDF
則會出現Received signal SIGSEGV
然后我們在gdbgui當中添加斷點來調試UDF,從而從而能夠更加直觀的看到Received signal SIGSEGV錯誤的原因
打開Fluent,加載UDF,運行算例
回到瀏覽器的gdbgui操作界面
然后停在gdbgui的斷點處
說明21行斷點以前的UDF程序都是沒有問題的

gdbgui的控制台中就出現了gdbgui noticed a signal was recieved (Segmentation fault, SIGSEGV).的錯誤,說明我們的程序執行到UDF的21行出現了錯誤
繼續執行程序,則會在Fluent當中出現Received signal SIGSEGV的錯誤
從上面的調試過程我們可以看出是我們的UDF代碼的21行出現了問題,可是為什么會出現這個問題呢?問題應該出現在C_P_RG這一個宏上面。這是因為我們在前面的計算當中,求解器不斷移走它不需要的數據,沒有保留變量無法獲取到C_P_RG的值,從而導致received signal SIGSEGV的錯誤。對於本算例我們可以采用下面的方式修正這個錯誤:
修改UDF源代碼為:

重新編譯UDF
我們再次打開Fluent,加載UDF
使用TUI命令:
/solve/set/expert
Save cell residuals for post-processing? [no]
Keep temporary solver memory from being freed? [no] yes
Allow selection of all applicable discretization schemes? [no]
來保留變量的梯度

運行算例,可見Received signal SIGSEGV已經消除,UDF程序可以正常運行,計算順利完成