子模型 — CAE术语解说
子模型
汽车车身模型有数百万个单元,但我想仔细看螺栓孔周边的应力集中,但没有余裕来全局细化网格…
子模型的理论基础
子模型的基本概念
子模型一言以蔽之是什么技术?只是把全局模型分割成小部分吗?
不只是分割。它是利用大规模全体模型(全局模型)的分析结果作为边界条件,仅对关心区域进行详细重新分析的"局部详细化"技术。例如,求出桥梁整体的应力分布后,想仔细查看螺栓孔周围的应力集中时就会用到。
作为边界条件来利用,具体是什么数据?力还是位移?
主要是"强制位移"。从全局模型求出的子模型边界上的节点位移,作为子模型分析的强制位移条件来应用。这是基于圣维南原理的基本方法。也可以使用应力或反力,但位移最常用且最稳定。
什么是圣维南原理?为什么它是子模型的根据?
"作用在物体某部分的力系统可以用另一个静力学等价的力系统替代,而被替代的场所以外的部分应力分布影响很小",这就是圣维南原理。换句话说,远处的影响可以通过大局变形来理解,只要在局部详细部分的邻域内准确给定边界条件,内部应力就能准确求出。
全局模型和子模型的网格大小能差多少?细化10倍还可以吗?
理论上再大的倍数都可以,但实务上建议分阶段细化。比如全局模型单元尺寸10mm,第一阶段子模型细化到2mm,再详细的部位可以到0.5mm。如果一下子细化100倍,边界处的位移插值误差会增大,容易产生不合理的应力。
子模型的数值计算方法
边界条件的插值与应用
全局模型和子模型的网格通常不匹配,节点位移怎么传递?手动分配吗?
软件会自动进行"空间插值"。对子模型边界上的每个节点,软件用形状函数从全局模型的邻近节点位移数据进行插值计算。比如Abaqus,只需在"*BOUNDARY"条件中指定"SUBMODEL",这个过程就会在后台自动执行。
用形状函数插值和有限元法中的那个一样吗?具体的式子是什么?
基本思路是一样的。假设全局模型的单元(如4节点四面体单元)内有子模型的节点。用该单元的节点位移
全局模型是壳单元,子模型是实体单元这样的异种单元,怎么办?
这时"驱动节点"的概念很重要。即壳单元中面的位移和旋转如何分配到实体单元对应面上的节点。Ansys有"Shell-to-Solid Submodeling"专用功能,基于壳的面内变形和弯曲来决定实体节点的三维位移。手动设置会很麻烦。
子模型的控制方程和全局模型有什么不同?除了边界条件其他都一样?
控制方程本身
子模型的实务应用
工作流程与验证
实际分析用子模型时,确实的步骤是什么?从什么开始?
标准工作流程如下。
1. 创建并分析全局模型(粗网格),找出应力集中的区域。
2. 决定子模型的切割区域。经验上,离关心区域最少要外延2~3个单元层厚度。
3. 创建子模型(细网格、局部形状修改或增加异种材料也可以)。
4. 用软件功能从全局模型结果生成并应用子模型的边界条件。
5. 分析子模型。
6. 验证:对比子模型边界附近的应力与全局模型结果,检查无大偏差。
"大偏差"的具体指标是什么?误差要控制在多少以内?
业界最佳实践是:在子模型边界往内一点的位置(如详细区域深度的10%处),对比应力(如von Mises应力),差值在5%以内为理想。如果超过10%,说明子模型切割区域太小,或边界附近有大的应力梯度。这时需要扩大切割区域。
用子模型做设计改动的常见例子是什么?不只是网格细化吧?
完全同意。子模型的真正价值在于"设计改动评估"。具体例子是:
全局模型:焊缝作为简单接合建模,不包含焊道形状。
子模型:加入实际焊道形状(按JIS Z 3312标准),为焊缝金属和热影响区(HAZ)赋予不同材料特性(比如相对母材SM490A改变杨氏模量1%),导入残余应力初始条件。
这样能详细评估全局模型无法涉及的局部疲劳强度。
做子模型时,全局模型的结果文件(.odb或.rst)一定要有吗?能只提取结果数据吗?
通常用软件的子模型功能的话,全局模型的结果文件(Abaqus的.odb、Ansys的.rst)和模型数据库文件(.cae、.db)都需要。因为软件要根据边界节点的位置关系确定自动插值,需要参考几何和网格信息。光有数值列表不够。
子模型的软件比较
各求解器的实现与特点
Abaqus和Ansys的子模型功能有什么根本区别?
最大区别在"过程管理"上。Abaqus是先运行全局模型的任务(Job-1),再在同一模型数据库(.cae)内创建子模型部件,通过"Model > Edit Attributes > Submodel"进行设置。一个CAE文件全部搞定。Ansys Workbench则用专用的"Submodeling"模板,把全局模型系统和子模型系统链接起来,在项目树里组织。数据连携更直观。
免费或开源的CalculiX和Code_Asterque有子模型功能吗?
CalculiX没有标准的"自动子模型"功能,但原理上可以手动实现。把全局模型边界节点的位移计算出来,作为子模型输入文件(.inp)的"*BOUNDARY"条件来写就行。Code_Aster有名为"MACR_RECAL"的操作符,用它可以对网格的某部分进行重新计算,类似子模型。但商用软件那种高级自动插值和GUI支持就没有了。
非线性分析比如弹塑性或接触的全局模型结果,能用在子模型里吗?
可以,但要小心。Ansys和Abaqus都支持从非线性分析导出子模型。不过子模型分析本身通常是线性的。这是因为从全局模型接收的"位移"是某个特定荷载状态(最终状态或特定增量步)的值。如果子模型内出现新的接触或大变形等强非线性,处理会复杂,简单子模型可能不适用。
COMSOL Multiphysics怎么搞?有叫"子模型"的功能吗?
COMSOL没有专门的"子模型"功能名字,但能用"研究"功能组合实现。具体是:先建立全局模型的"研究1"并求解,结果存为"解"。再用新的详细几何创建"部件",添加"研究2"。在研究2的初始条件或边界条件中导入"研究1的解",用"线性拉伸"或"常规投影"等功能应用位移场。灵活但需要习惯这套设置。
子模型的故障排除
常见错误与对策
子模型运行时报错"找不到驱动节点位移数据",原因是什么?
最常见的两个原因。第一,全局模型结果文件(.odb等)路径错误或分析时读不了。第二,子模型的边界面(切割边界)超出了全局模型的几何/网格范围。软件会搜索"子模型各边界节点位于全局模型的哪个单元内"。超出范围就找不到"驱动节点"数据。先检查子模型切割区域。
子模型边界附近的应力和全局模型比起来明显不对。呈锯齿状或极端高值。为什么?
这是典型的"边界效应"。主要有3个原因。
1. 圣维南原理适用限制:边界离关心区域太近。对策是扩大切割区域。
2. 插值误差:全局模型网格太粗,捕捉不了细致的变形模态。可以细化全局模型网格,或在离边界较远的位置评估结果。
3. 边界条件不连续:在Abaqus等中试试"*SUBMODEL, INTERPOLATE=ELCENTRIC"这样用单元中心而非节点数据插值,有时会平滑化。
全局模型做过渡响应(动分析),子模型想看某时刻的详细应力,但不行。和静分析的子模型有什么不同?
这叫"时间历史子模型",需要更高级的设置。不仅要用位移,有时还要考虑速度和加速度作为边界条件。Ansys的"Submodeling"系统詳細設定中要指定"Load step and time"。而且全局模型动态的话,子模型通常也要做动分析。这样子模型是"模态过渡响应分析"这样的形式,把全局模型的位移时间序列作为强制位移给定。查软件手册的"transient submodeling"。
子模型加了新荷载(比如局部压力),边界就动了,和从全局模型得到的位移条件矛盾。这能允许吗?
这是关键问题。子模型的基本形式(位移边界条件)中,边界被"强制位移"固定,即使内部加荷载边界也不动。这表示子模型作为全局模型一部分被"约束"的状态。但如果局部荷载导致的边界反力变化很大,足以影响全局模型变形,子模型前提就崩溃了。这时要么把局部荷载加进全局模型重新算,要么考虑"子模型法"等高级方法——把子模型的边界反力返回全局模型,进行耦合计算。