我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

SLM热固耦合仿真:温度场、单元生死与残余应力建模

SLM热固耦合仿真:温度场、单元生死与残余应力建模 简介面向增材制造、固体力学与热固耦合方向的研究者和工程技术人员这份资料聚焦 COMSOL 6.1 环境下激光选区熔化SLM的单道与多道仿真围绕温度场与应力场展开分析涉及固体力学、增材制造活化及圆柱形增材建模等设置可用于研究熔池温度与应力的变化规律、比较不同工艺参数的影响并为其它增材过程仿真提供参照。压缩包共 3 个文件以 PDF 说明、Markdown 笔记和 HTML 页面呈现合计约 480KB体量轻便内容涵盖模型注释、可修改性与收敛性等要点便于快速查阅和对照使用。目前已有 276 人学习。读者可从中获得温度场与应力场演化脉络的梳理、模型搭建与调试思路以及把单道结果迁移到多道及其它增材场景的方法适合具备一定 COMSOL 基础、希望深入热固耦合仿真的人员按需取用。1. 裂纹不在激光扫过的地方SLM 仿真的判决点在应力场拿一块 SLM 打印的薄壁件激光扫过时看不出任何异常等冷却、切离基板边缘翘了起来甚至出现贯穿裂纹。这是增材制造里最反直觉的一幕真正决定零件成败的不是激光照到的那一瞬间而是之后几秒到几分钟里热应变被逐步积累的过程。COMSOL 这类多物理场平台在 SLM 仿真里要解决的核心问题是把「激光吸收—粉末熔化—熔池凝固—逐层堆积—应力累积」这条因果链离散成可求解的方程。理解这套模型的价值在于熔池尺度是几十微米零件尺度是几十毫米物理时间从微秒跨到小时六个数量级的跨度决定了任何一次「算得动」都是设计取舍的结果而不是点一下求解就能出图。后面几章就沿着温度场、生死单元、热固耦合三条线把这份 SLM 仿真模型背后的机制拆开看。2. 激光热源与粉末床温度场为什么必须移动着算温度场是整个耦合链的入口。热源模型决定了能量怎么注入相变处理决定了能量怎么被消耗粉末床物性决定了能量怎么在松装颗粒间传递。这三件事任何一件出偏差后面的应力场都不会有讨论价值——它只是把错误的温度历史忠实地翻译成错误的应变历史。这一章先把入口端讲透。2.1 高斯面热源与双椭球体热源选错模型熔池深度直接翻车热源模型的选择本质上是在回答一个问题激光能量到底被吸收在哪一层体积里。面高斯热源假设能量全部沉积在表面上热流密度按 $q(r)\frac{2AP}{\pi r_0^2}\exp(-2r^2/r_0^2)$ 分布实现简单、参数少在低功率、高扫描速度的传导焊模式下能给出可接受的熔池宽度。但 SLM 的熔池深宽比经常接近 1深熔模式下熔深甚至超过熔宽这时能量明显是沿深度方向分布的面热源会把熔池算得又宽又浅深度可能差一倍以上。体热源里用得最多的是双椭球模型前后两个半椭球分别描述熔池的前沿陡、后沿长$$q_f\frac{6\sqrt{3}A P}{a_f b c,\pi\sqrt{\pi}}\exp\left(-\frac{3x^2}{a_f^2}-\frac{3y^2}{b^2}-\frac{3z^2}{c^2}\right)$$前半轴 $a_f$、后半轴 $a_r$、宽度 $b$、深度 $c$ 这几个参数不能凭感觉填合格的标定方式是拿单道熔池的金相截面反算先量出熔宽和熔深再调 $b$、$c$ 让等温线包住实测轮廓。常见的实现思路是把 $c$ 直接取成目标熔深$b$ 取熔宽的一半$a_f$ 取 $2r_0$ 量级然后微调能量分配比例。真正容易翻车的是网格和时间步的匹配。移动热源的温度场梯度极陡如果热源半径内只有一两个单元数值扩散会把峰值温度抹平熔池看起来「化开了」但温度只有 1200 K你会以为是材料属性写错了实际上是网格分辨率不够。import numpy as np # 激光与材料参数示意值实际以设备标定和材料手册为准 P 200.0 # 激光功率 W A 0.35 # 粉末床有效吸收率 r0 35e-6 # 光斑特征半径 m v 0.8 # 扫描速度 m/s def q_surface(r): 面高斯热源r 为到光斑中心的距离 return 2.0 * A * P / (np.pi * r0**2) * np.exp(-2.0 * (r / r0) ** 2) print(f峰值热流密度 {q_surface(0.0) / 1e9:.2f} GW/m^2) # 两条经验约束热源半径内至少 6 个单元单步内热源移动不超过 0.2 个单元 h_mesh r0 / 6.0 dt 0.2 * h_mesh / v print(f建议单元尺寸 {h_mesh * 1e6:.1f} um建议时间步 {dt * 1e6:.2f} us)这段脚本输出的峰值热流密度在几十 GW/m² 量级这个数可以用来做一次量纲检查如果你在模型里填出来的热流密度是 10⁶ 量级多半是把功率单位当成了 kW 而速度用了 mm/s。网格与时间步的约束不是精确的稳定性判据而是一条保底线——移动热源问题里时间步大到热源一步跨越好几个单元温度历史就变成了锯齿相变潜热吸收会来回震荡求解器开始反复缩步。提示热源参数标定完成后先用单道扫描、单层粉末的简化模型验证熔池尺寸再上多层多道。跳过这一步后面每一层都在放大同一个错误。2.2 相变潜热与表观热容时间步被一段几十 K 的区间卡住粉末熔化要吸热凝固要放热这部分能量就是熔化潜热。忽略潜热峰值温度会偏高熔池偏大冷却速率偏快最终残余应力偏大——误差方向是系统性的不是随机的。数值实现上主要有两条路。焓法把内能写成 $H\int c_p,dTf_l L_f$把潜热塞进焓里对时间步相对宽容。表观热容法则把潜热摊到固液相线区间构造一个等效比热 $c_{eff}c_pL_f\cdot \frac{df_l}{dT}$实现简单和常规传热方程完全兼容COMSOL 里既可以用内置的相变材料节点也可以自己写阶跃函数。问题出在区间宽度上。很多合金的固液相线只差几十 K$L_f/(T_l-T_s)$ 这一项会把表观比热顶到固相比热的十倍以上。这个尖峰意味着温度从固相线爬到液相线的这段路径上热容极大、扩散极慢时间步必须小到能分辨这个尖峰否则求解器一步跨过去能量凭空消失或多出来温度曲线出现台阶状跳变。import numpy as np def apparent_cp(T, cp_s, cp_l, Lf, Ts, Tl): 表观比热把熔化潜热 Lf 均摊到 [Ts, Tl] 区间 T np.asarray(T, dtypefloat) # 基础比热在固液相区间内线性过渡 frac np.clip((T - Ts) / (Tl - Ts), 0.0, 1.0) cp cp_s (cp_l - cp_s) * frac # 潜热贡献只在固液共存区内非零 in_mushy (T Ts) (T Tl) return cp np.where(in_mushy, Lf / (Tl - Ts), 0.0) Ts, Tl, Lf 1878.0, 1923.0, 2.9e5 # 固相线 K、液相线 K、潜热 J/kg示意 cp_s, cp_l 620.0, 830.0 # 固/液相比热 J/(kg*K) T np.linspace(1800, 2000, 2001) cp apparent_cp(T, cp_s, cp_l, Lf, Ts, Tl) print(f表观比热峰值 {cp.max():.0f} J/(kg*K)约为固相的 {cp.max()/cp_s:.1f} 倍)参数说明Ts、Tl来自相图或 DSC 测试Lf来自材料手册frac用截断而不是条件分支是为了让函数在整个温度轴上都可导减少求解器的牛顿迭代失败。输出的倍数关系很关键——如果峰值只有固相的 23 倍说明液相线区间设得太宽相当于人为把相变抹平了如果超过 20 倍时间步会被卡得非常死这时候要考虑改用焓法或者对区间做适度平滑。2.3 粉末床的有效热导率与吸收率40% 孔隙率带来的参数陷阱铺粉层的孔隙率通常在 40%50%热量在粉末床里的传递路径是颗粒接触点导热、间隙气体导热、高温下的颗粒间辐射三部分并联。等效热导率比实体低一个数量级典型值在 0.11 W/(m·K) 量级而实体金属是 1020 W/(m·K)。这个差别直接决定了熔池周围的预热区宽度和层间冷却速度。如果直接把实体热导率赋给粉末单元热量会横向散得太快熔池变窄、冷却速率偏高、温度梯度偏大算出来的残余应力会系统性偏高。反过来如果只用孔隙率做一个简单的串联模型又容易低估高温段的辐射贡献。吸收率是另一个容易被当成常数的地方。粉末床因为颗粒间的多次反射有效吸收率明显高于抛光实体表面常见取值在 0.30.7 之间随粉末粒径、球化程度、表面氧化状态变化。这个参数没有普适值标定方式只能是拿实测熔池宽度反推——这也是为什么单道验证必须做。参数物理含义常见取值区间设错的典型后果有效吸收率 A粉末床吸收的激光能量占比0.30.7熔池尺寸整体偏大或偏小粉末床热导率松装颗粒的等效导热0.11 W/(m·K)预热区宽度、冷却速率失真层厚单层铺粉厚度2050 μm与粒径同量级连续介质假设失效固液相线区间熔化温度范围几十 K表观热容峰值失真时间步被卡熔化潜热固液转变吸收的能量24×10⁵ J/kg峰温偏高熔池偏大层厚这一项值得单独说。2050 μm 的铺层厚度和 2050 μm 的粉末粒径是同一量级意味着单层里只有几颗颗粒「连续介质」这个前提在单层尺度上其实站不住。工程上的处理方式是接受这个近似但把粉末层的物性当作等效参数来标定而不是去追求颗粒级的真实。心里要清楚这是一次有意的简化不是一个精确的描述。3. 单元生死与逐层激活增材制造的时间是怎么被离散的温度场有了接下来的问题是怎么让「逐层堆积」这件事在有限元里发生。SLM 零件动辄几百到几千层如果一开始就把所有单元都激活等于在模拟一块已经成形的实体被激光扫一遍层间约束、热历史、应力累积全部丢失。单元生死机制就是为此存在的。3.1 单元生死杀死单元为什么必须保留它的温度自由度标准做法是建模时把所有层都建出来初始状态全部「杀死」——力学上给一个极小的刚度因子常见取 10⁻⁶ 到 10⁻⁹让它们不参与承载然后在激光扫描到该层时按时间激活。这里有个非常容易踩的坑杀死单元时只应该杀刚度不应该杀导热。如果连热导率一起杀掉未熔化的粉末层就变成了绝热层新激活层和已凝固层之间出现温度断层激活瞬间温度梯度爆炸应力场直接失真。正确的处理是让未激活单元保持粉末床的等效热导率和比热只把力学属性压到接近零。第二个坑是激活时刻的温度初值。新单元被激活时它的节点温度应该是当前层间环境温度或者铺粉后的粉末温度而不是全局初始温度 293 K。如果模型里用的是全局初值每次激活都相当于往热体上贴一块冷铁产生一次虚假的热冲击累积几百层之后应力场完全是噪声。import numpy as np layer_h 30e-6 # 单层厚度 m n_layer 800 # 总层数 hatch 60e-6 # 扫描间距 m v 0.8 # 扫描速度 m/s part_area 10e-3 * 10e-3 # 零件截面积 m^2示意 # 单层扫描时间 扫描线总长 / 速度 t_layer part_area / (hatch * v) print(f单层扫描约 {t_layer*1e3:.1f} ms{n_layer} 层合计 {t_layer*n_layer:.0f} s) def is_active(z, t, t_between0.0): 按高度判断单元是否已激活激光扫到哪一层哪一层才有刚度 layer_idx int(np.floor(z / layer_h)) t_start layer_idx * (t_layer t_between) # t_between 为层间停顿 return t t_start这段逻辑说明的是激活判据的最小形式。参数t_between代表层间铺粉停顿它对层间冷却和层间结合强度影响很大不能默认设 0。实际模型里还会叠加扫描路径同一层内不同区域被扫到的时刻不同严格的激活判据应该基于「激光当前位置是否已经过该单元」而不是只按层号一刀切。按层激活会让整层同时获得刚度层内应力重分布被抹平按路径激活更真实但需要把扫描策略往复、棋盘、条纹编码成时间-空间映射表。3.2 扫描路径与时间步一个零件为什么是 10⁷ 步的账算一下时间尺度就明白为什么 SLM 仿真「算不动」。扫描速度 800 mm/s光斑 70 μm光斑扫过自身直径的时间约 90 μs为了分辨熔池的快速凝固时间步通常要取到 1 μs 量级。而一个零件的打印时间从几十秒到几小时即使只算几十秒的物理时间也是 10⁷ 量级的步数。尺度典型量级对建模的影响光斑直径50100 μm决定熔池区网格上限单层厚度2050 μm决定层间网格与激活频率光斑驻留时间10100 μs决定时间步上限单层扫描时间0.55 s决定单层内的路径编码零件总打印时间10³10⁴ s决定是否必须降阶出路有三条机制上各不相同。第一条是空间局部细化远离熔池的区域网格放大只保留热传导的低频分量时间步仍然受熔池区限制但自由度降下来了。第二条是时间上的多尺度把「单道熔池瞬态」和「零件整体热历史」分成两个模型前者提参数后者用等效热源。第三条是彻底换模型——固有应变法完全不解瞬态温度场直接把每一层的等效收缩应变作为初始应变加载算一次静力学就出残余应力。第三条在工业界用得最多代价是丢失了熔池级别的信息。3.3 顺序耦合与全耦合为什么绝大多数 SLM 模型不做全耦合热固耦合有两种组织方式。全耦合是把温度场和位移场放在同一个方程组里同时求解矩阵里带上交叉项顺序耦合是先解瞬态温度场把每个时间步的温度存下来再作为体载荷插值到力学模型上求解。SLM 场景下顺序耦合是压倒性的主流选择原因很实在热对力的影响是单向主导的力对热的影响变形导致的接触变化、间隙变化在单层尺度上微弱到可以忽略而全耦合要求两边时间步一致力学模型为了收敛往往需要更小的步长等于把传热的计算量再放大一遍。更麻烦的是全耦合下温度场的强非线性会直接污染力学方程的牛顿迭代收敛窗口非常窄。顺序耦合的代价是丢失熔池对流的影响。真实熔池里存在 Marangoni 对流它会把热量从中心往边缘带实际熔池比纯导热模型更宽更浅。常见的补偿手段是把熔池区的热导率人为放大几倍等效对流导热或者直接用双椭球热源把熔宽调宽来凑。这是一种「用一个错误抵消另一个错误」的做法但只要标定过单道熔池工程上完全够用。注意顺序耦合里温度场和力学场的时间步可以不同但插值时必须保证温度历史覆盖力学求解的每一步否则会出现温度「外推」到未来时刻结果毫无意义。4. 从温度场到应力场热应变如何被弹塑性本构记住温度历史有了接下来的问题变成这些温度变化怎么变成应力。答案藏在热应变和塑性流动的竞争里——弹性范围内热膨胀产生应力超过屈服点后应力被塑性变形释放而释放多少取决于当时的屈服强度。SLM 的特殊之处在于材料在几分钟内反复经历从室温到接近沸点的温度循环屈服强度本身就是一个剧烈变化的量。4.1 参考温度与热膨胀系数一个设错的参数能让结果整体平移热应变的定义是 $\varepsilon_{th}\alpha(T),(T-T_{ref})$更严谨的写法是积分形式 $\varepsilon_{th}\int_{T_{ref}}^{T}\alpha(T),dT$因为热膨胀系数本身随温度变化。COMSOL 的材料节点里两者都支持用积分形式更准确尤其是温度跨度上千年的时候。$T_{ref}$ 的物理含义是「无应力温度」不是简单的室温。对 SLM 来说它通常是粉末床预热温度或基板初始温度如果基板预热到 200 ℃参考温度就应该设成 473 K 而不是 293 K。设错的后果是整体叠加一个常数热应变零件尺寸整体胀缩虽然对残余应力的相对分布影响不大但对绝对变形量和脱板后的翘曲量影响是线性的——你会看到零件「整体变大了一点」然后怀疑是网格问题。热膨胀系数在高温段的行为也要留意。部分合金在接近熔点时 α 会出现非线性甚至符号变化分段线性插值时如果只给到 800 ℃ 就外推到 1600 ℃斜率完全失真。这一点在 4.3 的代码里会展开。4.2 退火与塑性松弛后一层激光为什么能抹掉前一层的应力这是 SLM 残余应力分析里最容易被低估的机制。已凝固层并不是被动地承受应力它会被后续层的激光重新加热。当温度爬过材料的再结晶温度或退火温度屈服强度快速下降原本处于弹性状态的应力通过塑性流动被释放掉一部分。换句话说最终残余应力不是各层应力的简单累加而是「累积—释放—再累积」反复迭代的结果。这意味着本构模型必须带温度相关的屈服面。如果只用理想弹塑性或者干脆用线弹性前几层积累的应力会全部保留到最后算出来的残余应力可能高估两到三倍。硬化模型的选择也有讲究单调加载用等向硬化没问题但 SLM 是反复加热-冷却的循环路径包辛格效应明显随动硬化或者混合硬化更接近真实。温度更高、停留时间更长的区域还要考虑蠕变或粘塑性——高温下应力随时间松弛这一步在纯弹塑性模型里是缺失的。4.3 残余应力的两个来源温度梯度机制与冷却收缩机制经典解释有两条。温度梯度机制说的是激光扫过时表层温度远高于内部表层想膨胀但被冷的底层约束产生压应力冷却时表层想收缩又被约束转成拉应力。冷却收缩机制说的是新凝固的一层从高温冷到低温收缩量被下面已经冷却的旧层约束新层受拉、旧层受压。两种机制叠加的结果是典型分布零件靠近基板的底部受压顶部受拉中间存在一个中性层。脱板之后约束解除应力重新分布零件朝远离基板的方向翘曲——薄壁件尤其明显这也是为什么同样参数下薄壁比块体更容易废。边界条件的设置直接决定应力的大小。基板底部全固定相当于给了一个刚性约束算出来的应力会偏高因为真实过程里基板也会随温度轻微变形基板底部只约束法向位移、允许面内自由收缩更接近实际装夹。约束条件选错残余应力的绝对值就没有参考意义只能看分布趋势。import numpy as np # 温度相关材料属性表示意值实际用材料手册或实验标定 T_tab np.array([293, 573, 873, 1173, 1473, 1673, 1878]) # K E_tab np.array([110, 95, 80, 60, 35, 15, 2]) # GPa sy_tab np.array([880, 700, 520, 330, 150, 40, 1]) # MPa def props(T): 分段线性插值超出表格范围时钳制在端点值而不是外推 E np.interp(T, T_tab, E_tab) sy np.interp(T, T_tab, sy_tab) return E, sy for T in [293, 900, 1500, 1900]: E, sy props(T) print(fT{T:5d} K E{E:6.1f} GPa sy{sy:6.1f} MPa)np.interp的关键行为是超出范围时返回端点值这正是我们想要的——1900 K 时返回的是 1878 K 对应的 1 MPa而不是沿最后一段斜率外推成负数。这个细节看起来小实际上很多模型在熔池附近报「弹性模量为负」或者「屈服强度为负」根源就是外推。参数表本身也需要覆盖到液相线以上否则熔池区的单元属性是纯外推出来的物理上不成立数值上还会让牛顿迭代发散。5. 常见问题与排查模型跑不动、结果不对劲时的检查顺序仿真做到一半卡住最耗时间的不是改模型而是不知道往哪改。下面这五条是 SLM 热固耦合里出现频率最高的故障按「先查什么、为什么、怎么修」的顺序排。5.1 熔池峰值温度上万度甚至几万度现象很直观后处理一切片等温线一片红最高温度 20000 K 以上。原因通常出在能量注入的入口——最常见的是单位不一致功率填了 200 但单位是 kW或者扫描速度填了 800 但单位是 mm/s 而模型用的是 m/s导致热源在一个位置上停留了几百倍的时间。第二个常见原因是吸收率被设成了 1配合面热源在极小光斑上积分热流密度直接顶到 10¹¹ 量级。第三个原因是相变潜热漏掉了能量没有出口温度一路爬升。排查顺序建议是先打印热源表达式在某点的数值和 2.1 的估算对一遍量级再检查相变节点是否真的挂上了最后才怀疑网格。5.2 温度场看起来合理应力场大得离谱温度峰值正常、熔池尺寸正常但残余应力算出 2000 MPa超过材料抗拉强度好几倍。原因往往在力学侧参考温度设成了 293 K 而基板实际预热到 473 K整体叠加了一个本不该存在的热应变或者基板底部全固定把基板当成了刚性体约束反力全部转成应力又或者材料属性表只给到 1000 K高温区靠外推屈服强度算成了负值塑性修正直接失效。这三条按顺序查能覆盖八成的「应力离谱」案例。还有一种隐蔽情况单元激活时刻的温度初值用了全局初值每次激活都产生一次虚假热冲击应力随层数单调累积。5.3 求解到某一层突然不收敛缩步缩到极小也没用现象是时间步长被压到 10⁻¹² 量级进度条不动。原因通常是相变尖峰正好卡在当前温度区间表观热容的峰值让方程组的条件数急剧恶化或者某个单元的应力状态正好落在屈服面附近来回跳跃牛顿迭代在两个解之间振荡。解决手段有几种把相变区间的表观热容做平滑处理用双曲正切代替分段线性牺牲一点精度换收敛把屈服面附近的硬化斜率调大一点避免理想塑性检查是否有单元在激活瞬间被压到负体积几何非线性打开后单元畸变会直接杀死求解器。5.4 层激活附近的温度场出现断层后处理看层间界面温度等值线在界面处出现明显折角甚至跳变几十 K。原因是杀死单元时把热导率一起杀了未激活层变成绝热层。正确的做法是分离力学属性和热学属性力学上刚度乘一个极小因子热学上保持粉末床的等效热导率和比热。另一种可能是激活判据按层一刀切整层同时获得刚度层内本应存在的温度梯度被抹平。改成按扫描路径逐区域激活断层的形状会明显改善。5.5 网格加密一倍结果变化超过 20%说明解还没有收敛到网格无关。最常见的原因是热源分辨率不足——光斑半径内单元数少于 5 个能量被数值扩散抹平这时候加密网格会让熔池突然「变大」看起来像物理量变了其实是数值误差在收敛。其次是激活层的网格与层厚不匹配层厚方向上只有一个单元层间温度梯度无法表达。判断方法很简单固定其他参数只把热源区网格加密一倍看峰值温度和熔宽的变化量如果变化小于 5%可以认为网格够了。这条检查花的时间不多但能省掉后面所有基于错误结果的讨论。6. 设计取舍精度和成本之间那条永远在移动的线把整条链路走完会发现SLM 热固耦合仿真里没有「正确的模型」只有「当前问题需要的模型」。同一份几何如果关心的是熔池形貌和孔隙缺陷就必须保留微米级网格和微秒级时间步瞬态热力耦合跑几百万自由度是常态如果关心的是零件整体翘曲和残余应力分布固有应变法是更务实的选择它放弃熔池细节把每层的等效收缩应变作为初始应变一次静力学求解就能给出趋势。中间还有一档热力顺序耦合加局部细化熔池区细、远场粗时间步只在小区域收紧。模型路线保留的物理典型代价适用问题瞬态热力全耦合熔池瞬态、相变、塑性历史自由度与步数都极高熔池形貌、单道/少层机理顺序热力耦合完整热历史 弹塑性中等需存温度历史多层残余应力、翘曲固有应变法仅等效收缩应变低一次静力学大型零件变形趋势热力耦合 局部细化近场瞬态、远场等效中等偏高局部特征 整体变形选择哪一档判断依据不是「哪个更准」而是「你关心的量对哪个物理过程敏感」。翘曲对层间收缩历史敏感对熔池是否深熔不敏感孔隙对熔池深宽比和 Marangoni 对流敏感对整体约束条件不敏感。搞反了就是把算力花在了不影响结论的地方。验证方法也得跟着选。熔池类结果用单道截面的熔宽熔深对比误差控制在 15% 以内算合理应力类结果用 X 射线衍射或钻孔法测几个点的残余应力重点看拉压符号和量级绝对值很难对上变形类结果直接量脱板后的翘曲量这个最容易测也最诚实。还有一条几乎不花钱的检查能量守恒。激光输入的总能量应该等于粉末升温吸热、相变潜热、向基板和环境散失三部分之和对不上就说明有能量凭空产生或消失通常出在相变处理或边界条件上。我自己的习惯是每建一个新模型先跑单道单层把熔宽、熔深、峰值温度三个数记下来和文献或实测对一遍再跑十层看应力是不是随层数单调累积、有没有出现异常的应力释放最后才上完整零件。跳过前两步直接上大模型往往跑了两天才发现吸收率填错了那种后悔药是买不到的。这套流程不聪明但每次都能把翻车的成本压到最低。希望帮到你。本文还有配套的精品资源点击获取
返回列表