题外话:因为微 信的推荐机制变动,有可能大家不会第一时间看到我的文章,请大家给我的公 众号标上⭐,以免错过好资源。
【问】:最近写有限元程序,方块模型的计算速度可以比abaqus快四倍,但是换复杂模型之后就只能和abaqus差不多,甚至比abaqus慢不少了,这是为什么呢?模型的节点编号方式是否会影响计算速度?
【答】:会的,节点编号的方式直接影响刚度方程的计算量。
【木木分析】:在有限元分析中,一个显著的特点是需要将各个单元的刚度矩阵进行组装。这个过程涉及将每个单元的矩阵系数根据节点的编号插入到整体刚度矩阵中。
由于只有在同一单元内部相互关联的节点才会在整体矩阵的相应行和列中出现非零的刚度系数,因此在整体矩阵中不可避免地会存在大量的零元素。
这种稀疏矩阵的特性源于有限元分析中每个单元只对其局部节点产生影响,导致整体矩阵中许多位置的刚度系数为零。
单元和节点的编号将直接影响到非零数据在整体刚度矩阵中的位置。
整体刚度矩阵元素呈带状分布,带状以外的元素全为 0,现考虑以下的一维杆单元结构:
整体刚度矩阵可表示为:
从以上矩阵的元素分布来看,带状之外的元素均为 0,以上矩阵可以压缩为:
是 维矩阵,其中 NBW 表示半带宽,半带宽计算公式:某个单元在整体刚度矩阵的半带宽:
其中, 为节点自由度数,对于 1D 问题, ;对于 2D 问题, ;对于 3D 问题, 。整体刚度矩阵的最大半带宽:
其中,n 为单元总数。
通过以上公式可以知道,节点编号方案中,如果单元的连接节点编号差值越大,相应的半带宽就越大,进而整体矩阵的最大半带宽越大,非零元素就越少,增大计算机的存储空间和计算量。
如果对于以上公式概念还有点迷糊的话,可以进一步再看一个案例:
对于以上结构的第 个单元在整体刚度矩阵的装配位置:
若单元内部节点的编号相差较大,其在整体刚度矩阵的半带宽就会较大,影响整体刚度矩阵的最大半带宽量。
若有限元程序按照一维变带宽存储方案:有限元进阶编程——一维变带宽存储整体刚度矩阵,系统解线性方程组大约需要 次运算,其中 为整体刚度矩阵的阶数, 为最大半带宽,从以上公式可以看出降低整体矩阵的最大半带宽,可以大幅提升(二次方)刚度方程的运算次数。
对于以下结构:
第一种编号方式的最大半带宽为 45,第二种编号方式的最大半带宽为 15。第二种编号方式的最大半带宽是第一种的 ,那么第二种的刚度方程计算量约为第一种编号方式的 !
[1] Chandrupatla, Tirupathi R., et al. Introduction to finite elements in engineering. Pearson, 2012.
[2] 曾攀. 有限元分析基础教程. 北京: 清华大学出版社, 2008.
[3] 张雄. 有限元法基础. 高等教育出版社, 2023.
参与更多互动交流,快快在下方留言区留下你的小脚印吧~
-End-
易木木响叮当
想陪你一起度过短暂且漫长的科研生活