1、求解器

1.1 复制源码

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

image.png1.2 修改名称

将文件夹重新命名为【myIconFoam】
image.png修改该目录下的文件名称,为了便于分辨是自己的求解器,在源代码里输出一些内容

image-20230614001149142

image.png1.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

fvScalarMatrix TEqn
(
    fvm::ddt(T) + fvm::div(phi, T) - fvm::laplacian(DT, T)
);
TEqn.solve();

3.2 修改场文件

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

image-20230614005903552

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 Tn" << 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

完成

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/dbai/p/17479044.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!