最新平面四边形4结点等参有限单元法

最新平面四边形4结点等参有限单元法
最新平面四边形4结点等参有限单元法

有限元程序设计

平面四边形4结点等参有限单元法

程序设计

1、程序功能及特点

a.该程序采用四边形4节点等参单元,能解决弹性力学的平面应力应变问题。

b.前处理采用网格自动划分技术,自动生成单元及结点信息。

b.能计算受集中力、自重体力、分布面力和静水压力的作用。

c.计算结点的位移和单元中心点的应力分量及其主应力。

d.后处理采取整体应力磨平求得各个结点的应力分量。

e.算例计算结果与ANSYS计算结果比较,并给出误差分析。

f.程序采用Visual Fortran 5.0编制而成。

2、程序流程及图框

图2-1程序流程图

图2-2子程序框图

其中,各子程序的主要功能为:

INPUT――输入原始数据

HUAFEN――自动网格划分,形成COOR(2,NP),X,Y的坐标值与单元信息CBAND――形成主元素序号指示矩阵MA(*)

SKO――形成整体刚度矩阵[K]

CONCR――计算集中力引起的等效结点荷载{R}e

BODYR――计算自重体力引起的等效结点荷载{R}e

FACER――计算分布面力引起的等效结点荷载{R}e

DECOP――支配方程LU三角分解

FOBA――LU分解直接解法中的回代过程

OUTDISP――输出结点位移分量

STRESS――计算单元应力分量

OUTSTRE――输出单元应力分量

STIF――计算单元刚度矩阵

FDNX――计算形函数对整体坐标的导数

T

i

i

y

N

x

N

?

?

?

?

?

?

?

?

?

?

,=

i1,2,3,4。

FUN8――计算形函数及雅可比矩阵[J]

SFUN ――应力磨平-单元下的‘K’=NCN‘

SCN――应力磨平-单元下的右端项系数‘CN‘SUMSKN――应力磨平-单元下的右端项集成到总体的‘P‘

SUMSTRS――应力磨平-单元下的集成到总体的‘K‘

GAUSTRSS――高斯消元求磨平后的应力

3、输入数据及变量说明

当程序开始运行时,按屏幕提示,键入数据文件的名字。

在运行程序之前,根据程序中INPUT需要的数据输入建立一个存放原始数据的文件,这个文件的名字为INDAT.DAT。数据文件包括如下内容:

(1)总控信息。共一条,4个数据。

L,B,NNL,NNB,NM,NR

L——矩形体长度

B--矩形体宽度

NNL--L方向上划分的结点数

NNB--B方向上划分的结点数

NM—单元材料类型数

NR——约束结点总数

(2)结点约束信息。共NR条,每条依次输入:

IP,IX,IY

IP——结点号

IX、IY——分别为IP结点在x,y方向的约束情况,如果约束填0,如果自由填1。(3)材料信息。共NM条,每条依次输入:

JJ,(AE(I,JJ),I=1,4)

JJ――材料类型号,(AE(I,JJ),I=1,4)――该材料的材料参数,共4个参数,排列顺序为:弹性模量、泊松比、容重、单元厚度。

(4)荷载信息

a.荷载控制信息。共一条,3个数据

NCP,IZ

NCP——受集中力作用的结点数

IZ——面力批数

b.若NCP>0,输入

IP,PX,PY

IP——结点号

PX、PY——分别为IP结点x,y方向的集中力分量。

c.若IZ>0,输入面力荷载信息,共IZ批,按批输入:

JS,NSE,(WG(I)I=1,4)

JS——面力批号

NSE ——第JS 批面力受到面力作用的单元个数,

(WG (I ),I =1,4)——该面力的特征参数共4个数据,第1个数为面力类型,填1表示受静水压力作用,填2表示受均布法向压力作用;第2个数为水压密度,如果是均布压力情况,就填均布压力的集度;第3个数为最高水位的y 坐标,如果是均布压力情况,可以填任意数;第4个数为面力作用的单元面的面号,单元面号的规定见图2-3。

(IEW (M ),M =1,NSE ),IEW (*)为受面力作用的单元的单元号,共NSE 个。

图3-1 单元结点编码与面号

