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.