五十七、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宏,定义材料的物性参数。因此使用时,直接在材料物性界面选中即可

Materials--Fluid--air

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

五十七、Fluent UDF自定义材料物性参数DEFINE_PROPERTY 宏已经给用户传递了c和t,因此使用这个宏不需要遍历thread,也不需要遍历网格。也就是说不需要使用loop宏,直接对c进行操作即可https://mp.weixin.qq.com/s/J-kww_8_-KhTSrUSLkj7lA

 以上案例的cas和dat文件均可以免费获取,需要的朋友,只需要点赞关注收藏一键三连后私信我即可哦 
 

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值