这篇本来是我发在个人知乎上的文章,现做了一些局部文字修改后,重新发出来
很多fluent初学者,甚至一些相当有经验的使用者,在瞬态分析中,在时间步长上弄不清楚,经常遇到报错,什么浮点溢出等问题,大多数原因是时间步长太大的原因。再具体说,就是时间子步太大了,为什么时间子步会设置的很大,我分析原因 ,主要是以下两种,第一是受到视频教程的误导,因为视频教程为了演示需要,工况很简单,所以时间子步设置的很大通常在0.01以内,不可能跑了三天两夜完成后,再回来讲解的话,这样时间成本太高了,时间就是金钱,还有合理的时间子步是先调试出来的,这个过程也不可能播放给你,如同一场晚会,经过太过的彩排,彩排过程是不可能播放出来的,最关键的是,这个需要调试的过程,任何视频教程是不会说的。
瞬态分析中,时间步长就是将这个所要计算物理时间段内的时间,离散化成很多细小的时间段,每个时间子步内相当于一个稳态分析。那么稳态分析大家都知道,要收敛,同样在瞬态分析中,每个时间步长内要收敛,软件默认迭代20次,所以,要求在这20次内要收敛。收敛的标准,按软件的默认标准1e-3,通常工况的复杂性,20步内很难收敛,为了实现这个目标,只能将时间步长再减小,具体有多小没人能知道,只能不断的试,调试出来为止,所以正式求解之前,要进行若干步(比如十步)试算,如果发散了或者没收敛,重新初始化再把时间子步改小,重新运算,反复这个过程,直到20步内收敛为止。这个时间步长内收敛的话,会自动跳到下个时间子步进行运算。假设每个时间子步没有收敛,也能正常运算,那么精度误差积累会越来越大甚至到最后就报错了,如果增加每个时间子步的迭代步数,不减小时间步长,那是不科学的。只能在调试过程中,可以这样操作,正式运算时,建议最大不能超过30步,总之要通过减小时间步长来达到收敛,而不是增加时间子步内的迭代步数来实现这个目的。
时间子步与网格有很大的关系,网格越小,时间子步就要越小,还与边界条件有关系,边界条件越剧烈,时间子步就要越小,否则就发散报错,现实中工况是复杂的,特别是动网格之内,运算过程中,时间子步是变化的,可能前面一段时间,稍大的时间子步就可以收敛,后面流场剧烈的时候,时间子步要改小,否则立即发散,还有无论你把时间子步设置的有多小都无法收敛,这时候就要重新调试了,尝试从其他方面解决了。
总之,瞬态的计算量非常大,因为时间子步小的原因,所以尽可能把瞬态转为稳态进行分析,尽可能简化方案模型,开始用较粗糙的网格等多种手段减小计算量,而不是通过增大时间步长来减小计算量,如果这个方案是可行的话,那服务器还有采购的必要吗,直接把时间步长改大,一台办公笔记本就能仿真出计算整个宇宙。
下一篇再去介绍,瞬态计算过程中,经常遇到残差曲线突然上升甚至发散的原因
很多fluent初学者,甚至一些相当有经验的使用者,在瞬态分析中,在时间步长上弄不清楚,经常遇到报错,什么浮点溢出等问题,大多数原因是时间步长太大的原因。再具体说,就是时间子步太大了,为什么时间子步会设置的很大,我分析原因 ,主要是以下两种,第一是受到视频教程的误导,因为视频教程为了演示需要,工况很简单,所以时间子步设置的很大通常在0.01以内,不可能跑了三天两夜完成后,再回来讲解的话,这样时间成本太高了,时间就是金钱,还有合理的时间子步是先调试出来的,这个过程也不可能播放给你,如同一场晚会,经过太过的彩排,彩排过程是不可能播放出来的,最关键的是,这个需要调试的过程,任何视频教程是不会说的。
瞬态分析中,时间步长就是将这个所要计算物理时间段内的时间,离散化成很多细小的时间段,每个时间子步内相当于一个稳态分析。那么稳态分析大家都知道,要收敛,同样在瞬态分析中,每个时间步长内要收敛,软件默认迭代20次,所以,要求在这20次内要收敛。收敛的标准,按软件的默认标准1e-3,通常工况的复杂性,20步内很难收敛,为了实现这个目标,只能将时间步长再减小,具体有多小没人能知道,只能不断的试,调试出来为止,所以正式求解之前,要进行若干步(比如十步)试算,如果发散了或者没收敛,重新初始化再把时间子步改小,重新运算,反复这个过程,直到20步内收敛为止。这个时间步长内收敛的话,会自动跳到下个时间子步进行运算。假设每个时间子步没有收敛,也能正常运算,那么精度误差积累会越来越大甚至到最后就报错了,如果增加每个时间子步的迭代步数,不减小时间步长,那是不科学的。只能在调试过程中,可以这样操作,正式运算时,建议最大不能超过30步,总之要通过减小时间步长来达到收敛,而不是增加时间子步内的迭代步数来实现这个目的。
时间子步与网格有很大的关系,网格越小,时间子步就要越小,还与边界条件有关系,边界条件越剧烈,时间子步就要越小,否则就发散报错,现实中工况是复杂的,特别是动网格之内,运算过程中,时间子步是变化的,可能前面一段时间,稍大的时间子步就可以收敛,后面流场剧烈的时候,时间子步要改小,否则立即发散,还有无论你把时间子步设置的有多小都无法收敛,这时候就要重新调试了,尝试从其他方面解决了。
总之,瞬态的计算量非常大,因为时间子步小的原因,所以尽可能把瞬态转为稳态进行分析,尽可能简化方案模型,开始用较粗糙的网格等多种手段减小计算量,而不是通过增大时间步长来减小计算量,如果这个方案是可行的话,那服务器还有采购的必要吗,直接把时间步长改大,一台办公笔记本就能仿真出计算整个宇宙。
下一篇再去介绍,瞬态计算过程中,经常遇到残差曲线突然上升甚至发散的原因