public virtual /**/ double quality()
        {
            return(alg.quality());
        }

        /**
         * Converts B and X into block matrices and calls the block matrix solve routine.
         *
         * @param B A matrix &real; <sup>m &times; p</sup>.  Not modified.
         * @param X A matrix &real; <sup>n &times; p</sup>, where the solution is written to.  Modified.
         */
        public virtual void solve(FMatrixRMaj B, FMatrixRMaj X)
        {
            blockB.reshape(B.numRows, B.numCols, false);
            blockX.reshape(X.numRows, X.numCols, false);
            MatrixOps_FDRB.convert(B, blockB);

            alg.solve(blockB, blockX);

            MatrixOps_FDRB.convert(blockX, X);
        }
        /**
         * Converts 'A' into a block matrix and call setA() on the block matrix solver.
         *
         * @param A The A matrix in the linear equation. Not modified. Reference saved.
         * @return true if it can solve the system.
         */
        public virtual bool setA(FMatrixRMaj A)
        {
            blockA.reshape(A.numRows, A.numCols, false);
            MatrixOps_FDRB.convert(A, blockA);

            return(alg.setA(blockA));
        }