internal void Dormqr(MultiplicationSide sideQ, TransposeMatrix transposeQ, int numRowsC, int numColsC, int numReflectors,
                             double[] matrixQ, int offsetQ, int leadingDimQ, double[] reflectorScalarsT, int offsetT,
                             double[] matrixC, int offsetC, int leadingDimC)
        {
            int info = DefaultInfo;

            QueryWorkspaceAndExecute((work, offsetWork, lWork) => Provider.Dormqr(
                                         sideQ.Translate(), transposeQ.Translate(), numRowsC, numColsC, numReflectors, matrixQ, offsetQ, leadingDimQ,
                                         reflectorScalarsT, offsetT, matrixC, offsetC, leadingDimC, work, offsetWork, lWork, ref info));

            if (info < 0) // info can only be 0 or negative
            {
                // The indices of negative pivots must take into account the offset parameters
                if (info == -7)
                {
                    info = -8;
                }
                else if (info == -8)
                {
                    info = -9;
                }
                else if (info == -9)
                {
                    info = -11;
                }
                else if (info == -10)
                {
                    info = -13;
                }
                ProcessNegativeInfo(info);
            }
        }
Пример #2
0
 internal static string Translate(this MultiplicationSide side) => (side == MultiplicationSide.Left) ? "L" : "R";