本篇文章是对下面文章的补充修改
因为文章中的这部分内容存在重大 bug,先问问你们能找到bug在哪里吗?
揭晓答案:
上面的算法并不是一定收敛的,上面的算法用了下面图片的螺旋迭代 大法,逆时针螺旋是可以逐渐收敛的,但是顺时针迭代一定会发散(自己脑补出来)
而我们上面的迭代大法用的就是顺时针迭代,gg ......
所以办法之一就是改迭代方向,也就是原来速度入口要改成压力入口,以速度结果为导向开展迭代,这样不稳定的方法我不太喜欢...
我还是喜欢简单粗暴稳定收敛的二分迭代法 ,设定一个初始区间,然后取中值,判断计算的压降和目标压降关系,重新设定二分区间 ,再取中值...
怎么在Fluent里实现呢,我知道可以写udf,然而我就是不太想写...别问为什么,我就是我觉得自己编的算平均压力算不准
所以又秀一把 Expression
变量名 = 式子
VMinOrigin=6[m/s] (初始迭代下限)
VMaxOrigin=8[m/s] (初始迭代上限)
VCurrent=Average(VelocityMagnitude,["inlet"],Weight=None) (当前速度)
P_Target=(9.9026[m/s]-Average(VelocityMagnitude,["inlet"],Weight=None))*1[Pa*s/m] (目标P(V)函数)
VMin=IF(Average(StaticPressure,["inlet"],Weight=None)<=P_windCurve,VCurrent,VCurrent-exp(floor(Iteration/150)*log(0.5))*(VMaxOrigin-VMinOrigin))
(更新迭代下限,吐槽Fluent连pow函数都不给,我还得exp(floor(Iteration/150)*log(0.5)))弄出来次方
VMax=IF(Average(StaticPressure,["inlet"],Weight=None)<=P_windCurve,VCurrent+exp(floor(Iteration/150)*log(0.5))*(VMaxOrigin-VMinOrigin),VCurrent)
(更新迭代上限)
inlet-velocity=IF(Iteration<50,7[m/s],IF(mod(Iteration-1, 150)==0,0.5*(VMax+VMin),VCurrent)) (入口速度Expression)
验证:
直径0.3m,长1m,空气进口速度 7.333333m/s时,v +压降 = 9.9026
下面我们用Expression来找7.333333m/s,假定满足 v +p = 9.9026
入口速度
入口压力
收敛成功