2 Introduction/Terminology

A block is a distorted rectangular grid that represents a portion of the problem domain. A volumetric cell in the grid is called a voxel. Each exterior side of a block is called a face. Each face may consist of several rectangular patches, which all abut the same block and experience the same boundary conditions.

Figure 1: Terminology used by the framework.
Image terminology

For example, Figure 1 shows a 3D 4x8x7-voxel block, with a face and 6x3 patch indicated.

The computational domain is tiled with such blocks, which are required to be conformal- the voxels must match exactly. The blocks need not be the same size or orientation, however, as illustrated in the 2D domain of Figure 2.

Figure 2: A 2D domain decomposed into three blocks: A (5x3), B (3x6), and C (5x4). Also shows the computation as seen from block A.
Image decompose

Figure 2 also shows the computation from the point of view of block A, which has two external boundary conditions (on the left and top sides) and two ``internal'' boundary conditions (on the right and bottom sides). During the computation, the external boundary conditions can be imposed independent of any other blocks; while the internal boundary conditions must be obtained from the other blocks.

To simplify the computation on the interior, these boundary conditions are typically written into special extra ``ghost'' (or dummy) cells around the outside of the real interior cells. The array indexing for these ghost cells is illustrated in Figure 4.

Figure 3: The ghost cells around a 5x3-voxel 2D block
Image indexing

The Multiblock framework manages all the boundary conditions- both internal and external. Internal boundary conditions are sent across processors, and require you to register the data ``fields'' you wish exchanged. External boundary conditions are not communicated, but require you to register a function to apply that boundary condition to your data. Either type of boundary condition can have arbitrary thickness.

Finally, the Multiblock framework manages nothing but boundary conditions. The rest of the computation, such as deciding on and implementing timestepping, stencils, numerics, and interpolation schemes are all left up to the user.

June 29, 2008
MBlock Homepage
Charm Homepage