土石混合體的分層壓縮法

    純砂土的研究目前基本上趨于飽和了,目前離散元在散體材料部分的研究大都是還原礫砂石材料的形狀。在此之前,離散元開發了很多考慮抗轉動的模型,來表征材料的球度對其轉動特性的影響。隨著計算能力的提高以及研究的深化,直接生成現實形狀的材料是當前主要的工作。于是PFC6.0出現了塊體計算元素,本文主要講解clump來模擬塊體,而ball模擬砂土的分層壓縮法。只將體積大的用clump也可以有效率的進行計算。

    一般來說我們生成的clump的數目不會特別多,這樣就對其均勻性要求比較高了。和砂土不一樣,砂土的均勻性體現在孔隙率的均勻上,而塊石的均勻性體現在分布上。如果不分層的話,很容易出現某些地方clump很多,而有些地方clump很少,這樣必然對破壞模式產生影響。

    這部分實現原理也比較簡單,只要在生成顆粒的時候進行分流就可以了。先看一下本文的四種粒徑:

def par    width=0.15    height= width*2         y_vel=10.0        cengshu=5.0    pengzhangxishu=5.0    tbjipei=table.create("jipei")    table(tbjipei,0.003)=0.3    table(tbjipei,0.004)=0.5    table(tbjipei,0.01)=0.7    table(tbjipei,0.015)=1        poro=0.12    ;dengchaxian=0.02end

土石混合體的分層壓縮法的圖1

    其中0.003和0.004粒徑的我們選擇用Ball去模擬,和0.01和0.015粒徑的我們使用clump去模擬。

首先我們需要準備好形狀文件并導入成clump模板。



geometry import suishi.dxfclump template create name suishi ... geometry suishi ... bubblepack ratio 0.3 distance 130 ... surfcalculate

之后在之前分層壓縮代碼的基礎上進行分流:

if keligid=3 then                 command                    clump generate azimuth 0 360 templates 1 suishi size [table.x(tbjipei,keligid)] diameter number ...                    [math.ceiling(kelinum)] box [-width*0.5] [width*0.5] ...                    [dibuzuobiao] [pengzhangGaoDu] group @cenggName slot 1 group @ballgroup slot 2 tries 20000                                    clump attribute density 2.7e3 damp 0.7                endcommand            else if keligid=4 then                 command                    clump generate azimuth 0 360 templates 1 suishi size [table.x(tbjipei,keligid)] diameter number ...                    [math.ceiling(kelinum)] box [-width*0.5] [width*0.5] ...                    [dibuzuobiao] [pengzhangGaoDu] group @cenggName slot 1 group @ballgroup slot 2 tries 20000                                   clump attribute density 2.7e3 damp 0.7                endcommand            else                command                 ball generate radius [table.x(tbjipei,keligid)*0.5] number [math.ceiling(kelinum)] box [-width*0.5] [width*0.5] ...                    [dibuzuobiao] [pengzhangGaoDu] group @cenggName slot 1 group @ballgroup slot 2 tries 20000                ball attribute density 2.7e3 damp 0.7                endcommand            endif

    這里使用clump generate進行clump的生成,注意使用azimuth指定clump的旋轉角度,這樣生成的clump就不會都是一樣的方向。

    我們看一下最后的結果:

土石混合體的分層壓縮法的圖2

其實用surface來顯示clump會好些:

土石混合體的分層壓縮法的圖3



當然四種粒徑的顆粒也可以看出來:


土石混合體的分層壓縮法的圖4

完整代碼如下,用戶需自己提供suishi.dxf的形狀文件。

new def par    width=0.15    height= width*2         y_vel=10.0        cengshu=5.0    pengzhangxishu=5.0    tbjipei=table.create("jipei")    table(tbjipei,0.003)=0.3    table(tbjipei,0.004)=0.5    table(tbjipei,0.01)=0.7    table(tbjipei,0.015)=1        poro=0.12    ;dengchaxian=0.02end@pardomain extent [-height*10] [height*10]set random 10001wall generate box [-width*0.5] [width*0.5] [-height*0.5] [height*(pengzhangxishu-1)-height*0.5] expand 1.5cmat default model linear method deformability emod 100e6 kratio 1.5 geometry import suishi.dxfclump template create name suishi ...                         geometry suishi ...                            bubblepack ratio 0.3 distance 130 ...                            surfcalculate def create_sample    tb_ceng=table.create("ceng_poro")    loop n(1,cengshu)        dibuzuobiao=-height*0.5+height*(n-1)/cengshu        dingbuzuobiao=-height*0.5+height*(n)/cengshu                pengzhangGaoDu=dingbuzuobiao+height*(pengzhangxishu-1)/cengshu           command            wall delete walls range id 3            wall create id 3 vertices [-width*0.5*1.5] [pengzhangGaoDu] [width*0.5*1.5] [pengzhangGaoDu]         endcommand        poroceng=poro;-(n-(cengshu+1)*0.5)*dengchaxian/(cengshu-1)        table(tb_ceng,n)=poroceng                 keligeoup=table.size(tbjipei)        Vs=height*width*(1-poroceng)/cengshu                cenggName=string.build("ceng%1",n)        loop m(1,keligeoup)            keligid=keligeoup+1-m            vslocal=0            if keligid=1 then                vslocal=Vs*table.y(tbjipei,keligid)            else                            vslocal=Vs*(table.y(tbjipei,keligid)-table.y(tbjipei,keligid-1))            endif            kelinum=vslocal/(math.pi*(table.x(tbjipei,keligid)*0.5)^2)            ballgroup=string.build("ball%1",keligid)                        if keligid=3 then                 command                    clump generate azimuth 0 360 templates 1 suishi size [table.x(tbjipei,keligid)] diameter number ...                    [math.ceiling(kelinum)] box [-width*0.5] [width*0.5] ...                    [dibuzuobiao] [pengzhangGaoDu] group @cenggName slot 1 group @ballgroup slot 2 tries 20000                                    clump attribute density 2.7e3 damp 0.7                endcommand            else if keligid=4 then                 command                    clump generate azimuth 0 360 templates 1 suishi size [table.x(tbjipei,keligid)] diameter number ...                    [math.ceiling(kelinum)] box [-width*0.5] [width*0.5] ...                    [dibuzuobiao] [pengzhangGaoDu] group @cenggName slot 1 group @ballgroup slot 2 tries 20000                                   clump attribute density 2.7e3 damp 0.7                endcommand            else                command                 ball generate radius [table.x(tbjipei,keligid)*0.5] number [math.ceiling(kelinum)] box [-width*0.5] [width*0.5] ...                    [dibuzuobiao] [pengzhangGaoDu] group @cenggName slot 1 group @ballgroup slot 2 tries 20000                ball attribute density 2.7e3 damp 0.7                endcommand            endif        endloop                command            wall attribute yvel [-y_vel] range id 3            solve time [(pengzhangGaoDu-dingbuzuobiao)/y_vel]                        wall attribute yvel 0 range id 3            cycle 2000        endcommand            endloopend@create_samplesolvesave sample
登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

11
6
8