首页/文章/ 详情

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

1年前浏览2935

文章七十、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学习笔记

附件

免费链接.txt
FluentUDFpython控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-09-05
最近编辑:1年前
Fluent学习笔记
博士 签名征集中
获赞 123粉丝 315文章 132课程 3
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