4、理论基础和求解过程 4.1、构造插值函数:

本有限元计算采取的是四边形八结点等参元进行插值计算的。 直接调用教材115页3..3.21的结果,写出所有插值函数:

158111(1)(1)422N N N ξη=----; 256

111(1)(1)422N N N ξη=+---

367111(1)(1)422N N N ξη=++-- 478

111(1)(1)422N N N ξη=-+-- 251(1)(1)2N ξη=-- 261(1)(1)

2N ηξ=-+ 271(1)(1)2N ξη=-+ 281(1)(1)

2N ηξ=--

4.2位移插值函数及应变应力求解:

在有限元方法中单元的位移模式一般采用多项式作为近似函数,多项式的选取应由低次到高次的完备多项式。位移模式的选取一般为:u =φβ。

u u v ??

=????

,φ为位移模式,β为广义坐标向量。根据方程求解得出广义坐标,可将位

移函数表示成结点位移的函数,即8

1

i i

i u N u

==

∑ ,8

1

i i

i v N v

==

∑,写成矩阵的形式为:

[]11121

282212

81

2888800...0 0

...0

......u v a u N N N a u u v IN IN IN N N N v a u v ????????????

??????

??=== ?????????????

??????

??????

[]128...e e u N N N a Na ==

N 称为插值函数矩阵或形函数矩阵,e

a 为单元结点位移列阵。

确定了单元位移后,可以很方便地利用几何方程和物理方程求得单元的应变和应力。单元应变为:

[][]1

28128......x e e e e

y xy Lu LNa L N N N a B B B a Ba εεεγ????

======??????

B 称为应变矩阵,L 是平面问题的微分算子,其中:

0000

00i i

i i i i i i N x x N N B LN N y y N N y x y x ??????????????????

?

?????===???????????

?????

??????????????????,

[]1

281

2

81

28000...0 0

00

...0

x N N N B B B B N N N y y

x ?????????

????==???????

????????????

00x y xy u x x u v v y y u v y x y

x εεεγ?????????

????

???????????

????===????????????

?

??

????????????

?+????????????

根据物理方程可以求得单元应力,

x e e

y xy D DBa Sa σσσετ????

====??????

其中

[][]

128128......S DB D B B B S S S ===,S 称为应力矩阵,B 是应变矩

阵。由于是平面应力问题,E0和v0取为E 和v ,所以弹性矩阵

2101011002E D υυυυ?? ?

?= ?

-

?

- ???。

这部分内容参考了教材第2.2节。

4.3、等参元变换:

为了将局部(自然)坐标中几何形状规则的单元转换成总体坐标中几何形状扭曲的单元,以满足对一般形状求解域进行离散化的需要,必须建立坐标转换:

()x f ξη=,

()

y g ξη=

最方便的方法是将上式中表示成插值函数的形式,

'm

i i

i x N x ==∑,

'm

i i

i y N y ==∑

在有限元分析中,为建立求解方程,需要进行各个单元面积内的积分,其一般形式为:

(,)e

e s s gdS g x y dS

=?

??

而g 中包含场函数对于总体坐标x ,y 的导数。

由于场函数是用自然坐标表述的,又因为在自然坐标内的积分限是规格化的,因此希望能在自然坐标内按规格化的数值积分方法进行上述积分。为此需要建立两个坐标系内导数之间的变换关系。

设8

1

'i

i

i x N x ==

∑, 8

1

'i

i

i y N y

==∑,xi ,yi ,zi 是结点在总体坐标内的坐标值,N ’i 为

形状函数,实际上它也是用局部(自然)坐标表示的插值函数。对于等参变换,结点数、结点号和插值函数都不变。

函数Ni 对ξ的偏导数可以表示成: ....i i i i i i N N N x y x y N N N x y x y ξξξηηη??????=+???????

???????=+???????

集合成矩阵形式就是: .i i i i i i N x

y N N x x J N N N x y y y ξξ

ξηηη?????????????

??????

????????

???????==?????????????

???????????????

???

??? 式中的J 称为雅克比矩阵,利用8

1

i i

i x N x ==∑, 8

1

i i

i y N y

==∑,J 可以表示为自然坐标的

