找回密码
 注册
查看: 3804|回复: 3

dpm中如何知道颗粒的受力?

[复制链接]
发表于 2012-11-1 21:14:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
在离散相模型中如何看出某个颗粒在流场中的受力情况?
发表于 2012-12-21 13:33:36 | 显示全部楼层
有控制选项的。
先说一下fluent可以计算的受力:拖曳力,重力,布朗扩散力,Saffman升力,热泳力,自定义体积力。就这些。

拖曳力是默认激活的,具体参数在define里面的DPM模型里给定;重力,如果你给定了外部重力方向,那么颗粒重力也是直接计算的;布朗扩散力、Saffman升力、热泳力在define的DPM里面有一页,可以通过分别选取进行激活;其他的力,比如虚体积力什么的,你只能回算成体积力,用UDF给定自定义体积力计算。
发表于 2012-12-26 15:12:56 | 显示全部楼层

回复 2# fty0083 的帖子

不知道如何编写UDF输入虚拟体积力,还望指点,给个简单例子。因为虚拟体积力中两个时间倒数不知道如何编写,还望指点。。谢谢。。
发表于 2012-12-26 16:35:10 | 显示全部楼层
你说的应该是added mass force吧,问题应该集中在里面有个气流加速度与颗粒加速度的差,就是那个du/dt和dv/dt。加速度是没法直接取到的,但是可以用前后两个时刻的速度计算,按照一阶隐式差分的话
dv / dt =[ v(i) - v(i-1) ] / dt
如果是二阶的话
dv/dt = [ v(i)^2 + v(i-2)^2 - 2v(i-1) ]/ (dt^2)
这里有两个问题,一个是上一个时刻的速度,另一个是dt的选取。
    先说简单的,dt,就是时间。颗粒计算的时间,有一个宏P_DT(p),这个是计算颗粒时用的时间步长,和fluent中设置的time step以及dpm里面设定的particle time step都不一样。用上面的宏取那个时间。
    下面说一下那个速度的选取。建议你用P_REAL(p),就是那个particle scale存储颗粒在上个时刻的速度。注意,这个时刻是指的颗粒迭代时刻。我做过检验,及时在一个颗粒time step里面,dpm也要迭代很多小时间步长,这个小时间步长到底多长我还不清楚,只是知道它等于P_DT(p)的值。那么你先写一个DPM_TIMESTEP这个宏,宏里面存储P_VEL(p)的值到P_REAL(p),x方向和y方向分别用一个scalar,那么就呀2个scalar。在写体积力的时候,把这个速度调用出来,作为上一时刻的速度,就可以了。唯一要注意的是,DPM_TIMESTEP宏和DPM_BODYFORCE这两个宏的调用顺序,你自己测试一下吧。如果系统先调用DPM_BODYFORCE,后调用DPM_TIMESTEP的话,那么上面的方法是没有问题的。但是,如果DPM先调用的DPM_TIMESTEP的话,你再考虑一下这个scalar的更新位置。总之,就是把上一个时刻颗粒的运动速度存起来,再调出来。
    此外,还涉及到流体的运动速度这个问题,这个比较麻烦。如果你是单边耦合的话,它就是0。如果是双边耦合的话,那你就把速度存到UDM里面,用的时候调出来吧。不过,估计也是0。因为,求解的时候,颗粒的计算步长太短了,流体速度基本没什么变化。

不知道,上面的东西,你看懂没。给你个小例子写体积力。
DEFINE_DPM_BODY_FORCE(particle_body_force,p,i)
{
real bforce;
if(P_TIME(p)>=TSTART)
{
if(i==0) bforce=function_x(*****);    //x方向体积力,注意是单位质量上的,也就是说,算的时候实际是体积力加速度  F_body / mass_p
else if(i==1) bforce=-function_y(*****);    //y方向体积力
}
else
bforce=0.0;     //这个是假设初始时刻,体积力为0
/* an acceleration should be returned */
return (bforce/P_MASS(p));     
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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