【PFC6.0】子*彈穿墻模擬

0 引言    

    最近剛好刷到《戰(zhàn)狼1》的短視頻,里面有一個經(jīng)典的子*彈穿墻鏡頭,想著或許可以使用離散元的方法進(jìn)行模擬。對于彈道分析、穿墻速度損失等方面應(yīng)該會有一定的指導(dǎo)意義。案例中使用到了很多技術(shù)方法,比如子*彈的形狀是用圓錐二次化后生成的,墻體的邊界處理等。

【PFC6.0】子*彈穿墻模擬的圖1



1 成樣

    

    破碎方面一般只在被擊中的磚周邊,所以我們只建了三行三列的磚墻,其余的邊界用有限元的zone模擬。磚頭采用240*115*90mm尺寸,粒徑在2-3mm之間,生成了20w左右的顆粒。由于后面是想用力清零的方式來形成膠結(jié)物,所以這里對模型的平衡度要求不高,ratio到1e-2停止。

model newdef zhuan_par    zhuan_length=240e-3    zhuan_width=115e-3    zhuan_height=90e-3        rdmin=2e-3    rdmax=3e-3end@zhuan_parmodel domain extent [-zhuan_length*2] [zhuan_length*2] 

wall generate  box [-zhuan_length*1.5] [zhuan_length*1.5] ...            [-zhuan_width*0.5]  [zhuan_width*0.5] [-zhuan_height*1.5] [zhuan_height*1.5]            ball distribute porosity 0.3 radius @rdmin @rdmax  box [-zhuan_length*1.5] [zhuan_length*1.5] ...            [-zhuan_width*0.5]  [zhuan_width*0.5] [-zhuan_height*1.5] [zhuan_height*1.5]ball attribute density 3.8e3 damp 0.7contact cmat default type ball-ball model linear method deform emod 1e9 kratio 1.5contact cmat default type ball-facet model linear method deform emod 10e9 kratio 1.5

model mechanic timestep scalemodel cycle 1model solve ratio-average 1e-2

model save "sample"



2 磚墻邊界


    模擬混凝土墻的話,使用一整個式樣即可。對于磚墻的話一般是錯開排列的,使用水泥等進(jìn)行粘結(jié)。這里首先建立每塊磚邊界上的形狀,然后導(dǎo)入墻體進(jìn)行邊界平整,然后賦予參數(shù)成樣。


model restore "sample"

geometry set "fenjie"

geometry polygon create  by-positions  [-zhuan_length*1.5] [-zhuan_width*0.5] [zhuan_height*0.5] ...                        [-zhuan_length*1.5] [zhuan_width*0.5] [zhuan_height*0.5] ...                        [zhuan_length*1.5] [zhuan_width*0.5] [zhuan_height*0.5] ...                        [zhuan_length*1.5] [-zhuan_width*0.5] [zhuan_height*0.5] geometry polygon create  by-positions [-zhuan_length*1.5] [-zhuan_width*0.5] [-zhuan_height*0.5] ...                        [-zhuan_length*1.5] [zhuan_width*0.5] [-zhuan_height*0.5] ...                        [zhuan_length*1.5] [zhuan_width*0.5] [-zhuan_height*0.5] ...                        [zhuan_length*1.5] [-zhuan_width*0.5] [-zhuan_height*0.5]



def gen_on_layer(x_pos_qi,z_pos_qi,num)    loop n(1,num)        x_pos=x_pos_qi+(n-1)*zhuan_length        command           geometry polygon create  by-positions @x_pos [-zhuan_width*0.5] [z_pos_qi] ...                        @x_pos [zhuan_width*0.5] [z_pos_qi] ...                        @x_pos [zhuan_width*0.5] [z_pos_qi+zhuan_height] ...                        @x_pos [-zhuan_width*0.5] [z_pos_qi+zhuan_height]        endcommand    endloopend@gen_on_layer([-zhuan_length*1.0],[zhuan_height*0.5],3)@gen_on_layer([-zhuan_length*0.5],[-zhuan_height*0.5],2)@gen_on_layer([-zhuan_length*1.0],[-zhuan_height*1.5],3)



def create_wall_from_geo    geo_pt=geom.set.find("fenjie")    loop foreach pg geom.poly.list(geo_pt)        n1= geom.poly.node(pg,1)        n2= geom.poly.node(pg,2)        n3= geom.poly.node(pg,3)        n4= geom.poly.node(pg,4)        command            wall generate  group "fenjie" polygon [geom.node.pos(n1)] ...                                [geom.node.pos(n2)] ...                                [geom.node.pos(n3)] ...                                [geom.node.pos(n4)]        endcommand    endloopend@create_wall_from_geomodel cycle 1model solve ratio-average 1e-2

model save "wall_ball"



3 加膠結(jié)

    

    這里為了弱化邊界的影響,使用了zone來模擬周邊的墻體來傳遞應(yīng)力應(yīng)變。給了磚頭比較強(qiáng)的接觸,邊界給了弱一倍的參數(shù),這里是隨便給的,如果是專門做的話,需要進(jìn)行參數(shù)標(biāo)定。


