DPMFoam injectionModels 中初始速度 U0
-
U0 就是parcel的初始速度。
因为你现在用的是气泡,parcel的密度远远小于周围流体的密度,如东岳大佬所说,在计算drag的时候就直接给处理掉了。所以你才能发现改变颗粒密度为2500以后就影响很大。而且你也要看你是2-way 还是1-way。
如果你只是1-way倒还好,影响不大,因为只有fluid to parcel,
如果你要考虑2-way的话,parcel to fluid 就是个问题了。@jasper-0 在 DPMFoam injectionModels 中初始速度 U0 中说:
颗粒入口的速度理论上来说应该等于parcelsPerSecond*颗粒体积/入口面积
parcel的入口速度就是U0只是在你射入以后,就被couple了
injection model
- 选择喷射模型
- 初始化: 什么时候开始喷射,喷射的总数量,总体积(flowrate 时间积分),根据parcelbasisbasistype计算nParticle,这些影响到你的总flow rate
- 设置 injection position and cell
- 设置parcel properties: 速度和parcel直径
-
@星星星星晴
感谢大佬的悉心解答!我现在改用patchFlowRateInjection,但是对于parcelConcentration的定义不是很明确,以下是我的代码。我看了下PatchFlowRateInjection.H,发现定义为 Parcels to introduce per unit volume flow rate m3 [n/m3],这意思是不是说每进来1立方米水携带多少个粒子?比如我的流量为0.001 m3/s,每秒携带10个粒子,那parcelConcentration是不是应该是10000?injectionModels { model1 { type patchFlowRateInjection; phi alphaPhi.water; patch inlet; duration 10; SOI 0; parcelBasisType fixed; massTotal 5.257e-3; nParticle 1; concentration 1; parcelConcentration 21220659079; sizeDistribution { type fixedValue; fixedValueDistribution { value 3e-4; } } }
-
@李东岳
李老师好,我发现一个问题,还是对于Diaz bubble column这个算例,压力p的边界条件设为如下:internalField uniform 1e5; boundaryField { ".*" { type fixedFluxPressure; phi phi.water; value $internalField; } }
然而在计算结果中并没有得到静水压力,上下面的水压差只有5.2,感觉是用空气密度算出来的压力差,这应该对计算结果会造成影响吧? 是不是DPMFoam只能应用于空气为连续项的情况啊?
-
@jasper-0 不好意思,我没用过这个injection model,我建议你要是有功夫就研读一下injection model 的具体喷射方式和计算过程,这个东西完全能用手算的。这样你才能知道到底哪一项对你喷射的颗粒有什么变化。
大致看的样子这个parcelconcentration 影响到的是你喷射parcel 数量。template<class CloudType> Foam::label Foam::PatchFlowRateInjection<CloudType>::parcelsToInject ( const scalar time0, const scalar time1 ) { if ((time0 >= 0.0) && (time0 < duration_)) { scalar dt = time1 - time0; scalar c = concentration_.value(0.5*(time0 + time1)); scalar nParcels = parcelConcentration_*c*flowRate()*dt; Random& rnd = this->owner().rndGen(); label nParcelsToInject = floor(nParcels); // Inject an additional parcel with a probability based on the // remainder after the floor function if ( nParcelsToInject > 0 && nParcels - scalar(nParcelsToInject) > rnd.globalScalar01() ) { ++nParcelsToInject; } return nParcelsToInject; } else { return 0; } }