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的单位设置。以后有时间可以详细说说。
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。