model restore "wall_ball"[emod=1e9][pb_coh=3e6]



wall delete

zone create brick size (4,1,11) point 0 ([zhuan_length*1.5],[-zhuan_Width*0.5],[-zhuan_height*5.5])  ...                                    point 1 ([zhuan_length*5.5],[-zhuan_Width*0.5],[-zhuan_height*5.5]) ...                                  point 2 ([zhuan_length*1.5],[zhuan_Width*0.5],[-zhuan_height*5.5]) ...                                  point 3 ([zhuan_length*1.5],[-zhuan_Width*0.5],[zhuan_height*5.5])zone create brick size (4,1,11) point 0 ([-zhuan_length*5.5],[-zhuan_Width*0.5],[-zhuan_height*5.5])  ...                                    point 1 ([-zhuan_length*1.5],[-zhuan_Width*0.5],[-zhuan_height*5.5]) ...                                  point 2 ([-zhuan_length*5.5],[zhuan_Width*0.5],[-zhuan_height*5.5]) ...                                  point 3 ([-zhuan_length*5.5],[-zhuan_Width*0.5],[zhuan_height*5.5])zone create brick size (3,1,4) point 0 ([-zhuan_length*1.5],[-zhuan_Width*0.5],[zhuan_height*1.5])  ...                                    point 1 ([zhuan_length*1.5],[-zhuan_Width*0.5],[zhuan_height*1.5]) ...                                  point 2 ([-zhuan_length*1.5],[zhuan_Width*0.5],[zhuan_height*1.5]) ...                                  point 3 ([-zhuan_length*1.5],[-zhuan_Width*0.5],[zhuan_height*5.5])zone create brick size (3,1,4) point 0 ([-zhuan_length*1.5],[-zhuan_Width*0.5],[-zhuan_height*5.5])  ...                                    point 1 ([zhuan_length*1.5],[-zhuan_Width*0.5],[-zhuan_height*5.5]) ...                                  point 2 ([-zhuan_length*1.5],[zhuan_Width*0.5],[-zhuan_height*5.5]) ...                                  point 3 ([-zhuan_length*1.5],[-zhuan_Width*0.5],[-zhuan_height*1.5])zone cmodel assign elasticzone property young [emod] poisson 0.25

zone gridpoint fix velocity range pos-x [-zhuan_length*5.6]  [-zhuan_length*5.4]zone gridpoint fix velocity range pos-x [zhuan_length*5.4]  [zhuan_length*5.6]

zone gridpoint fix velocity range pos-z [-zhuan_height*5.6]  [-zhuan_height*5.4]zone gridpoint fix velocity range pos-z [zhuan_height*5.4]  [zhuan_height*5.6]

wall-zone create name 'bianjie1' skip-errors range pos-x [-zhuan_length*1.6] [-zhuan_length*1.4] ...                            pos-z [-zhuan_height*1.6] [zhuan_height*1.6] wall-zone create name 'bianjie2' skip-errors range pos-x [zhuan_length*1.4] [-zhuan_length*1.6] ...                            pos-z [-zhuan_height*1.6] [zhuan_height*1.6] wall-zone create name 'bianjie3' skip-errors range pos-x [-zhuan_length*1.6] [zhuan_length*1.6] ...                            pos-z [zhuan_height*1.4] [zhuan_height*1.6] wall-zone create name 'bianjie4' skip-errors range pos-x [-zhuan_length*1.6] [zhuan_length*1.6] ...                            pos-z [-zhuan_height*1.6] [zhuan_height*1.4] contact cmat default type ball-ball model linearpbond method deform emod @emod kratio 1.5 ...                pb_deform emod @emod kratio 1.5 property pb_coh [pb_coh] pb_ten [pb_coh*3] pb_fa 50contact cmat default type ball-facet model linearpbond method deform emod @emod kratio 1.5 ...                pb_deform emod @emod kratio 1.5 property pb_coh [pb_coh] pb_ten [pb_coh*3] pb_fa 50contact cmat add 1 model linearpbond method deform emod [emod*0.5] kratio 1.5 ...                pb_deform emod [emod*0.5] kratio 1.5 property pb_coh [pb_coh*0.5] pb_ten [pb_coh*1.5] pb_fa 30 range ...                geometry-distance "fenjie" gap [rdmin*0.2]contact cmat applymodel clean

contact method bond gap [rdmax]

contact property lin_force 0.0 0.0 0 lin_mode 1ball attribute force-contact multiply 0.0 moment-contact multiply 0.0 ball attribute damp 0.1model calm

model cycle 1model solve

model save "model_qiang"


到這里為止,磚墻模型就形成了,如下圖:


【PFC6.0】子*彈穿墻模擬的圖2



膠結(jié)情況如圖:


【PFC6.0】子*彈穿墻模擬的圖3


4 造子*彈


    懶得畫子*彈圖形,并且參數(shù)控制也比較容易來研究子*彈形狀對結(jié)果的影響。這里是首先生成一個圓錐cone作為基本圖形,然后將其y坐標(biāo)二次化,其實(shí)是將圓錐給不均勻拉長成一個子*彈的形狀。需要注意的cone本身y向是只有一段的,所以需要將其加密才可以獲得多段y坐標(biāo)的cone,然后改變其y坐標(biāo)。

    