函数,即:

()()8

8

111

1

81

2

2

28

8

81211

88...,......,...i i i i i i i i i i i i N x N y x y N N N x y x y J N N N N x N y x y ξξξ

ξξξηηη

ηηη====??

????

??

????????

???????????????≡=

=???????????????

????????????

??????

∑∑∑∑,

Ni 对于x,y 的偏导数可以用自然坐标显示地表示为:

1

.i i i i N N x J N N y ξη-??????

????

???

???=??????

??????????

其中1

J -是J 的逆矩阵,它可以按照下式计算得到:1*

1J J J

-=

,J 是J 的伴随矩阵,它的元素*

ij

J 是J 的元素

ij

J 的代数余子式。

4.4、总体应力磨平

根据《有限单元法》第5章中的(5.3.15),即

°**1

()0,(1,2,...,)M

T i

Ve

e CN dV i N σσ=-==∑?

其另一种矩阵形式为:

°*()()T T T N CN CN σσ=

()**

T

e i i K N CN =

°()

*

T

e i P CN σ=

*

i a σ=

并利用以下表达式,

*****1

23

41234()()T x x

x x x N N N N σσσσσ=

*****12341234()()T

y y y y y N N N N σσσσσ= *****12341234()()T

xy xy xy xy xy N N N N σσσσσ=

()21/(1)01//(1)10002/(1)v v C v E v v v --?? ?

=--- ?

?-??

以及

1

2

3

4

*1

2

3

4

1

2

3

4i N N N N N N N N N N N N N ?? ?=

? ??

?

就可以像单元元刚度矩阵到总体刚度矩阵一样,求出

*

i a σ=,只不过,这里有Ke 为

12*12的矩阵,而“总刚”K 为3*NP 阶的矩阵,NP 为结点数。

5、算例

应用本程序计算一个矩形土体受到均布荷载时的位移和应力,如下图所示,三面约束的土体尺寸为40m*10m ,取一半为20m*10m ,E=1.0×104 kN/m 2

,0.3μ=,在右端受均布荷载10.0q =

kN/m 2

,不考虑自重体力。

给定网格大小为0.20.5m m ?,有限元网格自动划分如图3-2所示,单元总数2000,节点总数2121。由于对称性,右端约束为滑移支座,只限制x 方向位移。

虽然土体一般不为弹性,但是方法是一样的,只是刚度矩阵改动即可使用弹塑性模型。

长度单位:

图5-1 算例模型

图5-2 ANSYS计算模型图

实际计算结果与ANSYS分析结果的比较(详细计算结果见后面):

比较项目X方向最大位移Y方向最大位移

本程序计算结果0.0863mm 5.890mm

ANSYS分析结果0.1200mm 6.000mm

误差28.0% 1.83%

(2)应力比较

误差分析:

本程序计算得到的Y方向最大位移和ansys计算结果很相近,由于x方向上的位移不占主要部分,因此,其误差虽然有些大,但对总体位移影响不大。

由于网格较密,因此,计算得到的单元应力值(未磨平)与ansys结果相近,误差小于1%,不必要应力磨平也可以达到较好的精度。

本程序可以进行总体应力磨平,但是由于网格数较多,因此,磨平矩阵阶数较大,可能计算时间也很长,甚至无法计算。

(3)实际计算结果MATLAB图与ANSYS图比较:

(a)

(b)

图5-3 X方向应力图,(a)ANSYS (b) MATLAB

图5-4 主应力计算结果的MATLAB 图

图5-5 主应力计算结果的ANSYS 图

图5-6 剪应力计算结果的MATLAB 图

图5-7 剪应力计算结果的ANSYS 图

图5-8 ANSYS总位移图

图5-9 ANSYS X方向位移图

图5-10 ANSYS Y方向位移图

图5-11 ANSYS Y方向应力图

附录:

(1)输入文件数据:

平面四边形四结点单元输入数据

L B NNL NNB NM NR

20.0 10.0 101 21 1 141

********************************************************* 约束信息数据

结点号 X向约束信息 Y向约束信息

1 0 0

2 0 0

3 0 0

4 0 0

5 0 0

6 0 0

