首页/文章/ 详情

一文说清楚Fluent自适应时间步长

7月前浏览9403

1. 自适应时间步长概念

本文摘要:(由ai生成)

自适应时间步长是瞬态计算中的关键技术,Fluent提供三种调节方法。Adaptive界面自适应基于CFL数或误差自动调整时间步长,并设置相关参数。表达式调节适用于简单需求,通过编写表达式调整时间步长。UDF调节则通过DEFINE_DELTAT宏实现复杂逻辑,以满足更高级需求。这些方法旨在确保计算精度的同时,优化计算效率,提高瞬态计算的效率和收敛性。

对于瞬态计算来说,时间步长的选择一直是个难点。时间步长较大可以加快计算速度,但可能会降低收敛性,甚至发散。时间步长较小,虽然收敛性会变好,但计算速度会变化。(有时,时间步长较小反而会发散)。


关于时间步长的选取,可参考文章:二十九、Fluent瞬态时间步长与迭代步数的讨论



能不能自动调整时间步长呢?使求解比较精细时选用较小的时间步长,而计算接近稳态时选用较大的时间步长。这样既能保证计算的收敛性,还能提高计算速度。因此出现了自适应时间步长。



2. 自适应时间步长的方法

Fluent提供了三种自适应时间步长的方法:

a. Adaptive界面自适应时间步长


b. 表达式调节


c. UDF调节

其中第一种方法是Fluent内置的,也是最简单的,只需要在Run calculation界面设置即可。


第二种和第三种方法需要写代码来调节,有一定的入门要求。这个我们会在下篇文章介绍


3. Adaptive界面自适应时间步长

Fluent提供了自适应时间步长的设置,对于瞬态计算,在Type处选择Adaptive即可设置自适应时间步长。


3.1 Method

Method:选择设置时间步长的依据。对于Adaptive自适应时间步长有三种选择。


a. CFL-Based:根据库朗数来调节时间步长,CFL-Based在基于密度显示格式时不适用,也不适用于多相流模型。


选择CFL-Based需要设置库朗数,Fluent将根据设置的库朗数自动调整时间步长,使计算出的库朗数小于设置值。默认Courant Number为1。


b. Error-Based:根据计算截断误差来调节时间步长,不适用基于密度的显式格式,也不适用显式格式的欧拉模型


选择Error-Based需要设置误差,如果截断误差小于设置的误差,则时间步长的增大;如果截断误差大于设置的误差,则时间步长的减小。对于一般问题,Error-Based默认值为0.01是比较适合的。


c. Multiphase-Specific:对于多相流模型,自适应时间步长可以选择Multiphase-Specific,此时需要设置全局库朗数。这里不多介绍



注:对于CFL-Based和Error-Based两种方法,下面的设置都相同



3.2 Duration Specification Method

Duration Specification Method:设置计算总时间。对于Adaptive和User-Defined Function方式设置时间步长,此时无法直接确定总的计算时间,因此需要通过Duration Specification Method来设置。


共有四种设置方法:



a. Total Time:设置计算的总时间,包括之前的计算时间。比如目前保存的工况在之前已经计算了3s,设置的Total Time为4s,那么只会再计算1s就会停止计算。



b. Total Time Steps:置计算的总时间步,这里和Total Time类似,包括了之前计算的时间步。


由于时间步长不确定,因此Total Time Steps无法确定计算的时间,只能通过Fluent控制台查看,或者输入文本控制命令查看。


也可通过Report Simulation Status查看


单击Report Simulation Status,会弹出下框,包含当前的计算状态。



c. Incremental Time:增量时间,以此时作为计时起点计算的时间,无论当前的dat已经计算了多少时间,都会在此基础上再计算Incremental Time时间。



d. Incremental Time Steps:增量时间步,和Incremental Time类似,以当前的dat作为时间步起点,在此基础上再进行计算更多的时间步。


3.3 Parameters参数设置



a. Number of Fixed Time Steps:固定的时间步,在初始时间步长改变之前必须要执行的时间步数。比如,Number of Fixed Time Steps=100,初始时间步长为0.001s,则必须先使用初始时间步长0.001s计算100步后,时间步长才会改变。


b. Initial Time Step Size:初始时间步长,即第一个时间步长,必须以这个时间步长执行Number of Fixed Time Steps步后时间步长才会改变。


Initial Time Step Size必须介于最小和最大时间步长大小之间。一般应选择使库朗数=1的时间步长作为初始时间步长。



c. Max Iterations/Time Step:每个时间步最大的迭代次数。如果在此值之前就已经收敛,则进入下个时间步的计算,如果没有收敛,则达到最大迭代次数后也会进入下个时间步。


d. Reporting Interval:报告时间间隔,如设置为2,则表示每隔2个时间步在控制台输出一次文本,绘制一次图形。当计算速度比较慢时,可将此值设置为较大值,来减少文本输出频率,增加计算速度。




e. Profile Update Interval:DEFIEN_PROFILE函数的更新频率,设置为1,表示每个时间步,DEFIEN_PROFILE函数都会更新。


f. Time Step Size Update Interval:时间步长的更新间隔,如设置为2,表示每两个时间步才会自动计算并更新时间步长。


