第四章 结构刚度矩阵的存贮方式和组集程序

64
第第第 第第第第第第第第第第第第第第第第

Upload: nimrod

Post on 18-Jan-2016

88 views

Category:

Documents


0 download

DESCRIPTION

第四章 结构刚度矩阵的存贮方式和组集程序. 前面几章,我们介绍了有限元法的基本原理,较深入地讨论了单元分析和系统分析理论。有限元法的重要价值在于方便编写程序,借助于计算机完成全部计算工作。. 在整个编程和计算中, 影响最大的是结构刚度矩阵的存贮和组集 。本章就对这一问题进行专门讨论。. 结构刚度矩阵的组集方法、程序和它的存贮方式密切相关,还依赖于约束条件的处理方式。本章介绍三种存贮方式: 方阵存贮、等带宽存贮和一维数组存贮 。. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第四章   结构刚度矩阵的存贮方式和组集程序

第四章 结构刚度矩阵的存贮方式和组集程序

Page 2: 第四章   结构刚度矩阵的存贮方式和组集程序

前面几章,我们介绍了有限元法的基本原理,较深入地讨论了单元分析和系统分析理论。有限元法的重要价值在于方便编写程序,借助于计算机完成全部计算工作。

在整个编程和计算中,影响最大的是结构刚度矩阵的存贮和组集。本章就对这一问题进行专门讨论。

结构刚度矩阵的组集方法、程序和它的存贮方式密切相关,还依赖于约束条件的处理方式。本章介绍三种存贮方式:方阵存贮、等带宽存贮和一维数组存贮。

Page 3: 第四章   结构刚度矩阵的存贮方式和组集程序

本章讨论的结构刚度矩阵存贮方式和组集的基本内容,适合于各类结构,包括杆系结构、弹性连续结构等。适合于结构静力分析,也是结构动力分析以及稳定性分析的重要基础。

约束条件采用第三章思想处理:从无约束的结构刚度矩阵中删去与受约束位移号对应的行和列,再将矩阵压缩排列成 n×n 阶方阵。实际操作时,根本就不去存贮这些行和列。

下面,我们就从方阵存贮方式开始。

Page 4: 第四章   结构刚度矩阵的存贮方式和组集程序

为叙述简便起见,本章中所用“单元刚度矩阵”一词都指结构坐标单元刚度矩阵。只有特别需要时才加“结构坐标”定语。

5.1 结构刚度矩阵的方阵存贮

e

