文章七十、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))
将变化量改小之后就可以稳定