DEM和DPM



  • 东岳兄这个回复很详细,我有一些补充。

    1. 我感觉DPM的控制方程虽然是个ODE,但是在运算的过程中其实 F 是在变的,理论上说解析解存在,但是在一个实际系统里面由于F在变,所以其实并没有意义。
    2. 跟踪粒子的位置信息占了大头,其实应该说是碰撞探测占了大头,在MPPIC里面也跟踪粒子,但是速度快得多;
    3. MPPIC 高效在用一个 solid stress 来模拟碰撞,因此不需要确定颗粒碰撞了,这一点省了很多时间,对于parcel 用一个点来跟踪多个颗粒,在DPM也有做,叫做coarsed grain DPM; 但是做parcel都需要一个子模型来模拟这个parcel的行为,我测试下来,对于一个 N 颗粒系统,如果一个parcel包含nParcel 个颗粒,那么 计算时间的比值大概是 T(single particle) / T(parcel) = (nParcel)^1/3 。

  • 离散相副教授

    coarsed grain DPM如果不考虑切向力的话,也可以算作MP-PIC呀,参考Patankar2001。solid stress有点类似于TFM了;solid stress虽然有点用(阻止颗粒过度堆积),但是速度修正才是最关键的。parcel的问题,于是用了daming 和isotropy来解释颗粒碰撞问题。


  • 离散相副教授

    fluent DDPM 用的是Lun的应力模型(TFM),CPFD用的是Harris的。先想到这么多,以后想到再补充。



  • @马乔 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的思想来修正的


  • 离散相副教授

    只要是个在thetacp点附近能阶跃的函数都可以用来做solid stress,后面的速度限制很重要。嗯,我对比了不同的应力模型。网格四面体化来进行LPT以及向前向后映射在非结构网格上很有用,虽然也可以用多面体插值。网格四面体化还可以配合不同的空间分解形式。额,这个我也对比了下,效果还不错。


  • 网格教授 OpenFOAM教授 管理员

    ANSYS Fluent或者Barracuda里面颗粒跟踪怎么处理的?


  • 离散相副教授

    LPT主要的是建立网格与粒子间的联系,比如某一时刻属于哪个网格,在网格单元内相对于中心点的位置是怎么样的,这个能决定插值权重,至于它怎么移动,不用care的。因此,对于bar这样用笛卡尔网格的,粒子定位简直太简单了,直接定位就行,所以不用操心。所以大部分做LPT的还是用笛卡尔网格的好。至于fluent,它不是只认非结构网格么?感觉OF在很多方面都在像fluent学习耶。。
    还有为嘛这么容易断开连接啊



  • @散漫守望2016 最近想对DPMFoam求解器进行一些修改,添加一个标量p_t来描述颗粒温度变化(之前基于particle class类实现过),由于对intergrangian/intermediate库结构不太了解,对其修改过程中总是出现各种错误,知道你对intermediate库有比较透彻的认识与理解,想问问有没有好的参考资料或者建议,望不吝赐教,非常感谢!



  • 关于在 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教授 管理员

    对其修改过程中总是出现各种错误

    直接将该方法用于向 MPPICFoam 中添加化学反应则一直失败

    我觉得贴出错误更有利于讨论?:confused:


  • 离散相副教授

    是不是超温呢?因为MPPICParcel中调用了多次ParcelType::move,因此会多次在thermoparcel的calc中计算温度,加个判定只计算一次就行了。


  • 离散相副教授

    MPPICCloud的motion会调用MPPICParcel的move,当状态为tpLinearTrack和tpCorrectTrack都会有ParcelType::move。



  • 我是直接根据上面提到的帖子修改的。在向 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 找不到定义,应该是按上面方法修改 coalCloudcoalParcel定义后,*this 所代表的具体定义跟函数里参数形式不一样导致的。

    我现在在想上面的思路是不是可行,如果说需要在thermoparcel 中修改代码,加判断的话,是不是意味着我不应该采取上述的方法,而应自己将 MPPICParcelthermoparcel 以及反应相关的部分重新写成一个新的颗粒类?

    非常感谢大家的回复,有必要的话我会想办法把编译错误贴出来。


  • 离散相副教授

    你是编译错误哦,这样的话相应的parcel类也要根据这个链特化下,以及相关的子模型也要关联上。


  • 离散相副教授

    @yuan 那个CFD-Online的帖子是我当时问和写的,当时是为了做CFD-DEM的燃烧,在2.3.0/2.3.1上面做的,后来也大约调通了,但是当时有一个particletype的问题没弄太明白,后来MFIX的DEM燃烧可以用了,我就主要用MFIX了。OF的就没接着开发了。你的那个错误我倒是不太知道如何处理,@马乔 现在比较精通OF。



  • @马乔 按照我的理解,OpenFOAM 中 lagrangian 库部分采用的基于原则设计(Policy-Based Class Design)的方法应该是通过可以选取不同策略类,组建满足不同需求的模型的。OpenFOAM 自带的 coalCombustionspray 库中均采用了这样的方法,即通过选取不同的 parcelcloud 类,组建不同的模型。现在这样看来,这样的方法可能还是有限制的。

    如果需要对 parcelcloud 类进行修改的话,涉及到的内容就太多了,不知道最后能不能完成了。

    另外,多谢东岳老师对之前帖子格式的修改,以后回复时会多注意的。



  • @散漫守望2016 非常感谢你提供的算例,你那个程序没有问题的,在 2.3.x 上可以运行。只是后来计算效率太低,而我主要关心的是颗粒本身反应特性的变化,不怎么关心碰撞之类的,因此想着采用 MPPIC 的方法简化计算,但一直没找到合适的方法。

    MFIX 现在还没支持 MPPIC 方法计算反应,所以我只能先考虑 OpenFOAM 了。


  • 离散相副教授

    把td.updateAverages(*this);改成td.updateAverages(td.cloud());就可以啦。
    0_1515145147460_temp.png
    效果图,只有传热部分,也就是thermo的结果。
    不会控制图片大小。。。



  • @马乔 我还是不太明白是怎么实现的,这行代码在 MPPICCloud.C 文件内,为了避免修改源文件,是不是需要把 MPPICCloud 文件夹和 MPPICParcel 文件夹以及 submodels/MPPIC/ 文件夹下的所有子模型均复制出来,并重新命名?另外,不知道是否方便留下其它的联系方式,我觉得我的问题可能太基础了,不太适合在这里讨论。如果问题解决了的话,我可以整理一下再发出来,以供其他人参考。



  • @马乔 多谢你的建议,修改之后可以编译成功了。

    我直接把 MPPICCloud 文件夹下的三个文件拷到当前目录下,然后把 MPPICCloud.C 中的

    td.updateAverages(*this);
    

    改成

    td.updateAverages(td.cloud());
    

    其它子模型不用修改。

    除了这部分之外,别的跟 CFD Online 上 coalCollidingChemistryFoam 求解器的建立方法一样。非常感谢 @散漫守望2016 的分享。