0

我正在为晶体塑性 FEM 模拟创建多晶微结构。我使用 DREAM.3D 软件导出 .stl 文件,然后使用 gmsh 进行网格化。这很好用,我之前使用教程“t10.geo”中解释的“阈值”字段来控制本地网格大小。但是,我需要在不降低四面体元素质量的情况下创建具有网格大小梯度的模型。

这些模型包含退火孪晶,它们是非常薄的“煎饼”形晶粒,需要充分表示小的四面体元素。但是,要创建具有合理运行时间的模型,元素的总数不能过多。因此,理想的做法是创建单元尺寸向晶粒中心逐渐增加的网格。除了薄退火孪晶外,模型中的其他晶粒是球形的,如下所示(注意:这是在将体素化网格转换为 DREAM.3D 中的 .stl 文件之前): 微观结构模型中的样品晶粒。

一个主要的限制是我无法更改 .stl 文件边界处的三角形,因为这些三角形与必须进行类似网格划分的其他晶粒接触。我在此处(https://www.researchgate.net/post/Is_a_gradient_mesh_size_possible_in_gmsh_with_stl_files_without_using_a_Threshold_field)附上了我的微观结构模型中代表性晶粒的 .stl 文件和用于生成两个 .msh 文件的 .geo 文件,这些文件用于对 .stl 文件进行网格划分。在其中之一中,我没有指定网格大小,并以 398,426 个四面体元素结束。另一方面,我使用下面的附加两行指定“背景”网格大小,并以 84,322 个四面体元素结束:

Mesh.CharacteristicLengthExtendFromBoundary = 0;
Mesh.CharacteristicLengthMax = 10;

在这里(根据我的理解),“背景”元素大小指定为 10。

这大大减少了元素的总数,但问题是 .stl 文件边界处的四面体元素包含一个小三角形面,但向晶粒内部拉长以满足上述所需的元素大小,这会降低它们的质量。理想情况下,我将能够 1) 在 .stl 文件的边界处保留精细的三角形面和小的四面体元素,以及 2) 指定远离 .stl 边界的逐渐变大的网格尺寸。t10.geo 中演示的“阈值”字段需要指定更精细网格的点,因此理论上这可以工作,因为我可以指定每个颗粒的中心......但这很快就会变得复杂,因为有些颗粒可以凹并且有相当复杂的形态,所以我不

以下是来自 gmsh 的元素质量度量:

未指定网格尺寸

“背景”网格大小为 10

有没有办法将网格尺寸指定为与 .stl 边界的距离的函数?或者也许指定最大元素大小但包括将较大但强烈扭曲的元素分解为更高质量的较小元素的东西?

提前感谢您的帮助,如果我能进一步澄清我的问题,请告诉我。

最好的问候,克里斯

更新

对于那些感兴趣的人,有一种快速的方法可以使用一个或多个 .stl 文件,或者更一般地说,具有不同表面的多个体积来实现渐变网格。最新版本的 gmsh(4.9.3 版,2022 年 1 月 4 日发布)包括一种名为“扩展”的新型“字段”选项。

此处显示了此新字段的示例:https ://gitlab.onelab.info/gmsh/gmsh/-/blob/master/examples/boolean/extend_field.geo 。请参阅我在 gmsh 的 GitLab 页面上的原始帖子以获取更多信息:https ://gitlab.onelab.info/gmsh/gmsh/-/issues/1678 。

对于我上面发布的具体示例,必要的代码(.geo 文件的格式)是:

Merge "C:\temp\15_microstructure_files\Instantiation103\INSERT_DEFECTS\JAN_3_2022_shifted_defects\att_v2\all_SEM_grains_extend_40_10_1\Grain_1.stl";
Surface Loop(1)={1};
Volume(1)={1};
Physical Volume (1)={1};
Merge "C:\temp\15_microstructure_files\Instantiation103\INSERT_DEFECTS\JAN_3_2022_shifted_defects\att_v2\all_SEM_grains_extend_40_10_1\Grain_2.stl";
Surface Loop(2)={2};
Volume(2)={2};
Physical Volume (2)={2};
Merge "C:\temp\15_microstructure_files\Instantiation103\INSERT_DEFECTS\JAN_3_2022_shifted_defects\att_v2\all_SEM_grains_extend_40_10_1\Grain_3.stl";
Surface Loop(3)={3};
Volume(3)={3};
Physical Volume (3)={3};
Field[1] = Extend;
Field[1].SurfacesList = {1,2,3};
Field[1].DistMax = 40;
Field[1].SizeMax = 10;
Field[1].Power = 1;
Background Field = 1;
Mesh.MeshSizeExtendFromBoundary = 0;
Mesh.Algorithm3D = 10;

对于上面的示例,考虑了三个 .stl 文件。用户将更改:

  • SurfacesList:指定应考虑的所有表面。
  • DistMax : 尺寸扩展的最大距离
  • SizeMax:DistMax 之外的网格尺寸
  • :用于插值网格大小的幂指数

完整的代码描述见:https ://gmsh.info/doc/texinfo/gmsh.html

非常感谢 Christophe Geuzaine 教授在这方面的帮助!

4

0 回答 0