利用 ANSYS Fluent 动态网格进行涡轮泵仿真的方法

Negative cell volume detected 弹出来的时候求解器直接崩了,前一秒还在跑,后一秒残差曲线断了。动网格跑旋转机械,负体积几乎是必踩的,区别只在早踩还是晚踩。
Fluent里面勾选 Dynamic Mesh,下面 Mesh Methods 有三个选项,弹性光顺 Smoothing 和局部重构 Remeshing 至少勾一个。纯光顺的话大变形网格会拉得很长,纯重构又容易丢特征。两个一起勾,变形小的区域光顺处理,畸变大的区域触发重构。光顺参数里 Spring Constant Factor 给0.5,越小变形扩散范围越大,越大变形集中在边界附近。重构参数里 Maximum Cell Skewness 三维默认0.85,做涡轮泵叶顶间隙那种小尺度结构,降到0.7到0.75,给重构留提前量。Size Remesh Interval 默认10,瞬态动网格改到3左右,让重构更频繁地介入。
UDF编译报 udf library “libudf” not available,大概率是Build那一步没点或者路径有中文。Define > User-Defined > Functions > Compiled,把.c文件添加进去,先点 Build,编译成功再点 Load。Build那一步Windows下需要MSVC编译器,Visual Studio装的时候C++桌面开发组件没勾全,udf.bat找不到cl.exe,Build会静默失败。环境变量里 INCLUDE、LIB、PATH 三个都要指向VC的目录,少一个都不行。

叶轮旋转的UDF用 DEFINE_TRANSIENT_PROFILE 或者 DEFINE_ZONE_MOTION,转速可以用 DEFINE_CG_MOTION 挂到被动区域上,实测下来比profile文件灵活,转速随时间变化的时候不用重新导profile。
之前做液氧涡轮泵的空化仿真,诱导轮入口压力降到饱和蒸气压以下之后,空泡团开始脱落,网格在叶顶间隙附近连续报负体积。第一次把 Maximum Cell Skewness 从0.85降到0.7,跑到0.12秒又崩了,时间步长从1e-5缩到5e-6,勉强又撑了0.03秒。那天下午在等HPC队列,排了快两个小时才轮到我,跑崩了又得重新排。后来把叶顶间隙的网格从四面体全改成六面体,光顺和重构同时在那个区域生效,才没再出过负体积。液氧里的气泡溃灭时间在微秒级,Fluent要捕捉溃灭冲击,时间步必须小于1μs,但同时步长越小负体积越早暴露,网格质量不够好撑不过去。
空化模型选 Schnerr-Sauer,设置里两个参数,气泡数量密度给1e13,饱和蒸气压按工质查表。水的饱和蒸气压在25℃约3169 Pa,液氧的饱和蒸气压跟温度关系大,必须按实际工况输。Zwart-Gerber-Belamri模型跟Schnerr-Sauer形式接近,在锐边孔口这类几何上可能对空化区长度预测更准,两个都试一下对比实验结果再定。
时间步长和旋转角度挂钩。叶轮转速20000rpm的话,每步3度对应的时间步是2.5e-5秒,跑完一圈需要120步,跑0.1秒要4000步。转速再高时间步还得缩,不然叶尖的周向位移太大,interface插值误差累积。用一个旋转周期的时间做收敛判断,叶轮转矩和出口压力在相邻周期内波动小于1%,再往下跑才有意义。
动网格和滑移网格的区别在设置上很具体。滑移网格只需要把interface设对,转子区域给转速,Fluent自己在每个时间步旋转网格,不需要勾动网格模型,也不需要UDF。动网格多出来的那套弹性光顺和局部重构参数是为了应对几何本身在变形的场景,比如阀门开闭、活塞运动。涡轮泵如果只是叶轮转、静子不动,滑移网格就够了,动网格反而引入不必要的重构误差。两者可以在同一个算例里共存,MRF稳态跑出初始流场,切到滑移网格做瞬态,启动过程能省不少初始化时间。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删