*** empty log message ***
This commit is contained in:
parent
40469916fa
commit
d8563301d4
@ -29,9 +29,10 @@ return s;
|
||||
|
||||
std::istream & operator>>(std::istream &s, bitvector &x)
|
||||
{
|
||||
bool a;
|
||||
x.copyonwrite();
|
||||
for(unsigned int i=0; i<x.size(); ++i) {s >>a; x.assign(i,a);}
|
||||
std::string str;
|
||||
s >> str;
|
||||
x.resize(str.size());
|
||||
for(unsigned int i=0; i<x.size(); ++i) {x.assign(i,str[i]!='0');}
|
||||
return s;
|
||||
}
|
||||
|
||||
|
42
configure.ac
42
configure.ac
@ -17,11 +17,39 @@ AC_PROG_CC
|
||||
#AC_PROG_RANLIB obsoleted by libtool
|
||||
AC_LANG(C++)
|
||||
|
||||
# Check for Intel MKL first
|
||||
#user has to e.g. setenv LDFLAGS "-L/opt/intel/composer_xe_2013_sp1.1.106/mkl/lib/intel64/"
|
||||
#and setenv CXXFLAGS "-I/opt/intel/composer_xe_2013_sp1.1.106/mkl/include/"
|
||||
MKLLIB=""
|
||||
mkl_present=1
|
||||
AC_CHECK_LIB([mkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread], [dgemm_], [
|
||||
echo "MKL LIBRARY FOUND"
|
||||
] , [
|
||||
mkl_present=0
|
||||
])
|
||||
|
||||
AC_CHECK_HEADER(mkl_cblas.h, [echo "MKL INCLUDE FOUND"], [mkl_present=0])
|
||||
|
||||
if test $mkl_present == 1
|
||||
then
|
||||
MKLLIB="-Wl,--start-group -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -Wl,--end-group -lpthread"
|
||||
AC_SUBST([MKLLIB])
|
||||
CLAPACKOPT=-DNONCLAPACK
|
||||
AC_SUBST([CLAPACKOPT])
|
||||
MKLOPT="-DHAS_MKL"
|
||||
AC_SUBST([MKLOPT])
|
||||
else
|
||||
echo "MKL LIBRARY OR HEADER NOT FOUND, will try ATLAS next!"
|
||||
fi
|
||||
|
||||
|
||||
# Checks for mandatory libraries.
|
||||
ATLASLIB=""
|
||||
|
||||
if test $mkl_present == 0
|
||||
then
|
||||
AC_CHECK_LIB([atlas], [ATL_zgemv],ATLASLIB="-lblas -latlas", [
|
||||
echo "ATLAS not found, I hope you are using some other (more) efficient BLAS!"
|
||||
echo "ATLAS not found, I hope you are using some other efficient BLAS!"
|
||||
])
|
||||
AC_SUBST([ATLASLIB])
|
||||
|
||||
@ -30,7 +58,7 @@ AC_CHECK_LIB([blas], [dgemm_],BLASLIB="-lblas", [
|
||||
exit
|
||||
],[$ATLASLIB])
|
||||
AC_SUBST([BLASLIB])
|
||||
|
||||
fi
|
||||
|
||||
MATPTROPT=""
|
||||
AC_ARG_ENABLE([matptr],[ --enable-matptr switch to double** matrix representation (CUDA incompatible) [[default=no]]],
|
||||
@ -43,6 +71,11 @@ AC_ARG_ENABLE([matptr],[ --enable-matptr switch to double** matrix representa
|
||||
|
||||
|
||||
#cblas and clapack available?
|
||||
CBLASLIB=""
|
||||
CBLASOPT=""
|
||||
|
||||
if test $mkl_present == 0
|
||||
then
|
||||
AC_CHECK_LIB([cblas], [cblas_ddot], [CBLASLIB="-lcblas"], [CBLASOPT=-DNONCBLAS],[$ATLASLIB])
|
||||
AC_CHECK_HEADER([cblas.h],,[CBLASOPT=-DNONCBLAS CBLASLIB=""], AC_INCLUDES_DEFAULT)
|
||||
AC_SUBST([CBLASLIB])
|
||||
@ -59,6 +92,8 @@ AC_CHECK_LIB([lapack], [clapack_dgesv], , [CLAPACKOPT=-DNONCLAPACK],[$CBLASLIB $
|
||||
AC_CHECK_HEADER([clapack.h],,[CLAPACKOPT=-DNONCLAPACK], AC_INCLUDES_DEFAULT)
|
||||
AC_SUBST([CLAPACKOPT])
|
||||
|
||||
fi
|
||||
#MKL end
|
||||
|
||||
#CUDA available? link with cublas and avoid cblas and clapack then...
|
||||
AC_CHECK_LIB([cublas], [cublasInit], [MATPTROPT="" NVCC=nvcc NVCCFLAGS="-O -arch sm_20" CUDALIBS=-lcublas CUDAOPT=-DCUDALA CBLASOPT=-DNONCBLAS CLAPACKOPT=-DNONCLAPACK CBLASLIB=""], [CUDALIB="" CUDAOPT=""])
|
||||
@ -138,7 +173,8 @@ echo "**************************************************************************
|
||||
echo "The LA library has now been configured. You may run make; make check; make install"
|
||||
echo "Please make sure that the generated Makefile employs a proper version of optimized"
|
||||
echo "BLAS/LAPACK library. If not, re-run configure with CXXFLAGS and LDFLAGS options "
|
||||
echo "set to '-I path' and '-L path' for your preferred BLAS/LAPACK library version. "
|
||||
echo "set to '-I/path' and '-L/path' for your preferred BLAS/LAPACK library version. "
|
||||
echo "Either use export or specify these options on the command line ./configure ..... "
|
||||
echo "In addition, similarly you might set include and link paths for Nvidia CUBLAS. "
|
||||
echo "Use ./configure --disable-optimize CXXFLAGS='' LDFLAGS='' for a fast compile. "
|
||||
echo "Use --enable-fotran64int to link with BLAS and LAPACK using 64-bit integers. "
|
||||
|
11
davidson.h
11
davidson.h
@ -34,6 +34,7 @@ namespace LA {
|
||||
//Note that for efficiency in a direct CI case the diagonalof() should cache its result
|
||||
|
||||
|
||||
//@@@ for large krylov spaces >200 it can occur 'convergence problem in sygv/syev in diagonalize()'
|
||||
//@@@options: left eigenvectors by matrix transpose, overridesymmetric (for nrmat)
|
||||
//@@@small matrix gdiagonalize - shift complex roots up (option to gdiagonalize?)
|
||||
//@@@test gdiagonalize whether it sorts the roots and what for complex ones
|
||||
@ -73,7 +74,7 @@ else
|
||||
|
||||
int i,j;
|
||||
|
||||
if(maxkrylov<maxit) maxit=maxkrylov;
|
||||
//NO, we will restart, maxit can be bigger if(maxkrylov<maxit) maxit=maxkrylov;
|
||||
if(nroots>=maxkrylov) nroots =maxkrylov-1;
|
||||
int nroot=0;
|
||||
int oldnroot;
|
||||
@ -139,7 +140,9 @@ if(it>0) //if this is the first iteration just need to diagonalise the matrix
|
||||
smallV=smallH;
|
||||
NRMat<T> smallSwork=smallS;
|
||||
if(bigmat.issymmetric())
|
||||
{
|
||||
diagonalize(smallV,r,1,1,krylovsize+1,&smallSwork,1); //for symmetric matrix they have already been sorted to ascending order in lapack
|
||||
}
|
||||
else
|
||||
{
|
||||
NRVec<T> ri(krylovsize+1),beta(krylovsize+1);
|
||||
@ -160,7 +163,7 @@ for(int iroot=0; iroot<=std::min(krylovsize,nroots-1); ++iroot)
|
||||
if(test>eps) nroot=std::min(nroot,iroot);
|
||||
if(verbose && iroot<=std::max(oldnroot,nroot))
|
||||
{
|
||||
std::cout <<"Davidson: iter="<<it <<" dim="<<krylovsize<<" root="<<iroot<<" energy="<<r[iroot]<<"\n";
|
||||
std::cout <<"Davidson: iter="<<it <<" dim="<<krylovsize<<" root="<<iroot<<" eigenvalue="<<r[iroot]<<"\n";
|
||||
std::cout.flush();
|
||||
}
|
||||
}
|
||||
@ -169,7 +172,7 @@ if(verbose && oldnroot!=nroot) {std::cout <<"root no. "<<oldnroot<<" converged\n
|
||||
if (nroot>=nroots) goto converged;
|
||||
if (it==maxit-1) break; //not converged
|
||||
|
||||
if (krylovsize==maxkrylov) //restart, krylov space exceeded
|
||||
if (krylovsize==maxkrylov-1) //restart, krylov space exceeded
|
||||
{
|
||||
if(nroot!=0) {flag=1; goto finished;}
|
||||
smallH=0;
|
||||
@ -180,7 +183,7 @@ if (krylovsize==maxkrylov) //restart, krylov space exceeded
|
||||
if(!incore) s0->get(vec2,i);
|
||||
vec1.axpy(smallV(i,0),incore?v0[i]:vec2);
|
||||
}
|
||||
s0->put(vec1,0);
|
||||
if(!incore) s0->put(vec1,0);
|
||||
vec1.normalize();
|
||||
krylovsize = 0;
|
||||
continue;
|
||||
|
@ -49,7 +49,11 @@
|
||||
#include "noncblas.h"
|
||||
#else
|
||||
extern "C" {
|
||||
#ifdef HAS_MKL
|
||||
#include "mkl_cblas.h"
|
||||
#else
|
||||
#include "cblas.h"
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
7
mat.h
7
mat.h
@ -45,6 +45,8 @@ public:
|
||||
#endif
|
||||
friend class NRVec<T>;
|
||||
friend class NRSMat<T>;
|
||||
friend class NRMat_from1<T>;
|
||||
friend class NRSMat_from1<T>;
|
||||
|
||||
//! standard destructor
|
||||
~NRMat();
|
||||
@ -1222,6 +1224,7 @@ class NRMat_from1 : public NRMat<T> {
|
||||
public:
|
||||
NRMat_from1(): NRMat<T>() {};
|
||||
explicit NRMat_from1(const int n): NRMat<T>(n) {};
|
||||
explicit NRMat_from1(const NRSMat_from1<T> &rhs) : NRMat<T>(rhs) {};
|
||||
NRMat_from1(const NRMat<T> &rhs): NRMat<T>(rhs) {};//!< be able to convert the parent class transparently to this
|
||||
NRMat_from1(const int n, const int m): NRMat<T>(n, m) {};
|
||||
NRMat_from1(const T &a, const int n, const int m): NRMat<T>(a, n, m) {};
|
||||
@ -1342,6 +1345,10 @@ void NRMat<T>::moveto(const GPUID dest) {
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/***************************************************************************//**
|
||||
* generate operators: Mat + a, a + Mat, Mat * a
|
||||
* corresponding macro is defined in vec.h
|
||||
|
28
noncblas.cc
28
noncblas.cc
@ -188,7 +188,7 @@ void cblas_zdotc_sub(const int N, const void *X, const int incX, const void *Y,
|
||||
|
||||
|
||||
extern "C" void FORNAME(dspmv) (const char *uplo, const FINT *n, const double *alpha, const double *ap, const double *x, const FINT *incx, const double *beta, double *y, const FINT *incy);
|
||||
void cblas_dspmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_dspmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const double alpha, const double *Ap,
|
||||
const double *X, const int incX,
|
||||
const double beta, double *Y, const int incY)
|
||||
@ -208,7 +208,7 @@ void cblas_dspmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
|
||||
|
||||
extern "C" void FORNAME(zhpmv) (const char *uplo, const FINT *n, const void *alpha, const void *ap, const void *x, const FINT *incx, const void *beta, void *y, const FINT *incy);
|
||||
void cblas_zhpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_zhpmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const void *alpha, const void *Ap,
|
||||
const void *X, const int incX,
|
||||
const void *beta, void *Y, const int incY)
|
||||
@ -230,7 +230,7 @@ void cblas_zhpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
//Level 2 and Level 3 on general matrices - take into account the transposed storage of matrices in Fortran and C
|
||||
|
||||
extern "C" void FORNAME(dger) (const FINT *m, const FINT *n, const double *alpha, const double *x, const FINT *incx, const double *y, const FINT *incy, double *a, const FINT *lda);
|
||||
void cblas_dger(const enum CBLAS_ORDER Order, const int M, const int N,
|
||||
void cblas_dger(const CBLAS_ORDER Order, const int M, const int N,
|
||||
const double alpha, const double *X, const int incX,
|
||||
const double *Y, const int incY, double *A, const int lda)
|
||||
{
|
||||
@ -249,7 +249,7 @@ void cblas_dger(const enum CBLAS_ORDER Order, const int M, const int N,
|
||||
}
|
||||
|
||||
extern "C" void FORNAME(zgerc) (const FINT *m, const FINT *n, const void *alpha, const void *x, const FINT *incx, const void *y, const FINT *incy, void *a, const FINT *lda);
|
||||
void cblas_zgerc(const enum CBLAS_ORDER Order, const int M, const int N,
|
||||
void cblas_zgerc(const CBLAS_ORDER Order, const int M, const int N,
|
||||
const void *alpha, const void *X, const int incX,
|
||||
const void *Y, const int incY, void *A, const int lda)
|
||||
{
|
||||
@ -273,7 +273,7 @@ p= (complex<double> *) Y; for(int i=0; i<N; ++i) {p->imag() = -p->imag(); p+= in
|
||||
|
||||
|
||||
extern "C" void FORNAME(zgeru) (const FINT *m, const FINT *n, const void *alpha, const void *x, const FINT *incx, const void *y, const FINT *incy, void *a, const FINT *lda);
|
||||
void cblas_zgeru(const enum CBLAS_ORDER Order, const int M, const int N,
|
||||
void cblas_zgeru(const CBLAS_ORDER Order, const int M, const int N,
|
||||
const void *alpha, const void *X, const int incX,
|
||||
const void *Y, const int incY, void *A, const int lda)
|
||||
{
|
||||
@ -292,8 +292,8 @@ void cblas_zgeru(const enum CBLAS_ORDER Order, const int M, const int N,
|
||||
|
||||
|
||||
extern "C" void FORNAME(dgemm) (const char *transa, const char *transb, const FINT *m, const FINT *n, const FINT *k, const double *alpha, const double *a, const FINT *lda, const double *b, const FINT *ldb, const double *beta, double *c, const FINT *ldc);
|
||||
void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
|
||||
void cblas_dgemm(const CBLAS_ORDER Order, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_TRANSPOSE TransB, const int M, const int N,
|
||||
const int K, const double alpha, const double *A,
|
||||
const int lda, const double *B, const int ldb,
|
||||
const double beta, double *C, const int ldc)
|
||||
@ -318,8 +318,8 @@ void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA
|
||||
}
|
||||
|
||||
extern "C" void FORNAME(zgemm) (const char *transa, const char *transb, const FINT *m, const FINT *n, const FINT *k, const void *alpha, const void *a, const FINT *lda, const void *b, const FINT *ldb, const void *beta, void *c, const FINT *ldc);
|
||||
void cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
|
||||
void cblas_zgemm(const CBLAS_ORDER Order, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_TRANSPOSE TransB, const int M, const int N,
|
||||
const int K, const void *alpha, const void *A,
|
||||
const int lda, const void *B, const int ldb,
|
||||
const void *beta, void *C, const int ldc)
|
||||
@ -345,8 +345,8 @@ void cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA
|
||||
|
||||
|
||||
extern "C" void FORNAME(dgemv) (const char *TRANS, const FINT *M, const FINT *N, const double *ALPHA, const double *A, const FINT *LDA, const double *X, const FINT *INCX, const double *BETA, double *Y, const FINT *INCY);
|
||||
void cblas_dgemv(const enum CBLAS_ORDER Order,
|
||||
const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
void cblas_dgemv(const CBLAS_ORDER Order,
|
||||
const CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
const double alpha, const double *A, const int lda,
|
||||
const double *X, const int incX, const double beta,
|
||||
double *Y, const int incY)
|
||||
@ -371,8 +371,8 @@ void cblas_dgemv(const enum CBLAS_ORDER Order,
|
||||
|
||||
|
||||
extern "C" void FORNAME(zgemv) (const char *TRANS, const FINT *M, const FINT *N, const void *ALPHA, const void *A, const FINT *LDA, const void *X, const FINT *INCX, const void *BETA, void *Y, const FINT *INCY);
|
||||
void cblas_zgemv(const enum CBLAS_ORDER Order,
|
||||
const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
void cblas_zgemv(const CBLAS_ORDER Order,
|
||||
const CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
const void *X, const int incX, const void *beta,
|
||||
void *Y, const int incY)
|
||||
@ -446,7 +446,7 @@ CBLAS_INDEX cblas_izamin(const int N, const void *X, const int incX) {
|
||||
//allocate auxiliary storage and transpose input and output quantities to fortran/C order
|
||||
extern "C" void FORNAME(dgesv) (const FINT *N, const FINT *NRHS, double *A, const FINT *LDA, FINT *IPIV, double *B, const FINT *LDB, FINT *INFO);
|
||||
|
||||
int clapack_dgesv(const enum CBLAS_ORDER Order, const int N, const int NRHS,
|
||||
int clapack_dgesv(const CBLAS_ORDER Order, const int N, const int NRHS,
|
||||
double *A, const int lda, int *ipiv,
|
||||
double *B, const int ldb)
|
||||
{
|
||||
|
340
noncblas.h
340
noncblas.h
@ -191,197 +191,197 @@ void cblas_zdrot(const int N, void *X, const int incX, void *Y, const int incY,
|
||||
/*
|
||||
* Routines with standard 4 prefixes (S, D, C, Z)
|
||||
*/
|
||||
void cblas_sgemv(const enum CBLAS_ORDER Order,
|
||||
const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
void cblas_sgemv(const CBLAS_ORDER Order,
|
||||
const CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
const float alpha, const float *A, const int lda,
|
||||
const float *X, const int incX, const float beta,
|
||||
float *Y, const int incY);
|
||||
void cblas_sgbmv(const enum CBLAS_ORDER Order,
|
||||
const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
void cblas_sgbmv(const CBLAS_ORDER Order,
|
||||
const CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
const int KL, const int KU, const float alpha,
|
||||
const float *A, const int lda, const float *X,
|
||||
const int incX, const float beta, float *Y, const int incY);
|
||||
void cblas_strmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_strmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const float *A, const int lda,
|
||||
float *X, const int incX);
|
||||
void cblas_stbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_stbmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const int K, const float *A, const int lda,
|
||||
float *X, const int incX);
|
||||
void cblas_stpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_stpmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const float *Ap, float *X, const int incX);
|
||||
void cblas_strsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_strsv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const float *A, const int lda, float *X,
|
||||
const int incX);
|
||||
void cblas_stbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_stbsv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const int K, const float *A, const int lda,
|
||||
float *X, const int incX);
|
||||
void cblas_stpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_stpsv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const float *Ap, float *X, const int incX);
|
||||
|
||||
void cblas_dgemv(const enum CBLAS_ORDER Order,
|
||||
const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
void cblas_dgemv(const CBLAS_ORDER Order,
|
||||
const CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
const double alpha, const double *A, const int lda,
|
||||
const double *X, const int incX, const double beta,
|
||||
double *Y, const int incY);
|
||||
void cblas_dgbmv(const enum CBLAS_ORDER Order,
|
||||
const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
void cblas_dgbmv(const CBLAS_ORDER Order,
|
||||
const CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
const int KL, const int KU, const double alpha,
|
||||
const double *A, const int lda, const double *X,
|
||||
const int incX, const double beta, double *Y, const int incY);
|
||||
void cblas_dtrmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_dtrmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const double *A, const int lda,
|
||||
double *X, const int incX);
|
||||
void cblas_dtbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_dtbmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const int K, const double *A, const int lda,
|
||||
double *X, const int incX);
|
||||
void cblas_dtpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_dtpmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const double *Ap, double *X, const int incX);
|
||||
void cblas_dtrsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_dtrsv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const double *A, const int lda, double *X,
|
||||
const int incX);
|
||||
void cblas_dtbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_dtbsv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const int K, const double *A, const int lda,
|
||||
double *X, const int incX);
|
||||
void cblas_dtpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_dtpsv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const double *Ap, double *X, const int incX);
|
||||
|
||||
void cblas_cgemv(const enum CBLAS_ORDER Order,
|
||||
const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
void cblas_cgemv(const CBLAS_ORDER Order,
|
||||
const CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
const void *X, const int incX, const void *beta,
|
||||
void *Y, const int incY);
|
||||
void cblas_cgbmv(const enum CBLAS_ORDER Order,
|
||||
const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
void cblas_cgbmv(const CBLAS_ORDER Order,
|
||||
const CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
const int KL, const int KU, const void *alpha,
|
||||
const void *A, const int lda, const void *X,
|
||||
const int incX, const void *beta, void *Y, const int incY);
|
||||
void cblas_ctrmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_ctrmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const void *A, const int lda,
|
||||
void *X, const int incX);
|
||||
void cblas_ctbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_ctbmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const int K, const void *A, const int lda,
|
||||
void *X, const int incX);
|
||||
void cblas_ctpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_ctpmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const void *Ap, void *X, const int incX);
|
||||
void cblas_ctrsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_ctrsv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const void *A, const int lda, void *X,
|
||||
const int incX);
|
||||
void cblas_ctbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_ctbsv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const int K, const void *A, const int lda,
|
||||
void *X, const int incX);
|
||||
void cblas_ctpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_ctpsv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const void *Ap, void *X, const int incX);
|
||||
|
||||
void cblas_zgemv(const enum CBLAS_ORDER Order,
|
||||
const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
void cblas_zgemv(const CBLAS_ORDER Order,
|
||||
const CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
const void *X, const int incX, const void *beta,
|
||||
void *Y, const int incY);
|
||||
void cblas_zgbmv(const enum CBLAS_ORDER Order,
|
||||
const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
void cblas_zgbmv(const CBLAS_ORDER Order,
|
||||
const CBLAS_TRANSPOSE TransA, const int M, const int N,
|
||||
const int KL, const int KU, const void *alpha,
|
||||
const void *A, const int lda, const void *X,
|
||||
const int incX, const void *beta, void *Y, const int incY);
|
||||
void cblas_ztrmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_ztrmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const void *A, const int lda,
|
||||
void *X, const int incX);
|
||||
void cblas_ztbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_ztbmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const int K, const void *A, const int lda,
|
||||
void *X, const int incX);
|
||||
void cblas_ztpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_ztpmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const void *Ap, void *X, const int incX);
|
||||
void cblas_ztrsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_ztrsv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const void *A, const int lda, void *X,
|
||||
const int incX);
|
||||
void cblas_ztbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_ztbsv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const int K, const void *A, const int lda,
|
||||
void *X, const int incX);
|
||||
void cblas_ztpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
|
||||
void cblas_ztpsv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
|
||||
const int N, const void *Ap, void *X, const int incX);
|
||||
|
||||
|
||||
/*
|
||||
* Routines with S and D prefixes only
|
||||
*/
|
||||
void cblas_ssymv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_ssymv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const float alpha, const float *A,
|
||||
const int lda, const float *X, const int incX,
|
||||
const float beta, float *Y, const int incY);
|
||||
void cblas_ssbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_ssbmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const int K, const float alpha, const float *A,
|
||||
const int lda, const float *X, const int incX,
|
||||
const float beta, float *Y, const int incY);
|
||||
void cblas_sspmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_sspmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const float alpha, const float *Ap,
|
||||
const float *X, const int incX,
|
||||
const float beta, float *Y, const int incY);
|
||||
void cblas_sger(const enum CBLAS_ORDER Order, const int M, const int N,
|
||||
void cblas_sger(const CBLAS_ORDER Order, const int M, const int N,
|
||||
const float alpha, const float *X, const int incX,
|
||||
const float *Y, const int incY, float *A, const int lda);
|
||||
void cblas_ssyr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_ssyr(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const float alpha, const float *X,
|
||||
const int incX, float *A, const int lda);
|
||||
void cblas_sspr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_sspr(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const float alpha, const float *X,
|
||||
const int incX, float *Ap);
|
||||
void cblas_ssyr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_ssyr2(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const float alpha, const float *X,
|
||||
const int incX, const float *Y, const int incY, float *A,
|
||||
const int lda);
|
||||
void cblas_sspr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_sspr2(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const float alpha, const float *X,
|
||||
const int incX, const float *Y, const int incY, float *A);
|
||||
|
||||
void cblas_dsymv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_dsymv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const double alpha, const double *A,
|
||||
const int lda, const double *X, const int incX,
|
||||
const double beta, double *Y, const int incY);
|
||||
void cblas_dsbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_dsbmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const int K, const double alpha, const double *A,
|
||||
const int lda, const double *X, const int incX,
|
||||
const double beta, double *Y, const int incY);
|
||||
void cblas_dspmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_dspmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const double alpha, const double *Ap,
|
||||
const double *X, const int incX,
|
||||
const double beta, double *Y, const int incY);
|
||||
void cblas_dger(const enum CBLAS_ORDER Order, const int M, const int N,
|
||||
void cblas_dger(const CBLAS_ORDER Order, const int M, const int N,
|
||||
const double alpha, const double *X, const int incX,
|
||||
const double *Y, const int incY, double *A, const int lda);
|
||||
void cblas_dsyr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_dsyr(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const double alpha, const double *X,
|
||||
const int incX, double *A, const int lda);
|
||||
void cblas_dspr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_dspr(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const double alpha, const double *X,
|
||||
const int incX, double *Ap);
|
||||
void cblas_dsyr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_dsyr2(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const double alpha, const double *X,
|
||||
const int incX, const double *Y, const int incY, double *A,
|
||||
const int lda);
|
||||
void cblas_dspr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_dspr2(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const double alpha, const double *X,
|
||||
const int incX, const double *Y, const int incY, double *A);
|
||||
|
||||
@ -389,65 +389,65 @@ void cblas_dspr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
/*
|
||||
* Routines with C and Z prefixes only
|
||||
*/
|
||||
void cblas_chemv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_chemv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const void *alpha, const void *A,
|
||||
const int lda, const void *X, const int incX,
|
||||
const void *beta, void *Y, const int incY);
|
||||
void cblas_chbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_chbmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const int K, const void *alpha, const void *A,
|
||||
const int lda, const void *X, const int incX,
|
||||
const void *beta, void *Y, const int incY);
|
||||
void cblas_chpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_chpmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const void *alpha, const void *Ap,
|
||||
const void *X, const int incX,
|
||||
const void *beta, void *Y, const int incY);
|
||||
void cblas_cgeru(const enum CBLAS_ORDER Order, const int M, const int N,
|
||||
void cblas_cgeru(const CBLAS_ORDER Order, const int M, const int N,
|
||||
const void *alpha, const void *X, const int incX,
|
||||
const void *Y, const int incY, void *A, const int lda);
|
||||
void cblas_cgerc(const enum CBLAS_ORDER Order, const int M, const int N,
|
||||
void cblas_cgerc(const CBLAS_ORDER Order, const int M, const int N,
|
||||
const void *alpha, const void *X, const int incX,
|
||||
const void *Y, const int incY, void *A, const int lda);
|
||||
void cblas_cher(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_cher(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const float alpha, const void *X, const int incX,
|
||||
void *A, const int lda);
|
||||
void cblas_chpr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_chpr(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const float alpha, const void *X,
|
||||
const int incX, void *A);
|
||||
void cblas_cher2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N,
|
||||
void cblas_cher2(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo, const int N,
|
||||
const void *alpha, const void *X, const int incX,
|
||||
const void *Y, const int incY, void *A, const int lda);
|
||||
void cblas_chpr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N,
|
||||
void cblas_chpr2(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo, const int N,
|
||||
const void *alpha, const void *X, const int incX,
|
||||
const void *Y, const int incY, void *Ap);
|
||||
|
||||
void cblas_zhemv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_zhemv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const void *alpha, const void *A,
|
||||
const int lda, const void *X, const int incX,
|
||||
const void *beta, void *Y, const int incY);
|
||||
void cblas_zhbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_zhbmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const int K, const void *alpha, const void *A,
|
||||
const int lda, const void *X, const int incX,
|
||||
const void *beta, void *Y, const int incY);
|
||||
void cblas_zhpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_zhpmv(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const void *alpha, const void *Ap,
|
||||
const void *X, const int incX,
|
||||
const void *beta, void *Y, const int incY);
|
||||
void cblas_zgeru(const enum CBLAS_ORDER Order, const int M, const int N,
|
||||
void cblas_zgeru(const CBLAS_ORDER Order, const int M, const int N,
|
||||
const void *alpha, const void *X, const int incX,
|
||||
const void *Y, const int incY, void *A, const int lda);
|
||||
void cblas_zgerc(const enum CBLAS_ORDER Order, const int M, const int N,
|
||||
void cblas_zgerc(const CBLAS_ORDER Order, const int M, const int N,
|
||||
const void *alpha, const void *X, const int incX,
|
||||
const void *Y, const int incY, void *A, const int lda);
|
||||
void cblas_zher(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_zher(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const double alpha, const void *X, const int incX,
|
||||
void *A, const int lda);
|
||||
void cblas_zhpr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
void cblas_zhpr(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const int N, const double alpha, const void *X,
|
||||
const int incX, void *A);
|
||||
void cblas_zher2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N,
|
||||
void cblas_zher2(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo, const int N,
|
||||
const void *alpha, const void *X, const int incX,
|
||||
const void *Y, const int incY, void *A, const int lda);
|
||||
void cblas_zhpr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N,
|
||||
void cblas_zhpr2(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo, const int N,
|
||||
const void *alpha, const void *X, const int incX,
|
||||
const void *Y, const int incY, void *Ap);
|
||||
|
||||
@ -460,123 +460,123 @@ void cblas_zhpr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const
|
||||
/*
|
||||
* Routines with standard 4 prefixes (S, D, C, Z)
|
||||
*/
|
||||
void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
|
||||
void cblas_sgemm(const CBLAS_ORDER Order, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_TRANSPOSE TransB, const int M, const int N,
|
||||
const int K, const float alpha, const float *A,
|
||||
const int lda, const float *B, const int ldb,
|
||||
const float beta, float *C, const int ldc);
|
||||
void cblas_ssymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const int M, const int N,
|
||||
void cblas_ssymm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const int M, const int N,
|
||||
const float alpha, const float *A, const int lda,
|
||||
const float *B, const int ldb, const float beta,
|
||||
float *C, const int ldc);
|
||||
void cblas_ssyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
void cblas_ssyrk(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
const float alpha, const float *A, const int lda,
|
||||
const float beta, float *C, const int ldc);
|
||||
void cblas_ssyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
void cblas_ssyr2k(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
const float alpha, const float *A, const int lda,
|
||||
const float *B, const int ldb, const float beta,
|
||||
float *C, const int ldc);
|
||||
void cblas_strmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const int M, const int N,
|
||||
void cblas_strmm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_DIAG Diag, const int M, const int N,
|
||||
const float alpha, const float *A, const int lda,
|
||||
float *B, const int ldb);
|
||||
void cblas_strsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const int M, const int N,
|
||||
void cblas_strsm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_DIAG Diag, const int M, const int N,
|
||||
const float alpha, const float *A, const int lda,
|
||||
float *B, const int ldb);
|
||||
|
||||
void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
|
||||
void cblas_dgemm(const CBLAS_ORDER Order, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_TRANSPOSE TransB, const int M, const int N,
|
||||
const int K, const double alpha, const double *A,
|
||||
const int lda, const double *B, const int ldb,
|
||||
const double beta, double *C, const int ldc);
|
||||
void cblas_dsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const int M, const int N,
|
||||
void cblas_dsymm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const int M, const int N,
|
||||
const double alpha, const double *A, const int lda,
|
||||
const double *B, const int ldb, const double beta,
|
||||
double *C, const int ldc);
|
||||
void cblas_dsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
void cblas_dsyrk(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
const double alpha, const double *A, const int lda,
|
||||
const double beta, double *C, const int ldc);
|
||||
void cblas_dsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
void cblas_dsyr2k(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
const double alpha, const double *A, const int lda,
|
||||
const double *B, const int ldb, const double beta,
|
||||
double *C, const int ldc);
|
||||
void cblas_dtrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const int M, const int N,
|
||||
void cblas_dtrmm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_DIAG Diag, const int M, const int N,
|
||||
const double alpha, const double *A, const int lda,
|
||||
double *B, const int ldb);
|
||||
void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const int M, const int N,
|
||||
void cblas_dtrsm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_DIAG Diag, const int M, const int N,
|
||||
const double alpha, const double *A, const int lda,
|
||||
double *B, const int ldb);
|
||||
|
||||
void cblas_cgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
|
||||
void cblas_cgemm(const CBLAS_ORDER Order, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_TRANSPOSE TransB, const int M, const int N,
|
||||
const int K, const void *alpha, const void *A,
|
||||
const int lda, const void *B, const int ldb,
|
||||
const void *beta, void *C, const int ldc);
|
||||
void cblas_csymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const int M, const int N,
|
||||
void cblas_csymm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const int M, const int N,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
const void *B, const int ldb, const void *beta,
|
||||
void *C, const int ldc);
|
||||
void cblas_csyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
void cblas_csyrk(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
const void *beta, void *C, const int ldc);
|
||||
void cblas_csyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
void cblas_csyr2k(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
const void *B, const int ldb, const void *beta,
|
||||
void *C, const int ldc);
|
||||
void cblas_ctrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const int M, const int N,
|
||||
void cblas_ctrmm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_DIAG Diag, const int M, const int N,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
void *B, const int ldb);
|
||||
void cblas_ctrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const int M, const int N,
|
||||
void cblas_ctrsm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_DIAG Diag, const int M, const int N,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
void *B, const int ldb);
|
||||
|
||||
void cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
|
||||
void cblas_zgemm(const CBLAS_ORDER Order, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_TRANSPOSE TransB, const int M, const int N,
|
||||
const int K, const void *alpha, const void *A,
|
||||
const int lda, const void *B, const int ldb,
|
||||
const void *beta, void *C, const int ldc);
|
||||
void cblas_zsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const int M, const int N,
|
||||
void cblas_zsymm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const int M, const int N,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
const void *B, const int ldb, const void *beta,
|
||||
void *C, const int ldc);
|
||||
void cblas_zsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
void cblas_zsyrk(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
const void *beta, void *C, const int ldc);
|
||||
void cblas_zsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
void cblas_zsyr2k(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
const void *B, const int ldb, const void *beta,
|
||||
void *C, const int ldc);
|
||||
void cblas_ztrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const int M, const int N,
|
||||
void cblas_ztrmm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_DIAG Diag, const int M, const int N,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
void *B, const int ldb);
|
||||
void cblas_ztrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
|
||||
const enum CBLAS_DIAG Diag, const int M, const int N,
|
||||
void cblas_ztrsm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
|
||||
const CBLAS_DIAG Diag, const int M, const int N,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
void *B, const int ldb);
|
||||
|
||||
@ -584,31 +584,31 @@ void cblas_ztrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
/*
|
||||
* Routines with prefixes C and Z only
|
||||
*/
|
||||
void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const int M, const int N,
|
||||
void cblas_chemm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const int M, const int N,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
const void *B, const int ldb, const void *beta,
|
||||
void *C, const int ldc);
|
||||
void cblas_cherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
void cblas_cherk(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
const float alpha, const void *A, const int lda,
|
||||
const float beta, void *C, const int ldc);
|
||||
void cblas_cher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
void cblas_cher2k(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
const void *B, const int ldb, const float beta,
|
||||
void *C, const int ldc);
|
||||
void cblas_zhemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
|
||||
const enum CBLAS_UPLO Uplo, const int M, const int N,
|
||||
void cblas_zhemm(const CBLAS_ORDER Order, const CBLAS_SIDE Side,
|
||||
const CBLAS_UPLO Uplo, const int M, const int N,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
const void *B, const int ldb, const void *beta,
|
||||
void *C, const int ldc);
|
||||
void cblas_zherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
void cblas_zherk(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
const double alpha, const void *A, const int lda,
|
||||
const double beta, void *C, const int ldc);
|
||||
void cblas_zher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
|
||||
const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
void cblas_zher2k(const CBLAS_ORDER Order, const CBLAS_UPLO Uplo,
|
||||
const CBLAS_TRANSPOSE Trans, const int N, const int K,
|
||||
const void *alpha, const void *A, const int lda,
|
||||
const void *B, const int ldb, const double beta,
|
||||
void *C, const int ldc);
|
||||
@ -678,11 +678,15 @@ int cblas_errprn(int ierr, int info, char *form, ...);
|
||||
#define NONCLAPACK_H
|
||||
|
||||
#ifndef NONCBLAS
|
||||
#include <cblas.h>
|
||||
#ifdef HAS_MKL
|
||||
#include "mkl_cblas.h"
|
||||
#else
|
||||
#include "cblas.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*from clapack.h*/
|
||||
int clapack_dgesv(const enum CBLAS_ORDER Order, const int N, const int NRHS,
|
||||
int clapack_dgesv(const CBLAS_ORDER Order, const int N, const int NRHS,
|
||||
double *A, const int lda, int *ipiv,
|
||||
double *B, const int ldb);
|
||||
#endif
|
||||
|
@ -1651,6 +1651,11 @@ double r=0;
|
||||
return r;
|
||||
}
|
||||
|
||||
inline double trace2(const NRMat<double> &a, const NRSMat<double> &b, const bool diagscaled)
|
||||
{
|
||||
return trace2(b,a,diagscaled);
|
||||
}
|
||||
|
||||
|
||||
//Cholesky interface
|
||||
extern "C" void FORNAME(dpotrf)(const char *UPLO, const FINT *N, double *A, const FINT *LDA, FINT *INFO);
|
||||
|
@ -88,14 +88,14 @@ extern const NRVec<T> diagofproduct(const NRMat<T> &a, const NRMat<T> &b,\
|
||||
extern T trace2(const NRMat<T> &a, const NRMat<T> &b, bool trb=0); \
|
||||
extern T trace2(const NRSMat<T> &a, const NRSMat<T> &b, const bool diagscaled=0);\
|
||||
extern T trace2(const NRSMat<T> &a, const NRMat<T> &b, const bool diagscaled=0);\
|
||||
extern T trace2(const NRMat<T> &a, const NRSMat<T> &b, const bool diagscaled=0);\
|
||||
extern void linear_solve(NRMat<T> &a, NRMat<T> *b, T *det=0,int n=0); /*solve Ax^T=b^T (b is nrhs x n) */ \
|
||||
extern void linear_solve(NRSMat<T> &a, NRMat<T> *b, T *det=0, int n=0); /*solve Ax^T=b^T (b is nrhs x n) */\
|
||||
extern void linear_solve(NRMat<T> &a, NRVec<T> &b, double *det=0, int n=0); \
|
||||
extern void linear_solve(NRSMat<T> &a, NRVec<T> &b, double *det=0, int n=0); \
|
||||
extern void diagonalize(NRMat<T> &a, NRVec<LA_traits<T>::normtype> &w, const bool eivec=1, const bool corder=1, int n=0, NRMat<T> *b=NULL, const int itype=1); \
|
||||
extern void diagonalize(NRSMat<T> &a, NRVec<LA_traits<T>::normtype> &w, NRMat<T> *v, const bool corder=1, int n=0, NRSMat<T> *b=NULL, const int itype=1);\
|
||||
extern void singular_decomposition(NRMat<T> &a, NRMat<T> *u, NRVec<T> &s,\
|
||||
NRMat<T> *v, const bool corder=1, int m=0, int n=0);
|
||||
extern void singular_decomposition(NRMat<T> &a, NRMat<T> *u, NRVec<LA_traits<T>::normtype> &s, NRMat<T> *v, const bool vnotdagger=0, int m=0, int n=0);
|
||||
|
||||
/*NOTE!!! all versions of diagonalize DESTROY A and generalized diagonalize also B matrix */
|
||||
|
||||
|
56
t.cc
56
t.cc
@ -352,18 +352,33 @@ if(0)
|
||||
{
|
||||
NRMat<double> a;
|
||||
cin >>a ;
|
||||
NRMat<double> b=a.transpose();
|
||||
NRMat<double> abak=a;
|
||||
NRMat<double> u(a.nrows(),a.nrows()),v(a.ncols(),a.ncols());
|
||||
NRVec<double>s(a.ncols());
|
||||
singular_decomposition(a,&u,s,&v);
|
||||
//singular_decomposition(a,NULL,s,NULL); //this does not work when linked with static version of lapack, works with .so.3 version (from suse distrib)
|
||||
NRVec<double>s(a.ncols()<a.nrows()?a.ncols():a.nrows());
|
||||
singular_decomposition(a,&u,s,&v,0);
|
||||
cout <<u;
|
||||
cout <<s;
|
||||
NRMat<double> sdiag(0., u.ncols(),v.nrows());
|
||||
sdiag.diagonalset(s);
|
||||
cout <<sdiag;
|
||||
cout <<v;
|
||||
//singular_decomposition(b,&v,s,&u);
|
||||
//cout <<v;
|
||||
//cout <<s;
|
||||
//cout <<u;
|
||||
cout << "Error "<<(u*sdiag*v-abak).norm()<<endl;
|
||||
}
|
||||
|
||||
if(0)
|
||||
{
|
||||
NRMat<complex<double> > a;
|
||||
cin >>a ;
|
||||
NRMat<complex<double> > abak=a;
|
||||
NRMat<complex<double> > u(a.nrows(),a.nrows()),v(a.ncols(),a.ncols());
|
||||
NRVec<double>s(a.ncols()<a.nrows()?a.ncols():a.nrows());
|
||||
singular_decomposition(a,&u,s,&v,0);
|
||||
cout <<u;
|
||||
NRMat<complex<double> > sdiag(0., u.ncols(),v.nrows());
|
||||
NRVec<complex<double> > ss = s;
|
||||
sdiag.diagonalset(ss);
|
||||
cout <<sdiag;
|
||||
cout <<v;
|
||||
cout << "Error "<<(u*sdiag*v-abak).norm()<<endl;
|
||||
}
|
||||
|
||||
if(0)
|
||||
@ -1579,7 +1594,7 @@ cin >>n;
|
||||
NRMat<complex<double> > a(n,n);
|
||||
a.randomize(1);
|
||||
for(int i=0; i<n; ++i) for(int j=0; j<i; ++j) {a(i,j)=0.;}
|
||||
for(int i=0; i<n; ++i) {a(i,i).imag()=0.; if(a(i,i).real()<0) a(i,i).real() *= -1;}
|
||||
for(int i=0; i<n; ++i) {a(i,i).imag(0.); if(a(i,i).real()<0) a(i,i).real(-a(i,i).real());}
|
||||
cout <<a;
|
||||
NRMat<complex<double> > bb=a.transpose(true)*a;
|
||||
NRMat<complex<double> > cc(bb);
|
||||
@ -1642,7 +1657,7 @@ cin >>n;
|
||||
NRMat<complex<double> > a(n,n);
|
||||
a.randomize(1);
|
||||
for(int i=0; i<n; ++i) for(int j=0; j<i; ++j) {a(i,j)=0.;}
|
||||
for(int i=0; i<n; ++i) {a(i,i).imag() = 0.; if(a(i,i).real()<0) a(i,i).real() *= -10; else a(i,i).real() *= 10.;}
|
||||
for(int i=0; i<n; ++i) {a(i,i).imag(0.); if(a(i,i).real()<0) a(i,i).real(-10.*a(i,i).real()); else a(i,i).real(10.*a(i,i).real());}
|
||||
if(n<100)cout <<a;
|
||||
NRMat<complex<double> > bb=a.transpose(true)*a;
|
||||
SparseSMat<complex<double> > cc(bb);
|
||||
@ -1760,7 +1775,7 @@ cout <<"error = "<<(r2-NRMat<complex<double> >(r)).norm()<<endl;
|
||||
*/
|
||||
|
||||
|
||||
if(1)
|
||||
if(0)
|
||||
{
|
||||
NRMat<complex<double> > m;
|
||||
ifstream f("libormat");
|
||||
@ -1825,6 +1840,23 @@ cout <<"eigenvalue error = "<<err<<endl;
|
||||
|
||||
}
|
||||
|
||||
if(0)
|
||||
{
|
||||
NRMat<double> a;
|
||||
cin >>a ;
|
||||
double det=determinant_destroy(a);
|
||||
cout << "det= "<<det<<endl;
|
||||
}
|
||||
|
||||
if(1)
|
||||
{
|
||||
bitvector v(3);
|
||||
v.assign(0,0);
|
||||
v.assign(1,1);
|
||||
v.assign(2,0);
|
||||
cin >>v;
|
||||
cout <<v;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user