7 0 0

8 0 0

9 0 0

10 0 0

11 0 0

12 0 0

13 0 0

14 0 0

15 0 0

16 0 0

17 0 0

18 0 0

19 0 0

20 0 0

21 0 0

22 0 0

43 0 0

64 0 0

85 0 0

106 0 0

127 0 0

148 0 0

169 0 0

190 0 0

211 0 0

232 0 0

253 0 0

274 0 0

295 0 0

316 0 0

337 0 0

358 0 0

379 0 0

400 0 0

421 0 0

442 0 0

463 0 0

484 0 0

505 0 0

526 0 0

547 0 0

568 0 0

589 0 0

610 0 0

631 0 0

652 0 0

673 0 0

694 0 0

715 0 0

736 0 0

757 0 0

778 0 0

799 0 0

820 0 0

841 0 0

862 0 0

883 0 0

904 0 0

925 0 0

946 0 0

967 0 0

988 0 0 1009 0 0 1030 0 0 1051 0 0 1072 0 0 1093 0 0 1114 0 0 1135 0 0 1156 0 0 1177 0 0 1198 0 0

1240 0 0 1261 0 0 1282 0 0 1303 0 0 1324 0 0 1345 0 0 1366 0 0 1387 0 0 1408 0 0 1429 0 0 1450 0 0 1471 0 0 1492 0 0 1513 0 0 1534 0 0 1555 0 0 1576 0 0 1597 0 0 1618 0 0 1639 0 0 1660 0 0 1681 0 0 1702 0 0 1723 0 0 1744 0 0 1765 0 0 1786 0 0 1807 0 0 1828 0 0 1849 0 0 1870 0 0 1891 0 0 1912 0 0 1933 0 0 1954 0 0 1975 0 0 1996 0 0 2017 0 0 2038 0 0 2059 0 0 2080 0 0 2101 0 0 2102 0 1

2104 0 1

2105 0 1

2106 0 1

2107 0 1

2108 0 1

2109 0 1

2110 0 1

2111 0 1

2112 0 1

2113 0 1

2114 0 1

2115 0 1

2116 0 1

2117 0 1

2118 0 1

2119 0 1

2120 0 1

2121 0 1

*********************************************************

材料信息数据

类型号弹性模量泊松比容重单元厚度

1 10000.0 0.3 0.0 1.0

*********************************************************

荷载信息数据

受集中力作用的结点数面力批数

0 1

集中力数据

受集中力作用的结点号 X向集中力分量 Y向集中力分量

*********************************************************

面力数据

面力批号受面力单元个数面力类型面力集度最大集度面力作用面号

1 15

2 -10 -10 4

*********************************************************

面力作用的单元的单元号

2000 1980 1960 1940 1920 1900 1880 1860 1840 1820 1800 1780 1760 1740 1720

(3)源程序:

PROGRAM FEM

DIMENSION SK(200000),COOR(2,10000),AE(4,100),MEL(5,10000),WG(4), &JR(2,10000),MA(10000),R(10000),IEW(10000),STRE(3,10000),

&TOALFUN(10000,10000),SUMS(10000),GOODSTR(10000) COMMON /CMN1/ NP,NE,NM,NR

COMMON /CMN2/ N,MX,NH

COMMON /CMN3/ RF(8),SKE(8,8),NN(8)

OPEN(1,FILE='INDAT.DAT',STATUS='OLD')

OPEN(2,FILE='OUT.DAT',STATUS='NEW')

CALL INPUT(XL,B,IX,IY,AE,NCP,IZ,NNL,NNB,JR) !输入数据 CALL HUAFEN(XL,B,NNL,NNB,COOR,MEL)

CALL CBAND (MA,JR,MEL) !形成主元素序号指示矩阵MA

DO I=1,NH

SK(I)=0.0

ENDDO

CALL SK0(SK,MEL,COOR,JR,MA,AE) !形成整体刚度矩阵[K]

DO I=1,N

R(I)=0.0

ENDDO

IF(NCP.GT.0) CALL CONCR(NCP,R,JR)

CALL BODYR(R,MEL,COOR,JR,AE)

READ(1,70) TL

READ(1,70) TL

