//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);
Пример #6
0
 /// <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);
Пример #7
0
 /// <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);
Пример #8
0
 /// <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);