-
东岳兄这个回复很详细,我有一些补充。
- 我感觉DPM的控制方程虽然是个ODE,但是在运算的过程中其实 F 是在变的,理论上说解析解存在,但是在一个实际系统里面由于F在变,所以其实并没有意义。
- 跟踪粒子的位置信息占了大头,其实应该说是碰撞探测占了大头,在MPPIC里面也跟踪粒子,但是速度快得多;
- MPPIC 高效在用一个 solid stress 来模拟碰撞,因此不需要确定颗粒碰撞了,这一点省了很多时间,对于parcel 用一个点来跟踪多个颗粒,在DPM也有做,叫做coarsed grain DPM; 但是做parcel都需要一个子模型来模拟这个parcel的行为,我测试下来,对于一个 N 颗粒系统,如果一个parcel包含nParcel 个颗粒,那么 计算时间的比值大概是 T(single particle) / T(parcel) = (nParcel)^1/3 。
-
@马乔 MPPIC 精髓还是在于那个solid stress 来模拟particle-particle force,而DPM/DEM 要直接计算颗粒间作用力。我觉得MP-PIC 在某种程度上是 "TFM DPM 混合"的方法,TFM来算 particle particle force,DPM 来追踪颗粒。而 Coarsed grain DPM 最初的概念是 particle-particle force 用大颗粒算,gas-particle force 用小颗粒算,似乎和PIC也没有关系啊。但是到后面发现 1. 一堆小颗粒在一起应该会“变软”;2. 转动惯量(也就是切向力)有影响,还有一些不记得了,所以后面就加了一些修正了,当然可能后面也有用PIC的思想来修正的
-
关于在 DPMFoam 添加化学反应,CFD Online 上有一个关于 coalCollidingChemistryFoam 的讨论(https://www.cfd-online.com/Forums/openfoam-programming-development/158458-colliding-coal-cloud-coalcollidingchemistryfoam.html ), 即在煤燃烧的算例中添加 DPMFoam 中碰撞项的处理。在该帖子中提供的求解器可以在 OpenFOAM 2.3.x 版本中编译并运行。
但是对该模型中添加 submodel 的部分不太理解,直接将该方法用于向 MPPICFoam 中添加化学反应则一直失败。不知道有没有人有类似需求的,是否可以讨论下?
-
我是直接根据上面提到的帖子修改的。在向 OpenFOAM 自带的 coalCombustion 库添加碰撞时,上述帖子中直接在
coalCloud.H
的定义中将typedef ReactingMultiphaseCloud<ReactingCloud<ThermoCloud<KinemaitcCloud<Cloud<coalParcel>>>>> coalCloud;
修改为
typedef ReactingMultiphaseCloud<ReactingCloud<ThermoCloud<CollidingCloud<KinemaitcCloud<Cloud<coalParcel>>>>>> coalCloud;
对颗粒的定义也采用了类似的方法。
我将该例子中的CollidingCloud
均改为MPPICCloud
,但是编译无法通过。错误出在 MPPICCloud.C 中td.updateAverages(*this);
这一行,编译器提示这里的updateAverages
找不到定义,应该是按上面方法修改coalCloud
和coalParcel
定义后,*this
所代表的具体定义跟函数里参数形式不一样导致的。我现在在想上面的思路是不是可行,如果说需要在
thermoparcel
中修改代码,加判断的话,是不是意味着我不应该采取上述的方法,而应自己将MPPICParcel
和thermoparcel
以及反应相关的部分重新写成一个新的颗粒类?非常感谢大家的回复,有必要的话我会想办法把编译错误贴出来。
-
@马乔 按照我的理解,OpenFOAM 中 lagrangian 库部分采用的基于原则设计(Policy-Based Class Design)的方法应该是通过可以选取不同策略类,组建满足不同需求的模型的。OpenFOAM 自带的
coalCombustion
和spray
库中均采用了这样的方法,即通过选取不同的parcel
和cloud
类,组建不同的模型。现在这样看来,这样的方法可能还是有限制的。如果需要对
parcel
和cloud
类进行修改的话,涉及到的内容就太多了,不知道最后能不能完成了。另外,多谢东岳老师对之前帖子格式的修改,以后回复时会多注意的。