3.4 详细设置













点击Setting,会弹出Adaptive Time Stepping


a. Minimum/Maximum Time Step Size:限制的最小和最大时间步长,设置和计算过程中的时间步长必须在此范围内。



b. Minimum/Maximum Step Change Factor:限制时间步长的变化程度。这种限制可以使时间步长不会产生较大的突变,从而造成计算收敛性问题。


比如前一个时间步长为0.01s,但是计算出的当前时间步长为1s,两者差了100倍,这种时间步长的突然增大可能会造成计算问题,因此对其进行限制。



对于CFL-Based和 Multiphase-Specific方法,此处的值表示当前时间步长与前一个时间步长的比值。如上图的值,表示当前的时间步长被限制在前一个时间步长的0.5-2倍之间。


对于Error-Based的方法,此值为设置的error tolerance与计算出的截断误差之间的比值。



4. 表达式调节时间步长

4.1 介绍

Fluent提供了自适应时间步长的界面,通过Adaptive界面,Fluent能够根据一些准则来自动调节时间步长。参考文章:


除了这种方式,还可以使用表达式expression和UDF来调节时间步长,表达式相对UDF更加容易入门,表达式的使用可参考文章:七十一、Fluent表达式进阶实例七十、Fluent表达式基础实例


 

某些情况下表达式对于时间步长的调节要比UDF更加方便。(因为expression对于物理量的求和、平均等处理非常方便)



比如利用expression实现调节时间步长的功能。当流动时间t小于0.5s,时间步长等于0.1s,流动时间t大于0.5s,时间步长等于0.2s


 

写成表达式为:IF(t<0.5[s],0.1[s],0.2[s])

 



4.2 设置方法

表达式更改时间步长,Type不能选择Adaptive,而应该选择Fixed。然后在Time Step Size下拉框选择New Expression,输入上面的表达式即可。表达式的具体用法可以参考文章:七十一、Fluent表达式进阶实例七十、Fluent表达式基础实例


 



4.3 具体案例:根据残差改变时间步长

正常情况下后处理界面Residuals只有mass Imbalance,只能显示质量流量的净值(Flux中的mass flow rate净值)。

使用文本命令/solve/set/advanced>retain-cell-residuals,输入yes,可激活其他的残差值,如下图。


 




但expression中Residuals还是只有mass Imbalance。因此我们使用mass Imbalance当成更改时间步长的标准,当净流量小于5e-5时,时间步长为0.1s,大于5e-5时,时间步长0.2s。


