cannot find file /kinematiccloud/collisionrecordspairaccessed
-
@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呢