找回密码
 注册
Simdroid-非首页
查看: 565|回复: 19

[建模专区] 求助:颗粒总是穿墙

[复制链接]
发表于 2010-10-24 09:02:38 | 显示全部楼层 |阅读模式 来自 湖南湘潭
new
;-------------------------------------------
def make_wall
_x0=x0
_y0=y0
_z0=z0
_x1=x1
_y1=y1
_z1=z1
_p0=_p0
_ri=_ri
_ro=_ro
loop n (1,6)
command
wall type spiral  id n end1 _x0 _y0 _z0 end2 _x1 _y1 _z1 pitch _p0 radin _ri radout _ro
endcommand
_x0=_x0+1640/6
endloop
end
set  x0 -1640 y0 0 z0 0
set  x1 5400 y1 0 z1 0
set  _p0 1640 _ri 320  _ro 450
make_wall
;----------------------------------------------------------
pl sh
pl add wall
wall type cylinder id=7 end1 0.0 0.0  0 end2 5400 0.0 0  rad 320 320
;wall type cylinder id=9 end1 2000 0.0  0 end2 5400 0.0 0  rad 450 450
wall id=8 face (5400,-500,-500) (5400,500,-500) (5400,500,500) (5400,-500,500)
wall id=9 face (0,-2000,-450) (0,2000,-450) (5400,2000,-450) (5400,-2000,-450)                          
;wall id=9 origin  0.0   0.0 -450 normal 0 0.0 1
;----------------------------------------------------------
;-------------
; ff_cylinder
;-------------
def ff_cylinder
  ff_cylinder = 0
  _brad = fc_arg(0)
  _bx   = fc_arg(1)
  _by   = fc_arg(2)
  _bz   = fc_arg(3)
  _rad  = sqrt(_by^2 + _bz^2)
  if _rad + _brad < 320  then
   ff_cylinder = 1                    
     endif
end
;----------
; assemble
;----------
def assemble
  
  tot_vol = 65*(4400-1000)*400*2
  oo = out(string(tot_vol))
  rbar    = 0.5 * (rlo + rhi)
  num     = int((1.0 - poros) * tot_vol / (4.0/3.0*pi*rbar^3))
  mult    = 1.6  
  rlo_0   = rlo / mult
  rhi_0   = rhi / mult
  command
   gen id=1,num rad=rlo_0,rhi_0 x=1000,4400 y=-200,200 &
        z=-450,-320
    prop dens=1000 kn=1e7 ks 1e7 fri 100
  end_command
  ii = out(string(num)+' particles were created')
  sum = 0.0 ; get actual porosity
  bp  = ball_head
  loop while bp # null
    sum = sum + pi * 4.0 / 3.0 * b_rad(bp)^3
    bp  = b_next(bp)
  end_loop
  pmeas = 1.0 - sum / tot_vol
  mult = ((1.0 - poros) / (1.0 - pmeas))^(1.0/3.0)
  command
    ini rad mul mult
  end_command
end
set  rlo=20 rhi=20 poros=0.5   
assemble
def del_my
  bp=ball_head
    loop while bp # null
      bpnext=b_next(bp)
      _yy=b_y(bp)
      _zz=b_z(bp)
      if sqrt(_yy^2+_zz^2) > 450
       ii=b_delete(bp)
    endif
     bp=bpnext
     endloop
end
del_my
plo add ball yellow red blue green
prop color 1 range z -450 -417
prop color 2 range z  -417 -383
prop color 3 range z -383 -350
prop color 4 range z -350 -320

wall id=1 kn=5e6   ks 5e6  fri 0.6
wall id=2 kn=5e6   ks 5e6  fri 0.6
wall id=3 kn=5e6   ks 5e6  fri 0.6
wall id=4 kn=5e6   ks 5e6  fri 0.6
wall id=5 kn=5e6   ks 5e6  fri 0.6
wall id=6 kn=5e6   ks 5e6  fri 0.6
wall id=7 kn=5e6   ks 5e6  fri 0.6
wall id=8 kn=5e6   ks 5e6  fri 0.6
wall id=9 kn=2e9   ks 2e9  fri 0.6
wall type spiral     id 1 xv 0.0 yv 0.0 zv 0.0 xs -1 ys 0.0 zs 0.0
wall type spiral     id 2 xv 0.0 yv 0.0 zv 0.0 xs -1 ys 0.0 zs 0.0
wall type spiral     id 3 xv 0.0 yv 0.0 zv 0.0 xs -1 ys 0.0 zs 0.0
wall type spiral     id 4 xv 0.0 yv 0.0 zv 0.0 xs -1 ys 0.0 zs 0.0
wall type spiral     id 5 xv 0.0 yv 0.0 zv 0.0 xs -1 ys 0.0 zs 0.0
wall type spiral     id 6 xv 0.0 yv 0.0 zv 0.0 xs -1 ys 0.0 zs 0.0
wall type cylinder   id 7 xv 0.0 yv 0.0 zv 0.0 xs -1 ys 0.0 zs 0.0
pl add vel yellow;
set gravity 0.0 0.0 -9.81
ini xvel 0 yvel 1  
set damp viscous dt_sfac 10.0
damp default local 0
damp default viscous normal 0.7
damp default viscous notens on

