createPatch 是 OpenFOAM 中的一个实用工具,用于将某些 patch(边界面)合并、细分或修改,常见于切割网格、把周期性边界/内部面分开形成新边界等场景。常配合 createPatchDict 配置文件使用。


使用流程

1. 制作或编辑系统字典文件

在你的算例目录下(如 case/system)创建或编辑 createPatchDict

路径:

1
system/createPatchDict

常见结构和参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
patches
(
{
name newPatchName; // 要生成的新 patch 名
patchInfo
{
type patch; // 新 patch 类型(如 patch,wall,cyclic,symmetryPlane 等)
}yon
constructFrom patches; // 来源,可以是patches或set
patches (origPatch1 origPatch2); // 被合并/拆分的原始 patch 列表
}
);

set
(
// 如果 constructFrom 设为 set,要写这里的 set 名
);

// 其它全局控制选项:
pointSync false; // 是否需要点同步(通常默认 false 即可)

20250707,一个真实的例子:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2406 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object createPatchDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// Do a synchronisation of coupled points after creation of any patches.
// Note: this does not work with points that are on multiple coupled patches
// with transformations (i.e. cyclics).
pointSync false;

__settings
{
patchInfo { type patch; }
constructFrom set;
}

// Patches to create.
patches
(
{
name vaporInlet;
${__settings};
set inletFaceSet;
}

{
name outlet;
${__settings};
set outletFaceSet;
}

);


// ************************************************************************* //

简单示例:合并两个 patch 为一个新 patch

1
2
3
4
5
6
7
8
9
10
11
12
patches
(
{
name combinedWall;
patchInfo
{
type wall;
}
constructFrom patches;
patches (wall1 wall2);
}
);

示例2:将内部面(如用于周期性或 AMI)抽成 patch

1
2
3
4
5
6
7
8
9
10
11
12
patches
(
{
name periodicPatch;
patchInfo
{
type patch;
}
constructFrom patches;
patches (defaultFaces);
}
);

2. 执行 createPatch 工具

在 case 根目录下运行:

1
createPatch -overwrite
  • -overwrite:直接覆盖旧的 polyMesh/boundary 文件
  • 不加参数会生成 polyMesh/boundary.new,需要手动替换

3. 检查效果

运行后,网格的 constant/polyMesh/boundary 文件中的 Patch section 会更新。
可用 checkMesh 检查网格,或用 paraFoam/其它查看边界。


应用场景

  • 合并若干 patch 成一个新 patch
  • 拆分 patch、给定 patch 赋予新类型
  • 将内部面(cutFace、defaultFaces等)变成外部 patch 作周期性或 AMI 边界
  • 删改分区网格的冗余 patch

常见问题和技巧

  • patch 类型要和后续物理边界条件对应(如 wallpatchinletcyclic 等)。
  • 如果只需要重命名 patch,可以直接在 boundary 文件和 0 文件的 U、p等里同步修改名即可,createPatch 用于更复杂场景。
  • constructFrom 也可以用 set,通过 faceSet等提前选择。

更多官方参考