示例#1
0
void F77WRAP_GETRF(const F77_INTEGER *M, const F77_INTEGER *N,
                   TYPE *A, const F77_INTEGER *lda, F77_INTEGER *ipiv0,
                   F77_INTEGER *info)
{
   const int MN = Mmin(*M,*N);
   int i;
   #ifdef ATL_FunkyInts
      int *ipiv;
      ipiv = malloc(MN*sizeof(int));
      ATL_assert(ipiv);
   #else
      #define ipiv ipiv0
   #endif
   *info = ATL_getrf(AtlasColMajor, *M, *N, A, *lda, ipiv);
   #ifdef ATL_FunkyInts
      for (i=0; i != MN; i++) ipiv0[i] = ipiv[i] + 1;
      free(ipiv);
   #else
      for (i=0; i != MN; i++) ipiv[i]++;
   #endif
}
示例#2
0
void F77WRAP_GESV(const F77_INTEGER *N, const F77_INTEGER *NRHS,
                  TYPE *A, const F77_INTEGER *lda, F77_INTEGER *ipiv0,
                  TYPE *B, const F77_INTEGER *ldb, F77_INTEGER *info)
{
   const int n = *N;
   int i;
   #ifdef ATL_FunkyInts
      int *ipiv;
      ipiv = malloc(n*sizeof(int));
      ATL_assert(ipiv);
   #else
      #define ipiv ipiv0
   #endif

   *info = ATL_getrf(AtlasColMajor, *N, *N, A, *lda, ipiv);
   if (*info == 0)
      ATL_getrs(AtlasColMajor, AtlasNoTrans, *N, *NRHS, A, *lda, ipiv, B, *ldb);
   #ifdef ATL_FunkyInts
      for (i=0; i != n; i++) ipiv0[i] = ipiv[i] + 1;
      free(ipiv);
   #else
      for (i=0; i != n; i++) ipiv[i]++;
   #endif
}
示例#3
0
int clapack_sgetrf(const enum CBLAS_ORDER Order, const int M, const int N,
                   float *A, const int lda, int *ipiv)
/*
 * Computes one of two LU factorizations based on the setting of the Order
 * parameter, as follows:
 * ----------------------------------------------------------------------------
 *                       Order == CblasColMajor
 * Column-major factorization of form
 *   A = P * L * U
 * where P is a row-permutation matrix, L is lower triangular with unit
 * diagonal elements (lower trapazoidal if M > N), and U is upper triangular
 * (upper trapazoidal if M < N).
 *
 * ----------------------------------------------------------------------------
 *                       Order == CblasRowMajor
 * Row-major factorization of form
 *   A = P * L * U
 * where P is a column-permutation matrix, L is lower triangular (lower
 * trapazoidal if M > N), and U is upper triangular with unit diagonals (upper
 * trapazoidal if M < N).
 *
 * ============================================================================
 * Let IERR be the return value of the function:
 *    If IERR == 0, successful exit.
 *    If (IERR < 0) the -IERR argument had an illegal value
 *    If (IERR > 0 && Order == CblasColMajor)
 *       U(i-1,i-1) is exactly zero.  The factorization has been completed,
 *       but the factor U is exactly singular, and division by zero will
 *       occur if it is used to solve a system of equations.
 *    If (IERR > 0 && Order == CblasRowMajor)
 *       L(i-1,i-1) is exactly zero.  The factorization has been completed,
 *       but the factor L is exactly singular, and division by zero will
 *       occur if it is used to solve a system of equations.
 */
{
   int ierr=0;
   if (Order != CblasRowMajor && Order != CblasColMajor)
   {
      ierr = -1;
      cblas_xerbla(1, "clapack_sgetrf",
                   "Order must be %d or %d, but is set to %d\n",
                   CblasRowMajor, CblasColMajor, Order);
   }
   if (M < 0)
   {
      ierr = -2;
      cblas_xerbla(2, "clapack_sgetrf",
                   "M cannot be less than zero 0,; is set to %d.\n", M);
   }
   if (N < 0)
   {
      ierr = -3;
      cblas_xerbla(3, "clapack_sgetrf",
                   "N cannot be less than zero 0,; is set to %d.\n", N);
   }
   if (Order == CblasColMajor)
   {
      if (lda < M || lda < 1)
      {
         ierr = -6;
         cblas_xerbla(6, "clapack_sgetrf",
                      "lda must be >= MAX(M,1): lda=%d M=%d\n", lda, M);
      }
   }
   else
   {
      if (lda < N || lda < 1)
      {
         ierr = -6;
         cblas_xerbla(6, "clapack_sgetrf",
                      "lda must be >= MAX(N,1): lda=%d N=%d\n", lda, N);
      }
   }
   if (!ierr) ierr = ATL_getrf(Order, M, N, A, lda, ipiv);
   return(ierr);
}