Epetra_BLAS.cpp

Go to the documentation of this file.
00001 
00002 //@HEADER
00003 // ************************************************************************
00004 // 
00005 //               Epetra: Linear Algebra Services Package 
00006 //                 Copyright (2001) Sandia Corporation
00007 // 
00008 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00009 // license for use of this work by or on behalf of the U.S. Government.
00010 // 
00011 // This library is free software; you can redistribute it and/or modify
00012 // it under the terms of the GNU Lesser General Public License as
00013 // published by the Free Software Foundation; either version 2.1 of the
00014 // License, or (at your option) any later version.
00015 //  
00016 // This library is distributed in the hope that it will be useful, but
00017 // WITHOUT ANY WARRANTY; without even the implied warranty of
00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00019 // Lesser General Public License for more details.
00020 //  
00021 // You should have received a copy of the GNU Lesser General Public
00022 // License along with this library; if not, write to the Free Software
00023 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00024 // USA
00025 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 
00026 // 
00027 // ************************************************************************
00028 //@HEADER
00029 
00030 /* for INTEL_CXML, the second arg may need to be changed to 'one'.  If so
00031 the appropriate declaration of one will need to be added back into
00032 functions that include the macro:
00033 #if defined (INTEL_CXML)
00034   unsigned int one=1;
00035 #endif
00036 */
00037 
00038 #ifdef CHAR_MACRO
00039 #undef CHAR_MACRO
00040 #endif
00041 #if defined (INTEL_CXML)
00042 #define CHAR_MACRO(char_var) &char_var, 1
00043 #else
00044 #define CHAR_MACRO(char_var) &char_var
00045 #endif
00046 
00047 #include "Epetra_BLAS.h"
00048 #include "Epetra_BLAS_wrappers.h"
00049 
00050 
00051 //=============================================================================
00052 float Epetra_BLAS::ASUM(const int N, const float * X, const int INCX) const {
00053  return(SASUM_F77(&N, X, &INCX));
00054 }
00055 //=============================================================================
00056 double Epetra_BLAS::ASUM(const int N, const double * X, const int INCX) const {
00057   return(DASUM_F77(&N, X, &INCX));
00058 }
00059 //=============================================================================
00060 float Epetra_BLAS::DOT(const int N, const float * X, const float * Y, const int INCX, const int INCY) const {
00061   return(SDOT_F77(&N, X, &INCX, Y, &INCY));
00062 }
00063 //=============================================================================
00064 double Epetra_BLAS::DOT(const int N, const double * X, const double * Y, const int INCX, const int INCY) const {
00065   return(DDOT_F77(&N, X, &INCX, Y, &INCY));
00066 }
00067 //=============================================================================
00068 float Epetra_BLAS::NRM2(const int N, const float * X, const int INCX) const {
00069   return(SNRM2_F77(&N, X, &INCX));
00070 }
00071 //=============================================================================
00072 double Epetra_BLAS::NRM2(const int N, const double * X, const int INCX) const {
00073   return(DNRM2_F77(&N, X, &INCX));
00074 }
00075 //=============================================================================
00076 void Epetra_BLAS::SCAL(const int N, const float ALPHA, float * X, const int INCX) const {
00077   SSCAL_F77(&N, &ALPHA, X, &INCX);
00078   return;
00079 }
00080 //=============================================================================
00081 void Epetra_BLAS::SCAL(const int N, const double ALPHA, double * X, const int INCX) const {
00082   DSCAL_F77(&N, &ALPHA, X, &INCX);
00083   return;
00084 }
00085 //=============================================================================
00086 void Epetra_BLAS::COPY(const int N, const float * X, float * Y, const int INCX, const int INCY) const {
00087   SCOPY_F77(&N, X, &INCX, Y, &INCY);
00088   return;
00089 }
00090 //=============================================================================
00091 void Epetra_BLAS::COPY(const int N, const double * X, double * Y, const int INCX, const int INCY) const {
00092   DCOPY_F77(&N, X, &INCX, Y, &INCY);
00093   return;
00094 }
00095 //=============================================================================
00096 int Epetra_BLAS::IAMAX(const int N, const float * X, const int INCX) const {
00097   return(ISAMAX_F77(&N, X, &INCX)-1);// Note that we return base zero result
00098 }
00099 //=============================================================================
00100 int Epetra_BLAS::IAMAX(const int N, const double * X, const int INCX) const {
00101   return(IDAMAX_F77(&N, X, &INCX)-1);// Note that we return base zero result
00102 }
00103 //=============================================================================
00104 void Epetra_BLAS::AXPY(const int N, const float ALPHA, const float * X, float * Y, const int INCX, const int INCY) const {
00105   SAXPY_F77(&N, &ALPHA, X, &INCX, Y, &INCY);
00106 }
00107 //=============================================================================
00108 void Epetra_BLAS::AXPY(const int N, const double ALPHA, const double * X, double * Y, const int INCX, const int INCY) const {
00109   DAXPY_F77(&N, &ALPHA, X, &INCX, Y, &INCY);
00110 }
00111 //=============================================================================
00112 void Epetra_BLAS::GEMV(const char TRANS, const int M, const int N,
00113           const float ALPHA, const float * A, const int LDA, const float * X,
00114           const float BETA, float * Y, const int INCX, const int INCY) const {
00115   SGEMV_F77(CHAR_MACRO(TRANS), &M, &N, &ALPHA,
00116    A, &LDA, X, &INCX, &BETA, Y, &INCY);
00117 }
00118 //=============================================================================
00119 void Epetra_BLAS::GEMV(const char TRANS, const int M, const int N,
00120           const double ALPHA, const double * A, const int LDA, const double * X,
00121           const double BETA, double * Y, const int INCX, const int INCY) const {
00122   DGEMV_F77(CHAR_MACRO(TRANS), &M, &N, &ALPHA,
00123    A, &LDA, X, &INCX, &BETA, Y, &INCY);
00124 }
00125 
00126 //=============================================================================
00127 void Epetra_BLAS::GEMM(const char TRANSA, const char TRANSB, const int M, const int N, const int K,
00128            const float ALPHA, const float * A, const int LDA, const float * B,
00129            const int LDB, const float BETA, float * C, const int LDC) const {
00130 
00131   SGEMM_F77(CHAR_MACRO(TRANSA), CHAR_MACRO(TRANSB), &M, &N, &K, &ALPHA,
00132          A, &LDA, B, &LDB, &BETA, C, &LDC);
00133 }
00134 
00135 //=============================================================================
00136 void Epetra_BLAS::GEMM(const char TRANSA, const char TRANSB, const int M, const int N, const int K,
00137       const double ALPHA, const double * A, const int LDA, const double * B,
00138       const int LDB, const double BETA, double * C, const int LDC) const {
00139 
00140   DGEMM_F77(CHAR_MACRO(TRANSA), CHAR_MACRO(TRANSB), &M, &N, &K, &ALPHA,
00141    A, &LDA, B, &LDB, &BETA, C, &LDC);
00142 }
00143 //=============================================================================
00144 void Epetra_BLAS::SYMM(const char SIDE, const char UPLO, const int M, const int N,
00145       const float ALPHA, const float * A, const int LDA, const float * B,
00146       const int LDB, const float BETA, float * C, const int LDC) const {
00147 
00148   SSYMM_F77(CHAR_MACRO(SIDE), CHAR_MACRO(UPLO), &M, &N, &ALPHA,
00149          A, &LDA, B, &LDB, &BETA, C, &LDC);
00150 }
00151 
00152 //=============================================================================
00153 void Epetra_BLAS::SYMM(const char SIDE, const char UPLO, const int M, const int N,
00154       const double ALPHA, const double * A, const int LDA, const double * B,
00155       const int LDB, const double BETA, double * C, const int LDC) const {
00156 
00157   DSYMM_F77(CHAR_MACRO(SIDE), CHAR_MACRO(UPLO), &M, &N, &ALPHA,
00158          A, &LDA, B, &LDB, &BETA, C, &LDC);
00159 }
00160 //=============================================================================
00161 void Epetra_BLAS::TRMM(const char SIDE, const char UPLO, const char TRANSA, const char DIAG, const int M, const int N,
00162       const float ALPHA, const float * A, const int LDA, float * B,
00163       const int LDB) const {
00164 
00165   STRMM_F77(CHAR_MACRO(SIDE), CHAR_MACRO(UPLO), CHAR_MACRO(TRANSA), CHAR_MACRO(DIAG), 
00166     &M, &N, &ALPHA, A, &LDA, B, &LDB);
00167 }
00168 //=============================================================================
00169 void Epetra_BLAS::TRMM(const char SIDE, const char UPLO, const char TRANSA, const char DIAG, const int M, const int N,
00170       const double ALPHA, const double * A, const int LDA, double * B,
00171       const int LDB) const {
00172 
00173   DTRMM_F77(CHAR_MACRO(SIDE), CHAR_MACRO(UPLO), CHAR_MACRO(TRANSA), CHAR_MACRO(DIAG), 
00174       &M, &N, &ALPHA, A, &LDA, B, &LDB);
00175 }

Generated on Thu Sep 18 12:37:56 2008 for Epetra Package Browser (Single Doxygen Collection) by doxygen 1.3.9.1