请问有人用过sprayFoam中的下面coneNozzleInjection吗?



  • 请问有人用过sprayFoam中的下面coneNozzleInjection吗?想请教一下,该模型下massTotal和duration这两项是否是指喷嘴在指定的喷射时间段内向计算域中注入的颗粒总质量吗?还有flowRateProfile指的是喷嘴流体的质量流量还是体积流量呢?那么它是如何给定每个时间步内喷嘴模型注入的颗粒数量呢?(如下图示)
    0_1536067658392_2018-09-04 21-20-17屏幕截图.png


  • OpenFOAM教授

    @就是个胖子 (1)massTotal和duration这两项指定喷嘴在指定的喷射时间段内向计算域中注入的颗粒总质量;(2)flowRateProfile指的是喷嘴流体体积流量;(3)通过parcelspersecond给定每个时间步内喷嘴模型注入的parcel数量数量,至于每个parcel中包含多少颗粒,则通过每秒注入的粒子体积再进行计算。



  • @dzw05 那如果设置flowrateprofile为constant 1就是代表体积流量为1m3/s秒吗?还是说是一个无量纲的体积流量?



  • 注入模型这面提醒一下,有些情况参数的值是会被忽略的。比如说,flowrateprofileconstant 1只是用来初始化类的flowRate_成员,不具备意义。友情提醒



  • @dzw05 您好,想请教您一个问题,MPPIC中一个设置的粒径是针对一个parcel还是一个particle,为什么在计算后的结果中d(这里的粒径不应该是particle?)、positions、nparticle这三个文件下的个数相同?我是不是哪个地方理解错了:mihu: 麻烦老师了



  • @upc_ngh
    在这里需要你看一下code,关于parcel和particle的关系。 parcel是n个particle的代表,他们具有相同的size,相同的位置,唯一不同的就是mass。
    在*Cloudproperties中设置的size是parcel的size,同理就是particle的size。
    如果计算后的结果不同,你是不是设置的size distribution,设置了breakup model等其他模型?



  • @星星星星晴 好的谢谢您,没有计算结果不同,就是想问问parcel和particle的区别,回答的很详细,再次感谢



  • @upc_ngh 客气,parcel的概念的引用一方面会减少计算量,和steady-state一样,达到一定的数量的parcel就可以认为他达到了统计学上的满足要求,就一定程度的减少了计算量
    另一方面可以对于mass 等其他properties进行更容易的处理,比如涉及到mass transfer等。


  • OpenFOAM教授

    @upc_ngh 如@星星星星晴 所言,parcel就是n个particle的合集,具有相同的参数。



  • @upc_ngh mass 是累加的



  • @dzw05 谢谢老师回答,差不多明白了:xinxin:



  • @星星星星晴 非常感谢您的回答,这个mass是指parcel的mass是每个particle的质量累加的是吧



  • @upc_ngh 是的
    of4.1 injectionmodel.C 489-518

    
                        // Number of particles per parcel
                        pPtr->nParticle() =
                            setNumberOfParticles
                            (
                                newParcels,
                                newVolumeFraction,
                                pPtr->d(),
                                pPtr->rho()
                            );
    
                        if (pPtr->nParticle() >= 1.0)
                        {
                            parcelsAdded++;
                            massAdded += pPtr->nParticle()*pPtr->mass();
    
                            if (pPtr->move(td, dt))
                            {
                                td.cloud().addParticle(pPtr);
                            }
                            else
                            {
                                delete pPtr;
                            }
                        }
                        else
                        {
                            delayedVolume += pPtr->nParticle()*pPtr->volume();
                            delete pPtr;
                        }
    


  • @星星星星晴 非常感谢您的回答,搞清楚这个又有新的问题了,麻烦您再看一眼。
    我现在想要在Kinematic这个模板类下想要调用ManualInjection这个模板类的函数,应该怎么去操作,我看网上的回答尝试了友元还有其他方法,还是不行,您有什么好的方法吗?

    template<class CloudType>
    void Foam::KinematicCloud<CloudType>::updateCellOccupancy()
    {
        // Only build the cellOccupancy if the pointer is set, i.e. it has
        // been requested before.
    
        if (cellOccupancyPtr_.valid())
        {
            buildCellOccupancy();
        }
    }
    
    template<class CloudType>
    Foam::scalar Foam::ManualInjection<CloudType>::volumeToInject
    (
        const scalar time0,
        const scalar time1
    )
    {
        // All parcels introduced at SOI
        if ((0.0 >= time0) && (0.0 < time1))
        {
            return this->volumeTotal_;
        }
        else
        {
            return 0.0;
        }
    }
    
    


  • @upc_ngh 我没理解到你什么意思,请仔细的描述一下



  • @星星星星晴 就是假如我想在kinematic就是第一段代码里面调用ManuaInjection就是第二段代码里面的函数,什么方法比较简单。

    template<class CloudType>
    void Foam::KinematicCloud<CloudType>::updateCellOccupancy()
    {
        // Only build the cellOccupancy if the pointer is set, i.e. it has
        // been requested before.
    
        if (cellOccupancyPtr_.valid())
        {
    
            //buildCellOccupancy();//假如不要这个函数了,想要使用下面这个
           return this->volumeTotal_;//这个是Man类下的函数,该怎么去调用
    
        }
    }
    


  • @upc_ngh 额,这个我也不太了解,我也是半路出家,你这种修改属于涉及到底层了。。
    不过我个人建议,如果能暂时不触及底层就暂时先不触及,因为如果你修改底层的东西了,也需要修改其他模型,否则就报错。无法编译。updateCellOccupancy()这个方程是在哪调用的呢?调用了以后有什么作用,影响到了什么?如果你随便修改这种东西,就算编译通过了,最后计算的东西也不好说。。

    我一个朋友说过,编程其实不难,难的是你最后选择什么途径去解决问题。如果已经很熟悉在openfoam的框架,然后再去修改底层。。。

    如果你确定你需要修改这个地方,看看下面的流程介绍,希望能有帮助
    https://openfoamwiki.net/index.php/OpenFOAM_guide/UML/lagrangian

    其实最重要的问题是,你需要通过manualinjection实现什么效果,你为什么要修改updatecellOccupancy,是想计算theta()?在kinematicparcel中有该计算



  • @星星星星晴 好的谢谢谢谢,我就好奇它内部的类函数是怎么相互传递的,本身还远没这个能力去改这个代码:mihu: ,非常感谢您耐心的回答,我再看看您提供的资料再看看框架:xinxin:



  • @upc_ngh

    客气,其实你看一下manualinjection最后返回的什么,然后你去找它的父模板 injectionmodel,然后去找kinematicparcel,然后再去找kinematiccloud



  • @upc_ngh 我这边就是因为需要自定义injection,因为我找不到特别好的方法,所以在distributionmodel中就返回了一个vector,然后再***injection.c中call了 distributionmodel返回的vector,然后给parcel.U 和parcel.d()进行了定义



  • @星星星星晴 injection.c可以直接call 到DistributionModel中的vetor?可以加一下好友讨论吗1514969704,谢谢



  • @upc_ngh 我这边用不了QQ,邮件吧~


Log in to reply
 

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