//internal void DgetriWithoutCheckingPivot(int orderA, double[] factorizedMatrixA, int offsetA, int leadingDimA, // int[] rowExchangesP, int offsetP) //{ // int info = DefaultInfo; // QueryWorkspaceAndExecute((work, offsetWork, lWork) => Provider.Dgetri( // orderA, factorizedMatrixA, offsetA, leadingDimA, rowExchangesP, offsetP, work, offsetWork, lWork, ref info)); // CheckNegativeInfo(info); //} internal void Dgetrs(TransposeMatrix transposeA, int orderA, int numRhs, double[] factorizedMatrixA, int offsetA, int leadingDimA, int[] rowExchangesP, int offsetP, double[] rhsB, int offsetB, int leadingDimB) { int info = DefaultInfo; Provider.Dgetrs(transposeA.Translate(), orderA, numRhs, factorizedMatrixA, offsetA, leadingDimA, rowExchangesP, offsetP, rhsB, offsetB, leadingDimB, 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 == -5) { info = -6; } else if (info == -6) { info = -7; } else if (info == -7) { info = -9; } else if (info == -8) { info = -11; } ProcessNegativeInfo(info); } }
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); } }
/// <summary> /// See http://www.dotnumerics.com/NumericalLibraries/LinearAlgebra/CSharpCodeFiles/dgemv.aspx /// </summary> public void Dgemv(TransposeMatrix transA, int m, int n, double alpha, double[] a, int offsetA, int ldA, double[] x, int offsetX, int incX, double beta, double[] y, int offsetY, int incY) => dgemv.Run(transA.Translate(), m, n, alpha, a, offsetA, ldA, x, offsetX, incX, beta, ref y, offsetY, incY);
/// <summary> /// See http://www.dotnumerics.com/NumericalLibraries/LinearAlgebra/CSharpCodeFiles/dgemm.aspx /// </summary> public void Dgemm(TransposeMatrix transA, TransposeMatrix transB, int m, int n, int k, double alpha, double[] a, int offsetA, int ldA, double[] b, int offsetB, int ldB, double beta, double[] c, int offsetC, int ldC) => dgemm.Run(transA.Translate(), transB.Translate(), m, n, k, alpha, a, offsetA, ldA, b, offsetB, ldB, beta, ref c, offsetC, ldC);
/// <summary> /// See http://www.dotnumerics.com/NumericalLibraries/LinearAlgebra/CSharpCodeFiles/dtrsv.aspx /// </summary> public void Dtrsv(StoredTriangle uplo, TransposeMatrix transA, DiagonalValues diag, int n, double[] a, int offsetA, int ldA, double[] x, int offsetX, int incX) => dtrsv.Run(uplo.Translate(), transA.Translate(), diag.Translate(), n, a, offsetA, ldA, ref x, offsetX, incX);
/// <summary> /// See https://software.intel.com/en-us/mkl-developer-reference-fortran-trsv#D8733073-F041-4AA1-B82C-123DFA993AD7 /// </summary> public void Dtrsv(StoredTriangle uplo, TransposeMatrix transA, DiagonalValues diag, int n, double[] a, int offsetA, int ldA, double[] x, int offsetX, int incX) => Blas.Dtrsv(uplo.Translate(), transA.Translate(), diag.Translate(), ref n, ref a[offsetA], ref ldA, ref x[offsetX], ref incX);
/// <summary> /// See https://software.intel.com/en-us/mkl-developer-reference-fortran-gemv#443228C4-626E-48A7-B230-26FB061EACF2 /// </summary> public void Dgemv(TransposeMatrix transA, int m, int n, double alpha, double[] a, int offsetA, int ldA, double[] x, int offsetX, int incX, double beta, double[] y, int offsetY, int incY) => Blas.Dgemv(transA.Translate(), ref m, ref n, ref alpha, ref a[offsetA], ref ldA, ref x[offsetX], ref incX, ref beta, ref y[offsetY], ref incY);
/// <summary> /// See https://software.intel.com/en-us/mkl-developer-reference-fortran-gemm#90EAA001-D4C8-4211-9EA0-B62F5ADE9CF0 /// </summary> public void Dgemm(TransposeMatrix transA, TransposeMatrix transB, int m, int n, int k, double alpha, double[] a, int offsetA, int ldA, double[] b, int offsetB, int ldB, double beta, double[] c, int offsetC, int ldC) => Blas.Dgemm(transA.Translate(), transB.Translate(), ref m, ref n, ref k, ref alpha, ref a[offsetA], ref ldA, ref b[offsetB], ref ldB, ref beta, ref c[offsetC], ref ldC);