IncomprFlowParam是一个代表不可压缩流体的参数的类。包括流体设定的一些基本信息,比如速度,雷诺数,格子长度,和格子分辨率等。

1 private参数

它包含的参数如下:

参数调用关系
参数调用关系
类型 变量名称 解释
T physicalU 物理无量纲速度
T latticeU 格子速度:正比于马赫数
T Re 雷诺数
T physicalLength 物理无量纲特征长度
plint resolution 分辨率N,单元数为N+1,因为C++索引从0开始
T lx 格子长度x方向,分辨率的倍数
T ly 格子长度y方向,分辨率的倍数
T lz 格子长度z方向,分辨率的倍数

值得注意的是:

  • 格子粘度,以及松弛因子,都不包括在上面的private参数里面,因为这些参数都可以根据上面的数据直接计算得到。看第二节。
  • 分辨率resolution一般都是在特征长度方向。比如在Poiseuille流中,特征长度就是流场的宽度,因此分辨率就是指在这个物理量上的分辨率。
  • lx,ly,lz这三个参数都是无量纲参数。其值一般是分辨率resolution的倍数。比如在Poiseuille流中,流场的宽度方向的分辨率是N,lx=1的话就意味着流场宽度方向的分辨率就是N,ly=2的话就意味着长度方向的分辨率是2N。
  • 物理特征速度physicalU和物理特征长度physicalLength默认为1。两者都是无量纲化的。

假如物理无量纲长度为L,那么:

$$
d x=\frac{L}{N}
$$

其中$d x$代表单位格子宽度(这个也是无量纲的量)。${L}$代表的是physicalLength,即物理无量纲特征长度。N代表的是分辨率,即resolution

可以这样说,Palabos本质上是把无量纲方程作为离散的也就是Palabos里面的的数据量都是无量纲的。这个问题牵扯到LBM的单位设置。以后有时间可以详细说说。

  • 2 常用方法

getLatticeNu()

计算格子粘度:

1
return ‪getLatticeU()*(T)‪getResolution()/‪Re;

$$
N u=\frac{U_{\text {lattice}} \cdot N}{\operatorname{Re}}
$$

getTau()

计算松弛时间:

1
return (T)3*‪getLatticeNu()+(T)0.5;

$$
\tau=3 \cdot N u+\frac{1}{2}
$$

getOmega()

计算Omega:

1
return (T)1 / ‪getTau()

$$
\omega=\frac{1}{\tau}
$$

getDeltaX()

计算格子间距:

1
return (T)‪getPhysicalLength()/(T)‪getResolution();

$$
d x=\frac{L}{N}
$$

getLx()

计算Lx,也就是X方向上的无量纲长度:

1
return ‪getPhysicalLength()*‪lx;

nCell()

计算l长度下有几个单元。

1
‪plint ‪nCell(T l) const { return (int)(l/‪getDeltaX()+(T)0.5); }

getNx()

计算x方向有几个单元:

1
plint ‪getNx(bool offLattice=false) const { return ‪nCell(‪getLx())+1+(int)offLattice; }

这里调用了nCell函数。offLattice是一个布尔型,目前作用不明。如果不考虑这个offLattice的话,把所有参数代进去:

$$
(\text { int })\left(\frac{\text { getPhysicalLength } \cdot 1 \mathrm{x}}{\text { getDelta } \mathrm{X}}+0.5\right)+1
$$

$$
(\text { int })\left(\frac{\text { physicalLength.lx }}{\text { physicalLength/resolution }}+0.5\right)+1
$$

$$
(\text { int })(\text { resolution } \cdot 1 \mathrm{x}+0.5)+1
$$

可以看出,其实和physicalLength并无关系。不是很清楚为什么要这么做。直接让resolution*lx+1不就行了吗?

## getDeltaT()

计算时间步:

1
T ‪getDeltaT() const  { return ‪getDeltaX()*‪getLatticeU()/‪getPhysicalU(); }

$$
d t=\frac{L}{N} \times \frac{U_{\text {latice}}}{U_{\text {phiscal}}}
$$

默认物理长度L=1,物理速度physicalU=1。