用 FLUENT 计算非稳态问题,是不是在计算时必须保证在每个时间步 timestep 里都要收敛才行,否则计算结果就不对呢?也就是说,在 iteration 选项里,max iteration pertime step 设为一个值,比如 500,就是如果 500 次迭代后仍未收敛,进入下一步迭代,那对结果会有什么影响。
对于隐式非定常格式,原则上,每个时间步长内必须保证结果收敛。在 fluent 的帮助中就有这样的话:"对于不可压流动,在每个时间步内,不可压解必须迭代直至收敛。" 另外,我们回归到 fluent 内部计算的本源,它实质就是一种差分算法,通过不断逼近来获得真实解,这样我们就不难理解为什么在每个时间步长内需要收敛了。max iteration pertime step 设定的是最大时间步,在单一步长内,如果结果已经收敛,则会自动跳至下一时间进行计算。所以其设定要纵观全局。但对于周期性流动,这种收敛性的要求就相对松动一些。不过你需要多计算几个周期,等计算结果达到对时间的周期状态后,再对结果进行储存。
对于显式非定常格式,在 Fluent 帮助中这样说:"一定记住,对于显式非定常格式,每一个迭代就是一个时间步。"
如果每个时间步内结果没有得到收敛,则很有可能你所得到的结果是不真实的,但是一个时间步内的不真实性应该不 会影响到下一个时间步长内的计算。因为在每一个时间步开时,fluent 都会进行初始化。在单个时间步内,它实际是按照稳态进行计算的。
time step size 的设定是根据你的计算需要,一般是你的特征长度(比如说管道的长度)除于特征速度(比如平均速度)的值再小一到两个量级即可,如果你的 time stip size 太大,计算会提示你的,改小即可。
number of time steps 是这样设定的:number of time steps X time step size=实际时间积累。比如说,你计算一个射流,你需要计算到 1 秒时候的情况,那么(number of time steps)=1 秒/(time step size)。
- Fluent 中非稳态时间步长设置
最近所做的非稳态计算,若设置太小,计算时间就太长,设置太大的话就会出现 Global Courant Number 飙升过大的不能继续进行下去的问题。
单元最小长度除于流场平均流速,不过这个值可能很小,你可以以这个值为基准进行调节,一开始可以取大些,如果没有问题,可以再放大些,这样可以缩短计算时间。
若按这种方法,计算下面这个例子:2mm,10 个网格,流速 1m/s。时间步长 time steps=0.2/1000=0.0002。但是我在进行计算时,设置为 1e-6,都无法进行下去。所以这种换算方法还是只能作为参考。
我现在采用的是自动调节时间步长,目前看来效果还可以。
- 怎么知道非稳态计算时间步长是合适的?
courant number 与收敛
courant number 实际上是指时间步长和空间步长的相对关系,系统自动减小 courant 数,这种情况一般出现在存在尖锐外形的计算域,当局部的流速过大或者压差过大时出错,把局部的网格加密再试一下。在 fluent 中,用 courant number 来调节计算的稳定性与收敛性。一般来说,随着 courant number 的从小到大的变化,收敛速度逐渐加快,但是稳定性逐渐降低。所以具体的问题,在计算的过程中,最好是把 courant number 从小开始设置,看看迭代残差的收敛情况,如果收敛速度较慢而且比较稳定的话,可以适当的增加 courant number 的大小,根据自己具体的问题,找出一个比较合适的 courant number,让收敛速度能够足够的快,而且能够保持它的稳定性。
时间步长与准确性
摘自《数值计算与工程仿真》第一期 作者 gim
- 在不计模型误差,而且计算稳定的前提下,数值计算的时间步长的选取存在一个恰当值,过大或过小都会影响模拟结果的准确性。
- 具体数值模拟中,最好能有一定的实验数据或其它的可以认为准确的结果作为验证资料,这样才能恰当的选定时间步长,提高计算的准确性。
- FLUENT 软件采用隐式计算,这就需要设定每一次迭代的最大步数(Max Iterations per Time step ) ,如果达到最大步数前计算已经收敛,系统会自动进入下一步迭代。利用这一点可以采取如下方法确定迭代的时间步长:系统一般认为每一步的迭代次数应在 10 一 20 次之问,设定一个时间步长后如果在迭代次数内还没有收敛就应该减小时间步长,反之则应该增加时间步长。一般,都事先给定一个较小的时问步长进行迭代儿步,而后逐步调整。当然迭代次数也跟具体问题相关,还需要计算经验的不断积累。
- 非稳态时间步长与迭代步数的讨论
在 unsteady 的计算求解中,大部分同学应该会对 solver 中设置比较迷惑,在这里,我想就我个人的理解对其时间步长与迭代步数进行一些分析讨论。
- 在进行 unsteady 计算的时候,fluent 是从前一个时间算到下一个时间(即 time steps),而每个时间步长内的计算就相当于一个准稳态求解,因此需要设置 Max Iterations per Time Step;在这个时间步长内的计算就是一个稳态过程,在达到 iteration 次数之前收敛完成,就跳到下一个 time step,否则就将所规定的迭代次数算完在跳下一个 time step。
- 时间步长的设置:(1)特征长度除以特征速度所得的时间小二个量级或者更小。这是理论值,实际上,如果不是工作站运行的话,花费的计算时间太长。因此,通常在 fluent 中选定这个比例的 1/5 到 1/10,特别是一开始不知道如何设定的时候最好是打开 adaptive 让它自动定义定义时间步长。但其中最小的时间尺度,个人认为最小也只能小到这个比例的 1/100 的这个水平上。(2)最小网格长度除以流速或者旋转流动速度。这个是保证每一次迭代都在一个网格范围内,不会因跨网格而导致结果误差,但实际中计算一段时间后可能加快计算速度,会将时间步长设置较大,最后为得到最终求解,再将时间步长调小,进行细微的计算。
- 时间步长里的迭代步数设置:保证每个时间步长达到收敛,或者能明显看到主要残差曲线趋于水平。
- 时间步数:看你需要计算多长时间,本人觉得至少需要计算 3-5 个流动循环周期才可能得到非定常的稳定流动周期状态。