OpenFoam——自定义求解器
1、求解器
1.1 复制源码
本案例以icoFoam为例,复制【openFOAM/OpenFOAM-9/applications/solvers/incompressible/icoFoam】文件夹至run文件夹下(我的是【openFOAM/mtl-9/run/solvers/incompressible】)
1.2 修改名称
将文件夹重新命名为【myIconFoam】
修改该目录下的文件名称,为了便于分辨是自己的求解器,在源代码里输出一些内容
1.3 修改files
修改【Make/files】
注意:这里路径要改为【$(FOAM_USER_APPBIN)】,与之前【FOAM_USER_APPBIN】区别
1.4 编译
输入【wmake】
编译成功之后开始使用
2、使用
复制一份cavity案例
blockMesh划分网格
myIcoFoam求解
3、进阶
本案例修改icoFoam求解器,添加温度项。
\[\frac{\partial T}{\partial t} + \bigtriangledown \cdot (UT)-{\bigtriangledown }^2(D_{T}T)=0
\]
3.1 修改源文件
添加以下代码,及上述方程
fvScalarMatrix TEqn
(
fvm::ddt(T) + fvm::div(phi, T) - fvm::laplacian(DT, T)
);
TEqn.solve();
3.2 修改场文件
新增以下有关温度项的代码
IOdictionary myProperties // 新增一个myProperties项
(
IOobject
(
"myProperties",
runTime.system(), // 存储在system文件夹下
mesh,
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
)
);
dimensionedScalar DT // 定义一个变量DT,从myProperties中获取
(
"DT",
myProperties.lookup("DT")
);
Info<< "Reading field T\n" << endl;
volScalarField T // 定义一个变量T
(
IOobject
(
"T",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
3.3 编译
修改完成之后,【wmake】编译
3.4 使用
3.4.1 初始条件
复制p文件至T,改变名称、单位、初始值和边界条件
3.4.2 自定义属性
复制constant里的文件【transportProperties】文件至system,修改名称myProperties
3.4.3 新增离散格式
新增div(phi,T)的离散格式
3.4.4 新增求解项
3.4.5 求解
划分网格:blockMesh
求解:myIcoFoam
完成