PFC流固耦合

目录

流固耦合

浮力的实现

流体网格生成

流体框架实现浮力

达西流案例简介


流固耦合


浮力的实现


        首先生成盒子和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

达西流案例简介


darcy.py

使用达西求解器

改变网格大小

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个颗粒,如果颗粒数过少,在计算孔隙率时会有较大误差,甚至报错。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值