DEM和DPM



  • 目前对DEM的涉入较少。我的理解DPM是一种基于拉格朗日跟踪颗粒的方法,但是不能处理颗粒形状、扭曲、粘连。DEM和DPM的区别就是DEM可以处理颗粒形状、扭曲、粘连。仅此而已么?


  • 离散相副教授

    @李东岳 东岳兄,很高兴你邀请我。DPM确实是基于拉格朗日的一种跟踪颗粒的方法,对于Fluent中的DPM,DDPM,Barracuda中的MP-PIC和OpenFOAM中的DPMFoam以及CFDEM中的DEM我做一个简述。首先,Fluent中的DPM模型只能处理稀相的气固(气液)两相流,一般我们称它为“双向耦合”,颗粒颗粒间不发生碰撞以及在流体方程中不考虑空隙率。但是DDPM就进了一步,这里面可以考虑空隙率了,而且对颗粒颗粒碰撞进行了模化,这个模化的过程和MP-PIC方法是类似的。为什么要模化呢?
    因为DPMFoamCFDEM里面的DEM模型是一种完全的DEM,我们称为“四向耦合”,考虑了颗粒-流体,颗粒-颗粒,颗粒-壁面之间的相互作用力,颗粒-颗粒碰撞采用软球模型或者硬球模型(现在一般是软球模型)来进行模拟。所以对于一个实验室尺度(<1m)的流化床来说,我们可以采用DDPM, MP-PIC或者OpenFOAM中的DPMFoam或者CFDEM来模拟。而Fluent中的DPM模型是不能用来模拟这样的密相问题的。


  • 离散相副教授

    @李东岳 此外,DEM可以赋予颗粒很多的特性,我们知道,颗粒的运动方程其实就是牛顿第二定律,方程左边是加速度,右边是受力,这时候,就可以考虑颗粒受到的电场力、粘结力等,现在颗粒的形状效应也可以考虑了,比如求非球形颗粒(椭圆,圆柱)。所以DEM方法是一种很有前景的方法,不过因为它在处理颗粒碰撞时候要搜索周边颗粒,所以非常花费时间,计算量比较大。



  • 就是说CFDEM目前是“四向耦合”的模型,所有的受力都考虑了。

    Fluent的DPM模型是“双向耦合”,不考虑孔隙率和颗粒碰撞。如果不考虑颗粒碰撞的话,岂不是可以当做仅仅的一种颗粒跟踪?类似示踪粒子?

    DPMFoam这个和CFDEM的区别能否详述一下?之前曾经模拟一个粒子喷射的算例用的MPPICFoamMPPICFoamDPMFoam也考虑了流体颗粒耦合、粒子碰撞、壁面粘连。是不是MPPICFoam除了颗粒形状就和CFDEM里面的求解器差不多?

    之前看这个模拟的挺炫的:
    0_1458571500299_捕获.jpg

    他这个带颜色的粒子是后处理出来的么?

    之前安装了一次CFDEM,好像都不需要生成网格。我运行了一个输送带的自带算例。


  • 离散相副教授

    谢谢东岳大神邀请,以及王帅的推荐。Fluent的DPM加入了DEM碰撞之后是能处理颗粒碰撞的,但只能处理颗粒的正面碰撞和切向力,不处理转动力矩。还有就是考虑了DEM模型的DPM不知道能不能考虑空隙率的影响,在有的文献中将它当做完全的CFD-DEM进行计算的。


  • 离散相副教授

    DPMFoamMPPICFoam都使用了计算粒子的概念,一个计算粒子包含了多个实际粒子,是可以减少计算量的。而CFDEM则是直接使用的物理粒子。DPMFoam MPPICFoam在颗粒碰撞模型上是存在差异的,DPMFoam是需要计算碰撞过程的,而MPPICFoam就是使用的颗粒应力咯。MPPIC在颗粒-流体网格间映射信息是使用双线性插值的,但是基于笛卡尔网格,不知道在MPPICFoam中非结构网格是怎么实现的,目前正在看这块代码中。


  • 离散相副教授

    @马乔 Fluent里面的DPM确实可以选择DEM颗粒碰撞(软球模型),但是应该是不包含空隙率的。所以我认为还是不能求解密相问题的。对了,视频怎么上传呀,最大不大于200kb,一些图片和视频你们是怎么上传的?


  • 离散相副教授

    @马乔 因为我主要是做DEM的流动和燃烧,所以对MPPIC不是很懂,你比较精通一些,多多普及知识,嘿嘿


  • 离散相副教授

    传个图片试试!0_1458574167557_cylone.0015.jpg
    好像是不能大于200k



  • @马乔 说:

    过程的,而MPPICFoam就是使用的颗粒应力咯。MPPIC在颗粒-流体网格间映射信息是使用双线性插值的,但是基于笛卡尔网格,不知

    计算粒子就是OpenFOAM里面所谓的particle cloud?

    @散漫守望2016 视频?还没试过上传视频,图片就是上面有个按钮 带箭头的那个是上传。服务器目前租的比较小,怕图片太大就没地方了。以后考虑看看要不要整个大的服务器。目前大图我都是先缩放,缩放之后就特别小了一般几十k

    我试试视频:国外打开youku 土豆基本打不开
    视频


  • 离散相副教授

    计算颗粒应该是parcel,cloud是所有颗粒的集合。



  • 那个CFDEM的后处理不同颜色的颗粒是后处理出来的?还是本身颗粒带了个属性?链接文本


  • 离散相副教授

    嗯,将颗粒表面设置为速度就出来啦。多个filter叠加的。


  • 离散相副教授

    @马乔 OF里面的DPMFoam的算例里面 nParticle 1;这里的nParticle就是指的一个计算颗粒Parcel里面含有的颗粒数,设置为1就是一个计算颗粒就是代表一个颗粒咯。


  • 离散相副教授

    @马乔 多个filter叠加确实能得到很炫的效果,我用的比较多的是Glaph这个filter,有时候叠加十来个filter。


  • 离散相副教授

    @马乔 0_1458628445569_Chu_.jpg
    也传个图片试试,别人计算的,Youtube上看的视频,挺漂亮的。


  • 离散相副教授

    这个图我有gif的,就是看了这个之后用MPPICFoam仿着算的。DPMFoamnParticle改成大于1的数后,应该要修改颗粒的碰撞恢复系数吧。


  • 离散相副教授

    @马乔 是的,应该要跟着修改,但是那样就还不如用梭鱼Barracuda来求解了。这个算例的难点和重点在料腿最下部,你仔细观察,可以看出,应该要加一个向左的返料风,这样你的料腿中的料就不会堆着而不进入提升管了。你之前的图就是在料腿那里堆积了很多物料。


  • 离散相副教授

    我想问的是他这个计算为嘛没有蹿气?压力都不好平衡吧。


  • 离散相副教授

    @马乔 只有计算了,你就会知道,它不会窜气的,会运行的很顺畅。



  • 正好这几天在研究fluent里的DEM,DPM和DDPM具体是啥关系,碰到李博开的这一贴。写一下我的理解。

    1. 先说说标准的DEM吧,它代表的是真实的跟踪每一个颗粒的运动,通过硬球模型或软球模型(通常用软球模型)来计算颗粒间的碰撞过程,而且颗粒旋转也能捕捉到。简单理解就是,颗粒该受到的力都考虑到了。
    2. 而DPM和DDMP都是fluent里的概念,应该不属于通用的说法,之所以这样命名可能是由于为了符合它的软件设计逻辑。DPM在我看来是属于比较原始的离散相模型,不考虑颗粒碰撞,不考虑颗粒所占体积,通常用来模拟灰尘的轨迹。

    This approach is made considerably simpler when particle-particle interactions can be neglected, and this requires that the dispersed second phase occupies a low volume fraction, even though high mass loading is acceptable. The particle or droplet trajectories are computed individually at specified intervals during the fluid phase calculation. This makes the model appropriate for the modeling of spray dryers, coal and liquid fuel combustion, and some particle-laden flows, but inappropriate for the modeling of liquid-liquid mixtures, fluidized beds, or any application where the volume fraction of the second phase cannot be neglected. For applications such as these, particle-particle interactions can be included using the Discrete Element Model, which is discussed in Discrete Element Method Collision Model.

    --from ANSYS 17.0 help, Fluent Theory guide, 16.1.1. The Euler-Lagrange Approach

    1. DDPM 是Dense Discrete Phase Model的缩写,是专门用来模拟例如流化床这种稠密颗粒流的模型,可以理解为简化了的DEM。它考虑了颗粒的空隙率以及碰撞,但是对于碰撞的计算是进行了模化的,不是用软球模型计算真实的碰撞过程,颗粒间的碰撞产生的力是根据KTGF下颗粒的stress tensor计算得到。
      0_1479721407085_upload-5bd53745-c878-4899-9712-8ac64f011d22

    2. 上面说了DDPM里颗粒碰撞是进行了模化的,因此就有不进行模化的处理,那就是在Fluent里加入DEM collision了。加入了DEM collision的DDPM,也即DDPM+DEM,考虑了稠密颗粒流的真实碰撞过程,新版的Fluent里,据我观察也是可以加入rotation的。但是Fluent里的DEM的颗粒群又是用parcel代替的,这又导致有些像MPPIC。所以,可以说DDPM+DEM和真正的DEM的还差一步。
      0_1479722247136_upload-148f5cd1-f119-43e1-97e8-62caf48f2a44

    以上的内容仅代表个人观点,如有理解上的疏漏或错误,感谢能够给予指正。



  • 最近开始在做模拟,准备用DPMFoam,但是模拟中需要加入传热和化学反应。看了下代码似乎DPMFoam可以加入传热的,但是不知道可以用哪些传热模型?另外就是想请问下DPMFoam可以加入化学反应吗?



  • @hurricane007 MFIX最新版本的DEM是可以加入化学反应的。



  • @.J. 然而我用的是OpenFOAM。怎么破。。



  • @hurricane007 那就关注一下他们近期是否会出这个功能吧



  • @.J. 嗯~谢谢啦


  • 离散相副教授

    @hurricane007 OpenFOAM的DPMFoam我添加过化学反应,不是很难的。你好好关注一下lagrangian/intermediate库。


  • 离散相副教授

    @.J. 讲解的很透彻,应该就是这样的。



  • @散漫守望2016 DEM方面和散漫学习了不少,还得你多指教。



  • @散漫守望2016 想到一个很蠢问题,添加化学反应首先应该要把DPMFoam加上能量方程?因为我用的是高温,气体温度估计从100度到600度变化,所以需要可压求解器?然后最近在做这一步都感觉好难。。。



  • @hurricane007
    我对DEM算法不是很熟悉,不过我在单相流和多相流中添加过单向耦合的粒子。如果你需要耦合,无非就是在DPMFoam类求解器下添加反应和能量,要么就是在反应和能量求解器中添加粒子。我看你目前的做法是基于DPMFoam添加反应和能量,是否可以换一种思路?比如在reactingFoam里面添加粒子。



  • 搭车问一下fluent DPM-Laws for Heat and Mass Exchange 的参考文献是什么?或者有没有相关的Eulerian-Lagrangian好书推荐?



  • 我觉得这本书不错Multiphase Flows with Droplets and Particles (Second Edition)-Clayton T. Crowe,网上有电子版,里面介绍离子的受力运动和粒子传热相变比较详细。



  • @OF九月九 多谢,这本书我也在看,确实很不错,但是 Fluent DPM 的原始出处似乎不是这里。



  • 这个帖子发出来2年多,2015年的这个时候我主要做欧拉欧拉模型,2017年年初开始做一种欧拉欧拉和欧拉拉格朗日的混合方法,最近转了纯欧拉拉格朗日,加深了一点理解。

    多相系统

    欧拉欧拉和欧拉拉格朗日主要用于描述多相系统,欧拉欧拉是两相均用欧拉NS方程描述,欧拉拉格朗日是一相用欧拉,一相用拉格朗日方程描述。对于两相系统,欧拉欧拉方法模型为双流体模型(Two fluid model,TFM),欧拉拉格朗日方法为Discrete Particle Model(DPM)。

    从数学形式上,DPM的控制方程要比TFM中的离散相方程简单,比如这个是DPM中描述粒子的速度方程(牛顿第二定律):
    \begin{equation}\label{DPM1}
    m\frac{\mathrm{d}\mathbf{U}}{\mathrm{d}t}=\mathbf{F}
    \end{equation}
    \begin{equation}\label{DPM2}
    \frac{\mathrm{d}\mathbf{x}}{\mathrm{d}t}=\mathbf{U}
    \end{equation}
    这个是描述粒子的欧拉方程(2018.01.04更新:经石油大学某同学建议改正符号错误):
    \begin{equation}\label{TFM1}
    \frac{\partial \alpha\mathbf{U}}{\partial t}+\nabla\cdot\left(\alpha\mathbf{U}\mathbf{U} \right )-\nabla\cdot\tau=-\alpha\nabla p+\mathbf{g}+\mathbf{M}
    \end{equation}
    \begin{equation}\label{TFM2}
    \frac{\partial \alpha}{\partial t}+\nabla\cdot\left(\alpha\mathbf{U} \right )=0
    \end{equation}
    很明显,拉格朗日方程是一个单纯的ODE,在将方程右边某些力简化的情况下,这个ODE是存在解析解的。欧拉方程需要数值求解,并且耗散性比较严重

    如果只是单纯的求解方程\eqref{DPM1}和\eqref{DPM2},你都不需要网格,直接求解就可以,这只是单纯的ODE。

    个人感觉TFM要比DPM的求解数值上问题比较多,比如比较出名的相分数有界、高梯度区域力的模化、相分离导致的奇异、高阶格式震荡等等等等。DPM都不存在这些问题。

    但是如果看DPM的算法,如何跟踪粒子的位置信息占据了大头。目前的算法,即使将网格拆分成为四面体,依然会发生粒子丢失的现象,在某些网格较差的情况下,会陷入死循环

    求解器不发散,就是一直loop :big_mouth:

    DPM,DEM,MPPIC

    在考虑多相流的情况下,一般颗粒相用方程\eqref{DPM1}和\eqref{DPM2}来描述,连续相用NS方程来描述,也就是同时求解\eqref{DPM1},\eqref{DPM2},\eqref{TFM1}和\eqref{TFM2}。

    同时求解这四个方程最重要的问题就是效率问题。

    1. 求解不需要网格的ODE方程需要高效的处理粒子跟踪位置问题,这个问题处理不好很容易导致粒子算着算着丢失了。一个一个粒子去找当然可以,但是如果有10e7个粒子肯定没办法处理。在OpenFOAM中,通过将网格四面体化来处理,由于商软代码不开源,不知道商软如何处理粒子位置跟踪的效率问题。

    2. 粒子间作用力的处理,在这里,如果考虑OpenFOAM中的DPM模型(商软中的DPM不清楚是否也是这样),方程\eqref{DPM1}中右边的力主要包含了曳力、虚拟质量力等非常主要的力。但是在DEM中,除了上述的力,还有旋转、摩擦、凝聚等,比较重要的颗粒碰撞也通过软球模型来处理(下图是google随便找的)。
      0_1510658545609_Fig-3-Schematic-diagram-of-contact-forces-that-are-modeled-by-using-a-soft-sphere-based.png
      所以说,DEM 处理的力更加全面,并且在DEM中对于颗粒的形状也会进行考虑,形状会进一步影响力的作用。

    3. MPPIC是为了更加的追求高效的一套算法。在MPPIC中,多个particle被打包到一起并被称之为parcel,在计算parcel运动的同时,插值出欧拉场。欧拉场的作用在于在MPPIC的控制方程中添加一个固相应力。在TFM中,也存在这样一个固相应力,因为TFM是欧拉框架下的。也就是说,MPPIC中,碰撞模型通过欧拉场的固相应力进行表征。为什么这么做?大量的节省用于计算颗粒碰撞导致特别小的时间步长。这在OpenFOAM的代码中很直接的表现出来:

      #ifdef MPPIC
      #include "basicKinematicMPPICCloud.H"
      #define basicKinematicTypeCloud basicKinematicMPPICCloud
      #else
      #include "basicKinematicCollidingCloud.H"
      #define basicKinematicTypeCloud basicKinematicCollidingCloud
      #endif
      

      如果是MPPIC方法,调用MPPIC的碰撞模型(basicKinematicMPPICCloud.H),如果是DPM,调用碰撞模型(basicKinematicCollidingCloud.H)。

    Misleading

    另外好像现在各大厂里面的各种算法虽然是一个名字,但是使用的算法不同,比如按照 @散漫守望2016 所说:

    Fluent中的DPM模型只能处理稀相的气固(气液)两相流,一般我们称它为“双向耦合”,颗粒颗粒间不发生碰撞以及在流体方程中不考虑空隙率。

    但是在OpenFOAM中的DPMFoam也可以处理碰撞以及体积分数耦合问题。同时DPMFoam也可以使用DEM中的软球模型,虽然他被叫成了DPMFoam,并且DPMFoam也可以调用MPPIC中parcel的概念。据我所知,parcel这个概念最早出现在Andrews and O'Rourke 1995年的文章中。

    同时,MPPIC在ANSYS Fluent中被称之为DDPM,在称之为CPFD。


    最近我在用欧拉拉格朗日和精确解对比然后模拟3D鼓泡床 :cheeky:



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

    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以及向前向后映射在非结构网格上很有用,虽然也可以用多面体插值。网格四面体化还可以配合不同的空间分解形式。额,这个我也对比了下,效果还不错。



  • 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 中添加化学反应则一直失败。不知道有没有人有类似需求的,是否可以讨论下?



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

    直接将该方法用于向 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。


Log in to reply
 

CFD中文网 2016 - 2020 | 京ICP备15017992号-2