七十一、Fluent表达式进阶实例

文章七十、Fluent表达式基础实例介绍了Fluent表达式功能的基础案例,这篇文章我们介绍几个比较复杂的案例。下面三个案例在文章末尾都提供了case和dat文件。

1. 案例4:入口物理量=出口物理量

1.1 说明

将出口outlet的温度减去一个值后赋值给入口inlet

这个案例在交流群里经常会被提到,也有很多同学问起来。很多人建议UDF,但如果通过UDF进行设置,会较为复杂。

本质上就是将模型的出口物理量赋值给入口,不一定是温度,也可以是压力、流量等物理量

注:

a. 此案例会用到表达式Functions中的Reduction。所谓Reduction(缩减函数)就是将本来场的数值缩减成一个数,比如Average平均、AreaAve面积平均等。

也就是本来很多数据通过Reduction函数可以缩减为一个数据。

b. 这就是我认为Expression功能优于UDF的地方,通过表达式可以直接得到计算域或者边界某物理量的平均值。

但如果使用UDF则需要对网格进行叠加求平均,如果涉及并行UDF,还需要考虑节点之间的数值传递,更加复杂。

1.2  案例描述

模型有一个速度入口和一个压力出口,初始时,流场温度293K,壁面温度333K。入口温度=出口温度-10K

打开in边界条件

点击expression,弹出表达式窗口

输入公式:AreaAve(StaticTemperature,['out'])-10[K]

AreaAve(<expr>,[, ...]):Reduction函数,表示面积平均。

<expr>表示需要面积平均的物理量或者表达式,本例即温度StaticTemperature;

[, ...]表示需要进行平均的位置,可以是边界boundary也可以是计算域cell zone,还可以同时对多个位置进行平均,本例即out边界。

AreaAve(StaticTemperature,['out'])可以获取out边界的面积平均温度,然后减去10K赋值给入口温度。

1.3 计算验证

监测入口和出口温度,两者相差10K

2. 案例5:根据出口参数调节入口参数

比如我们确定了出口温度,想知道入口温度为多少时能达到这个出口温度。

当然可以手动去试,但是我们更希望能够自动调节。

2.1 案例描述

壁面温度333K,出口温度303K,流速固定。确定入口温度?

思路:根据出口温度调节入口温度,如果当前出口温度较低,增加入口温度;如果当前出口温度较高,降低入口温度。

2.2 物理量命名为表达式Named Expressions

由于需要反复使用入口和出口的面积平均温度,将入口和出口温度面积平均保存为Named Expressions,这样可以直接使用,而不必每次都写一堆表达式。

User-Defined~Named Expressions~New

点击New,打开表达式窗口

Name:输入表达式的名字tin,后面就可以直接用这个名字来代替下面的表达式

Definition:输入表达式。

AreaAve(StaticTemperature,['in'])

AreaAve(<expr>,[, ...]):Reduction函数,表示面积平均。

<expr>表示需要面积平均的物理量或者表达式,本例即温度StaticTemperature;

[, ...]表示需要进行平均的位置,可以是边界boundary也可以是计算域cell zone,还可以同时对多个位置进行平均,本例即in边界。

同理命名出口温度tout

2.3 边界条件设置

上述的命名Named Expressions只是为了边界条件表达式的方便。现在开始设置边界条件

根据出口温度调节入口温度,因此我们需要设置入口温度。打开in边界条件,

Thermal界面设置下拉框有expression和Named Expressions

Expression:表示通过表达式的方式设置此边界条件,我们选择此项即可

Named Expressions:此选项下的New Expression也是设置表达式,只不过仍然需要给表达式命名,然后再使用

IF(tout<302.5[K],tin+0.1[K],IF(tout>303.5[K],tin-0.1[K],tin))

表达式逻辑:

a. 双重IF语句,IF(,<vector1>,<vector2>),第一个参数为判断条件,后面的两个表示要执行的语句。如果为真,则输出<vector1>,否则输出<vector2>

b. 我们想要出口温度为303K,但实际无法控制刚好等于303K,需要给一个范围302.5K-303.5K之间。

c. 如果出口温度tout<302.5K,则出口温度较低,需要增加入口温度tin。本例设置增加0.1K,增加幅度越小,控制范围就越小,越接近303K。但计算时间可能越长。这就是公式前半部分的内容IF(tout<302.5[K],tin+0.1[K])

d. 当tout>303.5K时,说明出口温度较高,tin需要减小0.1K。也就是说即使出口温度tout不小于302.5K,也不能直接输出值,还需要一步判断语句。

e. 当tout不大于303.5K同时也不小于302.5K,也就是两个if语句的判断条件都不满足时,说明此时的出口温度符合范围,tin也满足要求。

f. 如果按照python这种编程语言,很容易理解。

if(tout<302.5):
    tin=tin+0.1
elif(tout>303.5):
    tin=tin-0.1
else:
    tin=tin

g. 红字的报错信息只是说明无法画出入口温度的图像,不影响表达式

2.4 计算验证

按照上述公式输入后,进行计算。检测入口和出口的温度,可以得到温度曲线图

入口温度和出口温度分别为

3. 练习:根据出口温度调节入口流速

壁面温度333K,出口温度303K,入口温度293K。确定入口流速?

答案:

IF(tout<302.5[K],vin-0.001[m/s],IF(tout>303.5[K],vin+0.001[m/s],vin))

此时出口温度周期性波动,无法稳定。说明速度vin的变化量太大了

IF(tout<302.5[K],vin-0.0001[m/s],IF(tout>303.5[K],vin+0.0001[m/s],vin))

将变化量改小之后就可以稳定

七十一、Fluent表达式进阶实例就是我认为Expression功能优于UDF的地方,通过表达式可以直接得到计算域或者边界某物理量的平均值。\x0d\x0a但如果使用UDF则需要对网格进行叠加求平均,如果涉及并行UDF,还需要考虑节点之间的数值传递,更加复杂。icon-default.png?t=N7T8https://mp.weixin.qq.com/s/RugvrJRQSvCAB4_JzCVNRg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值