mesh - 在 PyGmsh / Gmsh 中添加内部边界或裂缝
问题描述
我正在尝试使用以下代码使用 PyGmsh 生成有限元网格:
import pygmsh
geom = pygmsh.opencascade.Geometry(
characteristic_length_min=0.1,
characteristic_length_max=0.1,
)
rectangle = geom.add_rectangle([-1.0, -1.0, 0.0], 2.0, 2.0)
disk1 = geom.add_disk([-1.2, 0.0, 0.0], 0.5)
disk2 = geom.add_disk([+1.2, 0.0, 0.0], 0.5)
disk3 = geom.add_disk([0.0, -0.9, 0.0], 0.5)
disk4 = geom.add_disk([0.0, +0.9, 0.0], 0.5)
union = geom.boolean_union([rectangle, disk1, disk2])
diff = geom.boolean_difference([union], [disk3, disk4])
mesh = pygmsh.generate_mesh(geom, dim=2)
我可以生成以下网格:
但是,我想在网格上添加一个裂缝,例如:
这里的裂缝只是一个例子,它需要在网格划分之前定义。我尝试创建 2 个点 ( geom.add_point()
) 和一条线 ( geom.add_line()
),然后
geom.boolean_difference()
在最终的几何图形和线/裂缝之间做一个,但这不起作用。
任何帮助将不胜感激。
编辑
这种类型的网格生成的目的是模拟身体中的物理裂缝。在网格划分过程中,可以通过网格的元素连通性对裂纹进行建模(即元素必须具有不同的节点才能创建裂纹面)。例如,在施加任何载荷之前,裂缝是闭合的:
施加载荷后,裂缝打开,因为单元连通性允许这样做:
解决方案
您可以通过在该区域建模一个非常窄的矩形来实现这一点。你可以很容易地给出像 1e-10 这样的尺寸。我还模拟了裂纹尖端,通过模拟一个非常小的圆圈将节点折叠在一个点上。它工作得很好。
现在也有一个插件。它会自动分离指定裂缝线/表面处的节点。
推荐阅读
- php - 按特定字段名从数据库中返回所有文件名
- mysql - MySQL连接三个查询而不增加记录
- java - 如何使用 JSF 和 Quarkus 显示自定义错误页面?
- typo3 - 无法覆盖 TYPO3 中的视图(部分、模板、布局)路径
- c# - 我如何找到具有 Y 轴偏移的对象的中心以找到顶面上的中心?
- sql - 即使值为 0,如何在查询中查看和显示总和
- c# - await PutObjectAsync(PutObjectAsync, CancellationToken) 是否真的在等待 AWS SDK for .NET 中的上传完成?
- flutter - Flutter bloc 的多个并发事件调用
- google-cloud-platform - 当我选择数据存储实体时,它会进入 Firestore,为什么?
- apollo - LocalState 初始化问题:从 @apollo/client (3..0.0-beta.29) 迁移到 @apollo/client (3.0.2) 缓存未按预期初始化数据