cannot find file /kinematiccloud/collisionrecordspairaccessed
-
@zhe 那你得看你浓度有多高了,不然怎么会有 1way 2way 4way的区别呢。
不过我还是没有get到什么叫维持parcel由动到静,或者由静到动的过程是什么
parcel受力就会发生速度的变化,速度变化展示了收到了多大的力的作用,然后对流场发生了多大的影响。主要就是计算那个$UTrans$嘛。
有人也有在solver中植入某种力场的教程什么的。
还有人提出过parcel induced turbulence的模型,比如bubble induced turbulence什么的。
你指的是不仅仅只有momentum exchange?比如reaction啊 parcel induced turbulence什么的?我以为你是想做类似圆柱绕流之颗粒绕流~ 不好意思 理解错啦。
-
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什么的,可能你真是缺了某个模型,找找看
万一呢, 这不就一片文章出来了
-
@星星星星晴 有个问题请教一下,有时间帮忙看看。在计算粒子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(),感觉不对啊。应该在这里乘以相对速度才更合理一些阿。麻烦给看看,实在是推导出来跟公式对不上。谢谢。 -
@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 还是得细细来分解,最后发现,在计算相互作用力时,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. 希望迷糊的朋友能放宽心用哈。
-
@星星星星晴 又要麻烦了。我想不通一个问题。我想要精确一下我的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 哈哈 别客气我也是遇到了问题呢,我输出的field,总有乱码,很闹心。
都是探讨,我也是经历过Info这样的问题,
如果你用Pout配合mpirundebug 会有奇效~@zhe 在 cannot find file /kinematiccloud/collisionrecordspairaccessed 中说:
@星星星星晴 感谢这么快回复啊。我也是看UTans,但是drag的coef的准确性很影响UTrans的大小。之前给你说过,我做的粒子浓度很大,那么UTans的阻挡效果就需要有个准确的值。
所以这个你应该在particleForce里面输出,不是到kinematicparcel中输出,不然你咋知道哪个部分是gravity 哪个部分是drag呢