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); } }
internal static string Translate(this MultiplicationSide side) => (side == MultiplicationSide.Left) ? "L" : "R";