加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Fluent使用UDF遇见Received signal SIGSEGV

(2018-06-01 00:20:44)
标签:

cfd

udf

debug

fluent

二次开发

分类: fluent

Fluent版本:19.0

究其原因,一般是因为我们编写的UDF当中指针错误,导致未能正确获取Fluent一些变量的值,从而造成该错误。

下面我们通过调试手段来为了重现该错误,直观查看错误原因。

我们编写如下示例代码:

Fluent使用UDF遇见Received signal SIGSEGV

调试步骤和算例参考《GCC编译UDFgdb调试UDF

链接:http://blog.sina.com.cn/s/blog_14d64daa10102xxlf.html

我们直接运行算例和UDF 

则会出现Received signal SIGSEGV

Fluent使用UDF遇见Received signal SIGSEGV
Fluent使用UDF遇见Received signal SIGSEGV

然后我们在gdbgui当中添加断点来调试UDF,从而从而能够更加直观的看到Received signal SIGSEGV错误的原因 

Fluent使用UDF遇见Received signal SIGSEGV

打开Fluent,加载UDF,运行算例 

回到浏览器的gdbgui操作界面 

Fluent使用UDF遇见Received signal SIGSEGV    然后停在gdbgui的断点处
Fluent使用UDF遇见Received signal SIGSEGV    说明21行断点以前的UDF程序都是没有问题的
Fluent使用UDF遇见Received signal SIGSEGV

gdbgui的控制台中就出现了gdbgui noticed a signal was recieved (Segmentation fault, SIGSEGV).的错误,说明我们的程序执行到UDF21行出现了错误

Fluent使用UDF遇见Received signal SIGSEGV


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程序可以正常运行,计算顺利完成

Fluent使用UDF遇见Received signal SIGSEGV

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有