3. 一维问题网格划分:杆单元、梁单元的网格划分策略、节点与单元编号规则
各位同学,咱们今天聊聊一维问题的网格划分。说白了,就是杆和梁怎么切段、怎么编号。我刚开始做有限元那会儿,觉得一维问题太简单了,不就是画几条线嘛。结果呢?算出来的结果跟实验数据对不上,折腾了好几天才发现是网格划分的锅。嗯,这里面的门道,咱们得好好捋一捋。
3.1 杆单元与梁单元的本质区别
先搞清楚一个基本概念:杆单元和梁单元,虽然都是一维的,但它们的“性格”完全不同。
- 杆单元:只承受轴向力,说白了就是拉和压。每个节点只有1个自由度——沿着杆方向的位移。你想想看,一根绳子,你只能拽它或者压它,它不会弯。
- 梁单元:除了轴向力,还能承受弯矩和剪力。每个节点有2个自由度——横向位移和转角。一根铁棍,你从中间压它,它会弯,这就是梁的行为。
核心区别:杆单元是“拉压器”,梁单元是“弯拉压器”。网格划分时,梁单元对节点密度的要求比杆单元高得多。
我在项目中遇到过这样一个案例:一个桁架桥的模拟,有人用梁单元去模拟所有杆件,结果计算量暴增,收敛还慢。其实桁架中的二力杆,用杆单元就够了,没必要杀鸡用牛刀。
3.2 网格划分策略
3.2.1 杆单元的网格划分
杆单元其实挺“好说话”的。因为它只有轴向变形,所以网格划分相对简单。我个人习惯遵循以下原则:
- 均匀划分:对于等截面直杆,均匀划分就行。每个单元长度相等,节点间距一致。
- 变截面处加密:如果杆的截面有变化,比如粗细交接的地方,一定要在变化处布置节点。我曾经吃过这个亏——偷懒没在变截面处加节点,结果应力结果完全不对。
- 载荷作用点必须设节点:集中力、集中质量作用的位置,必须有一个节点在那里。这是有限元的基本规则,不能违反。
- 单元数量:对于静力分析,杆单元一般10-20个单元就够用了。但如果是动力分析或者有非线性,可能需要更多。
小技巧:杆单元的网格密度对轴向位移的精度影响不大,但对应力精度影响很大。如果你关心应力,记得把网格加密到应力收敛为止。
3.2.2 梁单元的网格划分
梁单元就“娇气”多了。为什么?因为它要算弯曲,而弯曲对网格密度很敏感。
- 至少3-5个单元跨过每个跨度:对于简支梁、悬臂梁这类基本结构,每个跨度内至少要有3-5个单元。我一般起步就用5个,省得后面返工。
- 应力集中区加密:梁的支座附近、集中力作用点、截面突变处,这些地方的应力梯度大,网格要加密。加密到什么程度?我通常的做法是:先算一遍,看应力云图,哪里变化剧烈就在哪里加单元。
- 长细比控制:梁单元的长细比(单元长度/截面高度)一般建议在5-20之间。太长了,弯曲变形算不准;太短了,计算量上去了但精度提升有限。
- 避免过于细长的单元:如果一个梁单元的长度是截面高度的50倍以上,那这个单元的弯曲刚度会被严重低估。说白了就是“太软了”,算出来的挠度会偏大。
注意:梁单元网格划分时,千万不要在弯矩最大的地方只放一个单元。我见过有人用1个单元去模拟一根悬臂梁,结果算出来的端部位移只有理论值的一半。为什么?因为一个线性梁单元只能模拟常弯矩分布,而悬臂梁的弯矩是线性变化的,一个单元根本不够。
3.3 节点与单元编号规则
编号这事儿,看着简单,但真能影响计算效率。我早期做项目时,编号随便来,结果求解器花了大把时间在带宽优化上。后来学乖了,总结了一套规则。
3.3.1 节点编号原则
- 沿结构走向顺序编号:对于一维结构,从左到右(或从下到上)依次编号。比如一根10个单元的梁,节点号就是1,2,3,...,11。
- 最小化带宽:节点编号的差值越小,总刚矩阵的带宽就越小,求解效率就越高。说白了,相邻节点的编号要尽量连续。
- 分支结构特殊处理:如果结构有分支(比如T形梁),先编主干,再编分支。分支的起始节点号要跟主干连接处的节点号尽量接近。
3.3.2 单元编号原则
- 与节点编号顺序一致:单元编号最好跟节点编号的顺序走。比如节点1-2组成单元1,节点2-3组成单元2,以此类推。
- 材料/截面分组:如果结构中有不同材料或不同截面,尽量把相同属性的单元编在一起。这样后处理时方便,也便于检查。
- 留有余量:我习惯在编号时留一些空号,比如1,2,3,...编到50,然后跳几个号再继续。为什么?因为后期可能要在中间插入单元,有空号就不用大改编号了。
3.4 一个完整的示例
咱们来看一个具体的例子。一根长度为3米的悬臂梁,截面是工字钢,自由端受集中力。我建议这样划分:
- 将梁分成6个单元,每个单元0.5米
- 节点编号:1(固定端),2,3,4,5,6,7(自由端)
- 单元编号:单元1(节点1-2),单元2(节点2-3),...,单元6(节点6-7)
这样编号,总刚矩阵的带宽只有2(每个节点2个自由度,带宽=4),求解效率很高。
检查清单:网格划分完后,我通常会问自己三个问题——
- 所有载荷作用点都有节点吗?
- 所有截面变化处都有节点吗?
- 相邻节点的编号差值最小化了吗?
三个问题都回答“是”,这网格基本就合格了。
3.5 知识体系总览
下面这张图,是我自己总结的一维网格划分知识框架。你把它存下来,做项目时对照着看,能少走不少弯路。
这张图把杆单元、梁单元和编号规则的核心要点都串起来了。你对照着看,哪个环节没做到位,一目了然。
3.6 避坑指南
最后,分享几个我踩过的坑,你遇到了直接绕过去:
- 坑1:杆单元当梁单元用——我曾经用杆单元去模拟一个受弯的构件,结果算出来的位移小得离谱。杆单元没有弯曲刚度,它只会拉压,不会抗弯。
- 坑2:编号不连续导致带宽爆炸——有一次我编节点号时跳着编,1,2,3,然后直接跳到100。结果总刚矩阵的带宽从4变成了200,求解时间从几秒变成了几分钟。
- 坑3:忽略剪切变形——对于短粗梁(跨高比小于5),如果还用普通欧拉梁单元,算出来的挠度会偏小。这时候要用铁木辛柯梁单元,它考虑了剪切变形。
我的习惯:每次网格划分完,我都会手动检查一遍节点和单元编号。虽然现在软件都有自动编号功能,但自动编号不一定最优。花5分钟手动调整一下,可能省下半小时的求解时间。
好了,一维网格划分的核心内容就这些。记住:杆单元简单,梁单元复杂,编号要讲究。你动手做几个例子,很快就能找到感觉。
公众号:蓝海资料掘金营,微信deep3321