MPPICFoam 是一个欧拉-拉格朗日耦合的求解器,MPPIC是 Multi-Phase, Particle-In-Cell 的缩写,属于拉格朗日法,用来描述颗粒的运动,可视为简化版的离散单元法(DEM)。采用该方法的求解器还有 MPPICInterFoam, 可解析两个欧拉相的界面,也就是在 interFoam 的基础上,用 MPPIC 法模拟颗粒运动。
MPPICFoam 包含四个算例 column、cyclone、Goldschmidt 和 injectionChannel,本文逐一展示。
MPPICFoam 算例的根目录与其他求解器的一致,包含 0、constant 和 system 三个基本文件夹,需要重点关注的是 constant 文件夹中有 kinematicCloudProperties 文件,这个文件定义了有关拉格朗日求解器的方方面面,包括颗粒注入的方式、初试状态、受力等等。有些算例还有 kinematicCloudPositions 文件,用于手工指定颗粒位置。
column 算例是颗粒自重沉降过程,颗粒数量为 750,尺寸为 0.3 mm,密度为 2526 kg/m^3;连续相为空气。模拟结果如视频所示。
cyclone 算例模拟了一个旋风分离器,原理是利用离心力和拖曳力,让大颗粒先沉降,小颗粒后沉降,分离不同粒径的颗粒,视频展示了颗粒运动过程,颜色代表颗粒粒径,可见进入分离器的颗粒是混合均匀的,沉降后,大颗粒在下部,小颗粒在上部。
Goldschmidt 是一个流化床的算例,计算结果如视频所示。这是一个系列算例,OpenFOAM 有不同方法的算例。这个算例也是一个基准算例,有很多相关的实验和验证。
MPPICFoam 求解 Goldschmidt 流化床
injectionChannel 算例有两个颗粒入口,对称的两股颗粒流在渠道中碰撞、汇合、分散至整个渠道。计算结果如视频所示。
好了,四个算例介绍完了,欢迎在评论区留言提问。
请问最后一个算例的例子直径d,在原算例里面没有,作者是怎么引入的?谢谢
我没改过,算出来就有了,你看下是不是版本的问题,我用的是v1812。
OKOK多谢多谢!
还有一个小问题,运算完之后foamToVTK -fields ‘(lagrangian)’,但d和rho是scalars的形式,没有载入到标量场,如果直接用paraFoam是可以载入的,请问这个用ToVTK怎么解决? 谢谢!
大佬,请问有关于 kinematicCloudProperties的详细注释吗,每一部分每个关键词都是啥意思呀。
“column 算例是颗粒自重沉降过程,颗粒数量为 750…”
好像颗粒数不是750,是2873。 kinematicCloudProperties 文件里的 nParticle 参数可能不是初始化后的真正颗粒数,似乎跟 kinematicCloudPositions 读入的坐标数有关。同样的,GoldSchmidt 算力中 kinematicCloudProperties 文件的 nParticle 虽然指定了 1,但最后是 24500 个颗粒。
就像是在程序后期的执行中,下面的这段读入数据被具体的颗粒坐标数 overrule 了。
——
else if (parcelBasisType == “fixed”)
{
parcelBasis_ = pbFixed;
Info<< " Choosing nParticle to be a fixed value, massTotal "
<< "variable now does not determine anything."
<coeffDict().template lookup(“nParticle”);
}
受教了,感谢 ?
只是我的猜测,代码里我还没看明白这个输入是怎么搞的。
nParticle 是每个 parcel 代表的实际颗粒数,这里应该是用到了类似 DSMC 方法中的代表颗粒,实际运算的时候应该是按 parcel 来循环、碰撞、平均的,column 算例中一共注入了 2873个 parcel,每一个 parcel 代表的是 750个颗粒。
这个能模拟颗粒的软球碰撞模型么