日度归档:2026年9月29日

罚函数——接触仿真中收“买路钱”的传奇功法

00 楔子|江湖上有一种武功

江湖上有一种武功,练的人不少,懂的人不多。

它不出拳,不格挡,不立墙,不设障。你闯进来,它不拦你——它只是让你付出一点小小的代价。

穿我半寸?罚你一寸的力。穿我一尺?罚你一丈的力。

罚到第几下,你自己就停了。不是不想闯,是闯起来太贵了。

这门武功,叫罚函数。擅长它的人,叫罚宗师。

虽然懂的人少,但它存在于名门大派的招式谱上,各家的叫法也各不相同:ANSYS 唤它FKN,LS-DYNA 称它SLSFAC,Abaqus 直呼Penalty,到了 COMSOL 门下,只留下一句”罚因子乘子“。名字不同,心法一致。行内人过招时从不直呼其名,只淡淡问一句:”今天罚得重不重?“

罚轻了,穿模;罚重了,发散。轻重之间,隔着整条工程师的职业生涯。

而它的秘笈,其实就摊在各家软件的界面上——只是藏在一扇折叠的暗门后面。推开过那扇门的人,十不足一。

今天这篇,只带你把这本秘笈从头翻一遍。看不懂式子也无妨——这篇里没有一个式子,是留给你背的。只需心领神会,大概明白其意思即可。

01 心法篇|一堵硬墙,换一根硬弹簧

先讲清楚:这门武功为什么难练。

弹性力学、传热、流体,都是连续光滑的场——这里变一点,那里跟着变一点,数值方法最喜欢这种”讲道理”的对手。

接触不一样。接触更像一把刀:要么在鞘中,要么已出鞘,没有”拔了一半”这一说。

两个面没碰上时,各走各的阳关道;一碰上,立刻产生压力,而且只能压、不能拉——拉就不是接触了,那是胶水,那归别的门派管。

于是武林中流传着接触三铁律:

第一律:不许穿透。

第二律:只许压,不许拉。

第三律:要么贴上有压力,要么分开没压力。

三律一出,天下数值方法尽皆色变。因为状态在”接触/分离”之间反复横跳,刚度矩阵翻脸比翻书还快——而数值方法最怕的,就是翻脸快的物理。

罚宗师对付这三条铁律的办法,堪称武林一绝:既然硬拦拦不住,那就不拦了,改收买路钱。

在两个面之间,垫一层刚度极高的虚拟弹簧,绵里藏针,柔中带刚:

  • 你敢穿?可以,请。
  • 穿多深,弹簧就反推多狠。
  • 罚得越狠,越界越少;罚得越松,越界越多。

一句口诀概括这门心法:

“穿多深,罚多狠;罚到疼处,自然停手。”

写成一行:p_n = k_n · δ

符号江湖叫法翻译
δ越界的深浅你闯进去多少(间隙 g 为负就是穿透,δ = −g)
k_n法向罚刚度闯一步的”买路钱单价”
p_n法向接触压力罚出来的代价
罚函数干的事,就是在两个面之间塞一层刚度极高的缓冲弹簧:压得越深、反力越大。

所以”穿透”这东西,本质上是买来的自由:罚得狠,越界少;罚得松,越界多。

后生听到这里,多半一拍大腿:那我把价码定得奇高,罚到它不敢越界,不就完了?

罚宗师会劝你先坐下。这是入门第一大忌——这笔买路钱,从来不是你想定多少就定多少的。它是算出来的。

02 招式篇|仿真七式

在 COMSOL 门下,把接触节点底下那扇”方程“暗门推开(记得勾上”显示假设方程”),秘笈头一页就摊在你面前:

罚刚度 = 罚因子乘子 × 特征模量 ÷ 最小单元尺寸(后两个量,都取自目标侧。)

翻成人话:“买路钱单价” = 门中按你材料筋骨估出的基准价 × 你亲手填的那个系数 ÷ 目标面的网格疏密。

一行读下来,三个玄机全在其中:

  • 它是一整层面弹簧的刚度——单位面积、单位厚度,不是你脑子里那根弹簧;
  • 它在分母上挂着网格:目标面扎得越密,罚得越狠、穿透越小。在接触区偷网格,等于主动把误差放大——要害处不扎桩,省下的十个时辰,迟早变成三十个时辰重练;
  • 你在界面上亲手填的那个数(COMSOL 里叫”乘子“),不是罚刚度本身,只是个比例系数。填 1 =用的自动估值;填 0.1 =把价码打一折,换一口气喘。

顺手验个量纲:Pa ÷ m = Pa/m,再乘上穿透深度(m)得 Pa。严丝合缝,内力不虚。

罚宗师座下,共有七式。练熟了,寻常接触问题皆可一战。

第一式·金针渡穴(网格加密)

最小单元尺寸直接进罚刚度公式。网格越细,穿透越小。在接触区偷网格,等于自废武功——省下的十分钟,会变成三小时重跑。仿真里的”先省一省”,向来是分期付款,利息还不低。

第二式·点名册(命名选择)

把源边界、目标边界预先登记造册,存成命名选择,日后改几何只改一次。

第三式·默认起手式(接触方法)

默认先上罚函数。默认能覆盖大多数情况。别一上来就追求高深,基本功先扎实。

