本文摘要(由AI生成):
本文主要介绍了OpenFOAM中的瞬态与稳态计算。瞬态模拟需要设置时间步、时间离散格式、线性求解器、残差、CFL数、求解稳定性和有界性、感兴趣物理量、计算结果保存频率、计算结束时间等参数。稳态模拟需要设置运行时参数、迭代次数、数据保存频率、时间离散化方案、线性求解器、亚松弛因子及残差控制等参数。在稳态模拟中,亚松弛因子的选择至关重要,需要根据物理模型和经验进行选择。
本文简单描述OpenFOAM中的瞬态与稳态计算。
自然界和工业应用中,几乎所有流动问题都是非稳态的(也称为瞬态或时间依赖)。非稳定的原因可能来自于:流动非稳定性、非平衡的初始条件、时间相关的边界条件、源项、化学反应和有限速率化学、相变、运动或变形的固体、湍流、浮力和传热、不连续性、多相流、流固耦合、燃烧等。
在OpenFOAM中进行瞬态模拟,需要进行以下设置:
controlDict
字典中,需要设置运行时参数和有关如何运行算例的常规说明(例如时间步长和最大CFL数量)fvSchemes
字典中,需要设置时间离散方案。fvSolution
字典中,需要设置线性求解器。PISO
或PIMPLE
方法,还需要在fvSolution
字典中设置使用的速度-压力耦合方法的校正次数。controlDict
词典中设置functionObjects
。在运行模拟时,使用functionObjects进行采样及数据处理1.2 fvSchemes设置
瞬态模拟需要在fvSchemes
字典文件中指定ddtSchemes
关键字。如下所示的字典文件示例:
ddtSchemes
{
default backward;
}
gradSchemes
{
default Gauss linear;
grad(p) Gauss linear;
}
divSchemes
{
default none;
div(phi,U) Gauss linear;
}
laplacianSchemes
{
default Gauss linear orthogonal;
}
interpolationSchemes
{
default linear;
}
snGradSchemes
{
default orthogonal;
}
如此示例中指定的ddtSchemes
为backward
方法,此方法为二阶精度算法,计算过程中存在振荡。
1.3 时间参数设置
瞬态模拟中与时间相关的参数需要在controlDict
字典文件中进行指定。如下示例:
startFrom latestTime;
// 指定时刻为0 s
startTime 0;
stopAt endTime;
// 指定终止时刻为10 s
endTime 10;
// 指定时间步长0.0001 s
deltaT 0.0001;
writeControl runTime;
// 指定文件写入间隔0.1 s
writeInterval 0.1;
// 保持算例路径不变
purgeWrite 0;
// 文件保存格式为ascii
writeFormat ascii;
writePrecision 8;
writeCompression off;
timeFormat general;
timePrecision 6;
runTimeModifiable yes;
// 设置时间步长可调整,仅用于PIMPLE
adjustTimeStep yes;
// 设置最大库朗数2.0
maxCo 2.0;
// 指定最大时间步长0.001 s
maxDeltaT 0.001;
1.4 线性算法设置
瞬态计算中在字典fvSolution
中指定线性方程求解算法。如下面的字典示例:
solvers
{
p
{
solver PCG;
preconditioner DIC;
tolerance 1e-06;
relTol 0;
}
pFinal
{
$p;
relTol 0;
}
“U.*”
{
solver smoothSolver;
smoother symGaussSeidel;
tolerance 1e-08;
relTol 0;
}
}
// 需要定义子字典PISO或PIMPLE,取决于选用的求解器
PIMPLE
{
// 设置此参数为1时等同于PISO算法
// 增大此参数有助于提高稳定性
// 大时间步长计算时建议增大此参数
nOuterCorrectors 1;
// 若使用大的时间步长导致CFL数远大于1
// 建议设置nCorrectors大于3
// 此参数至少为1,增大此参数会增大计算量
nCorrectors 2;
nNonOrthogonalCorrectors 1;
}
1.5 时间步长
在运行瞬态仿真时必须选择合适的时间步长,这样才能捕捉与时间有关的物理特征并保证求解器过程稳定。
在进行瞬态模拟时,强烈建议监测感兴趣的物理量。这些物理量可能是随时间波动的,表面其具有时间依赖性。
稳态模拟是对现实世界的极大简化。稳态模拟是CFDer使用的一种技巧,目的是快速获得结果。不过需要切记的是,工程中遇到的绝大多数流动问题都是非稳态的。稳态模拟的最大优势在于它们需要的计算资源较少,更容易进行后处理和时间分析。
要进行稳态计算,需要选用适当的求解器和正确的离散格式。由于稳态模拟不求解时间导数,因此在计算过程中不需要设置时间步长,但是需要告诉OpenFOAM希望执行多少次迭代计算,还可以在fvSolution
字典文件的SIMPLE
子字典中设置残差控制(residualControl
)参数。如果没有设置残差控制参数,OpenFOAM将一直运行直到达到最大迭代次数(endTime
)。
2.1 OpenFOAM中稳态模拟
在OpenFOAM中进行稳态模拟,需要进行下面的设置:
controlDict
字典中,需要设置运行时参数和有关如何运行算例的一般指令(例如要执行的迭代次数)fvSchemes
字典中,需要设置时间离散化方案,对于稳定的模拟,它必须是steadyState
fvSolution
字典中设置线性求解器、亚松弛因子及残差控制SIMPLEC
或SIMPLEC
)controlDict
字典中设置functionObjects
,用于在模拟运行时进行采样、探测和数据处理2.2 fvSchemes字典
在稳态模拟时,需要在fvSchemes
文件中指定时间项离散方法为steadyState
。如下面的字典示例:
// 指定ddtSchemes为steadyState
// 表示采用稳态计算
ddtSchemes
{
default steadyState;
}
gradSchemes
{
default Gauss linear;
grad(p) Gauss linear;
}
divSchemes
{
default none;
// 稳态计算时常选择bounded Gauss linear
div(phi,U) bounded Gauss linear;
}
laplacianSchemes
{
default Gauss linear orthogonal;
}
interpolationSchemes
{
default linear;
}
snGradSchemes
{
default orthogonal;
}
2.3 controlDict字典
除了需要在fvSchemes
字典中设置离散方法外,稳态求解还需要在controlDict
字典中指定迭代参数。如下面的字典示例,注意在稳态计算时controlDict
字典中设置的时间并非真实的时间。
startFrom latestTime;
// 从0步开始
startTime 0;
stopAt endTime;
// 迭代计算10000次
endTime 10000;
// deltaT设置为1
deltaT 1;
writeControl runTime;
// 间隔100次迭代保存一次结果文件
writeInterval 100;
// 保留最近的10个结果数据
purgeWrite 10;
writeFormat ascii;
writePrecision 8;
writeCompression off;
timeFormat general;
timePrecision 6;
runTimeModifiable yes;
2.4 fvSolution字典
fvSolution
字典指定如何求解每个离散化的线性方程组。如下字典示例:
solvers
{
p
{
solver PCG;
preconditioner DIC;
tolerance 1e-06;
relTol 0;
}
U
{
solver smoothSolver;
smoother symGaussSeidel;
tolerance 1e-08;
relTol 0;
}
}
SIMPLE
{
// 增加此参数值能提高稳定性,但会增大计算量
nNonOrthogonalCorrectors 2;
// 设置残差控制
residualControl
{
p 1e-4;
U 1e-4;
}
}
// 设置亚松弛因子
relaxationFactors
{
fields
{
p 0.3;
}
equations
{
U 0.7;
}
}
2.5 亚松弛因子
亚松弛因子(under relaxation factor,URF)用于控制物理变量在迭代过程中的变化量:
利用SIMPLE方法求解稳态问题时常会使用到亚松弛因子,下面是在SIMPLE及SIMPLEC方法中常用的亚松弛因子组合:
// SIMPLE方法
p 0.3;
U 0.7;
k 0.7;
omega 0.7;
// SIMPLEC方法
p 1;
U 0.9;
k 0.9;
omega 0.9;
根据所涉及的物理模型,可能需要添加更多的欠松弛因子。在实际应用过程中,选择合适的URF需要经验和一些试错性的工作。实际上选择URF相当于选择了正确的时间步长。有些时候稳态模拟会因为错误地选择URF而出现计算发散。
URF的取值范围为0~1,越接近于1收敛速度越快,但计算也更容易不稳定;反之URF越接近0收敛速度越慢,但计算越稳定。URF的最佳选择是足够小以保证计算稳定,足够大以加快迭代过程。
声明:原创文章,欢迎留言与我讨论,如需转载留言