如何将一些固体particles的体积整合成一个球形的有效parcel
-
@星星星星晴 您好,我这两天都在研究您提到的stochastic collision model, 帮助很大,首先谢谢您.我有一个小问题,如果在MPPIC的方法中,既然应用了inter-particle stress (packing model)再加上damping model, 那么是不是stochastic collision model就不应该并存了?或者说是不是二选一比较妥当.虽然在现在OpenFOAM自带的MPPIC的tutorials,在kinematicCloudProperties文件里,两个都显示了,但是stochastic collision model都是默认了none. 那么如果我想要在MPPIC中加入另外的碰撞的模型,还是需要关掉packing,damping,isotropic这3种 stresses? 希望您有时间了可以回复.
-
@星星星星晴 这里面是两个环节的.一开始是粒子的注入.需要在注入后计算出它在cell里的state.这个state会store下来以计算后的形式,我认为这里是parcel了.
// Define local properties at beginning of time step // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const scalar np0 = nParticle_; const scalar mass0 = mass();
接着是追踪parcel运动过程,在这里就只是调用之前calc出来的parcels的质量了.不同zise的parcel是一直被延续的,中间是以整体形式在计算域里被计算和追踪的.
// averaging sums forAllConstIter(typename TrackCloudType, cloud, iter) { const typename TrackCloudType::parcelType& p = iter(); const tetIndices tetIs = p.currentTetIndices(); const scalar m = p.nParticle()*p.mass();
这是我的理解,不知道是不是都对,你先看看,是不是符合你的情况.
-
@zhe
这就存在问题了啊,在开始的时候 parcel的mass 就是 他的size *volume 不考虑particle.
但是比如计算这个parcel受力的时候也用的是parcel的massOpenFOAM-8/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H inline Foam::scalar Foam::KinematicParcel<ParcelType>::mass() const { return rho_*volume(); }
但是你后半部分的mass是在cloud中
OpenFOAM-8/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H
就是代表着,在cloud中,追踪的mass是parcel这个合集的mass,真的很头大
-
@星星星星晴 在KinematicCloudI.H中计算了system mass也是以parcel来计算的,这是cloud层面上的.在我上个回复里的后半段是是追踪粒子的文档里的,不是cloud怎么的. 在追踪过程里,还是以parcel为追踪项的.
template<class ParcelType> template<class TrackCloudType> inline void Foam::MPPICParcel<ParcelType>::trackingData::updateAverages ( const TrackCloudType& cloud ) { // zero the sums volumeAverage_() = 0; radiusAverage_() = 0; rhoAverage_() = 0; uAverage_() = Zero; uSqrAverage_() = 0; frequencyAverage_() = 0; massAverage_() = 0; // temporary weights autoPtr<AveragingMethod<scalar>> weightAveragePtr ( AveragingMethod<scalar>::New ( IOobject ( cloud.name() + ":weightAverage", cloud.db().time().timeName(), cloud.mesh() ), cloud.solution().dict(), cloud.mesh() ) ); AveragingMethod<scalar>& weightAverage = weightAveragePtr(); // averaging sums forAllConstIter(typename TrackCloudType, cloud, iter) { const typename TrackCloudType::parcelType& p = iter(); const tetIndices tetIs = p.currentTetIndices(); const scalar m = p.nParticle()*p.mass(); volumeAverage_->add(p.coordinates(), tetIs, p.nParticle()*p.volume()); rhoAverage_->add(p.coordinates(), tetIs, m*p.rho()); uAverage_->add(p.coordinates(), tetIs, m*p.U()); massAverage_->add(p.coordinates(), tetIs, m); }