pfc三轴压缩

更新时间:2023-05-31 09:27:02 阅读: 评论:0

new
SET random  ; 随机生成
plo wall
plo add ball
; ----------------------------------------------------
def make_walls  ;生成墙
咖啡豆怎么磨wextend =0.1
好女孩英文hextend =0.1
w_stiff= 1.6e10                                ;墙的刚度,取球的1.1倍
_width=-width
_x0 = _width*(1.0 + wextend)                ;width是长方体的宽度的一半
_y0 = _width*(1.0 + wextend)
_z0 = 0
_x1 = width*(1.0 + wextend)
_y1 = _width*(1.0 + wextend)
_z1 = 0
_x2 =  width*(1.0 + wextend)
_y2 =  width*(1.0 +wextend)
_z2 = 0
_x3 = _width*(1.0 + wextend)
_y3 = width*(1.0 + wextend)
_z3 = 0
command
wall id=1 kn=w_stiff face (_x0,_y0,_z0) (_x1,_y1,_z1) (_x2,_y2,_z2) &
(_x3,_y3,_z3) ;要按右手法则建立,而且pfc里面的坐标轴是一定的,要按照里面的来
end_command
_x0 = _width*(1.0 + wextend)
_y0 = _width*(1.0 + wextend)
_z0 = height                  ;height是长方体的高度
_x1 = _width*(1.0 + wextend)
_y1 = width*(1.0 + wextend)
_z1 = height
_x2 =  width*(1.0 + wextend)
_y2 =  width*(1.0 + wextend)
_z2 = height
_x3 = width*(1.0 + wextend)
_y3 = _width*(1.0 + wextend)
_z3 = height
command
wall id=2 kn=w_stiff face (_x0,_y0,_z0) (_x1,_y1,_z1) (_x2,_y2,_z2) &
(_x3,_y3,_z3)
end_command
_x0 = width
_y0 = _width*(1.0 + wextend)
_z0 = height*(1.0 + hextend)
_x1 = width
_y1 = width*(1.0 + wextend)
_z1 = height*(1.0 + hextend)
_x2 =  width
_y2 =  width*(1.0 + wextend)
_z2 = -hextend*height
_x3 =  width
_y3 = _width*(1.0 + wextend)             
_z3 = -hextend*height                                 
command
wall id=3 kn=w_stiff face (_x0,_y0,_z0) (_x1,_y1,_z1) (_x2,_y2,_z2) &
(_x3,_y3,_z3)
end_command
_x0 = _width
_y0 = _width*(1.0 + wextend)
_z0 = height*(1.0 + hextend)
_x1 = _width
_y1 = _width*(1.0 + wextend)
_z1 = -hextend*height
_x2 =  _width
_y2 =  width*(1.0 + wextend)
_z2 = -hextend*height
_x3 = _width
_y3 = width*(1.0 + wextend)
_z3 = height*(1.0 + hextend)
pharrellcommand
wall id=4 kn=w_stiff face (_x0,_y0,_z0) (_x1,_y1,_z1) (_x2,_y2,_z2) &
(_x3,_y3,_z3)
end_command
_x0 = _width*(1.0 + wextend)
_y0 = width
_z0 = -hextend*height
_x1 = width*(1.0 + wextend)
_y1 = width
_z1 = -hextend*height
big_x2 =  width*(1.0 + wextend)
_y2 =  width
_z2 = height*(1.0 + hextend)
_x3 = _width*(1.0 + wextend)
_y3 = width
_z3 = height*(1.0 + hextend)
command
wall id=5 kn=w_stiff face (_x0,_y0,_z0) (_x1,_y1,_z1) (_x2,_y2,_z2) &
(_x3,_y3,_z3)
end_command
_x0 = _width*(1.0 + wextend)
_y0 = _width
_z0 = height*(1.0 + hextend)
_x1 = width*(1.0 + wextend)
_y1 = _width
_z1 = height*(1.0 + hextend)
_x2 =  width*(1.0 + wextend)
_y2 =  _width
_z2 = -hextend*height
_x3 = _width*(1.0 + wextend)
_y3 = _width
_z3 = -hextend*height
command
wall id=6 kn=w_s
tiff face (_x0,_y0,_z0) (_x1,_y1,_z1) (_x2,_y2,_z2) &
(_x3,_y3,_z3)
end_command
end
; ----------------------------------------------------
def asmble  ; 颗粒生成
s_stiff=0.0 ; 初始切向刚度
n_stiff=1.4e10 ;初始法向刚度
tot_vol = 4 * height * width^2.0 ;长方体的体积
rbar    = 0.5 * (rlo + rhi)        ;rlo最小球半径、rhi最大球半径
num    = int((1.0 - poros) * tot_vol / (4.0 / 3.0 * pi * rbar^3)) ;poros越大,球数量越少
mult    = 1.5 ;初始半径放大系数,越大,球数量越多
rlo_0  = rlo / mult
rhi_0  = rhi / mult
command
gen id=1,num rad=rlo_0,rhi_0 x=_width,width y=_width,width z=0,height tries 10000000;方形的话就不用过滤器了
;上面球的半径是缩小了mult倍的
prop dens=2700 ks=s_stiff kn=n_stiff ;dens即是岩石颗粒的密度
end_command
ii = out(string(num)+' particles were created')
sum = 0.0 ;获得有效孔隙度
bp  = ball_head ;是所有球里面的首地址
loop while bp # null ;当bp不是null的时候
sum = sum + 4.0 / 3.0 * pi * b_rad(bp)^3 ;sum是前面所有的球的体积的总和
bp  = b_next(bp) ;下一个球的地址
end_loop
pmeas = 1.0 - sum / tot_vol ;1-球的总体积/圆柱体的体积
mult = ((1.0 - poros) / (1.0 - pmeas))^(1.0/3.0) ;将总的孔隙率调成1-poros
command
ini rad mul mult ;将球的半径放大mult倍
cycle 30000 ;执行1000个时步的循环计算
prop ks=1.4e10 fric 0.5
早上好英文cycle 3100  ;执行250个时步的循环计算
end_command
end
; ----------------------------------------------------
; ----------------------------------------------------
macro zero 'ini xvel 0 yvel 0 zvel 0 xspin 0 yspin 0 zspin 0' ;宏,现在定义了后面就可以直接引用了xspin可能是x方向的角速度
SET height=0.1 width=0.025 rlo=0.001 rhi=0.002 poros=0.385
make_walls
asmble
zero
save tt_ass.SAV
;fname: triax_2.DAT  Servo-control and initial stress state - triax sample
res tt_ass.SAV  ; restore compacted asmbly
; ----------------------------------------------------
def get_ss ; 确定墙的平均应力和应变
;之前的cycle可能产生了一定的位移,下面要除掉
zdif  = w_z(wadd2) - w_z(wadd1) ;w_z(wadd1)指的是墙1在之前产生的位移
ydif  = w_y(wadd5) - w_y(wadd6) ;所有的都是正的减去负的
xdif  = w_x(wadd3) - w_x(wadd4)
new_width1 = 2*width+xdif    ;x方向新的宽度,这个时候就不是宽度的一半了,是整个宽度
new_width2 = 2*width+ydif    ;y方向新的宽度
new_height = height + zdif    ;除掉已经产生的位移,是新的高度
wsxx  = 0.5*(w_xfob(wadd4) - w_xfob(wadd3))/(new_width2*new_height) ;x方向的应力
wsyy  = 0.5*(w_yfob(wadd6) - w_yfob(wadd5))/(new_width1*new_height) ;y
wszz  = 0.5*(w_zfob(wadd1) - w_zfob(wadd2))/(new_width1*new_width2) ;z
wexx  = 2.0 * xdif / (2*width + new_width1) ;x向应
变参看手册186页3.16
weyy  = 2.0 * ydif / (2*width + new_width2) ;y向应变
wezz  = 2.0 * zdif / (height + new_height)  ;z向应变
wevol = wexx + weyy + wezz ;体积应变
end
; ----------------------------------------------------
def get_gain ; 选取轴向和径向获得的伺服参数
alpha = 0.5 ; 松弛参数
count = 0
avg_stiff = 0
cp = contact_head      ; 找到上、下墙上接触的平均数量
loop while cp # null
if c_gobj2(cp) = wadd1
count = count + 1
avg_stiff = avg_stiff + c_kn(cp)
end_if
if c_gobj2(cp) = wadd2
count = count + 1
avg_stiff = avg_stiff + c_kn(cp)
end_if
cp = c_next(cp)
end_loop
ncount = count / 2.0
avg_stiff = avg_stiff / count
gz = 4 * alpha * width^2.0/ (avg_stiff * ncount * tdel) ;可以参看187页公式3.22,是增益参数
count = 0
avg_stiff = 0
cp = contact_head      ; 找到左、右墙上接触的平均数量
loop while cp # null
if c_gobj2(cp) = wadd3
count = count + 1
avg_stiff = avg_stiff + c_kn(cp)
end_if
if c_gobj2(cp) = wadd4
count = count + 1
avg_stiff = avg_stiff + c_kn(cp)
end_if
cp = c_next(cp)
end_loop
ncount = count / 2.0
avg_stiff = avg_stiff / count
gx = 2 * alpha * width * height/ (avg_stiff * ncount * tdel) ;可以参看187页公式3.22,是增益参数
count = 0
avg_stiff = 0
cp = contact_head      ; 找到前、后墙上接触的平均数量
loop while cp # null
if c_gobj2(cp) = wadd5
count = count + 1
avg_stiff = avg_stiff + c_kn(cp)
end_if
if c_gobj2(cp) = wadd6
count = count + 1
avg_stiff = avg_stiff + c_kn(cp)
end_if
cp = c_next(cp)
transitionend_loop
ncount = count / 2.0
avg_stiff = avg_stiff / count
gy = 2 * alpha * width * height/ (avg_stiff * ncount * tdel) ;可以参看187页公式3.22,是增益参数
end
; ----------------------------------------------------
def rvo ;伺服控制
while_stepping
get_ss                ;计算应力和应变
udx = gx * (wsxx - sxxreq) ;参看187页3.17udx是墙的速度wsxx是x向实际压力,sxxreq是我们需要的x向压力
udy = gy * (wsyy - syyreq) 
w_xvel(wadd4) = udx
w_xvel(wadd3) = -udx
w_yvel(wadd6) = udy
w_yvel(wadd5) = -udy
if z_rvo = 1        ;选择轴压伺服的开关,是1的时候就开,否则就关
udz = gz  * (wszz - szzreq)
w_zvel(wadd1) = udz
w_zvel(wadd2) = -udz
end_if
end
; ----------------------------------------------------
def iterate
loop while 1 # 0
get_gain
if abs((wsxx - sxxreq)/sxxreq) < sig_tol then  ;实际的x围压和需要的围压达到一致就不加载了
if abs((wsyy - syyreq)/syyreq) < sig_tol then  ;实际的y围压
if abs((wszz - szzreq)/szzreq) < sig_tol then ;实际的轴压和需要的轴压达到一致就不加载了
exit
end_if
end_if
end_if
command                                         
cycle 100
end_command
end_loop
end
; ----------------------------------------------------
def wall_addr
wadd1 = find_wall(1)
wadd2 = find_wall(2)集装箱 英文
wadd3 = find_wall(3)
wadd4 = find_wall(4)
wadd5 = find_wall(5)
南大培训wadd6 = find_wall(6)
end
wall_addr
韩语翻译器在线zero
SET sxxreq=-3e3 syyreq=-3e3 szzreq=-3e3 sig_tol=1 z_rvo=1 ;设置x向、y向围压和轴压的水平都是5MPa
iterate  ; 使所有方向的压力都达到静水压力状态,上面达到的是所有的方向都是达到1MPa
sav 第一静水压力.sav
res 第一静水压力.sav  ; restore initial stresd asmbly
; ----------------------------------------------------
def t_ini ; 设置初始应变
wezz_0  = wezz ;轴向应变,前面计算了的
wevol_0 = wevol ;轴向速度
end
; ----------------------------------------------------
def conf                      ; 记录的变量
devi  = wszz - wsxx        ; 偏应力,最大主应力减最小主应力,也就是说这里x方向取的是最小值
deax  = wezz - wezz_0      ; 轴向应变
devol = wevol - wevol_0    ; 体积应变
confx = wsxx                ; x压应力
confy = wsyy                ; y压应力
confz = wszz                ; z压应力
end
; ----------------------------------------------------
def accel_platens
; -----在一定的时步内室加载板达到相应的速度 Accelerates the platens to achieve vel of _vfinal in _nsteps,
;      using _nchunks
_niter = _nsteps / _nchunks
loop _chnk (1,_nchunks)
if _clo = 1 then
_vel = _chnk*(_vfinal/_nchunks)
el
_vel = -_chnk*(_vfinal/_nchunks)
end_if
_mvel = -_vel
command
wall id 1 zvel= _vel
wall id 2 zvel= _mvel
cycle _niter
end_command
end_loop
end
; ----------------------------------------------------
t_ini
history id=6 devi  ;监测偏应力
history id=7 deax  ;监测轴向应变
history id=8 devol ;监测体积应变
history id=9 wexx  ;监测x方向应变
history id=10 deax ;监测z方向应变
history id=11 confz ;z压应力
高考英语试题及答案
history id=12 confx
history id=13 confy
SET hist_rep=50 ;每50步监测一次
SET z_rvo=0  ;围压都还保持伺服状态,取消轴向加压的伺服控制
zero            ;设定x、y、z方向所有的速度都等于0
sav tt_init.SAV ; ready for modulus and failure tests
;fname: triax_9.DAT  (friction and parallel bonds)
res tt_init.sav
prop fric=0.8
prop pb_kn=1.4e10  pb_ks=1.4e10  pb_rad=1 ;法向刚度系数、切向刚度系数、半径乘数
prop pb_nstren=7e10  pb_sstren=7e10 ;法向平行粘结力、切向平行粘结力
t _vfinal= 0.1  _nsteps= 2000  _nchunks= 80 ;_vfinal最终的加载速率,
t _clo= 1  ; 加载 _clo=1时候是加载
accel_platens
plo his -11 vs -10
cyc 25000000

本文发布于:2023-05-31 09:27:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/819389.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:应变   达到   伺服   轴向
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图