kK ]ˆ[ ( 3-8 )

由第三章式( 3-8 )知

结构刚度矩阵 [K] 等于所有膨胀后的单元刚度矩阵[k] 相累加。下面详细考察如何在程序中实现这个操作。

1 、单元刚度矩阵元素的两类地址

单刚地址和总刚地址。

Page 5: 第四章   结构刚度矩阵的存贮方式和组集程序

( 1 )单刚地址 单刚地址是指单元刚度矩阵元素在膨胀前的单元刚度矩阵中的地址,即行、列号。式( 4-1 )矩阵中每个元素的两个下标就是该元素的单刚地址。第一个下标指行号,第二个下标指列号。例如 k15 的说明它是矩阵中第 1 行第 5

列位置的元素。

666564636261

565554535251

464544434241

363534333231

262524232221

151514131211

kkkkkk

kkkkkk

kkkkkk

kkkkkk

kkkkkk

kkkkkk

( 4-1 )

Page 6: 第四章   结构刚度矩阵的存贮方式和组集程序

( 2 )总刚地址

总刚地址是指单元刚度矩阵元素在膨胀后的单元刚度矩阵中的地址(行、列号)。这个地址与单元的节点号有关,而节点号是离散结构时编好的,还与节点自由度有关。

i j X

Y

i3

j1

j3

i1 j2

i2

l

图 4-1

设式( 4-1 )是图 4-1 所示梁单元的单元刚度矩阵。该单元两个节点的节点号为i 、 j ,节点自由度是 3 。

单元刚度矩阵元素的总刚地址应为:i1 、 i2 、 i3 、 j1 、 j2 、 j3 ,如式( 4-2 )。

Page 7: 第四章   结构刚度矩阵的存贮方式和组集程序

( 4-2 )

666564636261

565554535251

464544434241

363534333231

262524232221

151514131211

kkkkkk

kkkkkk

kkkkkk

kkkkkk

kkkkkk

kkkkkk

i1 i2 i3 j1 j2j3

i1

i2

i3

j1

j2

j3

有iiiiii 3,13,23 321 jjjjjj 3,13,23 321

( 4-3 )

Page 8: 第四章   结构刚度矩阵的存贮方式和组集程序

图 4-2

ij

m

i1

j1

m1

i2

j2

m2

X

Y 如果式( 4-1 )是图 4-2 所示平面问题三角形单元的单元刚度矩阵。该单元三个节点的节点号为 i 、 j 、 m ,节点自由度是2 。 单元刚度矩阵元素的总刚地址应为:

i1 、 i2 、 j1 、 j2 、 m1 、 m2 ,如式( 4-4 )、( 4-5 )。

( 4-4 )

,2,12 21 iiii ,2,12 21 jjjj

,2,12 21 mmmm

Page 9: 第四章   结构刚度矩阵的存贮方式和组集程序

( 4-5 )

666564636261

565554535251

464544434241

363534333231

262524232221

161514131211

kkkkkk

kkkkkk

kkkkkk

kkkkkk

kkkkkk

kkkkkk

i1 i2 j1 j2 m1m2

i1

i2

j1

j2

m1

m2

Page 10: 第四章   结构刚度矩阵的存贮方式和组集程序

( 3 )两类地址的连接数组

建立一个连接数组供计算机识别两类地址,以便正确地从单元刚度矩阵中取出元素,并放入结构刚度矩阵之中。

给连接数组取个名,例如: LM ( NDF2 ),它是一维数组,数组长度 NDF2 是单元自由度的最大值。

先不考虑约束情况: 对于平面梁单元组成的结构

[LM]=[ 3i-2 3i-1 3i 3j-2 3j-1 3j ] ( 4-6 )

对于平面问题三角形单元组成的结构

[LM]=[ 2i-1 2i 2j-1 2j 2m-1 2m ] ( 4-7 )

Page 11: 第四章   结构刚度矩阵的存贮方式和组集程序

从式( 4-6 )、( 4-7 )知,建立连接数组应先知道单

元的节点号 i 、 j 、 m 。这些数据应作为结构计算的初始

数据在程序开始后即读入的,因此是已知的。通常,这些

数据读入后,按照单元号顺序由小到大依次存放在若干个

一维数组中,例如,数组 IO 、 JO 、 MO 分别存放

i 、 j 、 m 节点号;数组 IO 、 JO 、 MO 的长度为单元总

数。当然也可用一个多维数组存放它们。

( 4 )建立连接数组的条件

Page 12: 第四章   结构刚度矩阵的存贮方式和组集程序

现在我们指出一个明显而重要的事实。所谓单元刚度矩阵的膨胀只不过为了说明问题的概念。事实上,执行时并不去膨胀单元刚度矩阵。所谓把所有单元膨胀后的单元刚度矩阵累加起来,即算式

的实现操作方法非常简单:

[K]= [k]ee=1

NE ^

只要把每个单元的单元刚度矩阵 [k] 的每个元素按照它的总刚地址送入总刚度矩阵 [K] ,并简单地累加起来就组集起了总刚度矩阵 [K] 。

2 、组集无约束结构刚度矩阵( 1 )方法

Page 13: 第四章   结构刚度矩阵的存贮方式和组集程序

( 2 )步骤组集无约束结构总刚度矩阵的具体步骤如下:

① 矩阵 [K]充零 即把 [K] 的 N1×N1 个元素全部置为零元素。

N1=NJ (节点总数) ×NDF (一个节点自由度数)

② 从第 1 号单元开始,依次对所有单元执行下述操作:( 下面符号“ e”代表被执行的单元号 )

(a) 计算 e 号单元单元坐标系下的单元刚度矩阵 [k]e 。 (b) 计算 e 号单元的坐标变换矩阵 [R] 。 (c) 形成 e 号单元结构坐标系下的单元刚度矩阵 [k] 。计算公式为 : [k]=[R]T[k]e[R]

Page 14: 第四章   结构刚度矩阵的存贮方式和组集程序

(d) 建立 e 号单元的连接数组 [LM]

(e) 把 e 号单元结构坐标单元刚度矩阵 [k] 的元素按连接数组给出的总刚地址送入结构刚度矩阵 [K] 并进行累加。赋值语句为: K(i,j)=K(i,j)+k(p,q) ( 4-

8 ) K(i,j) —— 结构刚度矩阵中第 i 行 j 列元素 k(p,q) —— 单元刚度矩阵中第 p 行 q 列元素 p, q —— 单刚地址 i, j —— 总刚地址 为了节省存贮、节省运算时间,执行第 (e)步时应利用单元刚度

矩阵和结构刚度矩阵的对称性。用式( 4-8 )只须将单元刚度矩阵的上三角部分(含对角线元素)装入结构刚度矩阵中,形成结构刚度矩阵的上三角部分。

Page 15: 第四章   结构刚度矩阵的存贮方式和组集程序

666564636261

565554535251

464544434241

363534333231

262524232221

151514131211

kkkkkk

kkkkkk

kkkkkk

kkkkkk

kkkkkk

kkkkkk

k

执行命令 K( j, i )=K( i, j ) ( i < j )

即得结构刚度矩阵 [K] 的下三角部分元素。

结构刚度矩阵中的上三角元素

单元刚度矩阵中的上三角元素

组成

Page 16: 第四章   结构刚度矩阵的存贮方式和组集程序

00000000

000000

00000

0000000

000

0000

000000

000000

0000

000000

00000000

000000000

K

Page 17: 第四章   结构刚度矩阵的存贮方式和组集程序

执行上述第②步时,对每个单元皆重复同样规律的计算,因而应编写独立的子程序。

( 3 )程序框图 [K] ← 0

ELEM ( M )

M← ( 1 , 1 , NE)

II ← IO[M] , JJ ← JO[M]

I1← ( 1 , 1, NDF )

Page 18: 第四章   结构刚度矩阵的存贮方式和组集程序

K [R,C ] ← K [ R,C ] + k [I,J ]

K [ C,R ] ← K [C,R ] + k [ J,I ]

LM(I1) ← NDF*(II-1)+I1LM(I1+NDF) ← NDF*(JJ-1)+I1

R ← LM(I)

K(R,R)←K(R,R)+k(I,I)

I←(1 , 1 , NDF2)

J←(I+1, 1, NDF2)

C ← LM [ J ]

R < C

Page 19: 第四章   结构刚度矩阵的存贮方式和组集程序

3 、组集约束结构总刚度矩阵

组集起无约束结构的总刚度矩阵 [K] 之后,形成受约束结构的结构刚度矩阵 Kff 的原则是很简单的。例如,如果第 L 号位移分量受有刚性约束,即 L=0 。那么,只要把无约束结构刚度矩阵 [K] 的第 L 行和第 L 列删去即可。对所有受刚性约束的位移分量都作这样处理后,就得到约束结构的结构刚度矩阵 [Kff] 。

所谓约束是指刚性约束。弹性约束可按弹性单元处理,而在刚性支承处引入约束。

Page 20: 第四章   结构刚度矩阵的存贮方式和组集程序

假定所讨论的结构受刚性支承约束的节点共有 NRJ 个。我们用一维数组 KRJ(NRJ)

来存贮这些受刚性支承约束的节点的号码。

每个受约束的节点,它的各个自由度可能全受到约束,也可能只有一个自由度被约束。为了表明这种情况,还需一个二维数组 :

( 1 )约束信息数组

KRL(NDF,NRJ)

下面我们就按照这个原则来组集 [Kff] 。但不是在形成 [K] 之后再从其中删去一些行和列,而是根本不去存贮应该删去的那些行和列。

Page 21: 第四章   结构刚度矩阵的存贮方式和组集程序

例 图 4-3 所示框架结构NRJ=3 321KRJ

010

111

011

KRL

数组 [KRL] 的第 i 列,说明数组 [KRJ] 中的第 i 个节点的每个自由度是否受约束。我们规定:元素为 1 受约束, 0

表示不受约束。

1 号节点 1 、 2 受约束, 3

不受约束; 2 号节点 3 个位移均受约束; 3 号节点只 2 受约束。

X

Y

○○○

○1 2 3

4 65

图 4-3

1

2

3

数组 KRJ 、 KRL 给出了结构的全部约束信息。这些信息应作为初始数据交由计算机读入的。

Page 22: 第四章   结构刚度矩阵的存贮方式和组集程序

( 2 )节点位移信息数组

节点位移信息数组可命名为 ID(NDF,NJ) 。 NJ 是节点总数。数组 ID 是一个 NDF 行 , NJ 列的二维数组。

ID 数组先用来表明每个节点(无论它是否受约束)的各个自由是否受到约束。对图 4-3 情形, NDF=3 , NJ=6 , ID 数组的内容是:

000010

000111

000011

ID ( 4-9 )X

Y

○○○

○1 2 3

4 65

1

2

3

这一步可借助于 KRL 数组实现。

Page 23: 第四章   结构刚度矩阵的存贮方式和组集程序

再对 ID 数组进行如下改造:从第 1 列开始,自上而下检查,遇 1 改 0 ,遇 0则用上一个非 0 元素加 1;然后,对第 2 列、第 3 列、…依次按同样办法检查处理,完成后,得最终形式的 ID 数组。仍以图 4-3 为例,对式( 5-9 )改造后,得 :

X

Y

○○○

○1 2 3

4 65

图 4-3

1

2

3( 4-10 )

000010

000111

000011

ID

0

01

0

00

2

03

4

5

6

7

8

9

10

11

12

Page 24: 第四章   结构刚度矩阵的存贮方式和组集程序

a) 如果 ID ( i, j ) = 0