第四式·轻重由心(罚因子)

注意兵刃上的铭文:它叫”乘子“——乘在软件自动估出的值上,是个比例系数,不是罚刚度本尊。填 1 = 用自动值;填 0.1 = 给罚款打一折、换收敛。

第五式·磨剑(摩擦)

这式有个陷阱:不主动加,它就是零。 研究滚动、打滑、摩擦传动的,务必亲手把摩擦模型挂上——否则你算的是无摩擦的情况,物理不对,软件还不会提醒你。

第六式·蚕食(分步加载)

把位移或载荷拆成几十个小步,一口一口吃,比任何求解器技巧都管用。遇到失稳跳变,记一句救命口诀:

“力控一碰就崩,换位移控制,一换就好。”

第七式·回马枪(验收)

打完出图,先验货,再庆功。看最小间隙曲线(负值即穿透),拿结构特征尺寸做分母:千分之一量级,可以写进战报;百分之几,老老实实回去调参。

七式连环,一气呵成。

03 江湖篇|三条保命法则

江湖险恶,罚宗师再传你三条保命法则,都是血泪换的。

第一条 见负不慌。

结果里瞧见负的间隙,先别走火入魔。**穿透是这门武功自带的代价,不是你走岔了路。**就像用尺子量东西总有读数误差——你不会因为尺子有误差,就把尺子退了。

但账要立字据:拿solid.gapmin_p1看最小间隙(负值就是穿透,δ = −g),再除以结构的特征尺寸,报个比例。

门规口诀(易错):g 大于 0 是间隙,等于 0 是接触,小于 0 就是穿透。看到负间隙先别慌——那正是系统在说:”它闯进来了,我罚了这么久,还没把它拉回去。”

千分之一量级,可以理直气壮写进战报;到了百分之几,回去重新调息,或者把金针扎密些。

第二条 掌力收功。

罚因子先自动,再手动往”软”处试,经验区间大致在百分之一到 1。判断只有一条铁律:

结构越柔、变形越大、接触状态切换越频繁,f_p 就要越小。

为什么?自动值是按”材料有多硬”估出来的。可你要算的那根细长件、那张薄膜,未必有那么硬——给一根面条按钢梁的规矩开罚单,它自己还没站稳,罚力已经把牛顿迭代顶飞了。

掌力收三分的代价是穿透变大,换来解能走出来。先能算,再算准。

第三条 砧坯分明。

这一条说的是源和目标。选反了不报错,结果却悄悄偏了——因为特征模量取自目标侧。

源(Source)目标(Destination)
模量估罚刚度不是
网格决定穿透精度次要是,必须细
江湖角色砧:更硬的一方、刚体、模具坯:要变形、要算应力的那个零件

口诀:“硬者为砧,受力者为坯。” 砧从不喊疼,坯才要报数。

还有两个小动作,新手最容易漏:① 先用命名选择给接触面立好名分,别临时点面——往后改几何,只改一次定义;② 勾上”按连续相切分组“——接触面常常是一圈相切小面拼成的圆角,漏掉一个,那一小块就断了经脉:轻则不收敛,重则穿透异常。

在了解了保命法则后,接下来,我们去见识一下各大门派。

04 门派篇|招牌不同,功法一样

罚函数是通用功法,各派只是招牌不同。下面这张谱,可以当”对号入座”的门派名录存着:

门派罚函数去哪找那个数叫什么成法 / 经验
COMSOL固体力学 → 接触 → 接触方法罚因子乘子 f_p默认自动,乘子默认1;柔结构调到百分之一~1
ANSYS接触对 → 高级 → 法向刚度FKN(另有 FTOLN 穿透容差)FKN 默认1.0(绑定/不分离 10.0),推荐 0.01~10,弯曲主导取 0.01~0.1
AbaqusInteraction → Contact PropertyPenalty面—面与通用接触默认 Penalty(罚刚度约10 倍单元刚度)
LS-DYNA*CONTACT/*CONTROL_CONTACTSLSFAC默认0.1(只对 SOFT=0 / 2 生效)

两个容易踩的点:

① 招牌不一样,功法一样。COMSOL 的 f_p、ANSYS 的 FKN、LS-DYNA 的 SLSFAC,都是在软件自动估出的刚度上乘一个系数,不是绝对的刚度值。(唯一的例外:COMSOL 选”用户定义”时填的才是绝对值。)

② “允许穿透多少”不是每家都立了规矩。ANSYS 的 FTOLN 是明写的穿透上限;COMSOL 的罚函数法没有这一项——穿透由 f_p 和目标侧网格共同决定。

05 尾声|下山

临下山前,再说最后一句话。

秘笈就摊在桌上,是你没推开那扇暗门。

同样一个 0.1,有人从别人的 PPT 里抄来,有人从假设方程里推来。短期看,两家结果没什么分别;长期看,模型不收敛的那天,前者只能闭着眼挨个试数字,后者知道该用哪一种功法。

差别不在天赋,只在一件事——有没有把那个折叠栏推开过。

罚函数这门功夫,说到底,是给结构配了一根隐形的弹簧。

它不追求绝对正确,只追求错一点点,但算得出来。

江湖路远,仿真无涯。工程师手里从来没有完美解——

只有心里有底的解。