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

[工程实例] 请高手赐教如何在圆柱和圆锥中填充颗粒啊?谢谢!

[复制链接]
发表于 2007-10-30 16:21:10 | 显示全部楼层 |阅读模式 来自 北京
这段时间学习PFC,要用它模拟一根钢针在岩石上的滑动过程。下面的岩石是方块,比较好弄。但是锥形的钢针中如何填球粒不会。请各位高手赐教。
 楼主| 发表于 2007-10-31 15:32:24 | 显示全部楼层 来自 北京

回复 #1 wangxu326 的帖子

Simdroid开发平台
请大家指点。我在手册上没找到如何实现。
回复 不支持

使用道具 举报

发表于 2007-11-6 01:42:34 | 显示全部楼层 来自 台湾
用笨方法
wall id=10 type cylinder end1 -1 0 0 end2 1 0 0 rad 0.25 0
wall id=11 origin -1 0 0 normal 1.0 0 0
產生圓錐外牆
然後在上方生成ball(半徑小一點)
set grav 自由落體(裝滿容器)
接觸不完全(用pro rad mult 放大ball)
在加上wall id=12 origin 1 0 0 normal -1.0 0 0(無線邊界)--------這行當參考
del 圓錐外的ball(寫fish判斷)
設置CONTACT BON
dell 所有wall
由ball行成的圓錐體完成
如附圖
實在想不出辦法時再用

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2007-11-6 21:47:27 | 显示全部楼层 来自 北京

回复 #3 choua86 的帖子

谢谢您的赐教!我用按这个方法试试。
这个办法虽然是可以的。不过麻烦一点,不知道有没有直接一点的办法?PFC的算例中不知道有没有?
回复 不支持

使用道具 举报

发表于 2007-11-7 13:51:28 | 显示全部楼层 来自 台湾
由Hopper_1.dat修改
new
set gen_error off
set random
DEF create_hopper
  h_height = 0.60
  h_upp_width = 0.80
  h_bot_width = 0.01
  h_init_depth = 0.10
  wall_kn = 1.0e9
  wall_ks = 1.0e9
  wall_fric = 0.0
  h_height_balls = h_height - h_init_depth
; make gate wall
  pt1x = - h_bot_width * 0.5
  pt1y = - h_bot_width * 0.5
  pt1z = 0.0
  pt2x = h_bot_width * 0.5
  pt2y = - h_bot_width * 0.5
  pt2z = 0.0
  pt3x = h_bot_width * 0.5
  pt3y = h_bot_width * 0.5
  pt3z = 0.0
  pt4x = - h_bot_width * 0.5
  pt4y = h_bot_width * 0.5
  pt4z = 0.0
    command
      wall id=1 kn=wall_kn ks=wall_ks face (pt1x,pt1y,pt1z) &
      (pt2x,pt2y,pt2z) (pt3x,pt3y,pt3z) (pt4x,pt4y,pt4z)
    end_command
; make servo cotrolled wall
  pt1x = - h_upp_width * 0.5
  pt1y = - h_upp_width * 0.5
  pt1z = h_height_balls
  pt2x = - h_upp_width * 0.5
  pt2y = h_upp_width * 0.5
  pt2z = h_height_balls
  pt3x = h_upp_width * 0.5
  pt3y = h_upp_width * 0.5
  pt3z = h_height_balls
  pt4x = h_upp_width * 0.5
  pt4y = - h_upp_width * 0.5
  pt4z = h_height_balls
    command
      wall id=2 kn=wall_kn ks=wall_ks face (pt1x,pt1y,pt1z) &
      (pt2x,pt2y,pt2z) (pt3x,pt3y,pt3z) (pt4x,pt4y,pt4z)
    end_command
; make confined wall : cone
  pt1_rad = h_bot_width * 0.5
  pt2_rad = h_upp_width * 0.5
    command
      wall id=3 type cylinder end1 (0.0 0.0 0.0) end2 (0.0 0.0 h_height) &
      rad (pt1_rad pt2_rad) kn=wall_kn ks=wall_ks
    end_command
; compute volume enclosed by the walls
  _tmp_extz = h_bot_width*h_height/(h_upp_width-h_bot_width) ; 0.2
  _tmpz = h_height_balls
  _tmpr = 0.5*(h_upp_width-h_bot_width)/h_height*_tmpz+0.5*h_bot_width
  _tmp1 = _tmpr*_tmpr*(h_height_balls+_tmp_extz)
  _tmpz = 0.0
  _tmpr = 0.5*(h_upp_width-h_bot_width)/h_height*_tmpz+0.5*h_bot_width
  _tmp2 = _tmpr*_tmpr*_tmp_extz
  tot_vol = pi * (_tmp1-_tmp2) / 3.0
END
DEF create_balls
; set balls variables
  ball_kn = 1.0e8
  ball_ks = 1.0e8
  ball_dens = 2000.0
  ball_fric = 0.0
  r_lo = 0.02
  r_hi = 0.02
  poros = 0.20  
; variables needed to target porosity
  r_aver = 0.5 * (r_lo + r_hi)
  num = int(3.0 * tot_vol * (1 - poros) / (4.0 * pi * r_aver^3.0 ))
; variables related to the generation process
  _start_id = 1
  _end_id = _start_id + num - 1
  _xmax = 0.5 * h_upp_width
  _xmin = -0.5 * h_upp_width
  _ymax = 0.5 * h_upp_width
  _ymin = -0.5 * h_upp_width
  _zmax = h_height - h_init_depth
  _zmin = 0.0
    command
      gen id _start_id _end_id rad r_lo r_hi x _xmin _xmax y _ymin _ymax &
      z _zmin _zmax FILTER filter_for_ball_creation
      group gr_particles range id _start_id _end_id
      prop kn ball_kn ks ball_ks dens ball_dens range group gr_particles
    end_command
  get_porosity
  mult = ((1.0-poros)/(1.0-pmeas))^(1.0/3.0)
    command
       ini rad mul mult range group gr_particles        
        cycle 300
    endcommand
END
DEF get_porosity
    sum = 0.0
    bp = ball_head
     loop while bp # null
      if b_id(bp) >= _start_id then
         sum = sum + 4.0/3.0 * pi * b_rad(bp)^3.0
      endif
         bp = b_next(bp)
      end_loop
        pmeas = 1.0 - sum / tot_vol
END
DEF filter_for_ball_creation
    _brad = fc_arg(0)
    _xpos = fc_arg(1)
    _ypos = fc_arg(2)
    _zpos = fc_arg(3)
    _rxy = sqrt(_xpos*_xpos+_ypos*_ypos)
    _rlim = 0.5 * _zpos + 0.05             ;這行是關鍵      
      if (_rxy+_brad) <= _rlim
        _skip = 0
    else
        _skip = 1
    end_if
        filter_for_ball_creation = _skip
END
DEF set_up_layers
    bp = ball_head
      loop while bp # null
        _bid = b_id(bp)
        _bzpos = b_z(bp)
        _bcol = int( _bzpos / (h_height_balls/_layers) ) + 1
        b_color(bp) = _bcol
        bp = b_next(bp)
      end_loop
END
DEF set_init_time
    init_time = time
END
;
; create plot
title ’Granular flow from a hopper’
plot create hopper_model
plot set center 0.0 0.0 3.0e-1
plot set rot 20.0 0.0 340.0
plot set dist 2.873e+0
plot set back white
plot add wall wireframe on
plot add ball yellow lblue lred lgreen
plot add axes black
;
create_hopper
create_balls
SET grav 0.0 0.0 -9.81
solve
set_init_time
set _layers = 1
set_up_layers
亂改以上參數
關鍵行也要修改喔否則ball會跑出去
自己試試

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2007-11-8 21:04:48 | 显示全部楼层 来自 北京

回复 #5 choua86 的帖子

太感谢您了,一定费了不少时间吧?我刚才把您提供的程序运行了一下,怎么得不到您附图所示的结果呢?
回复 不支持

使用道具 举报

 楼主| 发表于 2007-11-8 22:25:59 | 显示全部楼层 来自 北京

回复 #5 choua86 的帖子

经过调试,我已得到附图中的结果。可是,如果我要修改锥体的参数,关键行如何修改不太明白。您能告诉我关键行中的参数与锥体参数的关系吗?谢谢!
回复 不支持

使用道具 举报

发表于 2007-11-9 22:45:25 | 显示全部楼层 来自 台湾
反正是數字的都給他改改看
就知道它是幹啥的啊
錯中學嗎
吸收的也比較多


若實在不行

我有寄短信給你
裡面有我的qq
回复 不支持

使用道具 举报

 楼主| 发表于 2007-11-16 20:41:40 | 显示全部楼层 来自 北京

回复 #8 choua86 的帖子

太感谢了!以后就用QQ来请教你了。呵呵
回复 不支持

使用道具 举报

发表于 2011-4-10 17:24:31 | 显示全部楼层 来自 辽宁沈阳
楼主是高人啊
回复 不支持

使用道具 举报

发表于 2011-5-18 20:13:48 | 显示全部楼层 来自 清华大学
很巧妙

5# choua86
回复 不支持

使用道具 举报

发表于 2011-6-9 13:26:02 | 显示全部楼层 来自 福建宁德
高手呀 choua86
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-9-29 19:18 , Processed in 0.080615 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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