上面是命令流,照着手册上的例子改的,试过很多 次,也看过论坛里面相关的帖子,但总是很快的就穿墙了,不知道怎么弄了,各位大侠帮忙看看,给点意见啊....
发表于 2010-10-29 08:26:52 | 显示全部楼层 来自 天津
Simdroid开发平台
看看墙的法向矢量是不是指向颗粒。我不怎么懂,但好像听师兄们说过这个。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-10-29 16:46:17 | 显示全部楼层 来自 湖南湘潭
看看墙的法向矢量是不是指向颗粒。我不怎么懂,但好像听师兄们说过这个。
cuilihua0315 发表于 2010-10-29 08:26

看过了,谢谢哦
回复 不支持

使用道具 举报

发表于 2010-11-1 08:40:23 | 显示全部楼层 来自 江苏徐州
除了楼上所说,墙面的刚度太小,初始的接触压力过大,都会造成球穿过墙!!!你的减少颗粒数量、墙体刚度增大试试,只是提供一点意见,不知道对不
回复 不支持

使用道具 举报

发表于 2010-11-2 10:35:42 | 显示全部楼层 来自 天津
可能是墙的方向不对,或者是刚度有问题
回复 不支持

使用道具 举报

发表于 2010-11-4 11:20:00 | 显示全部楼层 来自 大连理工大学
是不是颗粒生成的过多,墙的刚度是颗粒的一半,正常来说不太容易穿出墙的。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-5 10:43:15 | 显示全部楼层 来自 湖南湘潭
刚度也改过了,试过了,不行啊 ,神啊,救救我吧.....
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-5 10:45:57 | 显示全部楼层 来自 湖南湘潭
弱弱的问一句,墙面的方向跟坐标系有什么关系没?   偶是按逆时针方向建的啊
回复 不支持

使用道具 举报

发表于 2010-11-5 13:33:41 | 显示全部楼层 来自 湖北武汉
期待高手、、、、
回复 不支持

使用道具 举报

发表于 2010-11-13 10:31:17 | 显示全部楼层 来自 武汉大学
我也遇到同样的问题啊  郁闷啊
回复 不支持

使用道具 举报

发表于 2011-2-26 13:34:09 | 显示全部楼层 来自 美国
穿墙。。。。。
回复 不支持

使用道具 举报

发表于 2011-3-1 13:58:27 | 显示全部楼层 来自 大连理工大学
我觉得问题出在ini rad mul mult 上,突然膨胀会导致边界上的个别颗粒由于空间受限而穿出墙,可以分几步膨胀,如在语句 ii = out(string(num)+' particles were created')前,定义mult1=mult^0.8 mult2=mult^1.2
然后再
command
ini rad mul mult1
cycle 1000
ini rad mul mult12
cycle 1000
end_command
只是个人想法,不知道正确与否。
回复 不支持

使用道具 举报

发表于 2011-4-19 15:21:46 | 显示全部楼层 来自 大连理工大学
好像墙分为有效侧的,就是你建立墙的节点顺序,用右手四指指向你建立墙的顺序。拇指指的是墙的有效侧。只在墙的有效侧的球不会穿过墙。
回复 不支持

使用道具 举报

发表于 2011-4-20 08:06:10 | 显示全部楼层 来自 大连理工大学
上次说错了,如果墙的刚度比球的小的话,即使球在墙的有效侧也会穿过墙的。所以试着改下墙的刚度!
回复 不支持

使用道具 举报

发表于 2012-5-6 19:12:49 | 显示全部楼层 来自 湖南长沙
试过了 都不行 。。。都溢出了
回复 不支持

使用道具 举报

发表于 2013-8-27 20:44:27 | 显示全部楼层 来自 大连理工大学
墙的刚度比球的刚度高个100倍。球的刚度不要低于2e5
回复 不支持

使用道具 举报

发表于 2013-9-10 20:14:00 | 显示全部楼层 来自 上海
可能是在生成强的时候方向出现了错误吧
回复 不支持

使用道具 举报

发表于 2013-9-11 21:05:28 | 显示全部楼层 来自 香港
不要一次放大那麼多倍,慢慢的放大,然後cycle若干次然後繼續放大,直到達到要求。可以寫個loop實現
回复 不支持

使用道具 举报

发表于 2015-12-11 20:54:42 | 显示全部楼层 来自 四川成都
你这个命令我试了几次根本就无法执行
回复 不支持

使用道具 举报

发表于 2015-12-11 20:57:28 | 显示全部楼层 来自 四川成都
程序有问题吧,一直执行不了
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-29 17:27 , Processed in 0.078566 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表