如何为通过可变直径管的活塞设置动态网格?

计算科学 网格生成 开放式泡沫
2021-12-07 22:51:13

教程案例incompressible/pimpleDyMFoam/movingCone描述了一个锥体穿过一个恒定直径的“管”(如果你将远场贴片变成一个墙)。这是我能想到的最相关的教程案例,因为我想要模拟的是相同的几何形状,但直径有一个跳跃。如果以下任何一项将其变成XY 问题,请打断我。

在本教程的案例中,不是只移动圆锥体,这会过度扭曲周围的网格,而是将外部补丁(代表远场,我将替换为 a type wall)分割成与圆锥体一起移动的部分(farFieldMoving) 和其他两个部分 ( farField) 有一个slip运动(见0/pointMotionUx)。这导致三个动态管段,其中中间的包含锥体,正在移动但尺寸固定,而外部段相应地膨胀/压缩。然而,这种方法不能直接应用于我想对几何进行的修改,即沿锥体运动轴的直径跳跃 - 与锥体一起移动的壁段不再是常数。(如果我错了,请纠正我)

这些是 Ansätze (这是 Ansatz 的德语复数,请用更好的措辞进行编辑......)我能想到,每个都缺乏我的一些知识:

  1. 只需通过固定管网移动一个锥形孔
  2. 将锥体移动到较小的虚拟管内,并通过 AMI 将该管的外边界连接到物理管
  3. 移动整个虚拟管(使其比物理管更长)并以某种方式处理非重叠的 AMI 部分
  4. 模拟墙体动态膨胀/收缩的锥形固定惯性系统

更多细节:

  1. 理想的解决方案可能是固定管网,其中锥形孔移动并仅扭曲锥形边界上的单元格。我怀疑这可以通过topoChangerFvMesh或更精确地实现movingConeTopoFvMesh,但我找不到任何使用它的教程或任何文档。我对 OpenFOAM 代码还不够熟悉(还),无法通过简单地查看源代码来了解其用法。那么,你有什么资源可以指点我吗?

  2. 我考虑的另一种方法是使用任意网格接口 (AMI):将锥体放入物理接口内的较小管中,并通过 连接虚拟接口cyclicAMI,假设这些 AMI 实际上不必是循环的。不幸的是,使用neighbourPatch关键字的连接要求两个伙伴边界的面积相等。这意味着我不能简单地让 AMI 触摸移动孔,因为没有匹配的脸。如果我添加一个小单元层,AMI可以匹配,但我又遇到了单元格扭曲的问题。所以我想我可以使用movingCone-tutorial 方法将内部AMI 的一部分平行于锥孔移动。但由于我只能通过neighbourPatch关键字,我不能将内部 AMI 分成两个滑动部分,其中包含一个移动部分。这可以通过其他方式实现吗?那么,分割成多个边界的 AMI 如何耦合,或者如何将一个 AMI 分割成具有不同边界条件的多个子边界(in pointMotionUx)?

  3. 移动虚拟管意味着只有一部分内部 AMI 实际上与外部匹配,其余部分必须是其他类型的。问题再次是 AMI 必须匹配人脸。

  4. 我没有对改变惯性系统进行太多研究。我怀疑这将有一个优点,即“只有”外壁必须向/远离管中心移动,而细胞只会轻微变形,缺点是参考框架的变化,其中壁可能需要特殊处理(如在这里暗示,虽然这是针对伯努利方程)。

我希望你们中的一些人有想法如何完成这些尝试以获得完整的解决方案或提出另一种方式(结果可能更简单......)。

1个回答

如果您考虑对网格进行拓扑更改,有一个教程可以准确解释您所面临的问题。在这里您可以找到案例的背景:MovingConeTopoFvMesh 的修改由于细胞层的去除,我认为应该可以有一个可变半径的圆柱体网格而不会出现问题:去除的细胞层是使用锥形贴片创建的,该锥面贴片被平移以缩小和破坏细胞。

OpenFOAM 的 1.6-ext 版本中也有一个教程案例,位于incompressible/icoDyMFoam/movingConeTopo/文件夹中。

新“圆柱体”宽度示例:在教程案例中,在 blockMeshDict 文件中,在 block 4 上方添加另一个块,具有适当的密度以匹配块 4,并确保相应地更改补丁(第 4 个顶部的补丁Y 轴方向的块需要被删除,因为它的面现在是内部的)。