之前在论坛和其他地方,得知了一些访问f’s的方法,但是不够确信,现在跑多次测试看看效果。
结论:
cell[iPop],lattice.get(ix,iy,iz)[iPop],cell.getRawPopulations()三者得到的结果相同。
论坛:https://palabos-forum.unige.ch/t/using-dynamics-object-to-access-particle-distribution-function/407
提到了一个说法在openLb里面分布函数是f_i - t_i,发帖者表示想访问真实的分布方程,便有如下代码:
T *f;
T Mx; //Real particle distribution function;
lattice.get(iX, iY, iZ).computePopulations(f);
for(int i=0; i<DESCRIPTOR<T>::q; ++i){
Mx = (f[i] + DESCRIPTOR<T>::t[i])
}
发帖者表示会返回错误,但底下回帖者表示可用如下代码访问格点的f’s,结果会成功。
lattice.get(iX,iY,iZ)[i]返回的为“f[i]-t[i]”。
在论坛:
https://palabos-forum.unige.ch/t/copying-the-particle-distribution-function/402/3
找到了储存为f[i]-t[i]的原因,是为了得到计算精度,也提到了如果想访问实际粒子分布函数,则需要加上每个方向的格子常数t。
另外一点是lattice.getDataAnalysis().getPopulations()得到的结果总和应该为大约是0,需要加上1才是density。