很多同学会在群里面问一些UDF编译的问题,特此写一篇文章详细说明一下对UDF进行编译的正确流程。
第一步:配置环境变量
第二步:验证环境变量是否成功
第三步:进行UDF编译
有些同学为了方便省事,想直接用解释型UDF,这样就不用配置环境变量了。解释型的UDF与编译型UDF在UDF的编写上没有任何不同,只是将UDF加载到Fluent中的方式有所不同。
解释型的UDF:运算速度慢、不需要C语言编译器、只能使用预定义的宏、只能使用C语言书写
对于简单的UDF,可以使用解释型的UDF。但是当你的UDF涉及到比较高级的宏,解释型UDF是识别不了的,比如BOUNDARY_FACE_GEOMETRY、PRINCIPAL_FACE_P、Error等
编译型UDF:运算速度快、可以使用C或C++语言书写、通用性强。
一句话,解释型不能通过的UDF,编译型有可能通过;但编译型不能通过的UDF,解释型一定不能通过。
找一个一定没问题的UDF,编译一下看是否通过。如果没有任何error信息,那就说明环境变量配置成功了。
没问题的UDF如何找:UDF手册中的UDF肯定没问题,找一个最简单的就行,这里我提供一个:
#include "udf.h"
DEFINE_PROPERTY(density_air, c, t)//空气密度
{
real density;
density = 1.0;
return density;
}
直接新建txt文件,将上面代码复制,然后将.txt改为.c即可。也可以从文章后面的链接中直接获取UDF文件
什么样的信息算是error?:我们先假设UDF一定没问题,如果Source Files选择了这个UDF,点击Build后,控制台界面会生成一堆乱码信息,直接点击load,如果弹出下图,那大概率就是环境变量没有配置成功。
这种方法判断的前提是UDF没有任何问题。
在环境变量配置成功的情况下,再进行自己书写的UDF的编译。
这一步还可能会遇到很多问题。由于环境变量已经配置成功,因此遇到的问题一定是UDF本身的问题,可能是书写不规范,也可能是语法问题。
还有可能,UDF编译通过,但是一点计算就会出现下图这种错误
或者出现received a fatal signal (aborted).
总之错误总是千奇百怪,防不胜防。但当使用的多了,会发现常见的错误原因就那几个,多注意排查即可。这部分下篇文章会进行叙述。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删