【PFC6.0】子*彈穿墻模擬
0 引言
最近剛好刷到《戰(zhàn)狼1》的短視頻,里面有一個經(jīng)典的子*彈穿墻鏡頭,想著或許可以使用離散元的方法進(jìn)行模擬。對于彈道分析、穿墻速度損失等方面應(yīng)該會有一定的指導(dǎo)意義。案例中使用到了很多技術(shù)方法,比如子*彈的形狀是用圓錐二次化后生成的,墻體的邊界處理等。
1 成樣
破碎方面一般只在被擊中的磚周邊,所以我們只建了三行三列的磚墻,其余的邊界用有限元的zone模擬。磚頭采用240*115*90mm尺寸,粒徑在2-3mm之間,生成了20w左右的顆粒。由于后面是想用力清零的方式來形成膠結(jié)物,所以這里對模型的平衡度要求不高,ratio到1e-2停止。
model newdef zhuan_parzhuan_length=240e-3zhuan_width=115e-3zhuan_height=90e-3rdmin=2e-3rdmax=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.5model mechanic timestep scalemodel cycle 1model solve ratio-average 1e-2model 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_lengthcommandgeometry 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]endcommandendloopend@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_geogeo_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)commandwall generate group "fenjie" polygon [geom.node.pos(n1)] ...[geom.node.pos(n2)] ...[geom.node.pos(n3)] ...[geom.node.pos(n4)]endcommandendloopend@create_wall_from_geomodel cycle 1model solve ratio-average 1e-2model 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 deletezone 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.25zone 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 cleancontact 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.0ball attribute damp 0.1model calmmodel cycle 1model solvemodel save "model_qiang"
到這里為止,磚墻模型就形成了,如下圖:
膠結(jié)情況如圖:
4 造子*彈
懶得畫子*彈圖形,并且參數(shù)控制也比較容易來研究子*彈形狀對結(jié)果的影響。這里是首先生成一個圓錐cone作為基本圖形,然后將其y坐標(biāo)二次化,其實(shí)是將圓錐給不均勻拉長成一個子*彈的形狀。需要注意的cone本身y向是只有一段的,所以需要將其加密才可以獲得多段y坐標(biāo)的cone,然后改變其y坐標(biāo)。
model restore "model_qiang"def zidan_parzidan_zhijing=9.5e-3zidan_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.8geometry refine 4def extend_geogeo_zidan=geo.set.find("zidan")loop foreach nd geo.node.list(geo_zidan)y_dist=(geo.node.pos.y(nd)+zhuan_Width*0.5)*2000y_dist_new=(-1/2000.0)* math.abs(y_dist)^(2)-zhuan_Width*0.5=y_dist_newendloopend@extend_geodef get_min_maxglobal x_min=1e100global x_max=-1e100global y_min=1e100global y_max=-1e100local 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)endifif y_min > comp.y(pos)y_min = comp.y(pos)endifif x_max < comp.x(pos)x_max = comp.x(pos)endifif y_max < comp.y(pos)y_max = comp.y(pos)endifendloopend@get_min_maxdef scale_geolength_now=y_max-y_minscale_factor=zidan_changdu/length_nowgeo_zidan=geo.set.find("zidan")loop foreach nd geo.node.list(geo_zidan)=-zhuan_Width*0.5+(geo.node.pos.y(nd)+zhuan_Width*0.5)*scale_factorendloopend@scale_georblock create from-geometrymodel save "add_zidan"
子*彈用rblock來模擬,如圖:
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.5model 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 savefileif mech.time.total-time_record > baocunpinlv thenfilename=string.build("jieguo_%1",count)commandmodel save @filenameendcommandtime_record=mech.time.totalcount +=1endifendfish callback add @savefile -1.0[rb_zidan=rblock.find(1)]def jiancewhilesteppingzidan_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 1model save "result"
【0.75um以內(nèi)的狀態(tài)】
zi彈剛接觸和剛穿過的狀態(tài)。
下面動圖為zi彈穿過墻體的過程:
如圖為正面接觸的破壞圖:
下圖為周邊磚墻的位移圖,可以看到剛開始的時候豎向位移比較大,后面的時候橫向位移比較大。
下圖為zi彈軌跡圖,不清楚是顆粒效應(yīng)問題還是什么,其在穿入一半的時候軌跡偏向下:
【0.75um之后的狀態(tài)】
zi彈穿過后的墻體破碎漸變情況:
接觸漸變情況
下圖為周圍磚墻邊界的位移場變化。這里截取的不夠密,應(yīng)當(dāng)是以波的形勢來傳遞的。
7結(jié)語
本文僅提供zi彈穿墻案例所需要的技術(shù)條件,其中的參數(shù)標(biāo)定、結(jié)果分析可在本文基礎(chǔ)上完成。
工程師必備
- 項(xiàng)目客服
- 培訓(xùn)客服
- 平臺客服
TOP




















