【PFC6.0】三维Cluster模拟混合料混凝土

0 引言

    对于含集料混凝土,集料强度相对于水泥强度高很多,所以一般不会考虑到集料的可破坏性。所以大部分情况下,使用clump来模拟集料混凝土也就够了。但是在一些特别的受集中力的工况下,集料的破坏也不少见,这种情况就需要去考虑集料的破坏了。

    本文基于已有的研究成果,提出一种以cluster为集料颗粒的混凝土成样方式,并用单轴实验来进行测试。

1 成样

对于混凝土,集料一般不是很多,这里在空间中生成松散的ball代替集料。

model newdef par    width=2    height=width*2        rdmin=0.2    rdmax=0.4        poro=0.8end@par

domain extent [-width*2.0] [width*2.0] [-width*2.0] [width*2.0] ... [-height*2.0] [height*2.0]model random 10001

wall generate box [-width*0.5] [width*0.5] [-width*0.5] [width*0.5] ... [-height*0.5] [height*0.5] expand 1.5ball distribute porosity @poro radius [rdmin] [rdmax] box ... [-width*0.5] [width*0.5] [-width*0.5] [width*0.5] [-height*0.5] [height*0.5] ball attribute density 2e3 damp 0.7contact cmat default model linear method deform emod 100e6 kratio 1.5model cycle 2000 calm 50ball property "fric" 0.5model solvemodel save "sample"


结果如图所示:

【PFC6.0】三维Cluster模拟混合料混凝土的图1

2 clump替换

    这里还是用的上一个案例【【PFC6.0】三维Cluster碎石三轴模拟】的clump模板,这个工况对模板的要求不高,可以自行生成模板。


model restore "sample"

def importTemplate loop n(1,4) stlName="Rock"+string(n) fileName="Template\\"+stlName+".p3clp" command clump template import @fileName name @stlName endcommand endloopend@importTemplate

def GetTemplateName rd=math.random.uniform if rd<0.25 then GetTemplateName="Rock1" else if rd<0.5 then GetTemplateName="Rock2" else if rd<0.75 then GetTemplateName="Rock3" else GetTemplateName="Rock4" endifend

[clump_count=1]def tihuan loop foreach bp ball.list x_pos = ball.pos(bp,1) y_pos = ball.pos(bp,2) z_pos = ball.pos(bp,3) bvol = (4/3.0)*math.pi*ball.radius(bp)^3 template_name=GetTemplateName ball.delete(bp) angle= math.random.uniform*180 axis_x=math.random.uniform-0.5 axis_y=math.random.uniform-0.5 axis_z=math.random.uniform-0.5 axis=vector(axis_x,axis_y,axis_z) command clump replicate id @clump_count name @template_name ... pos-x @x_pos pos-y @y_pos pos-z @z_pos ... volume @bvol angle @angle axis @axis clump group @template_name range id @clump_count endcommand clump_count+=1 endloopend@tihuan

clump attribute density 2e3 damp 0.7

cmat default type pebble-facet model linear method deform emod 1000e6 kratio 1.5clump attribute density 2.3e3 damp 0.7





[yasuo_time=5]

wall deletewall generate box [-width] [width] [-width] [width] ... [-height] [height] wall attribute velocity-z [(height*0.5)/yasuo_time] range id 1wall attribute velocity-z [-(height*0.5)/yasuo_time] range id 2wall attribute velocity-x [(width*0.5)/yasuo_time] range id 3wall attribute velocity-x [-(width*0.5)/yasuo_time] range id 4 wall attribute velocity-y [(width*0.5)/yasuo_time] range id 5wall attribute velocity-y [-width*0.5/yasuo_time] range id 6solve time [yasuo_time*0.3] calm 10 solve time [yasuo_time*0.7]wall attribute velocity 0 0 0

model solve

model save "tihuan_clump"


3 集料区域获取

    这里我们把集料的范围进行提取,这里用的是clump export geometry方法。把四个clump形状提取出四个clump geometry。

model restore "tihuan_clump"

geometry delete

clump export geometry set "Rock1" range group "Rock1"clump export geometry set "Rock2" range group "Rock2"clump export geometry set "Rock3" range group "Rock3"clump export geometry set "Rock4" range group "Rock4"



model save "GeoOut"


如图:

【PFC6.0】三维Cluster模拟混合料混凝土的图2

4 重生成细颗粒

    这里需要把之前的颗粒删除,然后重新生成细颗粒,方便在后面把geometry范围内的颗粒聚合成cluster

model restore "GeoOut"clump delete

[rdmin=0.04][rdmax=0.06][poro=0.3]ball distribute porosity @poro radius [rdmin] [rdmax] box ... [-width*0.5] [width*0.5] [-width*0.5] [width*0.5] [-height*0.5] [height*0.5] ball attribute density 2e3 damp 0.7model cycle 2000 calm 50ball property "fric" 0.5model solvemodel save "re_sample"

如图:


【PFC6.0】三维Cluster模拟混合料混凝土的图3

5 加胶结

    这里将不同geometry范围的颗粒进行胶结。

model restore "re_sample"ball group "Rock1" range geometry-space "Rock1" inside ball group "Rock2" range geometry-space "Rock2" inside ball group "Rock3" range geometry-space "Rock3" inside ball group "Rock4" range geometry-space "Rock4" inside 





