###
MI25: Unsymmetric system: BiCG (BiConjugate Gradient) method

This routine uses the BiCG (BiConjugate Gradient) method to solve the \(n \times n\) unsymmetric linear system \(\mathbf{Ax} = \mathbf{b}\), optionally using preconditioning. If \(\mathbf{P} _L\), \(\mathbf{P} _R\) are the preconditioning matrices, the routine actually solves the preconditioned system

\[\bar{\mathbf{A}} \bar{\mathbf{x}} = \bar{\mathbf{b}} ,\]

with \(\bar{\mathbf{A}} = \mathbf{P} _L \mathbf{A}\mathbf{P} _R\) and \(\bar{\mathbf{b}} = \mathbf{P} _L \mathbf{b}\) and recovers the solution \(\mathbf{x} = \mathbf{P} _ R \bar{\mathbf{x}}\). If \(\mathbf{P} _L = \mathbf{I}\), preconditioning is said to be from the right, if \(\mathbf{P} _R = \mathbf{I}\), it is said to be from the left, and otherwise it is from both sides. Reverse communication is used for preconditioning operations \(\mathbf{Pz}\) and \(\mathbf{P} ^ T \mathbf{z}\), where \(\mathbf{P} = \mathbf{P} _L \mathbf{P} _R\), and for matrix-vector products of the form \(\mathbf{Az}\) and \(\mathbf{A} ^ T \mathbf{z}\).