
1. 焊接模拟为什么绕不开生死单元1.1 生死单元的本质不是删除而是让单元暂时退出游戏我第一次接触ANSYS APDL生死单元时最大的误解是以为EKILL命令会把单元从模型里删掉。实际上完全不是这么回事。生死单元技术的本质是通过修改单元的刚度矩阵或传导矩阵、比热矩阵等来让单元在数值计算中暂时失效。被杀死的单元并没有离开模型它的节点还在、单元还在只是刚度矩阵被乘上一个极小系数默认是1e-6导致它在整体方程里几乎不贡献任何刚度。打个比方你去工地看一栋框架结构的楼某个楼层的填充墙还没砌这个位置在结构计算里就不该有刚度贡献。但如果你把整面墙都建模进去了然后计算它在重力下的变形那结果就完全错了——墙还没砌凭什么承担荷载焊接模拟里也是同一个道理。焊缝金属在焊接开始前根本不存在它是一边送丝、一边熔化、一边凝固堆起来的。如果你在初始模型里就把整条焊缝建好赋予完整材料属性那么结构一开始就是焊完的状态热应力算出来必然不对。同样的EALIVE命令是恢复单元的完全刚度。被激活的单元它的所有矩阵系数都会被恢复成真实值。这个死活状态是跟随单元编号存储的在后处理里可以用ETABLE或者PLNSOL去查看每个单元的死活状态。1.2 焊接物理过程决定了必须用生死单元而不是别的方法焊接热模拟的时间线是这样的热源移动到某个位置 → 该位置的填充金属焊缝开始熔化同时母材受热传导升温 → 热源离开 → 熔池凝固 → 焊缝金属开始有强度并参与接下来的应力重分布。如果你不用生死单元会有两种替代方案但都行不通第一种是全模型参与。焊缝从一开始就是这个结构的组成部分它的刚度一直存在。热量来了它就升温、膨胀、产生应力。问题在于真实的焊缝金属在没有凝固之前是液态的液态金属几乎不能传递剪切力也没有抗拉刚度。你把它当固态算焊缝区的应力场会完全失真残余应力分布自然也不可信。尤其是焊接起始段和收弧段这种误差非常明显。第二种是几何重构。每焊一段就重新剖分网格把新的焊缝单元加进去。这在理论上说得通但实际上极其麻烦——瞬态热分析中节点编号和单元拓扑一直在变边界条件转移、温度场插值、数据映射这些操作在APDL里实现起来的复杂度和出错概率远超过直接在一开始就把所有焊缝单元预定义好。所以APDL里最经典的做法就是前期一次性建好所有母材和焊缝单元通过EKILL把所有焊缝单元先杀死然后在热源移动过程中按顺序逐步EALIVE。这既符合焊接物理过程又在实现上足够简洁。1.3 热-结构耦合方式选择为什么工程中9成场景用顺序耦合焊接模拟是典型的热-力耦合问题。但APDL里到底用直接耦合单元比如SOLID226/227还是顺序耦合先热分析再结构分析这里有一个很实际的经验判断。直接耦合一次求解就得到温度和应力听起来很美好。但焊接模拟是强非线性瞬态问题材料参数随温度剧烈变化还有相变潜热、辐射、对流这些非线性边界条件。直接耦合的方程规模大、收敛困难而且很多时候你只需要关注最终的残余应力场不需要每一子步都同步计算力学场。盲目用直接耦合计算时间可能翻好几倍还不一定收敛。顺序耦合的逻辑是第一步只做瞬态热分析算出整个焊接过程中每个节点在每个时刻的温度第二步把这组温度作为体载荷施加到结构模型上做静力学或准静态分析。因为热分析决定了温度场结构分析只是被动接受温度载荷所以两个场可以分开调优特别适合做参数研究和工程优化。下表是我在实际项目中常用的选型判断场景推荐方案原因焊接温度场标定、热源参数校核只做热分析结构场不影响温度场先算准温度再说残余应力、焊接变形分析顺序耦合计算效率高、收敛性好、易于调试搅拌摩擦焊、特殊工艺需要实时力反馈直接耦合力学场反向影响产热无法用顺序耦合替代大型结构多条焊缝顺序耦合子模型全局算变形局部子模型细化应力顺序耦合的另一个好处是它天然支持先验证热源、再验证力学的分阶段调试。如果温度场都还没算准就直接上全耦合出问题你都不知道该查哪一边。2. 命令流框架与模型准备先把底子打对2.1 建模思路母材和焊缝分开建组件提前定义生死单元实战的第一个关键点不是怎么写EKILL而是前期建模要为后面的生死操作铺好路。很多人后期出问题根源都是一开始建模偷懒。以一块典型的对接板焊接为例两块200mm×100mm×10mm的Q235钢板中间开60°坡口焊缝填充区宽约8mm。建模时要做三件事第一焊缝区单独建模不要和母材合并成同一个体。APDL里可以用VGLUE做体粘接保证网格在交界面上共节点但体本身保持独立后面才能单独选中。第二把焊缝单元收集到一个组件里。全命令流操作时不要靠眼睛选取直接ESEL,S,TYPE,,2 ! 假设焊缝单元类型号为2 CM,WeldElem,ELEM ALLSEL,ALL提前把组件名字起好比如WeldElem后面每次循环都是基于这个组件操作又稳又快。第三单元编号要有意识地预留和管理。虽然APDL支持用组件选择但编号规划好会让调试时轻松很多。我的习惯是把母材单元放在1号单元类型焊缝放在2号单元类型焊缝单元编号段单独预留出来。这样出问题时直接通过类型号就能快速定位。为什么要这么强调组件因为实际项目中模型动辄几万单元裸编号操作几乎不可能。组件封装是APDL工程化的基本功生死单元这种强时序操作离开组件根本没法维护。2.2 材料参数表焊接模拟的精度下限在这里焊接温度场计算的精度很大程度取决于材料参数给得对不对。很多教程喜欢用常温参数算出来温度场漂亮但一对比实际热电偶数据就露馅。正规做法是定义随温度变化的参数表。以Q235钢为例热分析至少需要导热系数、比热容、密度。结构分析还需要弹性模量、泊松比、热膨胀系数、屈服强度。APDL里用MPTEMP和MPDATA定义温度表MPTEMP,1,20,200,400,600,800,1000,1200,1500 ! 温度点 MPDATA,KXX,1,,50.0,46.0,41.0,35.0,28.0,25.0,29.0,35.0 ! 导热系数 MPDATA,C,1,,460,500,540,600,700,750,780,800 ! 比热容 MPDATA,EX,1,,2.1e11,1.9e11,1.7e11,1.2e11,0.5e11,0.2e11,0.1e11,0.05e11这里有个经验点高温段弹性模量要取得很小接近零但别等于零。因为金属接近熔点时刚度趋近于零但数值上给零会导致求解器出现奇异性。取一个相对很小的值比如常温的1/200既能模拟接近零刚度的物理状态又不至于让方程奇异。类似地屈服强度在高温段也要给得很低否则冷却阶段的收缩应力会被高估。密度参数在生死单元里有个容易忽略的坑被杀死单元的密度矩阵同样会被乘以极小系数这意味着被杀死的焊缝单元在热分析里几乎不传热。这是期望行为——焊缝金属还没填充确实不该传热。但注意热分析中要在杀死之前先算好焊缝单元在室温下的初始温度否则激活时会有温度突变。2.3 网格划分生死单元对网格的隐性要求生死单元本身的网格要求其实和普通瞬态热分析类似但有一条额外要求焊缝单元的网格必须规则最好用映射网格或扫掠网格生成且单元主轴方向和焊接方向尽量一致。为什么因为后面的EALIVE是按批次激活的。每次激活一批单元模拟一个焊段。如果焊缝单元排列混乱你就很难定义哪些单元属于同一个焊段循环逻辑会写得非常痛苦。热源区域的网格尺寸也需要特别注意。高斯热源的功率密度集中在热源中心附近如果网格太粗热源作用区的峰值温度会失真。我的实践经验是焊缝区网格尺寸取2mm左右热源半径方向的网格至少要有3~4个单元来解析热流密度梯度。母材远离焊缝的地方可以过渡放大到5~8mm节省计算量。用映射网格划分焊缝区还有一个好处单元编号规则方便按坐标筛选。比如你的焊缝是沿X方向推进的那么EALIVE第N批单元就可以写成选择X坐标在[X0n*dx, X0(n1)*dx]范围内的焊缝单元配合组件操作非常自然。3. 高斯移动热源在APDL里的实现方式3.1 高斯体热源公式与参数推导移动热源是焊接模拟的核心。学术论文里经常用双椭球热源模型那个精度确实高但对参数标定要求特别苛刻热流分布调参很费时间。工程上做快速评估时高斯体热源往往就够了。高斯体热源的热流密度分布公式q(r) qmax * exp(-3 * r² / R²)其中R是热源的特征半径热流密度衰减到最大值的5%处的半径因为exp(-3)≈0.05r是该点到热源中心的距离qmax是中心热流密度。已知有效热功率P ηUIη为热效率U为电压I为电流通过积分可以得到qmaxqmax 3ηUI / (πR²d)其中d为热源作用深度。在实际操作里R和d要根据焊缝熔宽和熔深来标定。比如你的焊缝熔宽8mm那R取3~4mm比较合适熔深约4mm的话d取4~5mm。APDL里对这种分布热源的支持方式主要有三种函数边界条件*FUNCTION、表参数TABLE、以及直接在循环里用BF命令施加节点体热生成率。工程上最常用的是第三种——在每个时间步通过循环选中热源中心附近的节点施加体热生成率因为它的实现逻辑最简单、调试直观。3.2 APDL实现移动热源的经典写法先说核心逻辑热源每移动一步就把以当前位置为中心、R为半径范围内的所有节点赋予一个高斯分布的体热生成率值同时把该范围外的节点热生成率清零。这就是为什么前面强调网格要规则——热源每步扫过的节点数基本一致循环写起来才不会出幺蛾子。一段典型的移动热源单元代码如下! 焊接参数 V5.0 ! 焊接速度 mm/s ETA0.8 ! 热效率 U22.0 ! 电压 V I180.0 ! 电流 A PEFF*U*I ! 有效热功率 W R3.5 ! 热源半径 mm D4.0 ! 热源深度 mm QMAX3*P/(3.14159*R*R*D) ! 热源位置初始化 X00.0 XEND200.0 ! 焊缝总长 mm DX1.5 ! 每步移动距离 mm NSTEPNINT((XEND-X0)/DX) *DO,I,1,NSTEP XCX0I*DX ! 选中热源作用范围内所有节点 NSEL,S,LOC,X,XC-R-1,XCR1 NSEL,R,LOC,Y,0,RR NSEL,R,LOC,Z,0,DD *GET,NMAX,NODE,,COUNT *DO,J,1,NMAX XJNX(J) ! 节点X坐标 YJNY(J) ! 节点Y坐标 ZJNZ(J) ! 节点Z坐标 DISTSQRT((XJ-XC)**2YJ**2ZJ**2) *IF,DIST,LE,R,THEN HGENQMAX*EXP(-3*DIST*DIST/(R*R)) BF,J,HGEN,,HGEN *ENDIF *ENDDO ALLSEL,ALL SOLVE *ENDDO这段代码有几个细节值得注意第一NSEL三次嵌套选择是为了缩小节点遍历范围不然几万节点同一时间步全遍历一遍循环几百步就是几百万次计算浪费严重。第二GET,NMAX,NODE,,COUNT得到的是当前选择集里的节点数而不是全部节点数。所以内层DO循环用的是J1到NMAX而每轮循环结束要ALLSEL,ALL恢复全选状态。第三BF命令每秒只能施加载荷不能把旧载荷自动清掉。所以每一步都必须对之前施加过HGEN但现在不在热源范围内的节点重新赋0。上面代码里通过NSEL重新选中当前热源范围节点加上配合外层的固有时步推进旧热源位置节点的BF会在下一步被新选择集覆盖不再被赋值而保持旧值——等等这其实是个隐蔽bug。3.3 一个隐蔽Bug和它的修正上面这段代码第一次跑的时候热源扫过之后后面的区域温度没有快速下降反而持续被加热。排查了半天才发现问题BF命令赋体热生成率后不会因为节点不在选中集就自动清零。旧热源位置节点的HGEN始终保持在上一步的值。修正方法是每一步先清空所有节点的体热生成率再对当前热源范围重新施加BFUNIF,HGEN,,0.0 ! 全模型体热生成率清零 NSEL,S,LOC,X,XC-R-1,XCR1 NSEL,R,LOC,Y,0,RR NSEL,R,LOC,Z,0,DD *DO,J,1,MAXNODE ... *ENDDO另外有一个性能优化技巧不用每步BFUNIF清全模型而是只清理上一步热源中心位置附近的节点。具体做法是在循环开头记录上一步热源范围先清空该范围内节点的HGEN再施加当前热源。这样每个时间步只处理局部节点计算量小很多。这个bug的教训是APDL的载荷施加是追加式的不是覆盖式的。BF、SF、D这些命令都只改变指定实体的指定载荷不会自动重置其他实体的载荷。凡是做移动载荷模拟都要有一句清空旧载荷的动作。这也是新手最容易被坑的地方。4. 生死单元循环的完整命令流与逐段解析4.1 核心循环杀死全部、逐步激活生死单元配合移动热源的完整循环逻辑是第一步杀死所有焊缝单元。 第二步进入时间步循环。每一步内先激活当前焊段对应的单元再施加热源载荷然后求解。 第三步所有步结束后激活所有焊缝单元让结构完整再做冷却分析。下面是去掉建模细节后的核心循环框架! 初始杀死所有焊缝单元 ESEL,S,TYPE,,2 EKILL,ALL ALLSEL,ALL ! 初始温度场 IC,ALL,TEMP,20 ! 进入瞬态热分析 /SOLU ANTYPE,TRANS TRNOPT,FULL ! 设定初始时间步 TIME,0.1 DELTIM,0.1,0.05,0.2 AUTOTS,ON ! 杀死单元的CUTCONTROL设置可选 ! CUTCONTROL,PLSOLID,1 *DO,I,1,NSTEP ! 计算当前焊段范围 XSTARTX0(I-1)*ELEM_DX XENDX0I*ELEM_DX ! 激活当前焊段单元 ESEL,S,TYPE,,2 ESEL,R,CENT,X,XSTART-0.01,XEND0.01 EALIVE,ALL ALLSEL,ALL ! 更新热源位置 XCX0I*DX_HEAT ! 清空旧热源并施加新热源 BFUNIF,HGEN,,0.0 NSEL,S,LOC,X,XC-R-1,XCR1 NSEL,R,LOC,Y,0,RR NSEL,R,LOC,Z,0,DD *DO,J,1,MAXNODE ... *ENDDO ALLSEL,ALL TIME,0.1I*DT SOLVE *ENDDO ! 冷却阶段 BFUNIF,HGEN,,0.0 TIME,COOL_END DELTIM,5,2,10 SOLVE这里激活单元用的是ESEL先按类型选再按单元中心坐标筛选。ESEL,R,CENT,X,... 是按单元中心点的X坐标范围筛选比用节点坐标更直观。4.2 出生单元的初始温度一个最容易忽略的物理点在实际焊接过程中新填充的熔融金属温度大约是1500~2000℃。但如果你在单元EALIVE时不给它赋一个初始温度APDL会默认使用TREF参考温度默认是0或者你设定的TUNIF值这就造成一个物理错误单元刚出生就是室温然后瞬间被加热到高温产生虚假的剧烈热冲击。正确的做法是在激活单元之前把当前焊段单元的节点初始温度设置为材料的熔点或熔池温度ESEL,S,TYPE,,2 ESEL,R,CENT,X,XSTART-0.01,XEND0.01 NSLE,S IC,ALL,TEMP,1450 ! 熔池温度 ALLSEL,ALL这样单元一激活就带着高温参与计算和实际焊缝金属凝固的起始状态一致。这个细节在做结构分析时同样重要。单元被激活时带着高温其热应变就会从零开始累积和实际凝固冷却的应力演变更吻合。如果单元激活时温度偏低冷却收缩的应力起点就错了最终残余应力可能差出20%~30%。4.3 结构分析的生死单元处理要点热分析算完进入结构分析前要做几步操作第一切换单元类型。把热单元SOLID70切换成结构单元SOLID185。常规做法是用ETCHG,TTS或直接在重新进入PREP7后通过ET命令更换单元类型号。ETCHG,TTS ! 热单元转结构单元第二重新确定焊缝单元的生死状态。因为热分析结束时所有焊缝单元都被激活了转置到结构分析里初始状态就是全活的。如果你希望结构分析也从未焊接状态开始需要在新分析里重新EKILL所有焊缝单元然后在每个时间步里按同样的节奏EALIVE。ESEL,S,TYPE,,2 ! 转单元后类型号可能变要确认一下 EKILL,ALL第三施加温度载荷。把热分析得到的节点温度结果通过LDREAD命令按时间步读入LDREAD,TEMP,,,,,RST ! 从热分析结果文件读取温度配合生死单元结构分析里每激活一批焊缝单元就把对应的温度场载荷加给它。APDL中LDREAD配合生死单元使用时要注意读取的是全模型的温度但被杀死单元的载荷会被乘上极小系数自动忽略等效于该区域不受温度载荷影响。4.4 大变形与非线性选项的设置经验焊接变形分析建议打开大变形开关。原因很简单焊接薄板的残余挠度通常有几个毫米甚至上厘米相对于板厚已经不是小变形范畴。NLGEOM,ON但打开大变形会带来收敛困难。我的经验是先做一次线性生死单元的快速计算看温度场和变形量级是否合理再决定是否打开NLGEOM。如果温度场本身不对大变形算出来的应力结果也会误导你。另外材料本构推荐用双线性等向强化BISO或双线性随动强化BKIN。焊接残余应力计算涉及反复加载和卸载路径屈服后行为对结果影响显著。纯粹用弹性模型算焊缝区的残余应力会高得离谱超过屈服强度好几倍后处理时自己都解释不了。5. 实测最常踩的五个坑与完整排查链路5.1 坑一温度场整体错乱焊缝区温度高得离谱某次做对接焊温度场标定结果焊缝中心峰值温度飙到5000℃以上明显不合理。第一步排查思路不是改材料参数而是先查看被杀死单元的热传导行为。排查链路进入POST1用ETABLE提取单元死活状态因子LIVE或STAT。用PLNSOL,TEMP画温度场看高温区是否恰好对应被杀死的单元区域。检查热分析里是否在使用EKILL之前就对焊缝节点施加了HGEN边界条件。最后发现初始杀死单元前我在整体模型上做过一次试算并施加过初始热源边界条件。BF载荷是跟随节点的和网格死活无关。焊缝节点虽然被杀死了但BF还在边界条件依然生效。杀死单元只是让单元刚度矩阵失效并不是删除节点上的载荷定义。解决方法是EKILL之后立即BFUNIF,HGEN,,0.0全部清零再开始循环。5.2 坑二热源扫过之后温度突然掉到负值或者不下降这种问题通常不是生死单元引起的而是时间步长与热源移动速度不匹配。热源每步移动超过3~4个单元长度时中间位置的节点会轮流经历被加热-未被加热-再被加热的跳跃导致温度场振荡。排查链路计算热源每步移动距离下单元层面的等效加热时间。检查DELTIM设置是否过大。在该时间步下输出温度场动画观察是否有温度跳跃现象。解决办法确保热源每时间步移动距离不超过半个网格尺寸。实测焊接速度5mm/s、网格2mm时时间步取0.2s比较合适对应每步移动1mm半个网格。如果你网格是4mm时间步得缩到0.4s以下。5.3 坑三激活单元时模型突然不收敛生生死单元循环里最让人心态崩掉的就是某一步SOLVE直接No Converge。之前明明都跑得好好的突然就挂了。大多数情况出在激活单元初始温度没设置好。如果新激活单元温度设定为熔池温度1450℃而你当前的收敛容差/license/温度单位设置不允许这种突变就可能出现数值振荡。更隐蔽的原因是新激活单元和已存在的母材单元之间在界面上存在温度跳跃传热计算需要极小的子步才能跨越这个突变。排查链路定位是第几步不收敛。检查该步新激活单元的IC初始温度。如果初始温度过高尝试分两步激活先在较低温度下激活再通过热载荷快速升温。检查AUTOTS是否打开关闭时间步长自动控制会导致突变无法平滑跨越。很多情况下把该步的DELTIM调小到原来1/10就能过。但频率太高的话值得检查是不是温度初始条件本身不合理。5.4 坑四结构分析应力在焊缝起点出现异常尖峰有次做残余应力分析发现焊缝起弧处有一个很突兀的高应力点画等值线图还不如云图直观。查了半天发现热分析阶段没有对该位置做任何处理结构分析直接从热分析结果读温度起弧段最初一个时间步的温度场还没传过来该位置的焊缝单元在结构分析里一开始处于室温状态然后瞬间被铸造出来了。解决方法是结构分析中设置焊缝激活时的参考温度TREF等于该时刻该位置的节点温度。或者简单一点在结构分析之前把起弧段的初始温度也设为熔池温度避免从0突变到1500℃的热冲击。5.5 坑五结果文件巨大后处理卡成PPT生死单元瞬态热分析结构分析最容易忽视的就是结果文件大小。每一子步都写结果几百步下来RST文件几十GB很正常。首次接触的人往往做到后期才发现磁盘满了前功尽弃。解决办法很简单OUTRES命令控制输出频率和内容。热分析阶段每10步或者每20步输出一次结果就够做温升动画了结构分析阶段如果只看最终残余应力也可以用OUTRES,,LAST只写最后一个子步。OUTRES,ALL,LAST OUTRES,ALL,10 ! 每隔10步写一次如果磁盘还算宽裕我的默认配置是温度场每5~10步输出一次应力场每10~20步输出一次最终结果全部保留。6. 结果后处理与工程判断经验6.1 温度场判读热源移动是否贴合实际计算完成后第一个要检查的不是应力而是温度场动画。打开POST1用SET,1,LAST或SET,,,,,循环遍历时间步画PLNSOL,TEMP。重点看三点第一热源前方温度梯度是否陡峭。热传导物理上热源前方温度还没传导到的地方应该是室温。如果热源前方一大片区域温度都升到几百度说明导热系数或时间步长有问题。第二熔池大小是否合理。找到温度超过材料熔点大概1450℃的区域如果这个区域宽度接近甚至超过焊缝熔宽说明热源半径参数R偏大反之则偏小。第三散热是否正常。热源离开后后方温度应该平稳下降而不是骤降或振荡。如果出现锯齿状降温曲线回到第5章第2节检查时间步长。6.2 残余应力的读取路径与提取方式焊接模拟最终交付物通常是焊缝中心线沿长度方向的纵向残余应力分布以及垂直于焊缝方向的横向残余应力分布。在POST1里用PATH命令沿焊缝中心定义路径PATH,WeldCenter,2 PPATH,1,,0,0,5 PPATH,2,,200,0,5 PDEF,LongStress,S,X PDEF,TransStress,S,Y PLPATH,LongStress,TransStress注意路径点的坐标要对应你建模的实际节点。如果你在结构分析中开了大变形读取应力时要注意是真实应力还是工程应力。APDL默认输出真实应力把这一点写进报告里省得审查的人追问。6.3 模拟可靠性验证的三步法没有实验数据对比的焊接模拟报告工程上基本没有说服力。在实验室条件有限的情况下我总结了一套三步验证法第一步温度验证。如果手头有热电偶实测数据直接在时历后处理里POST26提取对应位置的温度曲线和实测曲线对比。温度曲线峰值和降温速率对上了热源参数基本可信。第二步变形验证。焊接完成后测一下板件的变形量或角变形和模拟中的最终变形对比。变形量级一致误差在30%以内说明整体刚度模型的力学行为是合理的。第三步应力验证。没有条件做中子衍射或X射线衍射的话至少和文献中同材料同厚度焊接接头的典型残余应力分布形态对比。如果分布形状比如焊缝中心受拉、两侧受压和文献一致就算通过。如果以上三步全过了这个模型在工程范围内可以放心使用。任意一步对不上都值得回到对应阶段排查。6.4 计算效率的取舍经验生死单元焊接模拟的计算量确实不小这是绕不开的。200mm焊缝、2mm网格、500步热分析在普通8核工作站上一个晚上能算完。但如果你要模拟1m长的大型结构件模型网格数十万那跑几天很正常。我的经验是分三步走第一步用小模型比如100mm试板快速标定热源参数和生死循环逻辑。这一步的目的不是精度而是让整个流程能跑通、温度场趋势对。第二步在目标模型上只做热分析。因为温度场不影响生死循环逻辑和热源参数这一步可以先验证大模型上的计算效率和收敛性。第三步再做结构分析。结构分析计算量通常比热分析大很多但如果前两步都验证过了这一步基本不会再有大的返工。多道焊的处理思路也类似。第一道焊完接着第二道时第一道已经凝固冷却的单元保持存活第二道的新焊缝单元继续用生死单元循环逐步激活。麻烦的地方是界面处理——两道焊缝之间的网格连续性和接触关系要处理好。稳妥做法是用共节点网格两道焊缝在交界面共享节点而不是用接触。最后分享一个我在实际项目中养成的习惯每条命令流里都加上必要的*GET状态检查和不合理条件判断宁愿多花一点时间在代码健壮性上也不要让计算跑了3个小时后在最后一个时间步突然翻车。APDL虽然不是现代编程语言但它同样需要有防御式编程思维。这个习惯帮我省下的重算时间远比写那些检查语句的时间多。