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

完成

热门相关:冉冉心动   无限杀路   豪门重生盛世闲女   重生当学神,又又又考第一了!   豪门重生盛世闲女