cannot find file /kinematiccloud/collisionrecordspairaccessed
-
在追踪粒子的算例中,想把最终时刻速度通过mapField到其他算例中。但是以上来就出现cannot find file lagrangian/kinematiccloud/collisionrecordspairaccessed。 有没有有经验的前辈可以指点一下,这个问题怎么解决?谢谢。
-
@zhe 在 cannot find file /kinematiccloud/collisionrecordspairaccessed 中说:
。
拉格朗日场可以映射吗?
-
@zhe 你的场写到了哪啊?欧拉的话是可以的吧 lagrangian不行
-
@zhouxu 其实如果按分核之后,run出来的结果是可以映射到别的case的。直接可以用mapField,你可以看看hopper的tutorial,那个就可以实现。千万不要把分核后的processor删除,因为当reconstructPar后,会丢掉一些files。
-
@星星星星晴 谢谢回复啊。是的,写入到拉格朗日下的。我把当时分核算完的删除了,所以丢失了pairRecord相关的文件。之前做成功过,如果不删除,而是直接map到下一个,是可以全部转移过去的。看来,我得重新run一下了。
-
@zhe 哈哈 说实话 我也是第一次知道拉格朗日下的也能mapfield,不过上次尝试过使用mapfield,map出来的效果很差,所以后来就不用map了,那个时候还没有parcel呢。
我们这边有把lagrangian field 做一个时均,然后写到欧拉场里的。pairRecord是什么?了解一下?deterministic collision model?还是软球模型的什么啊?
-
@星星星星晴 也不是什么必须的文档。只是在读取朗格朗日数据时,因为我用的就是DPM的碰撞模型,所以需要读取这个文件。我看了一下collidingParcelO.C, 在readField里应该可以去掉吧,得试试,看看影不影响DPM。
对了,方不方便问一下,你那边怎么把拉格朗日做的时均啊?理论概念是什么? -
@zhe hi 昨天看到忘了回了,就是求一些统计上的平均速度,速度的RMS什么的。这样比较容易求,而且能直接在paraview上看。
-
@星星星星晴 再请问一下哈。因为在用openfoam追踪粒子运动的过程中,发现漏洞很大。尤其是openfoam主要在意粒子的运动模式,比如力的作用都在速度变化量中体现,那么对于位置的更新有没有什么别的可实施的?比如保持粒子不动,是不是只能不断地减小作用合力在粒子身上产生的变化量?有时间了在回复,不急的,谢谢🙏
-
@zhe 不好意思,我没有get到你的点
拉格朗日不就是建立在 $F=ma$ 么
那如果不通过速度的变化,怎么知道加速度,怎么算作用力呢。保持粒子不动的话,完全可以把粒子做成wall,或者setzone呗
看你关注的啥啊,关注流场还是关注粒子 -
@星星星星晴 没错,通过力的作用增加速度变化量,我的意思是:在高浓度粒子流中,openfoam中本身的力都作用在单个粒子上,而相互间只有碰撞力,那不能维持粒子由动到静,或由静到动的过程,因为它可是视为永远在动。把粒子作成wall是永远不能动的意思对吗?那就失去了粒子的感觉。setzone是啥呀?
-
@zhe 那你得看你浓度有多高了,不然怎么会有 1way 2way 4way的区别呢。
不过我还是没有get到什么叫维持parcel由动到静,或者由静到动的过程是什么
parcel受力就会发生速度的变化,速度变化展示了收到了多大的力的作用,然后对流场发生了多大的影响。主要就是计算那个$UTrans$嘛。
有人也有在solver中植入某种力场的教程什么的。
还有人提出过parcel induced turbulence的模型,比如bubble induced turbulence什么的。
你指的是不仅仅只有momentum exchange?比如reaction啊 parcel induced turbulence什么的?我以为你是想做类似圆柱绕流之颗粒绕流~ 不好意思 理解错啦。
-
@星星星星晴 是我没表示清楚。我的粒子浓度最大0.62。绕柱是我的一个case,但是感觉做出来不是那么理想。粒子在柱周围无法很好的堆积起来。那么从力的角度来说,有一种摩擦效果的力,存在在粒子间,但没有被表达出来。如果有足够的摩擦,是可以使得粒子静止堆积。当然也不会妨碍更大的水流造成的迁移(不是像wall一样永远不能动)。您所说的水流对粒子的影响,无论是动量交换还是turbulent,或是dispersion都是在流-固之间的,但咱高浓度粒子流中,固-固之间的很重要。
-
@zhe 哈哈 我没到你这么高的浓度,所以不是很了解,既然你的浓度这么大,你用的drag model 考虑alpha(theta)什么的了么?另外有可能是turbulence 没有解决好?有可能是dispersionmodel的问题,不好说,前两天我还看到一篇文章讲这个东西来着。。我回头找找。
pp之间的作用力 没想过,正常能想到的pp之间的作用力,磁力?静电力?不然还能有啥除了碰撞意外以外?
相对论么?暂时不知道 想不到能有啥
-
LES and RANS calculations of particle dispersion behind a wall-mounted cubic obstacle
Marco Atzori a,b,∗, Sergio Chibbaro c, Christophe Duwig d, Luca Brandt
2022闲着看一下这篇文章,他的解释是可能是涉及到湍流没有解好啊,Stokes 什么的。
而且正常情况下 spray中只考虑了drag, lift, 如果固体parcel 可能会有shear lift 什么的,如果bubble 会有什么basset force, historyforce什么的,可能你真是缺了某个模型,找找看
万一呢, 这不就一片文章出来了
-
@星星星星晴 感谢回复啊。说的挺有见解的。因为目前所有的4-way基本上都是考虑弹簧碰撞,最多添加转动消散能量,但其实有些情况是不适合的。比如只有接触,并无overlap,那么一种类似摩擦的效果应该如何表达。这就对于高粒子流很重要,因为高粒子流中不会轻易受到流体影响,况且说的再细一些,流体在高粒子流中本就不该是连续的。而是像渗透在多孔介质。这只是我的想法,跟您交流交流,多听听别人的意见,我觉得会更能填补空缺。真心再次感谢您回复,以后有机会您多指教啊。
-
-
@zhe 我们这边考虑碰撞的时候 回头一个impact efficiency 的考量,就是小parcel可能会因为大parcel周围的流场 从而造成绕着大parcel 而不是与大parcel发生碰撞这种情况
sommerfeld and lain
influence of droplet collision….
2020 -
@星星星星晴 不是流化床,我是做海岸的,哈哈。粒子启动和堆积很重要。所以研究粒子之间的比较多。
-
@星星星星晴 那你们还是比较多的是考虑周围流体对粒子的影响。我已经不能再考虑那些了,否则又能做一个课题啦,哈哈哈
-
@星星星星晴 有个问题请教一下,有时间帮忙看看。在计算粒子drag时,如果是ErgunWenYuDragForce。分了两个公式:
if (alphac < 0.8)
{
return forceSuSp
(
Zero,
(mass/p.rho())
(150.0(1.0 - alphac)/alphac + 1.75*Re)muc/(alphacsqr(p.d()))); } else { return forceSuSp ( Zero, (mass/p.rho()) *0.75*CdRe(alphac*Re)*muc*pow(alphac, -2.65)/(alphac*sqr(p.d())) ); }
按道理将,这两个计算的都是beta值,也就是相对速度前面的那一部分。可是在第二个公式里,好像连两次的相对速度都已经包含在内了。还有,在KinematicParcel.C中,计算加速度时:const vector acp = (Fcp.Sp()*td.Uc() + Fcp.Su())/massEff;
这里乘以td.Uc(),感觉不对啊。应该在这里乘以相对速度才更合理一些阿。麻烦给看看,实在是推导出来跟公式对不上。谢谢。 -
@星星星星晴 理解错了。第二个公式CdRe(Re)本就只有一个CdRe。但是连个公式都在分母处除以的alphac,这造成跟最后的公式不同。还有第二个问题,应该是乘以相对速度(Uf-Up)的,怎么乘以里td.Uc().请解惑。
-
@zhe
在这个定义中 OpenFOAM-8/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/forceSuSp/forceSuSp.HHelper container for force Su and Sp terms. F = Sp(U - Up) + Su Explicit contribution, Su specified as a force Implicit coefficient, Sp specified as force/velocity
所以 最后在return的时候 Sp和Su是完全不同的俩东西。 U就是td.Uc()
-
@zhe
我用的of8 是这样的 你用的那个版本啊?template<class CloudType> Foam::forceSuSp Foam::ErgunWenYuDragForce<CloudType>::calcCoupled ( const typename CloudType::parcelType& p, const typename CloudType::parcelType::trackingData& td, const scalar dt, const scalar mass, const scalar Re, const scalar muc ) const { const scalar alphac = this->alphacInterp().interpolate ( p.coordinates(), p.currentTetIndices() ); if (alphac < 0.8) { return forceSuSp ( Zero, mass/p.rho()*(150*(1 - alphac)/alphac + 1.75*Re) *muc/(alphac*sqr(p.d())) ); } else { return WenYuDragForce<CloudType>::calcCoupled(p, td, dt, mass, Re, muc); } }
-
@zhe 我查了一下of5 好像和你看的wrgunwenyudragforce 这部分相同,我就简单的做了一下量纲分析,最后得到的都是 $\frac{kg}{s}$ 所以得到的是Sp,Sp乘以速度 就是Su 就是力了$\frac{kgm}{s^2}$.
因为我也不做这种考虑$\alpha$的drag,仅仅是根据自己之前的理解和你强行解释了一波,这玩意属于of的基础定义了~
-
@星星星星晴 是的,它算出来就是Sp(),需要乘以(Uf -Up),得出力来。我推导了一下,就是最后那个分母部分除以alphac有点儿对不上。但是粒子运动倒是对的。也没问题了。就是想看看有没有谁也因为这个纳闷过。谢谢啦,之后有问题咱们再讨论!
-
@zhe 还是得细细来分解,最后发现,在计算相互作用力时,openfoam不是按着公式来的,而是分开算的相对速度。
// Calculate the integration coefficients const vector acp = (Fcp.Sp()*td.Uc() + Fcp.Su())/massEff; const vector ancp = (Fncp.Su() + Su)/massEff; const scalar bcp = Fcp.Sp()/massEff; // Integrate to find the new parcel velocity const vector deltaU = cloud.UIntegrator().delta(U_, dt, acp + ancp, bcp); const vector deltaUncp = ancp*dt; const vector deltaUcp = deltaU - deltaUncp;
在这里可以看到的是,在计算粒子的速度总变化量时,引用里积分公式,根据自己选择的不同模型,得出不同的delta。大多是选择的Euler哈。将后面的4中参量带进去就可以看出来,这里面分别包含betaUf 和 -betaUp. 希望迷糊的朋友能放宽心用哈。
-
@zhe 牛皮啊,不懂就问,什么事里积分公式?
另外论坛支持 $\LaTeX$ -
@星星星星晴 打错字了,哈哈哈。Linux上面下载的中文输入法总出错。就是IntegrationScheme.
-
@zhe 是 linux上确实输入法什么的比较蛋疼,我都是连单位cluster上算,然后本地处理,win mac都用。
-
@星星星星晴 是的是的。提到cluster,想请问你平时怎么把数据导出来的,有没有什么快的办法?我每次都很多files,光导出来就要很久。
-
@zhe 没办法,这玩意是小文件导致的,无法解决,freefilesync 慢慢导呗,服务器上parallel reconstruct 然后就这样了
-
@星星星星晴 好的,看来也是这样了。谢谢啊。有问题再请教!
-
@星星星星晴 又要麻烦了。我想不通一个问题。我想要精确一下我的drag的coef在特殊环境下计算结果。我用的case很简单,就是一个粒子从空气自由释放,落到水里,达到它的settling velocity。由于我只添加drag和gravity,在中间想要输出Fcp.Sp(),在KinematicParcel.C 中 加了Info << "Fcp.Sp() = " << Fcp.Sp() << endl;
也就是drag的coef。但是却不会输出。我是用的collidingCloud,在motion里应该就是这个运动方程了。td.part() = parcelType::trackingData::tpLinearTrack; CloudType::move(cloud, td, deltaT);
粒子运动的轨迹看起来是没问题的。如果不是在KinematicParcel.C 输出Fcp.Sp(), 那怎么可能会计算力的作用?为什么不输出我想要的那个呢?
还有一个现象,当我的case包含粒子数目很多时,它却可以输出。希望你有时间了帮忙解惑,谢谢! -
@zhe 在 cannot find file /kinematiccloud/collisionrecordspairaccessed 中说:
粒子运动的轨迹看起来是没问题的。如果不是在KinematicParcel.C 输出Fcp.Sp(), 那怎么可能会计算力的作用?为什么不输出我想要的那个呢?
还有一个现象,当我的case包含粒子数目很多时,它却可以输出。希望你有时间了帮忙解惑,谢谢!你是serial 还是parallel ? 有没有试过Pout 或者Cout
Pout 配合 mpirunDebug.4.2.1 mpirunDebug Is a bash script which can start each process of the parallel run in an extra gdb session. This script can easily extended to start a gdb frontend for each process (download patched mpirunDebug file). Once this is done you'll get a separate GUI instance for each process, where you can set breakpoints etc. separately. This behaviour is similar to Totalview. Maybe one can utilise the session features from the GUI's in order to remember e.g. breakpoints. mpirunDebug -np 2 xxxFoam -parallel
说实话,我没有考虑过这些,因为我只看有没有UTrans这个field有没有值,我没考虑过这些,我做喷雾的,用那种验证过drag model就好,没你这个那么仔细,或者你去drag force那边输出试试呢
-
@zhe 查了之前同事的code,他们有在 ParticleForces里面的calcCoupled中输出Su 和Sp 这样你就单独知道某一个力的作用了。
就是用的Info -
@星星星星晴 感谢这么快回复啊。我也是看UTans,但是drag的coef的准确性很影响UTrans的大小。之前给你说过,我做的粒子浓度很大,那么UTans的阻挡效果就需要有个准确的值。
问题解决了,你提醒了我,一个粒子该用单核计算的。否则就会进入Coud.C的move里。感谢感谢。我用单核计算了一下,结果是显示的!看来不知道,真得马上问。 -
@zhe 哈哈 别客气我也是遇到了问题呢,我输出的field,总有乱码,很闹心。
都是探讨,我也是经历过Info这样的问题,
如果你用Pout配合mpirundebug 会有奇效~@zhe 在 cannot find file /kinematiccloud/collisionrecordspairaccessed 中说:
@星星星星晴 感谢这么快回复啊。我也是看UTans,但是drag的coef的准确性很影响UTrans的大小。之前给你说过,我做的粒子浓度很大,那么UTans的阻挡效果就需要有个准确的值。
所以这个你应该在particleForce里面输出,不是到kinematicparcel中输出,不然你咋知道哪个部分是gravity 哪个部分是drag呢
-
@星星星星晴 Pout配合mpirundebug是怎么使用啊?我还是第一次知道。
是的,你说的对,如果说考虑了很多种力,那么需要单独在力的文件中输出。但是如果只是像我这样验证单独力的作用效果,在kinematicParcel.C里把cp和ncp分别输出就可以知道一个耦合力和非耦合力的大小了。 -
@zhe Pout 是processer输出的 mpirundebug 这样的话 就并行debug了 你试试~就知道
还是info最直接