Once the parallel matrix and the communication structures have been created, it is possible to solve the sparse linear system. One of two routines can be called to do this: (1) BSpar_solve() for symmetric positive definite matrices, and (2) BSpar_isolve() for symmetric indefinite matrices.
BSpar_solve() can be used repeatedly to solve systems of linear equations with one or with multiple right-hand sides. Details on the arguments used can be found in the ``man'' page.
BSpar_isolve() is actually set up to solve the system
, where
and
are symmetric matrices,
is a real constant,
is the solution value, and
is the right-hand
side. BlockSolve is setup to take advantage of
being NULL or
being zero. BSpar_isolve() uses the SYMMLQ algorithm
which requires that the preconditioner, if any, be positive definite.
Symmetric diagonal scaling is not possible for an indefinite matrix,
so one of the other preconditioners must be used. The restriction that
the preconditioner be positive definite is too restrictive for many
problems, but we know of no general-purpose alternative to SYMMLQ that
takes advantage of symmetry while allowing an indefinite preconditioner.
If the user wishes to solve with more than one right-hand side simultaneously, then the routine BSsetup_block() must be called to modify the communication structure to accommodate the multiple right-hand sides.