我正在尝试分析电路卡组件 (CCA)。最大的问题总是试图将薄铜层与较厚的环氧树脂层连接起来。我正在做一个近似,因为铜层很薄,而且铜的热导率很高,法线方向的温度变化可以忽略不计。因此,它们可以建模为 2D 或壳单元。我知道 Gmsh 可以处理这部分,但我是否可以(如果可以,如何处理?)还可以为环氧树脂层和电气元件添加 3D 元素吗?TIA。
可以组合 2D 和 3D 元素的网格生成器?
如果我明白你在说什么,你会有一些类似于环氧树脂层的三明治,其厚度可观(以 3D 建模)和它们之间的薄铜层厚度可忽略不计(以 2D 建模)。在这种情况下,您可能希望对可忽略不计的厚铜层使用某种 2D 粘性元素。
如果您选择这种方法,可以尝试两种基本方法:
- 内在粘性元素:您可以隐式插入粘性元素,因此您可以重构方程以求解跨铜层的跳跃
- 外部粘性元素:通过沿铜层界面复制节点显式插入粘性元素,并调整网格连接性,使铜层实际上表示为网格中的间隙(裂缝);您求解层两侧的温度(我假设您正在进行热建模)
对于外部方法,Gmsh 有一个名为 Crack 的插件,它应该为您完成所有网格排列,您将接口标记为物理组(请参阅 Gmsh 文档),用另一个物理组标记端点,生成没有裂纹的网格,然后使用裂纹插件对网格进行后处理。这是一个如何使用非常简单的网格来做到这一点的示例。
Crack 的问题在于它会正确插入重复的节点,但会破坏边和元素的连接性。从理论上讲,如果您说只有两个环氧树脂层被薄铜层隔开,那么您的网格中应该有两个连接的组件,并且没有边缘、面或 3D 元素应该穿过铜界面。在实践中,您可以获得边缘和 3D 元素(好吧,我用 2D 测试用例尝试过这个,所以我的 2D 元素跨越了我的网格中的破裂界面)。我向开发人员描述了这种行为,但我还没有收到他们关于这是错误还是故意的回复。无论如何,对于我的应用程序,我无法使用生成的网格,而且我怀疑它也不适用于您的问题。
但是,您无论如何都可以使用 Gmsh 或其他一些生成器来生成 3D 网格,然后在代码中手动修改它以沿裂缝复制节点并以适当的方式将这些复制节点连接到网格。我能找到的描述这一过程的最佳论文是Mota、Knap 和 Ortiz的这篇论文;我发现的大多数其他论文并不是非常有用(Paulino 的工作并没有深入到算法中;Ortiz 的早期算法没有产生正确的结果,如链接的论文中所述)。
用于插入粘性元素和更改网格连接性的类似算法在 PETSc 中的DMPlex中,例如DMPlexConstructCohesiveCells,尽管我认为关于它们的文档并不多(有一些描述它的算法论文,但我在Ortiz 的论文更容易理解,尽管对代数拓扑一无所知),所以如果你使用 PETSc,就不需要重新发明轮子,只要你能弄清楚如何使用内聚元素插入函数;如果你决定走那条路,PETSc 邮件列表应该能够帮助你。
如果您了解 Mota-Knap-Ortiz 论文的要点,您还可以编写自己的例程来操作网格,这就是我在MeshPy的私有分支中所做的。
编辑:据我了解,内在方法和外在方法之间的区别在于,在外在方法中,您明确修改网格,然后网格节点对应于问题中的自由度。在内在方法中,您无需修改网格,您只需修改从 FEM 离散化中获得的方程组,以获得与采用外在方法时所获得的方程组等效的方程组。我认为内在方法并不容易。如果您可以在内部方法中构造方程,您可能可以取消您的网格在外部方法中的外观,反之亦然。再说一次,我只实现了外部方法。
此外,如果您可以通过中断获得所需的网格,那么设置方程相对容易。界面贡献看起来非常类似于不连续的 Galerkin 方法,因此您可以通过类比计算弱形式的项。任何对不连续 Galerkin 的真正基本处理,例如Larson 和 Bengzon 在有限元方法:理论、实现和应用(计算科学与工程文本)中的第 14 章都可以。
理论上,Cubit 应该生成有凝聚力的元素,但我永远无法让该功能发挥作用。Gmsh 的破解插件有时可以工作,但并不可靠。如果您的几何图形相对简单,您可以尝试自己手动构建网格,或者修复 Gmsh 生成的网格,但对于更复杂的几何图形,您肯定希望自动化该过程。
您也可以使用 XFEM 方法。我无法帮助你如何实现它,但你可以看看这篇论文,它在提供类似于你所描述的线性传热问题方面也很有用。线性传热问题可用作调试实现的测试用例。
另一种方法是使用约束方程联系在一起。您需要在参与约束方程的每个节点处具有相同数量的自由度。所以,如果这是结构问题(是吗?),那么壳单元在每个节点有 6 个自由度,3D 网格节点也需要有 6 个自由度,即 3 个位移和 3 个旋转自由度。如果它是一个标量问题(热方程或等效的泊松方程),那么显然除了施加约束方程之外别无他法。在任何情况下,如果有一个一致的网格,那么约束方程的形式就更简单了。
大多数 FEA 软件会生成约束方程和耦合方程,并将它们作为边约束传递给求解器。求解器必须在解向量位于满足约束方程的子空间中的条件下找到线性系统的解。
大多数静态网格生成器会分阶段创建网格。首先它对所有边(1D 空间)进行网格划分,然后是几何体的面(2D 空间),最后是体积(3D 空间)。因此,gmsh 已经在做你想做的事了。放置铜层所在的面,每侧都有环氧树脂的体积。您可以将面标记为不同的材料组以区分它,然后在求解器中以 2D 处理该情况,同时以 3D 处理其余情况。
我已经有一段时间没有使用过 GMSH 输出了,所以我不记得输出是如何格式化的了。铜层的格式可能与外部界面的格式非常相似。混合 2D 和 3D 几何体的难点在于求解器,因为在大多数情况下网格生成器已经处理了它。
基于我对几何的不完全理解,我想到了一个你可能想要考虑的想法。
我假设铜电路走线布置在矩形网格上,即使环氧树脂绝缘层两侧的电路可能完全不同。我怀疑铜电路元件的一维表示并不是一个糟糕的近似值。
编写一个在环氧树脂层中创建一致的矩形但不一定均匀的六面体网格的小函数可能不是很困难。以下是我想到的一些细节:
首先构建三个 x、y 和 z 坐标值列表。z 值列表包含(至少)所有电路层的 z 坐标。x 和 y 列表包含所有 z 水平上每个 1D 电路迹线的适当中心线位置的值(我现在忽略 2D 电路区域的情况)。使用这 3 个列表,在环氧树脂层中构建一个具有三重嵌套循环的六面体网格非常简单。
下一步是构建 1D 电路元件的网格(同样,我现在忽略 2D 电路元件的情况)。对于每个电路,您需要能够构建一个我粗略地称为“网表”的数据结构。我的意思是每个轨迹的起点和终点的列表,以及它是否平行于 x 轴或 y 轴。与这些端点对应的节点已在第一步中定义。找到它们(它们的 id)只需索引 x、y 和 z 列表并计算节点列表的全局偏移量。给定节点 ID,您可以为每条迹线定义一个或多个一维元素。对每个电路级别的每个迹线都重复该过程。
我提出的解决方案是基于这样一个事实,即当层非常薄时,直接从几何体创建良好的网格是非常困难的。大多数一般的 3D 网格生成器会创建四面体元素,这不仅在非常薄的铜层(正如您所指出的)中而且在相当薄的环氧树脂层中都是不受欢迎的。六面体元素更适合薄层,但我不知道有任何免费/开源的六面体网格器可以解决这类问题。
如果您想寻找现有的网格划分软件,我认为将铜导体层与一个六角元素通过厚度进行网格划分是一种更直接的方法。我认为您更有可能找到可以做到这一点的网格器,并且与在 3D 区域之间创建 2D 电路网格相比,计算缺点很小。
如果您想考虑商业软件,CoventorWare ( http://www.coventor.com/ ) 有一个“曼哈顿”六面体网格器,我认为它适合这个应用程序。(Manhattan 一词源于元素网格布置在矩形网格上的事实。)