READ(1,70) TL

70 FORMAT(A)

IF(iz.GT.0)then

DO jj=1,iz

READ (1,*)JS,NSE,(WG(I),I=1,4)

READ(1,70) TL

READ(1,70) TL

READ(1,*)(IEW(M),M=1,NSE)

CALL FACER(IEW,NSE,R,MEL,COOR,JR,WG)

ENDDO

ENDIF

CALL DECOP (SK,MA)

CALL FOBA (SK,MA,R)

CALL OUTDISP(NP,R,JR)

CALL STRESS (COOR,MEL,JR,AE,R,STRE)

CALL GAUSTRSS(MEL,COOR,AE,TOALFUN,SUMS,GOODSTR,STRE,JR,R) !应力磨平并输出磨平后的应力值

WRITE(2,'(A)')' PROGRAM SAFF HAS BEEN ENDED'

WRITE(*,'(A)')' PROGRAM SAFF HAS BEEN ENDED' CLOSE(1)

CLOSE(2)

END

!INPUT为原始数据输入子程序

SUBROUTINE INPUT(XL,B,IX,IY,AE,NCP,IZ,NNL,NNB,JR)

DIMENSION AE(4,*),JR(2,*)

CHARACTER*400 TL

COMMON /CMN1/ NP,NE,NM,NR

COMMON /CMN2/ N,MX,NH

READ(1,70)TL

READ(1,70)TL

READ(1,*)XL,B,NNL,NNB,NM,NR

WRITE(2,10)XL,B,NNL,NNB,NM,NR