model restore "model_qiang"

def zidan_par    zidan_zhijing=9.5e-3    zidan_changdu=67.7e-3end@zidan_pargeometry set "zidan"geometry generate cone base 0 [-zhuan_Width*0.5-zidan_zhijing*0.5] 0 ...                axis 0 1 0 ...                height [zidan_zhijing*0.5] ...                radius [zidan_zhijing*0.5] ...                cap true res 0.8

geometry refine 4def extend_geo    geo_zidan=geo.set.find("zidan")    loop foreach nd geo.node.list(geo_zidan)        y_dist=(geo.node.pos.y(nd)+zhuan_Width*0.5)*2000        y_dist_new=(-1/2000.0)* math.abs(y_dist)^(2)-zhuan_Width*0.5        geo.node.pos.y(nd)=y_dist_new    endloopend@extend_geo

def get_min_max    global x_min=1e100    global x_max=-1e100        global y_min=1e100    global y_max=-1e100    local gs = geom.set.find("zidan")    loop foreach local gn geom.node.list(gs)        local pos = geom.node.pos(gn)        if x_min > comp.x(pos)            x_min = comp.x(pos)        endif        if y_min > comp.y(pos)            y_min = comp.y(pos)        endif          if x_max < comp.x(pos)            x_max = comp.x(pos)        endif        if y_max < comp.y(pos)            y_max = comp.y(pos)        endif    endloopend@get_min_maxdef scale_geo    length_now=y_max-y_min    scale_factor=zidan_changdu/length_now    geo_zidan=geo.set.find("zidan")    loop foreach nd geo.node.list(geo_zidan)        geo.node.pos.y(nd)=-zhuan_Width*0.5+(geo.node.pos.y(nd)+zhuan_Width*0.5)*scale_factor    endloopend@scale_geo

rblock create  from-geometry

model save "add_zidan"


子*彈用rblock來模擬,如圖:

【PFC6.0】子*彈穿墻模擬的圖4


5 沖擊


    最后一步就是給子*彈一個速度,來沖擊磚墻。在子*彈沖擊墻的時候,把時步設(shè)置的比較小,防止因?yàn)樗俣冗^大引起的計(jì)算問題。子*彈沖擊完后,可以將時步放大,來研究墻體的破碎情況。注意動力問題阻尼要縮小。

model restore "add_zidan"model domain extent [-zhuan_length*2] [zhuan_length*2] condition destroymodel mech time-total 0contact cmat default type ball-rblock model linear method deform emod 10e9 kratio 1.5 model mechanic timestep fix 1e-8ball attribute density 2e3 damp 0.01rblock attribute density 11e3 damp 0.01rblock attribute velocity-y [800] 

[time_record=mech.time.total-100][baocunpinlv=5e-5]def savefile        if mech.time.total-time_record > baocunpinlv then        filename=string.build("jieguo_%1",count)        command            model save @filename                    endcommand        time_record=mech.time.total        count +=1    endif    endfish callback add @savefile -1.0

[rb_zidan=rblock.find(1)]def jiance    whilestepping    zidan_vel_y=rblock.vel.y(rb_zidan)endhistory deletehistory id 1 @zidan_vel_yrblock trace id 1model solve time 0.75e-3[baocunpinlv=1e-2]model mechanic timestep fix 1e-6def jianceendmodel solve time 1

model save "result"


【0.75um以內(nèi)的狀態(tài)】

zi彈剛接觸和剛穿過的狀態(tài)。


【PFC6.0】子*彈穿墻模擬的圖5


【PFC6.0】子*彈穿墻模擬的圖6


下面動圖為zi彈穿過墻體的過程:


【PFC6.0】子*彈穿墻模擬的圖7


如圖為正面接觸的破壞圖:


【PFC6.0】子*彈穿墻模擬的圖8


    下圖為周邊磚墻的位移圖,可以看到剛開始的時候豎向位移比較大,后面的時候橫向位移比較大。


【PFC6.0】子*彈穿墻模擬的圖9


下圖為zi彈軌跡圖,不清楚是顆粒效應(yīng)問題還是什么,其在穿入一半的時候軌跡偏向下:

【PFC6.0】子*彈穿墻模擬的圖10




【0.75um之后的狀態(tài)】


zi彈穿過后的墻體破碎漸變情況:


【PFC6.0】子*彈穿墻模擬的圖11


接觸漸變情況


【PFC6.0】子*彈穿墻模擬的圖12


    下圖為周圍磚墻邊界的位移場變化。這里截取的不夠密,應(yīng)當(dāng)是以波的形勢來傳遞的。


【PFC6.0】子*彈穿墻模擬的圖13



7結(jié)語


    本文僅提供zi彈穿墻案例所需要的技術(shù)條件,其中的參數(shù)標(biāo)定、結(jié)果分析可在本文基礎(chǔ)上完成。




登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP

7
4
3