则表明 j 号节点第 i 个自由度受有约束。

b) 如果 ID( i, j ) ≠ 0

则 j 号节点第 i 个自由度不受约束。并且, j 号节点第 i 个位移分量在非约束节点位移列向量 f 的序号就是 :

ID( i, j )

改造后的 ID 数组的性质是 :

Page 25: 第四章   结构刚度矩阵的存贮方式和组集程序

[ID] ← 0

J ←KRJ(M)

M← ( 1 , 1 , NRJ )

ID[ I,J ] ← KRL[ I,M ]

I← ( 1 , 1, NDF )

KK←0

ID 数组形成框图

受约束节点总数

受约束节点号

受约束节点信息

Page 26: 第四章   结构刚度矩阵的存贮方式和组集程序

J ← ( 1 , 1, NJ )

I ← ( 1 , 1, NDF )

I D [ I , J ]=1

K K ← K K + 1

ID(I,J) ← K K ID(I,J) ← 0

Page 27: 第四章   结构刚度矩阵的存贮方式和组集程序

组集受约束结构总刚度矩阵 [Kff] 和组集无约束结构

总刚度矩阵 [K] 的区别在于前者引入了约束,而后者没有。

因此,组集受约束结构总刚度矩阵 [Kff] 的步骤与组集无

