Fluent使用UDF遇见Received signal SIGSEGV
Fluent版本:19.0
究其原因,一般是因为我们编写的UDF当中指针错误,导致未能正确获取Fluent一些变量的值,从而造成该错误。
下面我们通过调试手段来为了重现该错误,直观查看错误原因。
我们编写如下示例代码:
调试步骤和算例参考《GCC编译UDF和gdb调试UDF》
链接:https://www.cnblogs.com/liusuanyatong/p/11259628.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程序可以正常运行,计算顺利完成
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决