PFC顆粒分析第一步:掌握離散元這些成樣方法就夠了!
導(dǎo)讀:PFC是一個(gè)關(guān)于顆粒的方法,在進(jìn)行分析的時(shí)候我們首先需要做的就是生成一個(gè)比較好的式樣,這篇文章從簡單的create開始,介紹規(guī)則與隨機(jī)顆粒的生成,從create角度去理解generate與distribute的建模思路。之后再介紹基于generate方法的壓縮法、分層壓縮法、分層欠壓法(UCM)、粒徑膨脹法,還有基于distribute的網(wǎng)格法(GM),還會(huì)介紹PFC自帶的Brick方法。有集成的命令流,也有自開發(fā)的fish,有一些fish還是比較難理解的,對(duì)于各位的fish基礎(chǔ)可能會(huì)是一個(gè)比較大的挑戰(zhàn)。
我個(gè)人還是建議各位可以將這文章打印下來好好理解,對(duì)于理解離散元和加強(qiáng)fish學(xué)習(xí)都是一個(gè)比較好的機(jī)會(huì)。
一、最原始的成樣——Create
Create應(yīng)該是PFC最底層的成樣關(guān)鍵詞了,后面所有的成樣關(guān)鍵詞都是在這個(gè)關(guān)鍵詞基礎(chǔ)上建立了。Create的使用也很簡單,只需要指定位置(position)和半徑(radius)就可以了。如圖1便是在我們的軟件中生成一個(gè)圓心在原點(diǎn),半徑0.006的顆粒。
圖1.1:create生成的單個(gè)顆粒代碼及結(jié)果
最底層的功能有了,在這個(gè)功能上我們便可以去構(gòu)建一些我們需要的功能,對(duì)于做結(jié)構(gòu)物的同學(xué)來說,往往需要規(guī)則排列的顆粒去模擬結(jié)構(gòu)物。最常見的樁梁結(jié)構(gòu)往往是矩形規(guī)則排列的顆粒,我們便可以利用fish語言去構(gòu)建矩形排列和圓形排列的顆粒,如圖2所示。這里面我們使用了ball.create函數(shù),這個(gè)函數(shù)需要至少兩個(gè)參數(shù),第一個(gè)是一個(gè)浮點(diǎn)型變量,表示顆粒的半徑,第二個(gè)是一個(gè)vector變量,表示顆粒的位置。
對(duì)于巖土專業(yè),我們需要的應(yīng)該是隨機(jī)排列的顆粒,這里也可以使用create實(shí)現(xiàn),我們采用隨機(jī)數(shù)的概念,加上一些邊界條件便可以實(shí)現(xiàn)這個(gè)功能。隨機(jī)數(shù)的概念就不去講了,這里需要理解一下隨機(jī)分布的邊界條件:顆粒之間沒有重疊,大重疊會(huì)引起很大的速度,所以我們是不會(huì)允許顆粒之間有重疊量。這里代碼中有兩個(gè)函數(shù),第一個(gè)函數(shù)用于判定一個(gè)位置vector和已經(jīng)生成的顆粒有沒有重疊量,第二個(gè)函數(shù)用于在0.2*0.4范圍內(nèi)生成指定數(shù)目指定粒徑的顆粒。
圖1.4:create生成的隨機(jī)排列顆粒代碼及結(jié)果
到這里很多同學(xué)就已經(jīng)發(fā)現(xiàn)了,這不是generate方法嗎?沒錯(cuò),是的!genrate的底層就是在create基礎(chǔ)上進(jìn)行的包裝。下面我們對(duì)generate方法進(jìn)行講述。
二、無重疊的成樣方法—generate
generate方法是在指定區(qū)域內(nèi)生成無重疊的指定粒徑的顆粒,一個(gè)最簡單的應(yīng)用就是對(duì)前述create的包裝。
圖2.1:generate生成的隨機(jī)排列顆粒代碼及結(jié)果
對(duì)矩形規(guī)則排列的顆粒也有比較好的實(shí)現(xiàn),需要注意的是指定cubic后,number就沒用了,顆粒會(huì)鋪滿區(qū)域。這個(gè)區(qū)域指的是圓心在區(qū)域內(nèi),而不是顆粒整個(gè)在區(qū)域內(nèi),這里建立一個(gè)wall box來可視化一下這個(gè)邊界,從圖中可以看出我講述的意思。
2.2:generate生成的矩形規(guī)則排列顆粒代碼及結(jié)果
在巖土材料中,我們一般要指定顆粒的孔隙率和級(jí)配,用generate怎么實(shí)現(xiàn)呢?因?yàn)間enerate只能生成指定數(shù)量,所以我們需要算出級(jí)配中每個(gè)粒徑顆粒對(duì)應(yīng)的數(shù)目。邏輯為:試樣顆粒體積 Vs=(1-poro)*V ,其中poro為孔隙率,V為試樣體積。如果兩個(gè)顆粒的質(zhì)量百分比一樣的話(如果密度一樣,體積百分比也一樣),兩個(gè)粒徑的顆粒體積為 Vs1=Vs2=Vs*0.5 。一個(gè)顆粒的體積為 pi*r*r ,這樣顆粒數(shù)為 Vs1/(pi*r*r)。于是乎命令流為:
圖2.3:generate生成的指定孔隙率顆粒的代碼
運(yùn)行上述代碼時(shí)我們發(fā)現(xiàn)了報(bào)了一個(gè)警告:
這個(gè)警告告訴我們顆粒數(shù)目沒有達(dá)到指定的數(shù)目,我們看一下模型圖:
圖2.5:模型圖
通過模型我們可以發(fā)現(xiàn),0.006粒徑的顆粒基本上可以了,但是0.009粒徑的顆粒卻只有4個(gè),遠(yuǎn)遠(yuǎn)沒有滿足要求。這里原因可以去理解一下我create生成隨機(jī)分布的代碼,里面設(shè)定了一個(gè)數(shù)字是20000,這個(gè)數(shù)字代表著在找不重疊的位置的時(shí)候,只會(huì)尋找20000次,超過這個(gè)次數(shù)便放棄生成這個(gè)顆粒。generate里面也是一樣的,默認(rèn)搜索次數(shù)是20000,對(duì)應(yīng)的關(guān)鍵詞是tries。
所以暴露出了generate方法的一個(gè)缺點(diǎn)了,就是很難在生成指定孔隙率的顆粒,原因是在指定空間中,不足以生成指定數(shù)目指定粒徑的顆粒。那有沒有解決的辦法呢?當(dāng)然是有的,對(duì)應(yīng)上述三個(gè)邊界條件——“指定空間"、”指定粒徑“、”指定數(shù)目“,產(chǎn)生三種方法。我們一個(gè)個(gè)來講。
三、“指定空間”的解決辦法——壓縮法
壓縮法的概念是,保持粒徑不變,我先將區(qū)域放大,然后移動(dòng)墻體,使其移動(dòng)到指定的區(qū)域面積。以下為這個(gè)邏輯的demo,區(qū)域放大系數(shù)為5.0,也就是先將區(qū)域放大五倍,然后移動(dòng)上部墻體,移動(dòng)4.0倍的區(qū)域距離。下為壓縮法的代碼:
圖3.1:壓縮法代碼
首先我們?cè)谝粋€(gè)比較大的范圍內(nèi)生成顆粒:
圖3.2:壓縮前模型
之后壓縮到指定的尺寸:
圖3.2:壓縮后模型
可以看出來,雖然生成了指定數(shù)目的顆粒了,但是試樣在上方比較密,在下方比較松,這樣必然會(huì)導(dǎo)致試樣的不均勻性,于是很多學(xué)者對(duì)其進(jìn)行了拓展,基本的拓展方法為分層壓縮法。分層壓縮法將壓縮分成好幾層,這樣由于壓縮底部的空隙被分擔(dān)到每層中,式樣的均勻性就有了很大的提高。
圖3.3:分層壓縮法代碼
這里分5次成樣,下面給出執(zhí)行中的試樣狀態(tài):
很多學(xué)者對(duì)于壓縮時(shí)候的能量傳遞進(jìn)行研究,認(rèn)為由于壓縮能的影響,下部的顆粒在成樣的時(shí)候應(yīng)該松一點(diǎn),上部的顆粒應(yīng)該密一點(diǎn)。這時(shí)候我們可以改變孔隙率實(shí)現(xiàn)這個(gè)想法,具體為:如分5層,則5層的孔隙率為 1.08*poro,1.04*poro,poro,0.96*poro,0.92*poro。這個(gè)可以根據(jù)試樣的情況去調(diào)。也有一些學(xué)者對(duì)孔隙率的值進(jìn)行了定值研究,國內(nèi)比較著名的就是分層欠壓法UCM(蔣)。
所謂的UCM法基本的概念為其認(rèn)為壓縮的時(shí)候墻體對(duì)于顆粒有壓縮能,壓縮能的存在導(dǎo)致了分層壓縮的時(shí)候,上部顆粒會(huì)相對(duì)較松,而下部較密。這個(gè)概念當(dāng)然是早就有了,UCM的創(chuàng)新之處在于其提出了孔隙率隨著層數(shù)的分布,有一個(gè)初始欠壓比的概念,通過調(diào)整初始欠壓比,便可以實(shí)現(xiàn)對(duì)所有層孔隙率的調(diào)整。下面給出分層欠壓法的代碼:
這里的u0決定了孔隙率的分布,u0等于1.0時(shí),孔隙率的分布為(注意我們目標(biāo)孔隙率為0.25):
圖3.6:分層欠壓法孔隙率分布
圖3.7:分層欠壓法結(jié)果
四、“指定粒徑“的解決辦法——粒徑膨脹法
這個(gè)思路就是先將粒徑減小,生成指定數(shù)目后,再將粒徑增大。這里給出demo,這里定義了膨脹系數(shù)為5.0,就是先將粒徑減小五倍,之后再放大。
圖4.2:粒徑膨脹法粒徑放大前
圖4.3:粒徑膨脹法粒徑放大后
這個(gè)方法的概念比較簡單,就不多贅述了。
五、“指定數(shù)目“的解決辦法——“強(qiáng)行塞”
這個(gè)思路什么意思呢,就是我這里不管你的重疊量了,我直接往區(qū)域內(nèi)塞入指定數(shù)目的顆粒,力學(xué)平衡后形成我們的式樣。
圖5.1:“強(qiáng)行塞”代碼
在未平衡前,式樣狀態(tài)為:
圖5.2:“強(qiáng)行塞”平衡前
圖5.2:“強(qiáng)行塞”平衡后
到這里可能很多同學(xué)已經(jīng)發(fā)現(xiàn)了,這個(gè)形成方法不就是ditribute嗎?是的沒錯(cuò),distribute正是基于這樣的思路建立起來的,下一節(jié)我們就介紹一下ditribute的用法。
六、指定級(jí)配孔隙率的成樣方法——distribute
distribute方法是專門用來生成級(jí)配式樣的,就目前來看可以說是最便捷的方法了。下面我們就使用distribute來生成我們上面的式樣。這個(gè)方法用的人比較多了,就不去敘述了。
圖6.1:distribute成樣代碼和模型
下面我們講一下distribute 的進(jìn)階,distribute在顆粒數(shù)比較多的時(shí)候,效果不是很好,會(huì)因?yàn)轭w粒分布不均勻?qū)е碌牟痪鶆蛐浴榱丝朔@個(gè)缺點(diǎn),有學(xué)者引入了GM法,這個(gè)方法是用網(wǎng)格的形式去生成顆粒,代碼如下,這里不去過多的講解,可以參考一下相關(guān)的文獻(xiàn)。
圖6.3:GM法結(jié)果模型
可以發(fā)現(xiàn)這個(gè)方法生成的顆粒數(shù)比預(yù)想的要低,這是因?yàn)槲疫@里顆粒數(shù)比較少,在生成的時(shí)候產(chǎn)生了較大的誤差。
到這里又熟悉了,想到了PFC中的Brick方法。
七、超級(jí)快速的大模型成樣方法——Brick
就像其意思一樣,Brick方法是先生成滿足條件的一個(gè)小塊,然后用這個(gè)小塊拼湊起整個(gè)模型。這個(gè)東西牛逼的是計(jì)算速度,上面的分層法計(jì)算一次基本上都需要十幾分鐘左右,但是brick方法只需要1秒!
Brick分為兩部分:
(1)首先生成基本的磚頭,注意這里的domain必須是周期邊界,并且大小就是磚頭的大小
(2)之后利用brick關(guān)鍵詞進(jìn)行組裝
圖7.2:一個(gè)Brick
圖7.3:組裝完成后的Brick
可以發(fā)現(xiàn)Brick方法是對(duì)一部分可以的重復(fù)復(fù)制,所以計(jì)算量會(huì)小很多,我這里的數(shù)目比較少,可能效果不是特別好。Brick方法和GM法是類似的,但是GM法在每個(gè)網(wǎng)格中都有不一樣的隨機(jī)數(shù),這樣不會(huì)產(chǎn)生Brick方法中魚鱗狀的效果,我認(rèn)為相較于Brick方法,可能GM法更加適用于我們的巖土類材料。
八、寫在最后
以上便是我總結(jié)出來的PFC成樣方法了,從底層到頂層都過了一遍,但是我這里只使用了兩個(gè)粒徑,對(duì)于多粒徑的方法讀者可以在理解后自行擴(kuò)充,distribute相關(guān)的方法還是比較容易的,generate相關(guān)的方法各位還是得費(fèi)點(diǎn)心思。
工程師必備
- 項(xiàng)目客服
- 培訓(xùn)客服
- 平臺(tái)客服
TOP




