约束结构总刚度矩阵 [K] 的步骤完全相同。只须在组集无约束结构总刚度矩阵 [K] 的方法中,做以下三点修改,以反应约束的引入。

( 3 ) 受约束结构总刚度矩阵的组集

① 结构刚度矩阵的体积从 n1×n1改为 n×n

n1—— 不考虑约束的节点总自由度

n1=NDF×NJ

Page 28: 第四章   结构刚度矩阵的存贮方式和组集程序

② 根据 ID 数组形成连接数组

③ 在单元刚度 [k] 的总刚地址中只要为 0 ,则根本不把[k] 中的相应行和列送入结构刚度矩阵。

执行上述过程,得到的就是受约束结构刚度矩阵 [Kff] 。

n—— 删去约束后,结构的节点自由度总数 n=n1-nr

nr—— 受约束节点的自由度数

Page 29: 第四章   结构刚度矩阵的存贮方式和组集程序

( 4 )程序框图

II ← IO[M] , JJ ← JO[M]

[K] ← 0

ELEM ( M )

M← ( 1 , 1 , NE)

I1← ( 1 , 1, NDF )

LM(I1) ← ID(I1,II)LM(I1+NDF) ← ID(I1,JJ)

I←(1 , 1 , NDF2)

Page 30: 第四章   结构刚度矩阵的存贮方式和组集程序

K[IR,JC] ← K[IR,JC] + k [I,J ]

K [JC,IR] ← K[JC,IR] + k [ J,I ]

IR < JC

K(IR,IR)←K(IR,IR)+k(I,I)

IR ← LM(I)

J←(I+1, 1, NDF2)

JC ← LM [ J ]

IR = 0

JC = 0

Page 31: 第四章   结构刚度矩阵的存贮方式和组集程序

4.2 结构刚度矩阵的等带宽存贮 1 、结构刚度矩阵的稀疏性

在第 3 章里,我们曾经指出,结构刚度矩阵是具有大量零元素的稀疏矩阵。

现在对这一性质作进一步的考察。

00000000

000000

00000

0000000

000

0000

000000

000000

0000

000000

00000000

000000000

K

Page 32: 第四章   结构刚度矩阵的存贮方式和组集程序

在对结构系统进行平衡分析时知,如果 i 节点发生单位位移,只有与节点 i 有直接联系的那些节点才会受到影响,产生节点力。反之, i 节点是否产生节点力也只会受与它直接相连的节点的影响。

