使用 Gmsh 创建具有零厚度(四边形)界面元素的网格

计算科学 有限元 网格生成 gmsh
2021-12-11 14:37:41

我承认以下帖子提出了类似的问题并提供了非常好的答案: 是否有网格生成器可以为界面生成零厚度元素?

但是,在那里创建的界面由 2 个带节点的线元素组成。

我的问题如下:

  • 是否有一种方便的方法来插入具有(最初)重叠节点的四边形元素,即厚度为零。

四接口元件

可能在 Gmsh 中,或者使用类似的开源网格生成器的示例。这将需要沿界面复制节点,示例后生成的网格在每个坐标上只有一个节点。我需要沿界面的四边形元素包括使用内聚区方法的混合模式剥离。

1个回答

一种方法可能是在裂纹起源的输入文件中创建一个内部线环。为此,您将在 .geo 文件中的裂缝的每一端创建 2 个点(例如,点 1、2、3、4),并用线将它们连接起来。然后,从该零厚度线循环的边界创建一个平面曲面。当您对几何体进行网格划分时,希望将元素放置在这个零厚度表面中。

如果 gmsh 抱怨这一点,您可能必须编写一个脚本来后处理 .msh 文件,该文件来自我在您的链接问题中的回答中的过程。您可以使用物理 ID 识别接口上的节点。然后,在接口节点的顶部放置一行新节点。接下来,循环遍历所有元素:界面下方的任何元素(在示例中为物理表面 1)都可以继续使用旧的界面节点。界面上方的任何元素(示例中的物理表面 2)都应将任何旧界面节点与您刚刚放置的新节点交换。最后,循环遍历 2 节点界面元素。使用旧节点和新节点将这些替换为适当的四元组元素。

由于您可能已经将文件读入更方便的数据结构并在脚本中操作元素/节点,因此您现在必须将所有这些写入有效的 .msh 文件,但这应该不会太难如果到目前为止您已经能够做其他所有事情。我并不是说这将是一条特别令人愉快的路线,但如果您真的需要零厚度元素,那么这可能就是这样做的方式。

这似乎是一个流行的请求,所以我将编写一个 matlab/python 脚本来完成它。当我有一个小的工作示例时,我会回来编辑它。

===============更新===================

我编写了一个脚本来实现我在第二段中概述的过程。这里粘贴到代码块太长了,所以我已经上传到我的github页面:https ://github.com/tjolsen/Mesh_Utilities/tree/master/gmsh_crack

我已经包含了一个 .geo 文件的小型工作示例和一些关于如何使用代码的文档。该脚本解析 .msh 文件,创建新节点和元素,然后将“破解”网格写入新文件。当然,欢迎任何人使用代码(按原样提供......)。我欢迎对代码进行任何反馈/改进。它有一些非常简单的性能改进,如果你开始使用比我在笔记本电脑上运行的玩具更大的网格,这可能是必要的。

请让我知道这是否适合您的需求。如果没有,它可能只是一个小的调整,而不是你需要的。