58/* \brief Ifpack_LinePartitioner: A class to define partitions into a set of lines.
59
60These "line" partitions could then be used in to do block Gauss-Seidel smoothing, for instance.
61
62The current implementation uses a local (on processor) line detection in one of two forms.
63Both are inspired by the work of Mavriplis for convection-diffusion (AIAA Journal, Vol 37(10), 1999).
64
65
66Algorithm 1: Matrix entries
67
68Here we use the matrix entries, running lines across the "large" matrix entries, if they are sufficiently
69large relative to the small ones.
70
71
72Algorithms 2: Coordinates
73
74Here we use coordinate information to pick "close" points if they are sufficiently far away
75from the "far" points. We also make sure the line can never double back on itself, so that
76the associated sub-matrix could (in theory) be handed off to a fast triangular solver. This
77implementation doesn't actual do that, however.
78
79This implementation is deived from the related routine in ML.
80
81
82Supported parameters:
83 \c "partitioner: line type": "matrix entries" or "coordinates" (char *)
84 \c "partitioner: line detection threshold": if ||x_j - x_i||^2 < thresh * max_k||x_k - x_i||^2, then the points are close enough to line smooth (double)
85 \c "partitioner: x-coordinates": x coordinates of local nodes (double *)
86 \c "partitioner: y-coordinates": y coordinates of local nodes (double *)
87 \c "partitioner: z-coordinates": z coordinates of local nodes (double *)
88 \c "partitioner: PDE equations": number of equations per node (integer)