自定义Fluent UDF材料物性参数指南

1. 材料属性的设置



有两种方式可以自定义材料的属性参数,第一种材料下拉框选择,第二种UDF自定义函数。




我们这次主要介绍第二种方式,通过UDF的方式自定义材料属性。之前有两篇文章介绍过UDF的基础和UDF DEFINE _PROFILE宏


自定义材料属性的define宏主要是DEFINE_PROPERTY,除此之外如果需要定义扩散系数,还需要使用DEFINE_DIFFUSIVITY宏。


扩散系数一般是打开组分输运方程,或者使用UDS才需要定义。





2. DEFINE_PROPERTY宏的用法



我们详细说说DEFINE_PROPERTY宏的使用,同时给出几个例子



2.1 物性参数



DEFINE_PROPERTY宏可以定义的物性参数如下:


• density (as a function of temperature):密度

• viscosity:粘度

• thermal conductivity:导热系数

• absorption and scattering coefficients:吸收系数和散射系数

• laminar flame speed:层流火焰速度

• rate of strain:应变率

• frictional modulus (Eulerian model):摩擦模量

• elasticity modulus (Eulerian model):弹性模量

• heat transfer coefficient (Mixture model):传热系数

• particle or droplet diameter (Mixture model):液滴直径

······················

注:

a. DEFINE_PROPERTY宏可定义大多数的物性参数,上面只是列举出一部分。当需要定义物性参数时,首选DEFINE_PROPERTY宏

b. 扩散系数需要使用DEFINE_DIFFUSIVITY宏定义

c. 比热容需要使用DEFINE_SPECIFIC_HEAT宏定义


2.2 DEFINE_PROPERTY的用法




DEFINE_PROPERTY (name, c, t)

name:udf的名字,随便起,只要符合c语言变量命名规则即可。比如Ergouzi,xiaoerhua。建议取表示物性的单词作为名字density、viscosity等


c:网格变量cell,返回网格的编号值。其实就是一个整数,看过Fluent UDF为所欲为的后门这篇文章的应该印象深刻些


t:线程thread,是一个结构体,包含一些列cell、face等。


返回值return:real类型,返回物性参数值


注:

a. c和t都是这个宏从fluent中取出来给用户使用的,不需要任何的定义,直接可以使用c和t


b. 由于DEFINE_PROPERTY 宏已经给用户传递了c和t,因此使用这个宏不需要遍历thread,也不需要遍历网格。也就是说不需要使用loop宏,直接对c进行操作即可。


c. 与之相对的,如DEFINE_ADJUST宏,没有传递c和t,因此必须要先遍历thread或者查找thread,然后再遍历网格。




3. DEFINE_PROPERTY示例



3.1 粘度定义



定义粘度viscosity,当温度大于288K,粘度等于5.5e-3;当温度小于286K,粘度等于1.0;否则粘度等于温度T的函数。



UDF代码如下:


#include "udf.h"

DEFINE_PROPERTY(cell_viscosity,c,t)

{

real mu_lam;

real temp = C_T(c,t);

if (temp > 288.)

mu_lam = 5.5e-3;

else if (temp > 286.)

mu_lam = 143.2135 - 0.49725 * temp;

else

mu_lam = 1.;

return mu_lam;

}


解释一下:

real mu_lam;

//声明了一个real变量,其实就是c语言的float类型,只不过real可以自动改变单精度还是双精度。mu_lam是变量名称,可随意命名。


real temp = C_T(c,t);

//声明了一个real变量,并且赋值。temp即变量名,使用C_T宏给其赋值。

//C_T宏用于获取网格温度,括号中的c和t即是DEFINE_PROPERTY(cell_viscosity,c,t)中的c和t。两者必须一致,要改都改。


if (temp > 288.)

mu_lam = 5.5e-3;

else if (temp > 286.)

mu_lam = 143.2135 - 0.49725 * temp;

else

mu_lam = 1.;

//if else语句,根据温度值来确定粘度值。288.为什么要加一个点,如果不加点则表示整型,加点表示浮点型,其实就是288.0。如果不是整型,即使是整数最好也要写成小数形式,否则会出现一些很难察觉到的错误。


return mu_lam;

//返回mu_lam值,这个值会自动传递给Fluent的物性参数,对于DEFINE_PROPERTY宏,必须要有返回值,返回就是自己设置的物性参数。



3.2 表面张力系数定义


表面张力系数定义为温度的函数,sur_ten=1.35 - 0.004*T + 5.0e-6*T*T


UDF代码如下:


#include "udf.h"

DEFINE_PROPERTY(sfc,c,t)

{

real T = C_T(c,t);

return 1.35 - 0.004*T + 5.0e-6*T*T;

}

直接以表达式的形式返回物性参数



3.3 密度和时间相关



这里仅仅是演示,实际上我们的物性更多是和压力温度有关,和时间没有关系。这里为了说明UDF的灵活性,简单演示。


假设当流动时间小于1s,密度为1000kg/m3;流动时间大于等于1s,密度为1kg/m3。


UDF代码如下:


#include "udf.h"

DEFINE_PROPERTY(den_time,c,t)

{

real density;

real current_time;

current_time = CURRENT_TIME;

if(current_time<1.0)

{

density=1000.0;

}

else

{

density=1.;

}

return density;

}


逻辑很简单,这里只说明一点。

current_time = CURRENT_TIME;

//CURRENT_TIME是fluent中的一个宏,也可以认为是一个变量,返回当前的流动时间。


4. UDF的编译与加载


两种UDF编译的方式,参考文章四十九、Fluent UDF编译正确的流程。可分为Interpreted和Compiled。




对于解释型Interpreted,优点是简单、方便,缺点是很多高级宏不适用。因此建议大家不要使用解释型编译UDF。


这里还是简单说一下,下图为解释型界面,直接点击Browse,选中写好的UDF,然后点击Interpret即可。如果UDF没问题,则不会出现报错信息。





编译型UDF界面如下图,上面有两个框Source Files和Header Files,Source Files表示源文件,就是编写好的UDF文件;






Header Files表示头文件,只有当UDF很复杂,为了使UDF模块化才需要从这里导入头文件。UDF自带了很多头文件如udf.h,但是这些头文件不需要从这里导入。



首先点击Add,选中编写好的UDF后导入,然后点击Build,如果UDF没有问题,则不会出现任何报错信息(只要控制界面有error,则说明有问题)。


在没有报错的前提下,点击Load,则UDF加载成功。关于UDF报错问题,建议大家看看文章四十九、五十和五十一。如果没有报错,控制台应该会显示下面的信息,其中就有各种DEFINE宏的name









5. UDF的使用


不同的DEFINE宏,UDF的使用方式不同。对于DEFINE_PROPERTY宏,定义材料的物性参数。因此使用时,直接在材料物性界面选中即可



比如需要修改air的粘度,在Viscosity处选择user-defined,会弹出右图,然后选中DEFINE的name就行,点击OK。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空