# Nested dissection on regular grid

When solving sparse linear systems using direct factorization methods, the ordering strategy used significantly impacts the fill-in factor of non-zero elements in the factors. One such ordering strategy is nested dissection. I am wondering if it is possible to come up with the nested dissection ordering ahead of time given only the grid parameters (assume an M x N square finite difference grid with first order differences).

Edit I just found that there is code that does this: http://www.cise.ufl.edu/research/sparse/meshnd/

## 1 Answer

Yes. I recently wrote code to do exactly this.

Suppose you have an $n_x \times n_y$ grid, and that it is acceptable to have leaf nodes with 100 vertices. One can then define a recursive function where the arguments are:

• the dimensions and offsets of a rectangular subdomain
• a pointer into an array that will store the reordering

The routine then simply has to compute the product of the local dimensions to decide whether or not the domain is an acceptably small to be a leaf, and then, if so, write the leaf node natural indices (say $\mathrm{natural}(x,y)=x+y n_x$ for an $n_x \times n_y$ grid), otherwise, cut the largest subdomain dimension, recurse on the left and right pieces, and then write the separator natural indices.

• I guess my question is more of: Is nested dissection really just recursively slicing the space up in halves? Also, is the ordering to place the boundary indices ahead of each right and left half? I have never found a simple explanation of what is going on. – Victor Liu Dec 13 '11 at 11:51
• Yes, nested dissection is very straightforward, but you store the boundary indices after the left and right halves. The point is to ensure that the two subdomains are not directly connected, so, for finite differences, it is important to consider the size of your stencil when deciding on how thick the separator has to be. I recommend that you read Liu's overview of the multifrontal method and to make the connection that each separator is treated as a supernode. – Jack Poulson Dec 13 '11 at 15:31
• Ah yes, I realized that shortly after I commented and then made the edit. Thanks for the reference. – Victor Liu Dec 14 '11 at 4:35