混合有限元离散元方法

混合有限元离散元方法
混合有限元离散元方法

可变形离散元的坐标变换

0 接触检测算法

对非连续问题来说,判断是否接触是很重要的。减少相隔较远的颗粒间的接触判断可以提高算法效率()()o N o N →2。直接检测的算法分为两类:一类是圆形边界,另一类是矩形边界。对矩形边界,有离散单元的直接映射检测算法,单元每改变一次位置该方法需调用一次:

Step 1:将离散元映射到胞元。根据每个单元中心位置将单元映射到胞元上。因此每个单元都唯一的与一个胞元对应。即对每个单元中心坐标取整,其中d 为胞元边长,max()elements d R >

min min

int int(

), int int()i i i i x x y y x y d d

--=+=+11 (1) Step 2:找到可能接触的离散元。每个离散元都与其映射胞元中心重合且被完全覆盖,两个胞元相邻的单元有可能接触。事实上对下面的胞元,因为每个胞元都可作为中心元被检查两次,所以只需检查左下角的四个。

如何将单元映射到胞元上呢?不同的映射方法定义了不同的算法,如屏风法、分类法、Munjiza-NBS 法和Williams-C 网格法。

1 屏风法:

[,,,...,]N E e e e e =123,N 为单元个数。离散元素映射到细胞的获得是通过设置阵列C 指单独列出的头连接的胞元。

映射进行如下: STEP 1 设置空为-1

Loop over all rows of cells(i=1; i ≤Ncel ; i++)

{ Loop over all cells in a row(j=1;j ≤Ncel ; j++) { set C[i][j ] = ?1 } }

Loop over all discrete elements(k=1; k ≤N; k++) { set E[k] = ?1 }

STEP 2 离散元映射到胞元。单元每运动一次执行一次,例如每个时间步执行一次。对每个胞元设置一个独立的链表:

Loop over all discrete elements (k=1; k ≤N;k++) { Integerise current coordinates and set

min

min

int int(

), int int()

i i i i x x i x d

y y j y d

-==+-==+11

Place the discrete element onto the corresponding singly connected list by

setting E[k] = C[i][j ] and afterwards C[i][j ] = k

}

当单元移动后再进行映射时不需要初始化。当单元分离时步骤1再次进行。一旦 离散元都映射到胞元,则检测开始。对所有离散元循环,找到离散元映射的胞元,然后检查该胞元相邻和周围胞元中的单元。 Loop over discrete elements (k=1; k ≤N; k++) { Integerise current coordinates and set

min

min

int int(

), int int()

i i i i x x i x d y y j y d -==+-==+11

if C[i][j]≤N

{ C[i][j]=C[i][j]+N

loop over all discrete elements from C[i][j] list

{ loop over all discrete elements from neighboring cells, i.e. lists C[i-1][j-1], C[i][j-1], C[i+1][j-1], C[i-1][j], C[i][j]

{ direct check for contact between discrete elements } } }

}

搜索只遍历所有离散元,并不遍历所有胞元。

2 分类法

如果离散元是分散分布的,则胞元矩阵会很大,所以为节省RAM 和CPU 产生

了新的方法。设置数组X 记录胞元所在的列,数组Y 记录胞元所在的列,数组D 记录离散元,长度皆为N 。

3 Munjiza-NBS 法

该算法是找到相隔最近的点对,即它们最近的点之间的距离小于或等于零,则单元重叠或接触。

空间重构:空间被分为理想的长度为d 的正方形胞元。 从集合{,,...,}E N =12映射到

(,)(,)(,)...(,)(,)(,)(,)...(,)...............(,)(,)(,)...(,)n n C m m m m n ?????

?=??

?

?

??

11121312122232123 将离散元(x,y)映射到胞元(,)x y i j 上,其中

min

min

int(

), int()

x y x x i d

y y i d -=-=

STAGE1 链接列:对每一列y i (y y i N ≤),构造一个独立的接触链,包含在这一列上的所有离散元。单元序号按降序排列相互关联,例→→→10741,它们对应的胞元y i 都等于7。

Loop over all discrete elements ( i=1; i ≤N; i++) { calculate integerised coordinate

min

int()y y y i d -=

and place the discrete element onto the y yi list }

