MutiComponentPhaseModel.C中有部分用phir对通量进行了修正,我记得alphaEqn中也有这部分,建议看看这项是不是关键
T
Tens 发布的最新帖子
-
RE: 关于在compressibleInterFoam中添加组分方程
-
RE: 关于OpenFOAM中,多相流守恒性与鲁棒性的讨论
@四季之中的隐星 不太了解multiphaseEulerFoam这个求解器,但是在compressibleInterFoam中,膨胀体积在相体积分数方程中好像是通过源项dgdt,然后MULES修正来处理的。
参考CompressibleInterFoam解析
我看phaseSystemSolve.C文件中好像也这样进行处理了 -
RE: 关于并行中的reduce函数
@xpqiu 好像是这样的,但是xxxx是对颗粒的某个值进行统计,类似于求D32。xxxx应该是不同核内取值不一样的数,如果这样的话,那么每个核内是计算自身负责区域内的颗粒,redece则是求和,应该是没问题的
下面是of内求D32的代码:template<class CloudType> inline Foam::scalar Foam::KinematicCloud<CloudType>::Dij ( const label i, const label j ) const { scalar si = 0.0; scalar sj = 0.0; forAllConstIter(typename KinematicCloud<CloudType>, *this, iter) { const parcelType& p = iter(); si += p.nParticle()*pow(p.d(), i); sj += p.nParticle()*pow(p.d(), j); } reduce(si, sumOp<scalar>()); reduce(sj, sumOp<scalar>()); sj = max(sj, vSmall); return si/sj; }
我的代码是仿照写的,不过我要统计的是20个变量,所以直接定义List:
List<scalar> np(20,0.0); for (label i=0;i<20;i++) { forAllIter(typename basicSprayCloud::sprayCloudType,parcels,pIter) { parceltype& p = pIter(); if (p满足条件) { np[i] += xxxx; //每个时间步累加 } } reduce(np[i], sumOp<scalar>()); }
-
RE: 如何获取sprayFoam计算结果中颗粒位置信息
@江山不如凉竹
position0是入射点的坐标,颗粒实时坐标在positions里,参考:
请问OF7中如何得到拉格朗日粒子轨迹;
拉格朗日一个bug -
RE: 关于并行中的reduce函数
分别为单核和6核计算结果,因为时间步非常小,所以单核的变化很小是合理的,6核变化太大了
这里弄错了,表格上的数据不是6核计算的结果,而是40核,忽然发现每一时间步的data都差不多是上一时间步的40倍,当改成6核运行时,又变成了6倍,是哪里的BUG造成的呢
-
RE: 关于并行中的reduce函数
我猜测并行运算就是将变量拆分成数组,比如定义一个变量n,4核运算,就会生成一个数组n[4],数组的每个元素就在每个核内运算,然后reduce就是把数组求和,那对于本身就是一个数组的np[20],在reduce时就会出现问题?
感觉把20个变量分别单独定义就能解决这个问题,但是这么多变量每个单独定义太麻烦了,有人有解决方法或者思路吗