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

UDF编译错误解决方法经验之谈

(2013-03-23 15:44:55)
标签:

fluent

udf

编译错误

Fluent中UDF的存在无疑大大强化了其软件功能和适用性。但UDF编译易出现很多错误,写这篇博文,全为经验之谈,可能一些解决方法FLUENT 的UDF帮助中已有提及。如果是 nmake 之类的错误,则必须重装编译器或者更改系统环境变量,参见本博客另外一篇博文。下述纯针对已经成功执行过UDF的电脑而言。

1、Fatal Error:Access Violation

   这是fluent编译UDF过程中最常见的一个错误。原因极多。就目前所知,列举如下:

   a、如果build和load都已成功,但在初始化的过程中出现此提示,则考虑是否引用了自定义内存C_UDMI而忘记在case设置中释放给Fluent充足的内存空间。可通过 User-Defined---->Memory……查看赋予的自定义内存个数。必须不少于udf中使用的 UDMI 个数.

   b、若在UDF中使用了时间相关变量,如CURRENT_TIME,CURRENT_TIMESTEP等,则计算中必须使用Unsteady模型。

   c、在Fluent的结构数据中,秉承domain, thread, c/f的顺序。值得注意的是,一些数据仅仅在边界处才有值,一些数据却在边界处不存在。当调用了模型domain内部的一个变量,而这个变量仅在边界处才会有,便会出现错误。许多关于面的变量都是如此,如F_U.F_V F_W F_UDSI.当然还有其他。

   d、在自定义fluent中的对流项时,常会用到许多面变量。面变量是最容易出错的地方。在fluent中的case边界处,注意F_C1和F_C1_THREAD都是非法操作,因为此处根本不存在c1。

 

2、编译过程中,有些系统变量明明已经声明类型,但在Build时系统却仍提示未声明,或者有时候明明一句语句的末尾有分号,系统却一直提示缺少分号,那么很有可能是在获取区域指针的语句放得过于靠前。建议获取区域指针的语句 Get_Domain(1)尽量往后放,最好下一句便要用到。

 

3、有时候,udf的编译不成功和代码本身无任何关系,仅是由于文件名称取得过于复杂。建议永远不取复杂的文件名。

 

4、在FLUENT中的UDF宏中,有些宏并不被包含在udf.h中,需要另行包含。如果不在文件开头即 #include,系统将无法识别这些宏,便会报错

5、在一些情况下,可能会使用UDF写出部分数据到指定文件中,经检测,如果写出到不同的文件中不会出现编译错误,但在计算执行过程中却会中断迭代。具体解决方法还未找到。目前建议是尽量写出到一个文件中去。

 

0

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

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

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

新浪公司 版权所有