设结构中共有 100 个节点,其中第 i ( i = 4 )号节点及其与 i 号节点直接联系的节点如图 4-4 所示。

图 4-4 平面框架中的节点2

5

j=7

i=4

则结构刚度矩阵中的 3i-2, 3i-1, 3i 行的形式为:

Page 33: 第四章   结构刚度矩阵的存贮方式和组集程序

00000 47454442 KKKK

2

101112

1

⋮100

10 21

12

上图中每个小方块是一个三阶子块阵,所示出的与节点 i

相应的 100 个三阶子块中,只有 4 个非零块,其余 96 个皆为零元素组成的三阶子块。通常,对于任何一个节点,与它直接联系的节点个数和问题中的节点总数比较起来总是小得多。因而,呈现出结构刚度矩阵的高度稀疏性。

图 4-5

4

Page 34: 第四章   结构刚度矩阵的存贮方式和组集程序

由于刚度矩阵为对称矩阵,只要对节点适当编号,就能使刚度矩阵的非零元素聚集在主对角线两侧,呈现为图4-6 所示带状矩阵。

UBW

UBW 0

0

称图 4-6

Page 35: 第四章   结构刚度矩阵的存贮方式和组集程序

一般,刚度矩阵各行的非零元素个数和排列是不同的。对第 i 行而言,从主对角线元素 Kii 算起,直到它最右边的一个非零元素为止,其间所有元素(包括可能有的零元素)的个数,称为该行的右带宽。以图 4-5 为例,第 10

行的右带宽为 12 ,即包括

K10 , 10 , K10 , 11 …, , K10 , 21 。

这 12 个元素。

把相互连接的两个节点 i 和 j 的号码差∣ j – i∣称为相邻点号

差,当 i<j 时从主对角线子块 [Kii]到最右边的非零块 [Kij] ,共有

∣ j – i + 1∣ 个三阶子块;当 i>j 时,从 [Kjj]到 [Kji] 也共有∣ j – i + 1∣

个三阶子块。因而:

Page 36: 第四章   结构刚度矩阵的存贮方式和组集程序

图中所示三行中最大的右带宽为:

(∣ j – i + 1 ∣ ) * 3

00000 47454442 KKKK

2

101112

1

⋮100

10 21

12

图 4-7

4

Page 37: 第四章   结构刚度矩阵的存贮方式和组集程序

刚度矩阵各行右带宽中之最大者,称为最大右带宽。因刚度矩阵为对称矩阵,最大右带宽和最大左带宽是相同的,故简称最大右带宽为最大半带宽,记为UBW ( Upper Band Width )。

当结构的节点编号确定后,刚度矩阵的最大半带宽随之确定。找出所有相邻点号差中的最大者,记为 rmax ,则刚度矩阵最大半带宽为

UBW = ( 1 + rmax ) * NDF ( 4-9 )

其中, NDF 为节点自由度。对平面刚架, NDF = 3 。对弹性平面问题, NDF=2 。

Page 38: 第四章   结构刚度矩阵的存贮方式和组集程序

2 、结构刚度矩阵的等带宽存贮

鉴于工程结构都是几何不变结构,从现在起,我们只讨论受约束结构的刚度矩阵。为书写简便起见,用 [K]代表受约束结构的刚度矩阵,即以前的 [Kff] 。

因为刚度矩阵是对称的,只须存贮它的一半即可。约定:只存贮 [K] 的上三角部分。带区之外全是零元素,自然不必存贮,因此只需存贮包括主对角元素在内的上半带宽区域内的元素。这样,大大节约了需占用的计算机内存。称这种存贮方式为等带宽存贮。

设 N 为独立结点位移分量总数,则原始形式的刚度矩阵 [K] 是一个 N 行 N 列的方阵。所谓等带宽存贮,就是把[K] 的上半带宽区域内全部元素用一个 N 行 UBW 列的矩形数组予以存贮:

Page 39: 第四章   结构刚度矩阵的存贮方式和组集程序

UBW UBW行 号

1 →

IR →

N→

1列 号 JC

行 号1 →

IR →

N→

1 JC-(IR-1)

0

0

0

000

00

方阵形式

0000

000

000

00

0

000

00

等带宽形式图 4-8

Page 40: 第四章   结构刚度矩阵的存贮方式和组集程序

对比上图知:

( 1 )等带宽存贮实际上是矩形数组存贮,矩形数组的行数和方阵行数相同,列数为半带宽数;

