5.3.6 迁移
迁移是流场在空间上的演化过程,如图5.4所示。迁移的作用:在确定的某一时刻和某一空间点,将该点经过碰撞的各向概率密度函数转移到相邻网格节点的相应位置,并替换该位置上的值;同时,该点也接受其他相邻网格节点转移来的值,并替换相应的本地值。在所有值迁移替换之后,就可以更新流场的密度、速度等,从而实现流场在空间上的演化。迁移公式为
图5.4 迁移示意图(书后附彩插)
(a)迁移前;(b)迁移后
注意,第9个方向(中心点处)的速度分布量在迁移中不发生变化。因此,在具体实施迁移步骤时,只考虑8个方向速度分布量的改变。相应的网格参数如图5.5所示。
图5.5 概率密度方向与概率密度分布
(a)概率密度方向;(b)概率密度分布
迁移的实施过程:假设图中位于位置“9”的网格点坐标为(i,j),那么思考一下,f1应该迁移到什么节点呢?f2又应该迁移到什么节点呢?显然,f1应该往右迁移一个格子,所以需要将其赋值到(i+1,j)点;f2应该往右上方迁移,即需要迁移到(i+1,j+1)点。其他方向的迁移也是类似步骤。因此,从迁移的实施过程看,其本质是数组的“移位”操作。在程序实现中,可以采用循环的方式来进行移位操作,也可以用操控数组元素地址的方式来实现。对于后者,相应的MATLAB代码如下:
以第2行代码“F1(:,:,4)=F1([2:lx 1],[ly 1:ly-1],4)”为例,由图5.5可知,第4个方向为左上方位的方向,这个方向的值需要由点(i+1,j-1)的第4个方向迁移得到。代码等号左边表示接收迁移的节点,等号右侧则是送出迁移值的节点。这里也注意到,等号左侧、右侧均是对F1这个数组进行操作,但这不会影响修改其局部的元素值。下面来分析这一行代码是如何实现“移位”赋值的。在x方向迁移操作中的移位赋值如表5.1所示,在y方向迁移操作中的移位赋值如表5.2所示。
表5.1 在x方向迁移操作中的移位赋值
表5.2 在y方向迁移操作中的移位赋值
然而,以上移位操作也有一定的问题。例如,对于x方向的最后一个移位,以及对于y方向的第一个移位,都存在一个“首尾跨界”的问题。对于该问题,在边界处理时进行重新赋值,覆盖即可解决。