lapack.cpp

Go to the documentation of this file.
00001 /*
00002  * This program is free software; you can redistribute it and/or modify
00003  * it under the terms of the GNU General Public License as published by
00004  * the Free Software Foundation; either version 3 of the License, or
00005  * (at your option) any later version.
00006  *
00007  * Written (W) 1999-2009 Soeren Sonnenburg
00008  * Written (W) 1999-2008 Gunnar Raetsch
00009  * Written (W) 2006-2007 Mikio L. Braun
00010  * Written (W) 2008 Jochen Garcke
00011  * Copyright (C) 1999-2009 Fraunhofer Institute FIRST and Max-Planck-Society
00012  */
00013 
00014 #include "lib/config.h"
00015 
00016 #ifdef HAVE_LAPACK
00017 #include "lib/lapack.h"
00018 #include "lib/common.h"
00019 #include "lib/io.h"
00020 
00021 using namespace shogun;
00022 
00023 #if defined(HAVE_MKL) || defined(HAVE_ACML) 
00024 #define DSYEV dsyev
00025 #define DGESVD dgesvd
00026 #define DPOSV dposv
00027 #define DPOTRF dpotrf
00028 #else
00029 #define DSYEV dsyev_
00030 #define DGESVD dgesvd_
00031 #define DPOSV dposv_
00032 #define DPOTRF dpotrf_
00033 #endif
00034 
00035 #ifndef HAVE_ATLAS
00036 int clapack_dpotrf(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
00037         const int N, double *A, const int LDA)
00038 {
00039     char uplo = 'U';
00040     int info = 0;
00041     if (Order==CblasRowMajor)
00042     {//A is symmetric, we switch Uplo to get result for CblasRowMajor
00043         if (Uplo==CblasUpper)
00044             uplo='L';
00045     }
00046     else
00047         if (Uplo==CblasLower)
00048             uplo='L';
00049 #ifdef HAVE_ACML
00050     DPOTRF(uplo, N, A, LDA, &info);
00051 #else
00052     int n=N;
00053     int lda=LDA;
00054     DPOTRF(&uplo, &n, A, &lda, &info);
00055 #endif
00056     return info;
00057 }
00058 #undef DPOTRF
00059 
00060 /* DPOSV computes the solution to a real system of linear equations
00061  * A * X = B,
00062  * where A is an N-by-N symmetric positive definite matrix and X and B
00063  * are N-by-NRHS matrices
00064  */
00065 int clapack_dposv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
00066         const int N, const int NRHS, double *A, const int lda,
00067         double *B, const int ldb)
00068 {
00069     char uplo = 'U';
00070     int info=0;
00071     if (Order==CblasRowMajor)
00072     {//A is symmetric, we switch Uplo to achieve CblasColMajor
00073         if (Uplo==CblasUpper)
00074             uplo='L';
00075     }
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else
00077}
00076     else