( 2 )方阵存贮中第 IR 行第 JC 列( JC≥IR )元素Kir,jc 在矩形数组中的行号与方阵存贮相同;

( 3 )由于方阵存贮中的主对角线上元素在矩形数组中都在第一列,第 IR 行主对角线元素左移了( IR-1 )列,且主对角线以右的所有元素都左移了( IR-1 )列。所以,方阵存贮中第 IR 行第 JC 列( JC≥IR )元素 Kir,jc 在矩形数组中的列号是 :

列号 = JC-(IR-1)

Page 41: 第四章   结构刚度矩阵的存贮方式和组集程序

方阵存贮和矩形数组存贮地址关系

存贮方式 行号 列号方阵存贮 IR JC

等带宽 ( 矩形数组 ) 存贮 IR JC-(IR-1)

综上所述,可得到等带宽存贮下组集受约束结构总刚度矩阵的计算框图。与按方阵存贮时的计算框图相比,区别仅在于 J循环应修改为如下形式:

Page 42: 第四章   结构刚度矩阵的存贮方式和组集程序

K[IR,JC] ← K[IR,JC] + k [I,J ]

K [IRR,JCC] ← K[IRR,JCC] + k [ J,I ]

IR < JC

J←(I+1, 1, NDF2)

JC ← LM [ J ]

JC = 0

JC ← JC-IR+1

IRR ← JC

JCC ← IR-JC+1

Page 43: 第四章   结构刚度矩阵的存贮方式和组集程序

3 、关于节点编号问题

与方阵存贮所需的存贮量相比,等带宽存贮大大减少了所需占用的计算机内存。例如,对于具有 100 个节点的平面刚架而言,总刚度矩阵共有 300×300 即 9万个元素。按等带宽存贮时,假定其最大半带宽 UBW = 18 ,则所需存贮量为 300×18 = 5400 个元素。

按等带宽方式存贮刚度矩阵也存在优化问题,这就是最大半带宽 UBW 最小。欲使最大半带宽 UBW 最小,必须注意节点编号方法,使直接联系的相邻节点的最大点号差最小。

Page 44: 第四章   结构刚度矩阵的存贮方式和组集程序

5.3 结构刚度矩阵的变带宽存贮

等带宽存贮虽然已经节省了不少内存,但认真研究半带宽内的元素,还有相当数量的零元素。在平衡方程求解过程中,有些零元素只增加运算工作量而对计算结果不产生影响。如果这些零元素不存、不算,更能节省内存和运算时间。这就是本章要介绍的变带宽存贮,也称一维数组存贮。

1 、存贮方式

假定结构刚度矩阵 [K] 在方阵存贮中有如下形式:

Page 45: 第四章   结构刚度矩阵的存贮方式和组集程序

88

7877

6766

585655

464544

363433

2322

141211

0

0

00

000

00000

00000

K

KK

KK

KKK

KKK

KKK

KK

KKK

K

对 称

图 4-9 方阵形式的刚度矩阵[K]

UBW=4顶 线

Page 46: 第四章   结构刚度矩阵的存贮方式和组集程序

( 1 )半带宽内零元素的两种情况

① 零元素所在列的上方全是零元素。

② 零元素所在列的上方还有非零元素。

88

7877

6766

585655

464544

363433

2322

141211

0

0

00

000

00000

00000

K

KK

KK

KKK

KKK

KKK

KK

KKK

K

Page 47: 第四章   结构刚度矩阵的存贮方式和组集程序

例如,把第一个方程的若干倍加到第二个方程上去的时候,图 4-9 中第四列顶线以下的那个零元素将成为非零元素,在之后的消元过程中要起作用,因而仍须存贮。

( 3 )顶线以下零元素须要存贮

( 2 )顶线以上零元素无须存贮

因为在求解平衡方程组

Kδ= P

的时候,它们根本不参加运算。例如采用自上而下地消去法求解或以后采用的其它解法都有是如此。

