openfoam学习笔记-2
学习笔记
OpenFOAM programming tutorial
创建自己的求解器
- 寻找和你求解器功能最接近的求解器;
- 拷贝到目标文件夹,并重命名;
- 改变文件名字以及Make/files
- 定制代码
以myIcoFoam为例
- 拷贝文件夹
zhoudq@zhoudq-MacBookAir:~/OpenFOAM/OpenFOAM-6/applications$ cp -r icoFoam $WM_PROJECT_USER_DIR/applications
- 重命名文件
mv icoFoam.C myIcoFoam.C
- 清除生成的中间文件
wclean
- 进入Make文件夹,修改files文件
zhoudq@zhoudq-MacBookAir:~/OpenFOAM/zhoudq-6/applications/myIcoFoam$ cd Make/
zhoudq@zhoudq-MacBookAir:~/OpenFOAM/zhoudq-6/applications/myIcoFoam/Make$ ls
files options
zhoudq@zhoudq-MacBookAir:~/OpenFOAM/zhoudq-6/applications/myIcoFoam/Make$ vim files
zhoudq@zhoudq-MacBookAir:~/OpenFOAM/zhoudq-6/applications/myIcoFoam/Make$ more files
myIcoFoam.C
EXE = $(FOAM_USER_APPBIN)/myIcoFoam
- 如果要使用该求解器,需要在计算文件夹中修改system/controlDict中的application
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application myIcoFoam;
- 植入方程:
We want to solve the following transport equation for the scalar field T, It is an unsteady, convection-diffusion transport equation. ν is the kinematic viscosity.
我们要做的大体有两件事: ①在createFields.H头文件中创建几何场(geometric field) T; ②在求解器主文件myIcoFoam中求解上述标量运输方程;
#include "createPhi.H"
Info<< "Reading field T\n" << endl;
volScalarField T
(
IOobject
(
"T",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
这里面的#include “createPhi.H”为原来就有的,这一句的作用是什么呢? T is defined on the computational mesh (mesh object):
- 创建T方程 Create a new empty file, TEqn.H: echo > TEqn.H
在myIcoFoam中增加TEqn.H调用
while (piso.correct())
{
#include "TEqn.H"
volScalarField rAU(1.0/UEqn.A());
volVectorField HbyA(constrainHbyA(rAU*UEqn.H(), U, p));
surfaceScalarField phiHbyA
(…
在TEqn.H中求解T方程:
solve
(
fvm::ddt(T)
+ fvm::div(phi, T)
- fvm::laplacian(nu, T)
);
下面检验一下上述求解器,拷贝cavity到自己的文件夹,并在0文件夹中新增T字典文件
zhoudq@zhoudq-MacBookAir:~/OpenFOAM/CFD/cavity/cavity/0$ cp p T
修改T文件
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 6
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object T;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
movingWall
{
type fixedValue;
value uniform 1;
}
fixedWalls
{
type fixedValue;
value uniform 0;
}
frontAndBack
{
type empty;
}
}
修改离散格式文件system/fvSchemes,
- 修改对流项
divSchemes { default none; div(phi,U) Gauss linear; div(phi,T) Gauss linear;//add }
==总共有多少种离散格式?适用情况如何?==
- 修改拉普拉斯项,本文采用的默认离散格式
laplacianSchemes { default Gauss linear orthogonal; }
- 修改求解方法及控制文件system/fvSolution
T { solver PBiCG;// 采用预条件双共轭梯度法(主要用于反对称矩阵) preconditioner DILU;//预测器,对角不完全LU tolerance 1e-06;//残差 relTol 0.05;//迭代容差 }//add
==其中为什么要采用上述求解器以及预条件(速度采用预条件双共轭梯度法(主要用于反对称矩阵))?==
上述为什么留在明天解答吧。 本文总阅读量次 ⤧ Next post openfoam学习笔记-3 ⤧ Previous post openfoam学习笔记-1