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 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.
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.
November 23, 2009
MBlock Homepage
Charm Homepage