表达式Expression:IF(AreaAve(lassImbalance,['out’])<5e-5 [kg/s]0.1[s],0.2[s])


 

 


5. UDF调节时间步长

5.1 介绍

DEFINE_DELTAT可以用来调整时间步长,根据需要自适应时间步长。此宏只能用于调节时间步长。当编译此宏之后,在Run calculation界面的Type栏会出现UDF,选中此项,时间步长就会自动切换为自己UDF定义的时间步长。



 



5.2 DEFINE_DELTAT(name,d)宏的用法


 


此宏有两个参数name和d,name为UDF的名称,可以为任意名称;d返回计算域domain,对于多相流d返回混合域。整个宏的返回值为时间步长。


对于DEFINE_DELTAT这个宏,由于只返回domain,想要获取网格物理量,涉及到UDF循环语句,比较麻烦


5.3 DEFINE_DELTAT应用举例

根据流动时间调节时间步长,流动时间小于0.5s时,时间步长为0.1;流动时间大于等于0.5s时,时间步长为0.2s。本案例和上面的表达式案例相同,非常简单。


#include "udf.h"


DEFINE_DELTAT(mydeltat, d)

{

    real time_step;

    real flow_time = CURRENT_TIME;

    if (flow_time < 0.5)

        time_step = 0.1;

    else

        time_step = 0.2;

    return time_step;

}






来源:Fluent学习笔记
ACTFluentFluxSTEPS多相流UDFUM控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-05-12
最近编辑:7月前
Fluent学习笔记
博士 签名征集中
获赞 128粉丝 347文章 141课程 3
点赞
收藏
作者推荐

科普:湍流基本理论发展史

1.湍流理论概括本文摘要:(由ai生成)湍流理论是流体力学的复杂问题,涉及求解纳维-斯托克斯方程的统计解。其发展经历了多个重要理论,如涡粘度、雷诺平均、边界层等概念。随着计算机技术发展,湍流模型得到广泛应用。Fluent软件提供多种湍流模型,如k-ε、k-ω等,适用于不同流动问题。模型选择对湍流模拟结果至关重要。本文内容选自《高等流体力学》。湍流一直被认为是比量子力学更为复杂的难题,至今没有人能够完全解决。1895年,雷诺将湍流中的瞬时速度和瞬时压力进行平均处理,从纳维-斯托克斯方程中推导出了描述湍流平均流场的基本方程,为湍流理论奠定了基础。湍流理论的中心问题是求纳维-斯托克斯方程的统计解。大量的研究发展了以混合长度假设为中心的半经验理论和各种湍流模式理论。根据对雷诺应力的处理方式不同,湍流模型可分为涡黏性模型与雷诺应力模型涡黏性模型分为零方程模型、一方程模型、两方程模型和近年来新发展起来的三方程模型,雷诺应力模型有雷诺应力方程模型和代数应力方程模型两种。除基于雷诺平均法的湍流模型外,还有分离涡模拟(DES)模型、大涡模拟(LES)模型等湍流模型2.湍流模式理论发展历程所谓湍流模式就是以雷诺平均守恒方程中的湍流输运项的规律作出公设性的假定,以使联立方程组封闭。2.11950年前的发展1877年,Boussinesq仿照分子扩散过程提出湍流应力的数学描述,进而得出涡粘度概念。1895年,雷诺提出雷诺平均概念,即将流场变量看作一个时均量与脉动量之和的形式。1904年,普朗特提出边界层概念。1925年,普朗特提出混合长理论,用混合长度概念求解涡粘度。这项工作成为湍流模式理论的基石。1942年,Kolmogorov提出k−ω模型,其中k为湍流动能,ω为湍流耗散率,二者用相似的微分方程描述,被称为二方程模型。但当时计算机还无法求解上述非线性微分方程1945年,普朗特描述湍流能量与涡粘度之间的关系,并提出了描述湍流能量的微分方程。认为湍流变量取决于流动行程,称为零方程模型或代数模型。但因为需要提前知道湍流长度尺度,这个模型被认为是不完备的。1951年,Rotta提出了二阶矩封闭模型。相比起以前的Boussinesq假设模型,这个新模型的优点在于可以考虑到更多影响因素,比如流线的曲率、刚体的旋转、以及体积力等。这种模型用一个方程来描述湍流长度尺度,用六个方程来描述雷诺应力张量的分量。但由于当时计算机的限制,这个模型很长时间内都没有得到实际应用。湍流模型中的四种基本类型(代数模型、一方程模型、二方程模型、二阶矩封闭模型)全部都出现了2.21950年后的发展代数模型(零方程模型)—1956年,VanDriest针对混合长度模型提出一个目前被广泛使用的粘性耗散项。1974年,Cebeci和Smith证明混合长度模型可以用大部分附着流计算。1978年,Baldwin和Lomax提出一种可以应用于更多种流动类型的新的混合长度模型。该模型需要事先知道混合长度值,一般根据经验选取:一方程模型——1967年,Bradshaw、Ferriss和Atwell提出一方程模型,并在1968年斯坦福湍流边界层计算大会上被证明是此类计算中与试验结果最接近的模型。因为一方程模型的计算量较小,其后Baldwin和Barth(1990)、Goldberg(1991)和Spalart和Allmaras(1992)均提出新的一方程模型。其中Spalart和Allmaras提出的SA模型被多数商用软件所采用。二方程模型——在Kolmogorov之后,直到计算机出现后,二方程模型才重新得到重视。其中最引人注目的模型是Launder和Spalding于1972年提出的k−ε模型。虽然Rodi等人1986年证明这个模型在带逆压梯度流动中存在明显误差,但是这个模型仍然象混合长度模型一样成为最著名的湍流模型。1970年时,在不知道Kolmogorov的前期工作的情况下,Saffman提出k−w模型,这个模型因可以模拟逆压梯度问题而成为名声仅次于k−ε模型的二方程模型。三方程模型——是在k−ε模型上加上另一类湍流闭合方程,用它来确保全程湍流水平,它不需要任何的限制条件就能达到目的,这就是在k−ε模型的基础之上增加一项Rt项得到的3方程模型。二阶封闭模型——二阶封闭模型在计算机出现后也获得了一些发展,不过因为需要求解的方程数目太多,至今还没有得到更多的应用。3.总结Fluent是一种流体动力学(CFD)软件,提供了多种湍流模型,用于模拟不同类型的湍流流动。一些常见的湍流模型包括:1.**k-ε模型(k-epsilonmodel)**:这是最常用的湍流模型之一,它通过两个额外的方程描述湍流能量(k)和湍流耗散率(ε)。k-ε模型适用于工程流动中的许多应用,如涡流等。2.**k-ω模型(k-omegamodel)**:与k-ε模型类似,k-ω模型也使用两个额外的方程,分别描述湍流能量(k)和湍流涡粘度(ω)。这个模型通常在边界层流动等情况下表现更好。3.**SST(ShearStressTransport)k-ω模型**:这是k-ω模型的改进版本,能够更好地描述湍流边界层和自由湍流之间的过渡区域。4.**Re-NormalizationGroup(RNG)k-ε模型**:这个模型对于湍流流动中的旋转效应和压力梯度更为准确,适用于转动流动和受限流动等情况。5.**LES(LargeEddySimulation)**:与RANS(Reynolds-AveragedNavier-Stokes)模型不同,LES模型通过直接模拟大涡流动,而不是统计平均小尺度湍流。它适用于湍流流动中的大尺度结构和湍流-涡交互作用。这些模型可以根据不同的流动特性和问题要求进行选择,以获得准确的湍流模拟结果。本文主要内容选自《高等流体力学》归柯庭钟文琪编来源:Fluent学习笔记

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