Fluent使用UDF遇見Received signal SIGSEGV


Fluent版本:19.0

究其原因,一般是因為我們編寫的UDF當中指針錯誤,導致未能正確獲取Fluent一些變量的值,從而造成該錯誤。

下面我們通過調試手段來為了重現該錯誤,直觀查看錯誤原因。

我們編寫如下示例代碼:

調試步驟和算例參考《GCC編譯UDFgdb調試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程序都是沒有問題的

Fluent使用UDF遇見Received signal SIGSEGV

gdbgui的控制台中就出現了gdbgui noticed a signal was recieved (Segmentation fault, SIGSEGV).的錯誤,說明我們的程序執行到UDF21行出現了錯誤

Fluent使用UDF遇見Received signal SIGSEGV

 

繼續執行程序,則會在Fluent當中出現Received signal SIGSEGV的錯誤

從上面的調試過程我們可以看出是我們的UDF代碼的21行出現了問題,可是為什么會出現這個問題呢?問題應該出現在C_P_RG這一個宏上面。這是因為我們在前面的計算當中,求解器不斷移走它不需要的數據,沒有保留變量無法獲取到C_P_RG的值,從而導致received signal SIGSEGV的錯誤。對於本算例我們可以采用下面的方式修正這個錯誤:

修改UDF源代碼為:

Fluent使用UDF遇見Received signal SIGSEGV

重新編譯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]

來保留變量的梯度

Fluent使用UDF遇見Received signal SIGSEGV

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM