目录
流固耦合
浮力的实现
首先生成盒子和ball,然后定义水位线,通过浮力计算公式求解出浮力。
new
domain extent -10 10
wall generate box -5 5
ball create id 1 position 0 4 radius 0.5
ball attribute density 0.9e3 damp 0.7
cmat default model linear property kn 1e7
def fuli(V_underWater)
fuli=V_underWater*1e3*9.8 ;浮力计算公式,定义成fish函数
end
[bp=ball.find(1)] ;给出指针
def get_V
pos_y=ball.pos.y(bp) ;参数必须要给定指针
fuliOnKeli=0
if pos_y+0.5 <= 0 then ;球体完全浸入水中
V_water=math.pi*0.5*0.5
fuliOnKeli=fuli(V_water)
else if pos_y-0.5>0 then ;球体未在水中
fuliOnKeli=0
else ;讨论只有一部分球体在水中的情况
h = 0.5 - math.abs(pos_y-zf_)
Vcap=math.pi*h^2*(3*0.5 - h) /3.0 ;算帽子部分的体积
if pos_y>0 then
fuliOnKeli=fuli(Vcap)
else
fuliOnKeli=fuli(math.pi*0.5*0.5-Vcap) ;总体积减去帽子部分的体积
endif
endif
ball.force.app.y(bp)=fuliOnKeli ;force apply
vel=ball.vel.y(bp)
end
set gravity 9.8 ;给出重力,让球体下降
set timestep fix 1e-4
set fish callback -1.0 @get_V
geometry generate box -5 5 -0.1 0.1
;在中间部分使用geometry来生成一个box表示水位线
history id 1 @vel ;记录速度的变化
solve time 15 ;solve 15秒
流体网格生成
使用create_mesh程序来生成node文件和element文件。
在pfc3d中实现
new domain extent -10 10 configure cfd cfd read nodes Node.dat cfd read elements Elem.dat
流体框架实现浮力
element cfd attribute keyword ... <range>
设置cfd元素的属性
new
domain extent -10 10
wall generate box -5 5 ;生成box
ball create id 1 position 0 0 4 radius 0.5
cmat default model linear property kn 1e7
ball attribute density 0.1e3 damp 0.7 ;生成ball,并分配属性
configure cfd
cfd read nodes Node.dat
cfd read elements Elem.dat ;生成流体网格
cfd buoyancy on ;打开浮力开关
element cfd attribute density 1000.0
element cfd attribute viscosity 1.5
[bp=ball.find(1)]
def jiance
vel=ball.vel.z(bp)
end ;监测速度
set gravity 9.8
set timestep fix 1e-4
set fish callback -1.0 @jiance ;得到实时监测结果
history id 1 @vel
solve time 15
达西流案例简介
使用达西求解器
改变网格大小
self.mesh = fp.Grid3D(nx=10, ny=20, nz=10, dx=0.01, dy=0.01, dz=0.01)
定义流体边界和压力
solver.inlet_mask = fy == 0 solver.outlet_mask = reduce(np.logical_and,(fy==0.2, fx<0.06, fx>0.04, fz>0.04, fz<0.06)) solver.set_inflow_rate(1e-5) solver.set_pressure(0.0, solver.outlet_mask)
一个网格里至少要放50个颗粒,如果颗粒数过少,在计算孔隙率时会有较大误差,甚至报错。