数组B 存放的元素是最后一个映射进当前列链的单元,有N y 个分量,指向数组Y 的相应位置,引出一个新的链表。数组Y 中存放着当前单元指向的单元,当指向结束时当前值设为-1,有N 个分量。

STAGE 2:对所有y y i =的单元循环,将x x i =的单元放入链表X ,且令该链表为NEW 。有N 个分量。

检查一个链表后令其为OLD 。则每建立一个新链表都应用旧链表的空间,只是需先进行初始化。 算法总结:

1. Loop over all discrete elements( k=0; k ≤N; k++)

{ calculate integerised y coordinates of its centre place the discrete element onto a list for the corresponding row of cells (y-list) }

consider all y-lists to be “new ” lists

2. Loop over discrete elements( k=0; k ≤N; k++)

{ calculate integerised y coordinates of its centre if discrete element belongs to a new y-list

{ mark the y-list as an old list and call it central y-list { 3. loop over all discrete elements from central y-list

{ integerise x coordinate of the discrete element and place it onto the corresponding x-list }

4. loop over all discrete elements from neighbouring (y-)-list

{ integerise x coordinate of the discrete element and place discrete element onto the corresponding x-list }

5. loop over all discrete elements from the central y-list { if the discrete element belongs to a new list (x,y) list { mark the list (x,y) as old and call it central (x,y)-list

check for contact between discrete elements from the central list (x,y) and lists (x,y),(x-1,y),(x-1,y-1),(x,y-1), (x+1,y-1) } } }

6. loop over all discrete element from the central y-list

{ remove the corresponding x-list, i.e. set the head of the list to zero } 7. loop over all discrete element from list (y-1)

{ remove the corresponding x-list, i.e. set head of the list to zero } } }(2)

8. loop over all discrete elements

{ remove the corresponding y-lists i.e. set the head of the list to zero}

这种方法的计算时间 O(N) ,需要的RAM 空间为A[2][x n ],B[y n ],X[N]和Y[N],共x y M n n N =++22 个。

1 基本概念

每个离散的单元代表一个独立的变形体,在任一时间点占据一定的空间区域。对这些区域赋予特殊的意义,例如单元上所有点在T=0时刻的初始位置构成一个集合,定义为区域B 。区域B 的任意子域称作该单元的一个块,单元体的变形通过如下映射定义:

()x f p = (1)

f 是将B 映射到闭区域E 的光滑双射,且满足()f p ?>0,Ker f =Null (2)

(1)式还可表示为 ()()x f p p u p ==+, (3)

其中()u p 为位移,映射 ()()F p f p I u =?=+? (4) 称为变形梯度,描述一点附近的形变量。

为了描述在离散单元上一点P 附近物质的变形,定义四组坐标: 全局坐标 (i,j,k );

局部坐标(,,)i j k 用于描述离散单元的初始位置,因此空间位置固定且不随单元

移动,一般同单元的重力方向一致;

局部变形坐标 (,,)i j k

定义在节点上并随节点运动,表征节点附近的变形。方向与大小都随单元的变形而改变,遵循(1)式,在初始点是两两正交的非单位向量,变形后不再保持正交性;

初始坐标(,,)i j k

是节点坐标,表征节点的初始位置,空间位置固定且不随节点移动,与离散单元上有限单元的边一致。基向量一般不正交,长度与有限单元相应的边的长度相同; 初始形变坐标(,,)i j k

定义在节点上并随节点运动,用于表征节点初始位置向量的变形。 全局、局部和初始坐标是惯性坐标,局部和初始变形坐标是非正交非单位的非惯性坐标。

局部向量和局部变形向量可以用变形梯度表示,在全局坐标下,变形张量可以写为:

(,,)(,,)(,,)u u u x

y z x u x y z v v v F f y v x y z x y z z w x y z w w w x

y z ?????+??????

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

???+???????

111 (5) 在局部坐标下有

, , i i j k j i j k k i j k ??????

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

100100001010010001 (6)

u u u u z x y x v v v v i Fi x y z x w w w w x x y z u v w i j k

x x

x ????????++??????????????????????????==+=????????????????????????????+

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

?????=+++ ??????11110011 … (7) 通过p 点周围单元的变形f ,将局部基向量(,,)i j k 映射到局部变形向量 (,,)i j k 。 变形分为()u p const =和()F p const =两种情况。()u p const =表示节点的相对位置改变,但是单元的形状体积不发生改变,这种变形不产生新的应变。

