[关闭]
@daidezhi 2016-05-28T05:54:21.000000Z 字数 1993 阅读 6233

OpenFOAM中 fvSolution 字典文件解析

CFD C++ OpenFOAM


1. 实例

下面是fvSolution 文件的一个典型例子(应用于icoFoam求解器),其内容(略去文件头部注释):

  1. //文件说明
  2. FoamFile
  3. {
  4. version 2.0; //版本号
  5. format ascii; //文本格式
  6. class dictionary; //类型为字典文件
  7. location "system"; //所在目录
  8. object fvSolution; //对象名
  9. }
  10. //代数方程组求解设置
  11. solvers
  12. {
  13. //压力场p
  14. p
  15. {
  16. solver PCG; //求解器
  17. preconditioner DIC; //预处理器
  18. tolerance 1e-06; //预定残值
  19. relTol 0; //预定相对残值
  20. }
  21. //速度场U
  22. U
  23. {
  24. solver smoothSolver; //光滑求解器
  25. smoother symGaussSeidel; //光滑器
  26. tolerance 1e-05; //预定残值
  27. relTol 0; //预定相对残值
  28. }
  29. }
  30. //PISO算法设置
  31. PISO
  32. {
  33. nCorrectors 2; //PISO修正次数
  34. nNonOrthogonalCorrectors 0; //非正交修正次数
  35. pRefCell 0; //压力参考单元
  36. pRefValue 0; //压力参考值
  37. }

2. fvSolution 文件分析

system目录下的fvSolution文件用来设置涉及代数方程组求解和速度-压力耦合相关算法的参数,主要包括 代数方程组求解耦合算法欠松弛处理 三个部分,分别通过solversPISOSIMPLErelaxationFactors等子字典设置。


3. 代数方程组求解

在子字典solvers中,每个求解变量均要独立在以变量名命名的子字典(pU)中设置求解相关信息。这些信息包括代数方程组求解器solver,预处理器preconditioner,光滑器smoother,残值tolerance和相对残值relTol

3.1 solver 代数方程组求解器

OpenFOAM中的代数方程组求解器均为迭代求解器:

solver 说明
PCG/PBiCG 预处理共轭梯度(对称)/稳定双共轭梯度(非对称)求解器
smoothSolver 光滑求解器
GAMG 几何-代数多重网格求解器
diagonal 对角求解器(显式离散)

3.2 preconditioner 预处理器

预处理器本质上为一个改变原先系数矩阵条件数的左乘矩阵,PCG/PBiCG求解器可以使用的预处理器有:

preconditioner 说明
DIC 不完全的对角Cholesky预处理器(对称矩阵)
FDIC 不完全的快速对角Cholesky预处理器(带缓存的DIC
DILU 对角不完全LU预处理器(非对称)
diagonal 对角预处理器
GAMG 几何-代数多重网格预处理器
none 不进行预处理

3.3 smoothSolver 光滑求解器

使用光滑求解器smoothSolver需要指定所使用的光滑器smoother,可用的smoother有:

preconditioner 说明
GaussSeidel 高斯赛德尔光顺器
DIC 不完全的对角Cholesky光顺器(对称矩阵)
DICGaussSeidel 不完全的对角Cholesky-高斯赛德尔光顺器(对称矩阵)

一般情况下GaussSeidel是最可靠的选择,但对于有些条件数不好的矩阵,DIC的收敛性可能更好。另外,在某些情况下,使用GaussSeidel进行光顺强化是非常有效的,例如DICGaussSeidel。此外,在重新计算残值之前需要通过为关键字nSweeps来指定sweep数。

3.4 收敛准则

OpenFOAM中的代数方程组求解器在达到下列三个条件中的 任何 一个后即停止迭代:


4. 耦合算法

耦合算法用于处理速度-压力的耦合问题。大多数OpenFOAM的CFD求解器使用PISO或者SIMPLE算法。这些算法采用迭代技术来求解速度和压力场。PISO算法用来处理非稳态问题,SIMPLE算法用来处理稳态问题。


5. 欠松弛处理

欠松弛处理主要有两种不同的使用方式:

欠松弛因子介于01之间,越接近0求解越稳定,但同时也会降低求解效率;提高的数值会提高求解效率,但同时也会降低稳定性。

欠松弛因子在子字典relaxationFactors下指定,通过子字典名equationsfields来设置不同的欠松弛方式,例如:

  1. relaxationFactors
  2. {
  3. fields
  4. {
  5. p 0.3;
  6. }
  7. equations
  8. {
  9. U 0.7;
  10. }
  11. }

感谢您的阅读,欢迎讨论和批评指正。

作者:戴得志

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注