浅谈CFD的稳态与瞬态
浅谈CFD的稳态与瞬态
CFD(计算流体力学)是工程领域中一个重要的数值模拟工具,广泛应用于航空航天、汽车设计、能源开发等领域。在CFD计算中,稳态与瞬态是两个基本概念,它们分别对应着不同的物理现象和计算需求。本文将对这两个概念进行对比分析,并详细介绍瞬态计算的具体方法和参数设置。
稳态与瞬态的基本概念
自然界几乎所有的流动都是瞬态的,但很多计算可以采用稳态的方式,具有以下好处:
- 计算资源的需求量更少
- 后处理和分析更方便
然而,有一些场景要求必须使用瞬态求解,比如:
- 气动(飞机、机车等)涡脱落
- 旋转机械:动静干涉、失速、颤振
- 多相流:自由液面、气泡动力学
- 变形域:内燃机燃烧、机弹分离
- 瞬态换热:瞬态加热或冷却
举个栗子
假设雨滴从高空落下,其阻力与运动速度的平方成正比,雨滴的初速度为0,那雨滴的下落要经过以下两个阶段:
第一阶段(加速阶段):重力大于阻力,雨滴具有向下的加速度,速度逐渐增大,在这个过程中其阻力也在逐渐增大,但仍小于重力并逐渐逼近重力,其加速度逐渐减小。
第二阶段(匀速阶段):随着速度的逐渐增大,阻力随之增大,到达某一临界值,即与重力保持平衡,此时雨滴加速度为0,速度达到最大值后保持匀速运动。
- 若将速度作为目标物理量,则第一阶段为瞬态,第二阶段可视为为稳态
- 若将位移作为目标物理量,则整个过程都是瞬态的
- 选择瞬态还是稳态,取决于我们要观察的物理量
- 如果只需要考虑系统稳定后的物理量状态,则可以选择稳态计算
- 如果需要考虑物理量的演化情况,则必须使用瞬态计算
- 稳态计算得到的是稳定时的状态,瞬态计算得到的是物理量随时间发展的过程
- 所有的工程问题都可以计算瞬态,但未必都能计算稳态,稳态只是一种简化
- 本质上定常计算即稳态可以认为是非定常计算在忽略瞬态效应的前提下,在时间维度上的无限延伸
瞬态计算解析
瞬态CFD分析就是模拟分析指定时间内物理量随时间发展的过程。
- 瞬态计算是通过求解多个离散的时间点(时间步)来求解的
- 在每个时间步,我们必须迭代求解
- 瞬态的迭代步数相较于稳态要更少
- 对于复杂问题,稳态计算可能要迭代数千步才能有一个稳定的结果,瞬态计算单个时间步的迭代步数一般也就几十步
图中红色表示真实值,每个黑点都表示时间步,黑点之间的间隔表示时间步长。
- 每个时间步都需要经过迭代求解
- 图A中时间步长过大,仿真结果即黑色连线难以表征真实结果
- 图B中时间步长相对适中,可以比图A更好的表征真实结果
- 图B中每个周期内约10个时间步,相对较少,但好在周期内其曲线特征相对简单,因此仿真结果与真实值还比较贴合
- 较小的时间步长可以更好的得到真实解,每个周期建议至少20-40个时间步
时间步长
时间步长必须足够小以保持求解器的稳定性,但时间步长过小也会增加计算量,那时间步长究竟要多大才合适呢?
Courant number(即库朗数)通常被用来估计时间步长
- 库朗数=特征流动速度*时间步长/典型网格的尺寸
- 给出了流体在一个时间步长中通过网格单元的数量
- Courant number(即库朗数)实际上是指时间步长和空间步长的相对关系
- 在Fluent中用库朗数来调节计算的稳定性与收敛
- 一般来说,随着库朗数的逐渐增大,收敛速度逐渐加快,但是稳定性逐渐降低
- 在计算的过程中,最好是把库朗数从小开始设置,看迭代残差的收敛情况,如果收敛速度较慢而且比较稳定的话,可以适当的增加库朗数的大小
- 根据自己具体的问题,找出一个比较合适的库朗数,让收敛速度能够足够的快,同时又能够保持它的稳定性
在Fluent的耦合求解方法中,由于耦合隐式和显式求解器的稳定性极限不同:
- 在显式格式中,系统设定的默认值为1.0,在某些二维问题中可以适当放大这个数,但是不要超过2.0
- 如果计算模型设定是正确的,并且进行了初始化,但发现计算过程中残差快速上升,则可能需要调小库朗数
- 此外,由于初始流场相对粗糙,可以适当降低库朗数,如调到0.5~1.0 范围,等计算相对稳定后再适当调高
- 而在隐式中默认为5.0在很多情况下可以将默认值改为10、20、100等,具体数值取决于问题的复杂程度,和显式一样,在开始时可以适当调小,等计算稳定后再调大
- Fluent计算开始迭代最好使用较小的库朗数,否则容易导致迭代发散,修改办法solveI-controls-solution,修改courant Number 默认值为1,开始没有经验的改小点,比如0.01,然后逐渐加大
瞬态问题模拟流程
瞬态模拟的流程大概如下:
- 激活瞬态求解器
- 设置物理模型和边界条件
- 指定初始流场
- 求解器设置、监测求解设置
- 设置动画和数据输出选择
- 设置时间步
- 设置迭代步数
- 计算迭代
瞬态模拟的诸多设置与稳态模拟的设置流程类似,同时也存在着些许差异
激活瞬态求解器
General_Time_选择Transient(瞬态)
设置物理模型和边界条件
- 大多数设置与稳态模拟类似
- 瞬态计算新增了与时间相关的边界条件
- 可通过UDF程序来描述
- 新版本(2020以后)支持使用表达式进行表述
指定初始流场
- 初始流场最好使用物理意义上的流场,因此稳态收敛解常被用作初始值
- 稳态计算中,初始值只能影响收敛快慢,并不会影响最终的计算结果
- 瞬态计算中,不同的初始值会得到不同的计算结果
- 如果从近似初始流场开始模拟瞬态,初始结果将不准确
- 前几个时间步可能会不收敛
- 较小的时间步长有助于维持求解器的稳定性
- 对于周期性重复问题,可以忽略前几个周期,直至获得重复的结果
求解器设置、监测求解设置
- 在"Transient Formulation" 中定义瞬态项的数值格式
- First Order Implicit为默认选项,因为它更稳定
- 对于精度要求较高的问题,推荐使用Second Order lmplicit
- 可通过设置监测所关心的量来判定计算是否收敛
- 对于稳态计算,监测只是一个辅助的作用,有时也可以不设置监测
- 对于瞬态计算,监测是非常重要的,比如某处的速度,如果我们没有监测,这个速度随时间的变化我们便无法知晓
设置动画和数据输出选择
- 动画是瞬态计算后处理的一个重要手段,可以直观表达流场中的流动特性
- 需要在求解之前进行动画设置
- 计算完成后,动画中模型的视角啥的便不能更改
- 动画的实质应该是:依据动画设置中的视角及所表达的量等在计算的过程中进行图片的生成与保存,计算完成后再利用这些图片进行动画效果的生成,如果对动画不满意,只能重新设置并重新计算
设置时间步
设置迭代步数
通过_Solution_Run Calculate_设置时间步长与时间步数
时间步长*时间步数=总仿真时间
最大迭代数/时间步是一个重要的概念
- 通常保持20不建议更改
- 对于某些问题可以降低到15用以控制更稳定的时间步长
- 建议最多不超过30
计算迭代
- 瞬态模拟的残差图并不总是表明收敛的解
- 应该选择时间步长,使得残差在一个时间步长内减少大约三个数量级,保证瞬态行为被精准解析
- 对于较小的时间步长,残差可能仅下降1-2个数量级,在整个时间步需要单调减小
写在最后
本篇章针对稳态模拟与瞬态瞬态模拟的联系与差异,对瞬态模拟进行了简易介绍,大部分内容来源于网络资料整理,适合CFD的初学者
可能会存在描述错误或理解不足等问题,欢迎指正交流