10FORMAT(5X,'平面四边形四结点单元有限元程序'//5X,'L=',F5.2,4X,' &B=',F5.2,4X,'NNL=',I3,4X,'NNB=',I3,4X,'NM=',I2,4X,'NR=',I3)

NP=NNL*NNB

DO 15 I=1,NP

DO 15 J=1,2

15 JR(J,I)=1

READ(1,70)TL

READ(1,70)TL

READ(1,70)TL

WRITE(2,110)

110 FORMAT(/5X,'约束信息'/5X,'结点号',5X,'X向约束',5X,'Y向约束')

DO 20 I=1,NR

READ(1,*)IP,IX,IY

WRITE(2,100)IP,IX,IY

100 FORMAT(8X,I5,5X,I2,9X,I2)

JR(1,IP)=IX

JR(2,IP)=IY

20 CONTINUE

N=0

DO 30 I=1,NP

DO 30 J=1,2

IF (JR(J,I)) 30,30,25

25 N=N+1

JR(J,I)=N

30 CONTINUE

READ(1,70) TL

READ(1,70) TL

READ(1,70) TL

DO 55 J=1,NM

READ (1,*) JJ,(AE(I,JJ),I=1,4)

WRITE(2,910) JJ,(AE(I,JJ),I=1,4)

55 CONTINUE

910 FORMAT (/5X,'材料信息'/5X,'类型号',5X,'弹性模量',5X,'泊松比',5X,'容重& ',8X,'单元厚度'/5X,I5,4(5x,E8.3))

READ(1,70) TL

READ(1,70) TL

READ(1,70) TL

READ(1,*)NCP,IZ

WRITE(2,920)NCP,IZ

920 FORMAT (/5X,'荷载信息'/5X,'受集中力作用的结点数',8X,'面力批数&'/(2(12X,I5)))

READ(1,70) TL

READ(1,70) TL

70 FORMAT(A)

RETURN

END

!自动划分网格子程序,计算单元数,结点数,结点坐标,每个单元包含的结点

!单元的4个结点号与材料类型号,从左下角逆时针编号顺序;

SUBROUTINE HUAFEN(XL,B,NNL,NNB,COOR,MEL)

DIMENSION COOR(2,*),MEL(5,*)

COMMON /CMN1/ NP,NE,NM,NR

NP=NNL*NNB

NE=(NNL-1)*(NNB-1)

WRITE(2,*)'总结点数 NP=',NP

WRITE(2,*)'总单元数 NE=',NE

DL=XL/(NNL-1)

DB=B/(NNB-1)

N=1

M=1

T=NNL*NNB

DO 10 K=NNB,T,NNB

DO 20 I=N,K

IP=I

COOR(1,I)=DL*(K-NNB)/NNB

20 CONTINUE

N=K+1

10 CONTINUE

DO 30 J=NNB,T,NNB

DO 40 I=M,J

COOR(2,I)=DB*(I-M)

40 CONTINUE

M=J+1

30 CONTINUE

WRITE(2,100) (J,(COOR(I,J),I=1,2),J=1,NP)

100 FORMAT(/7X,'结点号',10X,'X坐标',8X,'Y坐标'/(8X,I5,5X,2F12.6)) N=1

DO 50 K=1,(NNL-1)

DO 60 I=N,(NNB-1)*K

NNE=I

MEL(1,I)=I+K-1

MEL(2,I)=MEL(1,I)+NNB

MEL(3,I)=MEL(1,I)+NNB+1

MEL(4,I)=MEL(1,I)+1

60 CONTINUE

N=N+(NNB-1)

50 CONTINUE

WRITE(2,111)(J,(MEL(I,J),I=1,4),J=1,NE)

111 FORMAT(/7X,'单元号',5X,'结点1',5X,'结点2',5X,'结点3',5X,'结点&4'/(7X,I5,5X,I5,5X,I5,5X,I5,5X,I5))

DO 70 IE=1,NE

MEL(5,IE)=1

70 CONTINUE

END

!**************************************************************

! LU三角分解子程序

! ************************************************************* SUBROUTINE DECOP (SK,MA) !方程LU分解

DIMENSION SK(*),MA(*)

COMMON /CMN2/ N,MX,NH

DO 50 I=2,N

L=I-MA(I)+MA(I-1)+1

K=I-1

L1=L+1

IF (L1.GT.K) GOTO 30

DO 20 J=L1,K

IJ=MA(I)-I+J

M=J-MA(J)+MA(J-1)+1

IF (L.GT.M) M=L

MP=J-1

IF (M.GT.MP) GO TO 20

DO 10 LP=M,MP

IP=MA(I)-I+LP

JP=MA(J)-J+LP

SK(IJ)=SK(IJ)-SK(IP)*SK(JP)

10 CONTINUE

20 CONTINUE

30 IF (L.GT.K) GOTO 50

DO 40 LP=L,K

IP=MA(I)-I+LP

LPP=MA(LP)

SK(IP)=SK(IP)/SK(LPP)

II=MA(I)

SK(II)=SK(II)-SK(IP)*SK(IP)*SK(LPP)

40 CONTINUE

50 CONTINUE

RETURN

END

!************************************************************** ! LU三角分解后的回代求解

! ************************************************************* SUBROUTINE FOBA (SK,MA,R) !回代求解

DIMENSION SK(*),MA(*),R(*)

COMMON /CMN2/ N,MX,NH

DO 10 I=2,N

L=I-MA(I)+MA(I-1)+1

K=I-1

IF (L.GT.K) GOTO 10

DO 5 LP=L,K

IP=MA(I)-I+LP

R(I)=R(I)-SK(IP)*R(LP)

5 CONTINUE

10 CONTINUE

DO 20 I=1,N

II=MA(I)

45 R(I)=R(I)/SK(II)

20 CONTINUE

DO 30 J1=2,N

I=2+N-J1

L=I-MA(I)+MA(I-1)+1

K=I-1

IF (L.GT.K) GO TO 30

DO 25 J=L,K

IJ=MA(I)-I+J

55 R(J)=R(J)-SK(IJ)*R(I)

25 CONTINUE

30 CONTINUE

RETURN

END

!************************************************************** !计算形函数对整体坐标的导数

! ************************************************************* SUBROUTINE FDNX (XYZ,DNX,DET,R,S,RJAC,IVEN,NEE) DIMENSION XYZ(2,*),DNX(2,4),RJAC(2,2),IVEN(*)

COMMON /CMN5/ FUN(4),PN(2,4),XJAC(2,2)

CALL FUN8 (XYZ,R,S,DET) !求形函数

IF (DET.LT.1.0E-5)THEN !判断J的大小

WRITE(2,600) NEE,R,S,det

相关主题
相关文档
最新文档