()F p const =的情况称为均匀形变,变形映射可表示为:

()()()f p f q F p q =+- (8)

例如在q 点拉伸: ()()f p q U p q =+- (9) 其中U 是对称正定方阵,设U 的张量基为(,,)e e e 123,则U 可以表示成对角阵

s U s s ??

??=?

????

?

1

2

3 (11) 其中(,,)s s s 123是特征值,一般在不同的方向拉伸或缩短的长度是不同的。

在q 点旋转: ()()f p q R p q =+- (12)

其中R 是单位正交阵,即 det()T R R R -==11且。对任意向量a

()R Ra R Ra Ia --==11

记转轴为ψ,旋转角为ψ,则任取一组含ψ的正交基(,,

)e e ψ

ψ

12,R 可以表示为 cos sin sin cos R ψ

ψψ

ψ

-??

??=?????

?

1 (13)

2 均匀形变

综上(8)—(13)我们可将均匀形变(F=const )表示为旋转与拉伸的组合:

()f p g s s g F RU VR

==== (14)

其中梯度R ,U ,V 都是常数张量,不随节点的不同而改变。

det det det U V F ==>0 (15)

U 是右乘拉伸张量,表示先做拉伸后做旋转,可表示为三个坐标方向的拉伸叠加:

i i , U (), V ()i i i i i i i i i i i i i

i U U U U e e I s e e V V V V e e I s e e λλ====?=+-?==?=+-?∑∑3

12313

123111

其中i e 是局部基向量, i e 是局部变形基向量, i i e Re =。 应变:可定义不同的应变张量,如Cauchy-Green 应变张量

T T T T C F F U R RU U U ===

设伸长量为s ,则变形量为

n ln() n n s e n

s ?-≠?

=??=?

1

00 (16) 应变张量的定义格式随n 取值而不同。

应力:由柯西应力的定义对向量m ,表面张力S(m)=Tm 。T 是对称正定的,且满足运动方程,

divT b v

ρ+= (17) 其中S 是变形区域产生的张力,ρ单位体积变形区域的密度,向量m 的方向垂直于变形表面,长度等于变形域的面积。对于全局坐标,

xx

xy xz yx

yy yz zx zy

zz t t t T t t t t t t ????=?????

?

()x x xx

xy xz x y z y yx

yy yz y zx zy

zz z z S m t t t S m S i S j S k S t t t m t t t S m ????

??????

?

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

?????

(18)

3 单元变形(应变为常数) 以下考虑二维三角形单元,

初始变形坐标可以用初始坐标表示:

, x y x y i i i i j j j i j j =+=+

单元上任意向量可以通过坐标变换转到不同的坐标系下。三角单元的变形由节点处的变形表示,因为F=const ,所以单元变形可用线性函数表示,令(,)i i x y 是全局坐标下变形前的分量,(,)f f x y 是变形后的,则

, f x i x i f y i y i x x y y x y αβαβ=+=+ (19)

4 中心差分时间积分算法

如下是显式时间积分算法及迭代格式: Verlet 算法(x 是位移,v 是速度): h t =?

, t h t h t t h t t h h

x x hv v v f m

+-++=+=+

22 T-1/6算法:

t t h t t t t t t t t t h t h f x x v h h b v h m f v h b v h m v b h +++=++

+++=

-232

2

1

261

31

16

其中() and ()t t t h

t h df df b b m dx m dx

++==11。 此外还有T-1/12,D-1/12算法。上述方法都有相同的迭代格式,由三步构成: (1) 预测:由t 时刻的位移及其导数计算t+h 时刻的位移

,,,!!!

!!...!

iv t h p t t t t t iv t h p t t t t iv t h p

t t t h h h x x x h x x x h h x x x h x x h x x x h x +++=++++=+++=++234

23

2234232 (2) 估计:在这一阶段,在t+h 时刻的力t h f +由预测步中的,t h p x +值计算得到。然

后由t h f +求得t+h 时刻的加速度t h x +

,计算差值 ,t h t h p x x x

++?=- (3) 校正:校正位移

,,,,!!

!!!...

!!!

t h t h p t h t h p t h t h p t h t h p xh x x xh x

h x h h h xh x x h h xh x x αααα++++++++?=+?=+?=+?=+2

2

1222

2

332

322222332 对三阶格式,/, /, , /αααα====01231656113。

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