8.9 网格块之间的接口
8.9 网格块之间的接口
在 3.1 节讨论结构网格空间离散时,已经指出通常无法在几何形状复杂的区域中生成单个网格(见图 3.4)。当时介绍了两种解决方法:多块方法和 Chimera 方法。下面介绍多块方法实现中的基本问题,进一步讨论见文献 $ [39–45] $。文献 $ [46] $ 对多块方法提供了很有帮助的介绍;这里不讨论 Chimera 方法,其详细说明见文献 $ [47–53] $。
多块方法将物理区域划分成若干虚拟部分,因此计算域也划分为同样数量的块。一般而言,某个块内的物理解取决于一个或多个相邻块的流动,因而必须提供能高效交换块间信息的数据结构。如果不同处理器分别求解不同网格块中的控制方程,这一结构还用于进程间通信。
数据结构的第一部分是网格块边界编号。图 8.13 给出了一种编号方式。
图 8.13 的编号规则可以概括如下:
$$ \begin{aligned}\text{边界 1:}\quad i&=\mathrm{IBEG}\\\text{边界 2:}\quad i&=\mathrm{IEND}\\\text{边界 3:}\quad j&=\mathrm{JBEG}\\\text{边界 4:}\quad j&=\mathrm{JEND}\\\text{边界 5:}\quad k&=\mathrm{KBEG}\\\text{边界 6:}\quad k&=\mathrm{KEND}.\end{aligned} $$

所有网格块必须采用相同编号规则。计算空间中的网格点下标 $ i,j,k $ 定义范围为
$$ \begin{array}{l}\mathrm{IBEG}\leq i\leq \mathrm{IEND}\\\mathrm{JBEG}\leq j\leq \mathrm{JEND}\\\mathrm{KBEG}\leq k\leq \mathrm{KEND}.\end{array} $$
单元中心格式所需的单元下标 I、J、K 也以相似方式定义。由于多块方法通常采用虚拟单元或点,各物理单元或点相对于每个范围的起点或终点具有一定偏移量(见图 8.1)。
每个网格块的边界划分为若干互不重叠的面片,使同一块边界上可以指定不同的边界条件,如图 8.14 所示。为唯一标识每个面片,必须存储其所属网格块编号和块边界编号,以及面片原点、高度与宽度。图 8.14 为此采用坐标 $ L_{1} $BEG、$ L_{1} $END、$ L_{2} $BEG 和 $ L_{2} $END。建议按循环方向确定面片坐标系的方向:对于 i 坐标,j 和 k 分别为第一及第二循环方向;对于 j 坐标,则分别为 k 和 i。因此,图 8.14 的面片位于 j=JBEG 边界,$ l_{1} $ 坐标沿 k 方向,$ l_{2} $ 沿 i 方向。采用循环方向可以唯一确定每个面片的定向。
数据结构的其余部分用于保证表示块间接口的面片之间能够交换数据;这里假设网格块仅通过其各面通信。为此,需要在上述面片数据结构中加入相邻网格块和面片的编号,并编码相互通信的面片之间的相对方向。


图 8.15 示出了两个网格块之间交换流动量的过程,分为两步。第一步,将被相邻面片虚拟层覆盖的区域内的变量写入本块的虚拟单元或点,或暂存区(图 8.15 的 A′、B′);所有网格块均执行此操作。第二步,在两块之间交换 A′ 和 B′ 的数据:将 A′ 写入块 B 的虚拟层,将 B′ 写入块 A 的虚拟层。若两个面片方向不同,必须进行相应的数据变换。若网格线在块接口处不匹配,还需要额外操作,例如文献 [54–56] 所述。