cmat default model linearpbond method deform emod 1e9 kratio 1.5 pb_deform emod 1e9 kratio 1.5 ... property pb_coh 10e6 pb_ten 10e6 pb_fa 50 fric 0.1 lin_mode 1cmat add 1 model linear method deform emod 10e9 kratio 1.5 ... property lin_mode 1 range contact type "ball-facet" cmat add 2 model linearpbond method deform emod 5e9 kratio 1.5 pb_deform emod 5e9 kratio 1.5 ... property pb_coh 15e6 pb_ten 15e6 pb_fa 50 fric 0.1 lin_mode 1 range group "Rock1" match 2cmat add 3 model linearpbond method deform emod 6e9 kratio 1.5 pb_deform emod 6e9 kratio 1.5 ... property pb_coh 18e6 pb_ten 18e6 pb_fa 50 fric 0.1 lin_mode 1 range group "Rock2" match 2cmat add 4 model linearpbond method deform emod 7e9 kratio 1.5 pb_deform emod 7e9 kratio 1.5 ... property pb_coh 20e6 pb_ten 20e6 pb_fa 50 fric 0.1 lin_mode 1 range group "Rock3" match 2cmat add 5 model linearpbond method deform emod 8e9 kratio 1.5 pb_deform emod 8e9 kratio 1.5 ... property pb_coh 22e6 pb_ten 22e6 pb_fa 50 fric 0.1 lin_mode 1 range group "Rock4" match 2 cmat apply

model clean

contact method bond gap [rdmin]

contact property lin_force 0 0 0

ball attribute force-contact 0 0 0 moment-contact 0 0 0model calm

model cycle 1

model solve

model save "jiaojie"


如图:

【PFC6.0】三维Cluster模拟混合料混凝土的图4

仅显示集料颗粒看一下:

【PFC6.0】三维Cluster模拟混合料混凝土的图5

显示参数做个剖面,也能比较好的看出效果:

【PFC6.0】三维Cluster模拟混合料混凝土的图6

6 加载

model restore "jiaojie"model mechanical time-total 0wall delete walls range id 3 6 ball attribute displacement multiply 0def wall_init    wpUp=wall.find(2)    wpDown=wall.find(1)end@wall_init



[IZ0=wall.pos.z(wpUp)-wall.pos.z(wpDown)]

[strainrate=0.01]wall attribute vel-z [-IZ0*strainrate*0.5] range id 2wall attribute vel-z [IZ0*strainrate*0.5] range id 1

def jiance whilestepping wzss=(wall.force.contact.z(wpUp)-wall.force.contact.z(wpDown))*0.5/(width*width) wlz=wall.pos.z(wpUp)-wall.pos.z(wpDown)end

[final_time=2e-2/strainrate][baocunpinlv=final_time/40.0][time_record=-100][count=0]def savefile time=mech.time.total wezz=(wlz-IZ0)/IZ0 if time-time_record >= baocunpinlv then filename=string.build("jieguo_%1",count) command model save @filename endcommand time_record=time count +=1 endifend

fish callback add @savefile -1.0

program call "fracture.p3fis"

history deletehistory id 1 @wzsshistory id 2 @wezz@track_initmodel solve time @final_time

model save "result"


首先看一下整体情况:

【PFC6.0】三维Cluster模拟混合料混凝土的图7

    基本上是一个标准的胶结材料单轴的力学特性。

    那再看点好玩的东西。

    写了一个简单的接触分组代码,可以筛选出当前接触中的强接触,分界的阈值时平均力的1.5倍。

    首先单轴工况下,竖向接触受力,横向接触基本不受力。所以这里认为横向接触都是弱接触。强弱的区分只考虑在竖向接触中


model restore "jieguo_6"

def GetAverageForce allForce=0 num=0 loop foreach ct contact.list("ball-ball") forceVec=math.unit(contact.normal(ct)) dip=math.dip.from.normal(forceVec) if dip<math.pi*0.25 | dip>math.pi*0.75 then allForce+=math.mag(contact.force.global(ct)) num+=1 contact.group(ct,"dirt")="shuxiang" else contact.group(ct,"dirt")="hengxiang" contact.group(ct,"mag")="ruo" endif endloop AverageForce=allForce/float(num)end@GetAverageForce



def ContactGroup test_num=0 loop foreach ct contact.list("ball-ball") if contact.group(ct,"dirt")="hengxiang" then continue endif if math.mag(contact.force.global(ct))> AverageForce*1.5 then contact.group(ct,"mag")="qiang" else contact.group(ct,"mag")="ruo" endif test_num+=1 endloopend@ContactGroup

    区分完后显示强接触和geometry,就可以发现集料在混凝土中的骨架性作用了。

【PFC6.0】三维Cluster模拟混合料混凝土的图8


通过切剖面也可以:

【PFC6.0】三维Cluster模拟混合料混凝土的图9


再看破坏,质地比较脆的rock1和rock2在破碎面上还是有一些破坏的

【PFC6.0】三维Cluster模拟混合料混凝土的图10

    取一个剖面分析。对于集料,需要有两点认识了。在当前参数情况下,水泥参数比较软,所以力主要由集料承担,所以集料也控制着破坏。材料失稳必然是集料发生了破坏。第二是破坏后,破裂面其实是会在集料边缘绕行的。

【PFC6.0】三维Cluster模拟混合料混凝土的图11

这里应该可分析的东西挺多的,精力有限,暂不做深入的分析。

还是按老规矩,集赞50可得当前项目包。



(4条)
默认 最新
老师,有个疑问,为什么在GeoOut里输出以后只有ROCK1,其余Rock2~4都不存在了呢
评论 点赞
替换了之后只有一个rock的情况大家遇到了吗,这是为啥
评论 点赞

查看更多评论 >

点赞 5 评论 4 收藏 14
关注