请问有人用过sprayFoam中的下面coneNozzleInjection吗?
-
@就是个胖子 (1)massTotal和duration这两项指定喷嘴在指定的喷射时间段内向计算域中注入的颗粒总质量;(2)flowRateProfile指的是喷嘴流体体积流量;(3)通过parcelspersecond给定每个时间步内喷嘴模型注入的parcel数量数量,至于每个parcel中包含多少颗粒,则通过每秒注入的粒子体积再进行计算。
-
@dzw05 那如果设置flowrateprofile为constant 1就是代表体积流量为1m3/s秒吗?还是说是一个无量纲的体积流量?
-
注入模型这面提醒一下,有些情况参数的值是会被忽略的。比如说,
flowrateprofile
为constant 1
只是用来初始化类的flowRate_
成员,不具备意义。友情提醒 -
@dzw05 您好,想请教您一个问题,MPPIC中一个设置的粒径是针对一个parcel还是一个particle,为什么在计算后的结果中d(这里的粒径不应该是particle?)、positions、nparticle这三个文件下的个数相同?我是不是哪个地方理解错了
麻烦老师了
-
@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等。 -
@upc_ngh 如@星星星星晴 所言,parcel就是n个particle的合集,具有相同的参数。
-
@upc_ngh mass 是累加的
-
@dzw05 谢谢老师回答,差不多明白了
-
@星星星星晴 非常感谢您的回答,这个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中有该计算
-
@星星星星晴 好的谢谢谢谢,我就好奇它内部的类函数是怎么相互传递的,本身还远没这个能力去改这个代码
,非常感谢您耐心的回答,我再看看您提供的资料再看看框架
-
客气,其实你看一下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,邮件吧~
-
@dzw05 您好,我也在使用coneNozzleInjection模型进行燃烧室喷雾燃烧模拟,燃烧室进出口的速度边界条件分别为turbulentInlet和pressureInletOutletVelocity,压力边界条件分别为zeroGradient和totalPressure。在进行燃烧室内当量比分析的时候有些疑惑,向您请教下。(1)如果燃油流量是0.1kg/s的话,按照您的解释应该massTotal=0.1,duration=1。在time step size为1e-6s的情况下,也就是每个时间步喷入燃油燃油流量0.1/1*0.000001=1e-7kg,这样只有在喷射时间持续了1s的时候燃油在燃烧室内的质量才能达到0.1kg。本节的这段理解正确么?(2)在计算中一个通流时间为0.02s,受限于计算资源,实际计算过程达不到1s。如果我想在1s之前分析燃烧室内的当量比的话,是不是必须燃油喷射时间超过一个通流时间后才能进行分析呢?在一个通流时间后,喷入燃烧室的燃油流量和流出燃烧室的燃油流量之间的差值可以达到平衡么?(3)关于parcelsPerSecond数目的问题,您说的粒子体积是根据下图中的d进行计算的么?
麻烦您了!谢谢! -
@李东岳 李老师,我想设置喷雾不随时间变化,
flowRateProfile constant 1e-4;
我试着用这个设置命令,算例也能运行。
如果这个命令没有意义不能用那该怎样设置?必须用下面的命令?把时间设得很长?flowRateProfile table ( (0 1e-4) (100000 1e-4) );*/
另外,请教关于文件‘sprayCloudProperties’,有些参数没找到资料,比如
solution { active true; coupled true; transient yes; cellValueSourceCorrection on; maxCo 0.3; sourceTerms { schemes { rho explicit 1; } } interpolationSchemes { rho cell; U cellPoint; } integrationSchemes { U Euler; T analytical; } }
以及
constantProperties { T0 320; // 这个有意义么?只是初始化用么? // place holders for rho0 and Cp0 // - reset from liquid properties using T0 rho0 1000; Cp0 4187; constantVolume false; //这个是干啥用的呢? }
最后,我想用paraview看看输出结果的水滴分布情况,这个怎么查看呢?还有水的质量在空间上的分布?
麻烦李老师了,谢谢。
-
@chengan-wang 请善用谷歌,这些东西在网上都有,只是零碎的,等我忙完这段时间或许会写个关于喷雾模拟的东西,但是现在请善用搜索引擎。而且你需要多读code才明白为什么这个东西是这么设置的
请见谅说的有些直,但是事实如此。
-
@星星星星晴 没关系,明白,想尽快弄出来
论坛登录问题反馈可联系 li.dy@dyfluid.com