针对本科毕设中所涉及到的离心泵数值分析和性能计算,将用最简单粗暴的方法,讲解如何基于CFturbo、ICEM、FLUENT来开展离心泵水力设计和性能分析的计算机辅助(CAE)实现。离心泵的水力设计由CFturbo软件实现;网格剖分由ICEM软件实现;CFD数值计算由FLUENT软件实现;并验证设计值是否达到。
这里是第三部分,FLUENT软件实现泵内流动的数值模拟,并对模拟结果进行分析,验证设计值是否达到参数要求。
先新建个文件夹作为FLUENT的工作目录,并把之前画好的三个网格文件fluent_in.msh、fluent_imp.msh、fluent_vol.msh全部拷进去。
打开FLUENT软件,在Fluent Launcher中设置Dimensions维数选3D三维,因为咱们是三维网格;
Options勾选Double Precision双精度,现在也没谁拿单精度Real算了,毕竟单精度计算误差太大了;
Processiong Options处理器选项,可选Serial单核串行和Parallel多核并行,我这破机子,也只能Serial单核计算了;
在Working Directory工作目录中指定到刚才新建的文件夹,即可确定FLUENT的工作目录跟它相关了。
再次确认设置参数后,OK确定打开FLUENT。
读入网格,File->Read->Mesh,在打开的工作目录中,可发现有三个刚才放进去的网格文件,先打开fluent_imp.msh叶轮流道网格文件。
读入完毕后,点左上方Display查看下网格是否正确。
在Mesh Display窗口,可选择Surfaces中的面来逐个查看是否有错误,注意别选int_body_imp,这是内部区域的网格面,选上的话数量非常大,显示起来极有可能把机子卡死,当然你机子好的话,就当我没说。
再把进口延长段的网格读进来,只是这次不能再用read mesh了,要用Setting Up Domain中的Zones中的Append下的Append Case File…,即再附加上另一个区域的方式来读入新的网格。
同样的方式,把fluent_vol.msh也添加进来,Display一下看看,确定各个面都是正确的。
ICEM输出的网格长度单位是毫米mm,FLUENT读入网格的长度单位是m,两者差了1000倍,所以要进行缩放的操作,不然的话,雷诺数就差了1000倍,结果完全不靠谱了。
Setting Up Domain -> Mesh -> Transform -> Scale…,打开网格缩放窗口。
在Scale Mesh窗口中,选择Mesh Was Created In网格是用mm毫米创建的,然后点击Scale来缩放,可看到左上方的区域范围的值都变小了1000倍,缩放成功,Close关闭Scale Mesh窗口即可。
Setting Up Domain -> Mesh -> Info -> Size,查看网格信息,大概50万节点不到,个人机还是可以跑跑的。
Mesh Size
Level Cells Faces Nodes Partitions
0 2655266 5375651 476076 1
3 cell zones, 21 face zones.
Setting Up Domain -> Mesh -> Check,检查网格,没有负体积,计算域范围也缩放正确了,OK。
Domain Extents:
x-coordinate: min (m) = -1.900081e-01, max (m) = 7.313037e-01
y-coordinate: min (m) = -1.773689e-01, max (m) = 2.250622e-01
z-coordinate: min (m) = -2.579141e-01, max (m) = 1.051617e-01
Volume statistics:
minimum volume (m3): 3.716923e-11
maximum volume (m3): 3.629198e-08
total volume (m3): 1.217895e-02
Face area statistics:
minimum face area (m2): 4.020561e-08
maximum face area (m2): 3.415682e-05
Checking mesh.........................
Done.
Setting Up Domain -> Mesh -> Quality,检查网格质量,质量确实不咋滴,都逼近下限了,咱也就大概算算,不深究了。
Mesh Quality:
Minimum Orthogonal Quality = 1.05554e-02
(Orthogonal Quality ranges from 0 to 1, where values close to 0 correspond to low quality.)
Maximum Ortho Skew = 9.87453e-01
(Ortho Skew ranges from 0 to 1, where values close to 1 correspond to low quality.)
Maximum Aspect Ratio = 3.68410e+02
接下来,基本上照着左侧的树形菜单挨个整下来,就顺序地完成了设置、计算和分析工作。
左栏设置树,Tree -> Setup -> General,一般设置,保持默认的Pressure-Based压力基求解器(适用于不可压缩流动问题,Density-Based密度基求解器则适用于可压缩问题),Time中保持默认的Steady定常问题(非定常计算会非常消耗资源,这里就是大概算算),Gravity重立项也不予考虑。
左栏设置树,Tree -> Setup -> Models -> Viscous,打开粘性模型设置,把默认的Laminar层流模型改成k-epsilon(2 eqn) k − ϵ k-\epsilon k−ϵ两方程湍流模型,该湍流模型的设置保持默认即可,OK。
左栏设置树,Tree -> Steup -> Materials,设置介质,点开Fluid下面的air,再从Create/Edit Materials中打开Fluent Database…,从Fluent Database Materials中选择water-liquid (h2o
该算例一共有三个区域,进口延伸段、叶轮流道、蜗壳流道,咱们要把进口延伸段和蜗壳流道定义成静止区域,而把叶轮流道定义成旋转区域,在区域设置中完成,同时还要指定区域中的流体介质。
左栏设置树,Tree -> Setup -> Cell Zone Conditions,设置区域条件,双击body_in设置进口延伸区域,把Material Name从默认的air空气改成wate-liquid液态水,其余默认不做任何勾选和修改,OK,表明该区域是静止区域,且内部介质是液态水。
同样设置body_vol蜗壳流道区域,其设置和body_in区域一样。
重头戏来了,设置叶轮区域,双击body_imp,打开设置窗口,Material Name同样把air改成water-liquid,勾选Frame Motion运动参考系,Rotation-Axis Origin旋转轴心为坐标原点默认不动,Rotation-Axis Direction旋转轴方向默认z轴也不更改,Rotational Velocity旋转速度改为-2900rpm,负号表示它是绕z轴顺时针旋转的,(旋转单位默认是rad/s,可以在最上端的Setting Up Domain -> Mesh -> Units中将angular-velocity的单位Units从rad/s改为rpm),Translational Velocity平动速度保持默认的0就好,咱们这只有转动,没有平动。检查无误后OK确认。
上一步设置的是区域条件,接下来设置边界的条件。
左栏设置树,Tree -> Setup -> Boundary Conditions,设置边界条件。
双击imp_blade_leading,设置叶片前缘面的边界条件。
将Wall Motion壁面运动类型从Stationary Wall静止壁面改为Moving Wall运动壁面;
Motion运动类型保持默认的Relative to Adjacent Cell Zone相对于邻近的单元区域,即给定的是其相对于其所属的区域的运动(相对运动),它的Adjacent Cell Zone邻近区域在最上面第2行已经给你标出来了是body_imp叶轮流道区域,运动类型把默认的Translational平动改成Rotational旋转运动,转速Speed中保持默认的0,转轴中心和转轴依旧分别是原点和z轴。
Shear Conditions剪切条件默认的No Slip无滑移壁面。
OK确定设置。
经过这么一番折腾,就使得叶片的前缘面相对于叶轮流道区域做转速是0的相对旋转运动,换句话说,叶片此时和叶轮流道一样做的是-2900rpm的绝对旋转运动。
如果不做这个设置,那么叶轮前缘是固定不动的壁面,这和实际情况是不符的。
同样的,叶轮流道区域的叶片其他面、前后盖板也要设置成这种相对转速是0的运动壁面,如果一个个设置就太麻烦了,好在可以直接Copy的。
看到下面那个Copy…了么,点开来,在Copy Conditions窗口中,左边选刚才设好的imp_blade_leading边界,右边选择imp_blade_pressure、imp_blade_suction、imp_blade_tip、imp_blade_hub、imp_blade_shroud边界,然后点最下面Copy完成复制边界条件的操作。
如果不放心,再点开来看看它们设好了没有吧。
还记得画网格的时候讲的叶轮流道前后盖板延伸的环面,以及蜗壳进口部分的侧向延伸环面和径向环面么?它们应该如何设置呢?
实际上,它们也属于壁面,即限制流体不能穿透,但是它们又不能给流体施加任何的切向力,所以,把它们设置成剪切力是零的滑移壁面就可以了,当然,叶轮流道前后盖板的延伸面可以定义成是旋转面,也可以定义成是静止面,没有影响,因为它们压根就不会产生剪切应力,也就不会对流体施加切向载荷的影响了。
只需要把Shear Condition剪切条件从No Slip无滑移改成Specified Shear指定剪切,同时保持Shear Stress剪切力为0,就可以了。
imp_ext_hub和imp_ext_shroud叶轮前后盖板延伸环面的设置如下。
vol_ext和vol_side蜗壳流道进口周向延伸面和径向延伸面的设置:
进口延伸段的外壁面,蜗壳的壁面都是静止壁面,保持默认的静止壁面和无滑移条件设置就好。
进口延伸段的出口面,与,叶轮进口面,前者静止,后者运动,属于内部的动静交界面。
叶轮出口面,与,蜗壳进口面,前者运动,后者静止,属于内部的动静交界面。
先指定这四个面的类型为交界面。
先选中in_outlet进口延伸段的出口面,然后从Type类型中下来选择interface交界面并单击确认,它会让你重命名,保持默认名字就好,OK确认,就把in_outlet面的类型从wall壁面修改成了interface交界面。
同样的方法,把vol_inlet蜗壳进口面、imp_inlet叶轮进口面、imp_outlet叶轮出口面也设置成interface交界面类型。
虽然设好了它们是交界面,但是并没有将它们匹配起来啊,好办。
是不是设置树,Tree中Setup中多了一个Mesh Interfaces网格界面的选项啊,没错,就是它了,单击Create/Edit…打开交界面匹配创建窗口。
在Create/Edit Mesh Interface窗口中,Mesh Interface中输入名字“in_2_imp”表示进口段到叶轮段的交界面,在Interface Zone Side 1中选择第一个交界面in_outlet,在Interface Zone Side 2中选择第二个交界面imp_inlet,单击最下面Create创建,这样便将进口段出口和叶轮段进口匹配为了一对交界面。
同样创建另一个名为"imp_2_vol"叶轮到蜗壳的交界面,把imp_outlet和vol_inlet配对即可。
设置好后,Close关闭Create/Edit Mesh Interface窗口。
只剩下两个边界面,in_inlet进口段的进口面和vol_outlet蜗壳流道的出口面了,这两个面也对应着整个计算域的进口边界和出口边界。
通常是把进口指定总压,出口指定流量。进口总压比较好理解,比如接个大气管道什么的,那就是大气压了对吧,出口流量有点费解,其实出口一般接了一堆乱七八糟的管道,那么会有阻力什么的,而做实验的时候呢,会用个节流阀什么的去调节出口流量,也就是说,出口流量实际上是由使用场所或者人为来调节的,所以是可以直接指定的(当然了,如果指定一个非常高的不切实际的流量,那么算出来的结果也是不符合物理意义的),我们指定了这个流量,再去看能否达到所需要的扬程就可以了,就跟自来水龙头,可以调节流量是一样的道理了。
将in_inlet的类型从wall改成pressure-inlet压力进口,设置其Guage Total Pressure总压为0(这个是相对表压),Supersonic/Initial Gauge Pressure初始静压为0(只是初始值而已,一旦计算过程中,这个面上有了速度,那么会把速度的动压减去来计算静压值,最终是保证动压和静压加起来的总压值是0就OK了,所以算起来之后静压会成负值的,表明是进口存在负压差)。
Turbulence湍流模型的设置中,将设置方式改为Intensity and Hydraulic Diameter湍流强度和水力直径,湍流强度给成5%(湍流度中等),水力直径给成0.1259m,即进口管道的直径即可。
将vol_outlet的类型从wall改成velocity-inlet速度进口(没办法,这里没有流量出口,也没有速度出口,就用速度进口,把速度指定成负值来给流量算了,效果是一样的)。
先得算下速度值是多少,出口圆截面的直径为102.46mm,面积是 π d 2 / 4 = 0.00824515 m 2 \pi d^2/4=0.00824515m^2 πd2/4=0.00824515m2,泵的设计流量是 200 m 3 / h = 0.0555556 m 3 / s 200m^3/h=0.0555556m^3/s 200m3/h=0.0555556m3/s,出口速度应该是 0.0555556 / 0.00824515 = 6.737967 m / s 0.0555556/0.00824515=6.737967m/s 0.0555556/0.00824515=6.737967m/s,别忘了加负号。
即把Velocity Magnitude速度幅值设为-6.737967m/s,初始背压设为0Pa,这个初始背压同样只是初始值,会在计算过程中自动做调整的。
湍流度同样用强度和水力直径给定,湍流强度指定为10%(出口一般湍流会更强烈一些的,10%依旧是中等湍流度并不是特别大),水力直径为0.10246m为管道直径。
OK确定。
至此,设置树的Setup部分就设置完了。
设置树,Tree -> Solution -> Solution Methods,保持默认求解方法即可。
设置树,Tree -> Solution -> Solution Controls,保持默认松弛因子即可。
设置树,Tree -> Solution -> Monitors监视器,Edit…打开设置。
把所有项的绝对残差都从0.001改为0.00001(我其实也没指望它能收敛到这么高的水平,只是改着玩玩罢了),OK确认。
设置树,Tree -> Solution -> Solution Initialization初始化。
选择Standard Initialization,Compute from选择in_inlet,用进口值来做初始化,单击Initialize完成初始化。
计算前,先保存下设置文件,File -> Write -> Case…,命名,保存。
设置树,Tree -> Solution -> Run Calculation开始计算。
在Number of Iterations中输入迭代步3000步,先跑3000步看看效果,如果收敛得不理想,再来几千步看看。
单击Calculate开始迭代计算。
拼机子的时刻到了……漫长的等待过程……
先看下残差曲线,基本上残差已经水平,不会再往下降了,姑且认为计算结束了吧,实际上,除非网格画的非常精巧,设置得非常正确,问题非常简单,才有可能让残差收敛到非常小的状态……而咱们用这么渣渣的网格和模型,能收敛成这样已经是谢天谢地了。
计算完成后,可以做切面或者在已有面上查看各种压力、速度云图,可以查看流线……
但是咱们最关心的是泵的性能如何,即,如何获取其扬程、功率、效率等外特性。
泵的扬程 = (出口总压 - 进口总压) / (介质密度 * 重力加速度值) + 进出口高度差,数学表达式为:
H = p o u t − p i n ρ g + Δ z H = \frac{p_{out}-p_{in}}{\rho g} + \Delta z H=ρgpout−pin+Δz
左栏设置树,Tree -> Results -> Reports -> Surface Integrals,打开Surface Integrals边界面的相关量输出设置窗口。
在Surface Integrals窗口中,选择Report Type报告类型为Area-Weighted Average即面加权平均型,Field Variable场变量选择Pressure压力和Total Pressure总压,Surfaces面则选择in_inlet和vol_outlet,即整体计算域的进口面和出口面,来计算这两个面上的平均总压值。单击下方的Compute让其计算。
在窗口中有如下输出信息
Area-Weighted Average
Total Pressure (pascal)
-------------------------------- --------------------
vol_outlet 877535.16
in_inlet 0
---------------- --------------------
Net 350022.7
跟设置的和预想中的一样,进口的总压值是 0 P a 0Pa 0Pa,出口的总压值是 877535.16 P a 877535.16Pa 877535.16Pa,进出口的高度差 Δ z = 0.7313 m \Delta z=0.7313m Δz=0.7313m,这个跟泵相关。考虑到水的密度为 ρ = 998.2 k g / m 3 \rho=998.2kg/m^3 ρ=998.2kg/m3,重力加速度为 g = 9.8 k g / m 2 g=9.8kg/m^2 g=9.8kg/m2,按扬程计算公式可得
H = p o u t − p i n ρ g + Δ z = 877535.16 − 0 998.2 × 9.8 + 0.7313 = 90.44 m \begin{aligned} H &= \frac{p_{out}-p_{in}}{\rho g} + \Delta z \\ &= \frac{877535.16-0}{998.2\times9.8} + 0.7313\\ &= 90.44 m \end{aligned} H=ρgpout−pin+Δz=998.2×9.8877535.16−0+0.7313=90.44m
设计值是84m,算出来居然高达90.44m,我自己都不相信,显然,这么粗糙的计算未必靠谱,好在两者量级还是比较接近的。
泵的输入功率,应该等于叶片所有壁面的扭矩与转动角速度的乘积,即
P = T ω P = T \omega P=Tω
ω \omega ω根据转速 2900 r p m 2900rpm 2900rpm很容易就能算出来,扭矩是要让FLUENT也来report一下的。
左栏设置树,Tree -> Results -> Reports -> Forces,打开Forces Reports力的相关量输出设置窗口。
在Force Reports窗口中,Options选项设置为Moments力矩,Moment Center力矩中心设为原点 ( 0 , 0 , 0 ) (0,0,0) (0,0,0),Moment Axis力矩转轴设为 z z z轴,Wall Zones壁面区域中选择叶轮的所有壁面,即imp_blade_leading、imp_blade_pressure、imp_blade_suction、imp_blad_tip、imp_hub、imp_shroud,单击下方Print输出。
整体的转矩为 T = 181.33732 N m T=181.33732Nm T=181.33732Nm,算得其输入功率为
P = T ω = T n π / 30 = 181.33732 × 2900 × π / 30 = 55069.839 w = 55.070 k w P=T \omega=Tn\pi/30=181.33732\times2900\times\pi/30=55069.839w=55.070kw P=Tω=Tnπ/30=181.33732×2900×π/30=55069.839w=55.070kw
泵的有效功率为
P e = ρ g Q H = 998.2 × 9.8 × ( 200 / 3600 ) × 90.44 = 49150.924 w = 49.151 k w P_e=\rho g Q H=998.2\times9.8\times(200/3600)\times90.44=49150.924w=49.151kw Pe=ρgQH=998.2×9.8×(200/3600)×90.44=49150.924w=49.151kw
那么泵的水力效率为
η = P e / P = 49.151 / 55.070 = 89.25 % \eta=P_e/P=49.151/55.070=89.25\% η=Pe/P=49.151/55.070=89.25%
当然,也可以继续设置不同的出口流速(出口流量 Q Q Q),从而算得泵在不同流量下的扬程、功率、效率,绘制出泵的性能曲线来。
至此,基于商业软件的离心泵的水力设计、网格划分、数值计算、性能分析就讲完了,这里只是简单粗暴地走了一遍,并没有对结果的可靠性做任何验证工作。
网格划分部分用的是最简单最粗糙的非结构均匀网格,数值模拟部分用的也是最常规最普通的湍流模型,结果未必准确,仅供参考。
网格若想划分的漂亮,可能要用到边界层+非结构网格,或者分块结构化网格,或者嵌套网格等方法,需要耗费较大的精力去折腾;而流场若想算得准确,可能要用到大涡模拟湍流模型,非定常数值计算,这已经远远超出了个人机的承受范围……还有,实话实说,这么高端的操作我是不会的,哈哈。