Openfoam自定义求解器

1、求解器

1.1 复制源码

本案例以 icoFoam 为例,复制【openFOAM/OpenFOAM-9/applications/solvers/incompressible/icoFoam】文件夹至 run 文件夹下(我的是【openFOAM/mtl-9/run/solvers/incompressible】)

image.png

1.2 修改名称

将文件夹重新命名为【myIconFoam】 image.png

修改该目录下的文件名称,为了便于分辨是自己的求解器,在源代码里输出一些内容

image-20230614001149142
image.png

1.3 修改 files

修改【Make/files】

image.png

注意:这里路径要改为【$(FOAM_USER_APPBIN)】,与之前【FOAM_USER_APPBIN】区别

image.png

1.4 编译

输入【wmake】

image-20230614001032908

编译成功之后开始使用

2、使用

复制一份 cavity 案例

blockMesh 划分网格

myIcoFoam 求解

image-20230614001314507

3、进阶

本案例修改 icoFoam 求解器,添加温度项。 \[\frac{\partial T}{\partial t} + \bigtriangledown \cdot (UT)-{\bigtriangledown }^2(D_{T}T)=0\]

3.1 修改源文件

添加以下代码,及上述方程

image-20230614005652819
1
2
3
4
5
fvScalarMatrix TEqn
(
fvm::ddt(T) + fvm::div(phi, T) - fvm::laplacian(DT, T)
);
TEqn.solve();

3.2 修改场文件

新增以下有关温度项的代码

image-20230614005903552
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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】编译

image-20230614010106515

3.4 使用

3.4.1 初始条件

复制 p 文件至 T,改变名称、单位、初始值和边界条件

image-20230614010203279

3.4.2 自定义属性

复制 constant 里的文件【transportProperties】文件至 system,修改名称 myProperties

image-20230614010351434

3.4.3 新增离散格式

新增 div(phi,T)的离散格式

image-20230614010458808

3.4.4 新增求解项

image-20230614010607465

3.4.5 求解

划分网格:blockMesh

求解:myIcoFoam

image-20230614010711878

完成


Openfoam自定义求解器
http://example.com/2024/03/20/012 Openfoam自定义求解器/
作者
DB
发布于
2024年3月20日
许可协议