Page 48: 第四章   结构刚度矩阵的存贮方式和组集程序

)(

)()(

)()()(

)()()(

)()()(

)()()(

)()()(

)()()(

18

1916

201712

211310

14116

1574

852

931

A

AA

AAA

AAA

AAA

AAA

AAA

AAA

A

88

7877

6766

585655

464544

363433

2322

141211

0

0

00

000

00000

00000

K

KK

KK

KKK

KKK

KKK

KK

KKK

K

1

2

4

6

10

12

16

18

MAXA

22图 4-10 一维数组 [A] 存贮刚度矩阵[K]

Page 49: 第四章   结构刚度矩阵的存贮方式和组集程序

变带宽存贮可采用按列存贮方式:从左到右,逐列存放,对每一列,先存主对角线元素,然后由下而上顺序存放,直到顶线下第一个元素为止。为避免混淆,我们把存贮 [K] 的一维数组称为 [A] 。如图 4-10 中, A(7)里存放的就是 K34 等。

)(

)()(

)()()(

)()()(

)()()(

)()()(

)()()(

)()()(

18

1916

201712

211310

14116

1574

852

931

A

AA

AAA

AAA

AAA

AAA

AAA

AAA

A

Page 50: 第四章   结构刚度矩阵的存贮方式和组集程序

2 、列高及其计算 把刚度矩阵 [K] 的第 j 列上方第 1 个非零元素的行

号记为 mj 。例如,在图 4-9 中, m6 = 3 , m8 = 5 。

为实现变带宽存贮,需要解决的标本问题是:刚度矩阵中 i 行 j 列的元素 Kij 在一维数组 A 中的地址是什么。

)(

)()(

)()()(

)()()(

)()()(

)()()(

)()()(

)()()(

18

1916

201712

211310

14116

1574

852

931

A

AA

AAA

AAA

AAA

AAA

AAA

AAA

A

Page 51: 第四章   结构刚度矩阵的存贮方式和组集程序

从第 j 列的主对角线元素起到该列上方第一个非零元

素为止,所含元素的个数称为第 j 列的列高,记为 hj 。有

hj = j - mj + 1

显然, hj其实也就是第 j 行的左带宽,因而必有

UBW= max(hj)

j=1,2, …,N

利用 4.1 所述中的节点位移信息数组( ID ),可容易地确定刚度矩阵 [K]任何一列的列高。

例如,对图 4-11 所示框架结构,利用 ID 数组可得各单元的连接数组 LM :(假定小号为 i )

Page 52: 第四章   结构刚度矩阵的存贮方式和组集程序

○○

○○

1 2

34

1

6

78

3

45

2

图 5-11

x

Y 1 号单元:LM=[0, 0, 1, 0, 0, 2] 2 号单元:LM=[0, 0, 2, 3, 4, 5] 3 号单元:LM=[3, 4, 5, 6, 7, 8] 4 单元:LM=[0, 0, 1, 6, 7, 8]

确定任何一列例如第 7 列列高的办法是:从 1 号单元起,对所有单元逐个进行检查。其中,与 7 号位移分量同

在一个连接数组中的最小非零号码就是 m7 。显然有

m7 = 1

Page 53: 第四章   结构刚度矩阵的存贮方式和组集程序

于是第 7 列的列高为

h7 = 7 – 1 + 1 = 7

用同样方法即可确定其余各列的列高。

计算列高的程序框图

Page 54: 第四章   结构刚度矩阵的存贮方式和组集程序

II ← IO[M] , JJ ← JO[M]

[MHT] ← 0

M← ( 1 , 1 , NE)

I1← ( 1 , 1, NDF )

LM(I1) ← ID(I1,II)LM(I1+NDF) ← ID(I1,JJ)

J←(1 , 1 , NDF2)

MJ=10000000

Page 55: 第四章   结构刚度矩阵的存贮方式和组集程序

J=0

I←(1, 1, NDF2)

JC ← LM [ J ]

J ← LM ( I )

HJ ← J-MJ+1

LM(J) >0

LM(J) < MJ

JC ← JC-IR+1

MJ > MHT(J)

Page 56: 第四章   结构刚度矩阵的存贮方式和组集程序

3 、主对角线元素地址

为了计算 Ki,j 在一维数组 A 排列中的地址,除数组 A 之外,再设置一个一

维数组 MAXA来存放 [K] 的主对角线元素在一维数组 A 中的地址。数组 MAXA

的长度是 [K] 的行或列数加 1 ( N+1 )。对于图 4-10 情形,数组 MAXA 的内容

给予该图最右边。元素 MAXA(N+1) 用来存放假想的第 N+1 个主对角元的地址。

)(

)()(

)()()(

)()()(

)()()(

)()()(

)()()(

)()()(

18

1916

201712

211310

14116

1574

852

931

A

AA

AAA

AAA

AAA

AAA

AAA

AAA

A

1

2

4

6

10

12

16

18

MAXA

22

Page 57: 第四章   结构刚度矩阵的存贮方式和组集程序

知道了 [K] 的各列列高之后, [K] 的任何一个主对角元在一

维数组 A 中的地址是容易确定的: [K] 矩阵第 j 列主对角线

元素在一维数组 A 中的地址等于前 (j-1) 列的列高之和加 1 ,

即 MAXA(j) = h1 +…+ hj-2 - hj-1 + 1

= ( h1 +…+ hj-2 + 1 ) + hj-1

= MAXA ( j - 1 ) + hj-1

因为永远有

MAXA(1)= 1 , MAXA(2)= 2

Page 58: 第四章   结构刚度矩阵的存贮方式和组集程序

故计算主元地址的公式可写为 MAXA(j+1)= MAXA(j)+ hj ( 5-12 )

式中, j = 2 , 3 …, , N ; hj—— 刚度矩阵 [K] 第 j 列的列高。

因为假想的第 N+1 个主元地址 MAXA(N+1) 等于[K] 的所有 N 列列高之和再加 1 ,所以,一维数组 A 的总长度 (S) ,即刚度矩阵 K 按变带宽存贮的总存贮量

S = MAXA(N+1)- MAXA(1) ( 5-13 )

Page 59: 第四章   结构刚度矩阵的存贮方式和组集程序

主对角线元素地址计算框图

MAXA(1) ← 1 , MANA(2) ←2

MAXA ← 0

J← ( 2 , 1, N )

MAXA(J+1) ← MAXA(J) +MHT(J)

S← MAXA(N+1) - MAXA(1)

Page 60: 第四章   结构刚度矩阵的存贮方式和组集程序

4 、 [K] 矩阵中 Ki,j 在一维数组 [A] 中的地址 记 Ki,j 在一维数组 A 中的地址为 AIJ 。则由图 4-12 知, A I J = MAXA[ J ] + J – I ( 4-14 )其中, I = mj , mj+1 …, , J 。

图 4-12

j列

0

0

00

000

0000

00000

K

第 i 行

顶线下

第 j列

MAXA(J)

(j-i)个元素

AIJ

第 j 行

A 中地址

Kj,j

Ki,j

Kmj,j

[K] 中地址

Page 61: 第四章   结构刚度矩阵的存贮方式和组集程序

5.4 组集结构刚度矩阵小结

1 、压缩存贮

结构刚度矩阵是具有高度稀疏性的对称矩阵。元素的数量很大,采用压缩存贮形式是绝对必要的。我们介绍了等带宽存贮和变带宽存贮这两种最常用的存贮方式。它们都适用于线性方程组的直接解法,也适用于迭代解法。

2 、只存贮刚度矩阵的上三角部分

无论是等带宽存贮还是变带宽存贮,都利用结构刚度矩阵的对称性,都只存贮了刚度矩阵的上三角部分,即主对角线元素以及上半带区(或顶线以下)内的元素。

Page 62: 第四章   结构刚度矩阵的存贮方式和组集程序

3 、不去存贮与刚性支承约束相应的行和列

处理约束时,我们采用的处理方式是根本不去存贮与刚性支承约束相应的行和列。为此,须根据给定的支承约束条件形成 ID 数组。根据 ID 数组可得到单元连接数组LM ,它给出了单元两端结点位移分量在独立结点位移列矢量中的序号。其中,与受刚性支承约束的位移分量相应的序号为零。

4 、节点编号应得当

无论采用等带宽存贮或变带宽存贮,都要求结点号码编得恰当,使得刚度矩阵的非零元素都聚集在主对角线附近狭窄的带形区内。

Page 63: 第四章   结构刚度矩阵的存贮方式和组集程序

对于大型结构,应该特别注意选取恰当的结点编号方式。这是因为总存贮量大体上与带宽成正比的原故(对等带宽存贮,则准确地与最大半带宽成正比)。

4 、程序中应通过试算验证

编好的程序,必须经过试算,以检查刚度矩阵是否被正确地形成。通常,可采用简单但具有典型性的算例进行计试算,输出形成后的刚度矩阵。也可以在组集刚度矩阵的程序段内设置一些输出语句,输出少量信息以便检查。导致刚度矩阵未被正确形成的因素是多方面的,可能是子程序编写有错,也可能计算程序完全正确而输入数据本身有错,例如支承约束条件填写有错等等。

Page 64: 第四章   结构刚度矩阵的存贮方式和组集程序

总之,计算机铁面无情,不允许在任何环节上发生任何差

错。另一方面,它也是很公正的,对于所有认真而细心的

使用者,都迅速准确地提供所要求的计算结果。