*** empty log message ***
This commit is contained in:
parent
24c048d210
commit
9b69ed529f
13
fourindex.h
13
fourindex.h
@ -619,6 +619,11 @@ fourindex_dense<twoelectronrealmullikan,T,I>::fourindex_dense<twoelectronrealmul
|
|||||||
{
|
{
|
||||||
if(rhs.getsymmetry() != twoelectronrealmullikan ) laerror("fourindex_dense symmetry mismatch");
|
if(rhs.getsymmetry() != twoelectronrealmullikan ) laerror("fourindex_dense symmetry mismatch");
|
||||||
typename fourindex<I,T>::iterator p;
|
typename fourindex<I,T>::iterator p;
|
||||||
|
#ifdef DEBUG
|
||||||
|
unsigned long I = SMat_index_1(p->index.indiv.i,p->index.indiv.j);
|
||||||
|
unsigned long J = SMat_index_1(p->index.indiv.k,p->index.indiv.l);
|
||||||
|
if (I<0 || I>=(unsigned long)NRSMat<T>::nn || J<0 || J>=(unsigned long)NRSMat<T>::nn) laerror("fourindex_dense index out of range in constructor");
|
||||||
|
#endif
|
||||||
for(p=rhs.begin(); p!= rhs.end(); ++p) (*this)(p->index.indiv.i,p->index.indiv.j,p->index.indiv.k,p->index.indiv.l) = p->elem;
|
for(p=rhs.begin(); p!= rhs.end(); ++p) (*this)(p->index.indiv.i,p->index.indiv.j,p->index.indiv.k,p->index.indiv.l) = p->elem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -627,8 +632,12 @@ fourindex_dense<twoelectronrealmullikan,T,I>::fourindex_dense<twoelectronrealmul
|
|||||||
{
|
{
|
||||||
if(rhs.getsymmetry() != twoelectronrealmullikan ) laerror("fourindex_dense symmetry mismatch");
|
if(rhs.getsymmetry() != twoelectronrealmullikan ) laerror("fourindex_dense symmetry mismatch");
|
||||||
typename fourindex_ext<I,T>::iterator p;
|
typename fourindex_ext<I,T>::iterator p;
|
||||||
for(p=rhs.begin(); p!= rhs.end(); ++p) (*this)(p->index.indiv.i,p->index.indiv.j
|
#ifdef DEBUG
|
||||||
,p->index.indiv.k,p->index.indiv.l) = p->elem;
|
unsigned long I = SMat_index_1(p->index.indiv.i,p->index.indiv.j);
|
||||||
|
unsigned long J = SMat_index_1(p->index.indiv.k,p->index.indiv.l);
|
||||||
|
if (I<0 || I>=(unsigned long)NRSMat<T>::nn || J<0 || J>=(unsigned long)NRSMat<T>::nn) laerror("fourindex_dense index out of range in constructor");
|
||||||
|
#endif
|
||||||
|
for(p=rhs.begin(); p!= rhs.end(); ++p) (*this)(p->index.indiv.i,p->index.indiv.j ,p->index.indiv.k,p->index.indiv.l) = p->elem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,9 +21,6 @@ extern "C" {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _GLIBCPP_NO_TEMPLATE_EXPORT
|
|
||||||
# define export
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//forward declarations
|
//forward declarations
|
||||||
template<typename C> class NRVec;
|
template<typename C> class NRVec;
|
||||||
|
31
laerror.cc
31
laerror.cc
@ -3,6 +3,8 @@
|
|||||||
#include "laerror.h"
|
#include "laerror.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_TRACEBACK
|
#ifdef USE_TRACEBACK
|
||||||
#include "traceback.h"
|
#include "traceback.h"
|
||||||
@ -30,7 +32,7 @@ void laerror(const char *s1)
|
|||||||
//stub for f77 blas called from strassen routine
|
//stub for f77 blas called from strassen routine
|
||||||
extern "C" void xerbla_(const char name[6], int *n)
|
extern "C" void xerbla_(const char name[6], int *n)
|
||||||
{
|
{
|
||||||
char msg[128];
|
char msg[1024];
|
||||||
strcpy(msg,"LAPACK or BLAS error in routine ");
|
strcpy(msg,"LAPACK or BLAS error in routine ");
|
||||||
strncat(msg,name,6);
|
strncat(msg,name,6);
|
||||||
sprintf(msg+strlen(msg),": illegal value of parameter #%d",*n);
|
sprintf(msg+strlen(msg),": illegal value of parameter #%d",*n);
|
||||||
@ -38,3 +40,30 @@ laerror(msg);
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//with atlas-cblas another error routine is necessary
|
||||||
|
|
||||||
|
extern "C" void ATL_xerbla(int p, char *rout, char *form, ...)
|
||||||
|
{
|
||||||
|
char msg0[1024], *msg;
|
||||||
|
va_list argptr;
|
||||||
|
va_start(argptr, form);
|
||||||
|
strcpy(msg0,"ATLAS error\n");
|
||||||
|
msg=msg0+strlen(msg0);
|
||||||
|
if (p) {sprintf(msg, "Parameter %d to routine %s was incorrect\n", p, rout); msg+=strlen(msg);}
|
||||||
|
vsprintf(msg, form, argptr);
|
||||||
|
va_end(argptr);
|
||||||
|
laerror(msg0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int cblas_errprn(int ierr, int info, char *form, ...)
|
||||||
|
{
|
||||||
|
char msg0[1024], *msg;
|
||||||
|
va_list argptr;
|
||||||
|
va_start(argptr, form);
|
||||||
|
sprintf(msg0,"CBLAS error %d %d\n",ierr,info);
|
||||||
|
msg=msg0+strlen(msg0);
|
||||||
|
vsprintf(msg, form, argptr);
|
||||||
|
va_end(argptr);
|
||||||
|
laerror(msg0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
32
mat.cc
32
mat.cc
@ -779,8 +779,8 @@ void NRMat< complex<double> >::diagmultr(const NRVec< complex<double> > &rhs)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef oldversion
|
|
||||||
// Mat * Smat, decomposed to nn x Vec * Smat
|
// Mat * Smat, decomposed to nn x Vec * Smat
|
||||||
|
//NOTE: dsymm is not appropriate as it works on UNPACKED symmetric matrix
|
||||||
template<>
|
template<>
|
||||||
const NRMat<double>
|
const NRMat<double>
|
||||||
NRMat<double>::operator*(const NRSMat<double> &rhs) const
|
NRMat<double>::operator*(const NRSMat<double> &rhs) const
|
||||||
@ -811,36 +811,6 @@ NRMat< complex<double> >::operator*(const NRSMat< complex<double> > &rhs) const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
// Mat * Smat
|
|
||||||
template<>
|
|
||||||
const NRMat<double>
|
|
||||||
NRMat<double>::operator*(const NRSMat<double> &rhs) const
|
|
||||||
{
|
|
||||||
#ifdef DEBUG
|
|
||||||
if (mm != rhs.nrows()) laerror("incompatible dimension in Mat*SMat");
|
|
||||||
#endif
|
|
||||||
NRMat<double> result(nn, rhs.ncols());
|
|
||||||
cblas_dsymm(CblasRowMajor, CblasRight, CblasLower, nn, mm, 1., &rhs[0],mm,(*this)[0],mm,0.,result[0],mm);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<>
|
|
||||||
const NRMat< complex<double> >
|
|
||||||
NRMat< complex<double> >::operator*(const NRSMat< complex<double> > &rhs) const
|
|
||||||
{
|
|
||||||
#ifdef DEBUG
|
|
||||||
if (mm != rhs.nrows()) laerror("incompatible dimension in Mat*SMat");
|
|
||||||
#endif
|
|
||||||
NRMat< complex<double> > result(nn, rhs.ncols());
|
|
||||||
cblas_zhemm(CblasRowMajor, CblasRight, CblasLower, nn, mm, (void *)&CONE, &rhs[0],mm,(*this)[0],mm,(void *)&CZERO,result[0],mm);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// sum of rows
|
// sum of rows
|
||||||
|
@ -222,4 +222,5 @@ for(int i=1; i<N; ++i) for(int j=0; j<i; ++j) {double t=A[j*lda+i]; A[j*lda+i]=
|
|||||||
return INFO;
|
return INFO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
#define CBLAS_INDEX int
|
#define CBLAS_INDEX int
|
||||||
|
|
||||||
int cblas_errprn(int ierr, int info, char *form, ...);
|
int cblas_errprn(int ierr, int info, char *form, ...);
|
||||||
|
void ATL_xerbla(int p, char *rout, char *form, ...);
|
||||||
/*
|
/*
|
||||||
* ===========================================================================
|
* ===========================================================================
|
||||||
* Prototypes for level 1 BLAS functions (complex are recast as routines)
|
* Prototypes for level 1 BLAS functions (complex are recast as routines)
|
||||||
|
34
smat.cc
34
smat.cc
@ -61,6 +61,7 @@ LA_traits<T>::multiget(NN2,fd,v,dim);
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
NRSMat<T>::NRSMat(const NRMat<T> &rhs)
|
NRSMat<T>::NRSMat(const NRMat<T> &rhs)
|
||||||
{
|
{
|
||||||
|
nn=rhs.nrows();
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (nn != rhs.ncols()) laerror("attempt to convert non-square Mat to SMat");
|
if (nn != rhs.ncols()) laerror("attempt to convert non-square Mat to SMat");
|
||||||
#endif
|
#endif
|
||||||
@ -148,8 +149,10 @@ void NRSMat<T>::fscanf(FILE *f, const char *format)
|
|||||||
* BLAS specializations for double and complex<double>
|
* BLAS specializations for double and complex<double>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef oldversion
|
|
||||||
|
|
||||||
// SMat * Mat
|
// SMat * Mat
|
||||||
|
//NOTE: dsymm is not appropriate as it works on UNPACKED symmetric matrix
|
||||||
template<>
|
template<>
|
||||||
const NRMat<double> NRSMat<double>::operator*(const NRMat<double> &rhs) const
|
const NRMat<double> NRSMat<double>::operator*(const NRMat<double> &rhs) const
|
||||||
{
|
{
|
||||||
@ -178,35 +181,6 @@ NRSMat< complex<double> >::operator*(const NRMat< complex<double> > &rhs) const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
// SMat * Mat
|
|
||||||
template<>
|
|
||||||
const NRMat<double> NRSMat<double>::operator*(const NRMat<double> &rhs) const
|
|
||||||
{
|
|
||||||
#ifdef DEBUG
|
|
||||||
if (nn != rhs.nrows()) laerror("incompatible dimensions in SMat*Mat");
|
|
||||||
#endif
|
|
||||||
NRMat<double> result(nn, rhs.ncols());
|
|
||||||
cblas_dsymm(CblasRowMajor, CblasLeft, CblasLower, nn, rhs.ncols(), 1., (*this),nn, rhs[0],rhs.ncols(), 0.,result[0],rhs.ncols());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<>
|
|
||||||
const NRMat< complex<double> >
|
|
||||||
NRSMat< complex<double> >::operator*(const NRMat< complex<double> > &rhs) const
|
|
||||||
{
|
|
||||||
#ifdef DEBUG
|
|
||||||
if (nn != rhs.nrows()) laerror("incompatible dimensions in SMat*Mat");
|
|
||||||
#endif
|
|
||||||
NRMat< complex<double> > result(nn, rhs.ncols());
|
|
||||||
cblas_zhemm(CblasRowMajor, CblasLeft, CblasLower, nn, rhs.ncols(), &CONE, (*this),nn, rhs[0],rhs.ncols(), &CZERO,result[0],rhs.ncols());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// SMat * SMat
|
// SMat * SMat
|
||||||
|
@ -1309,7 +1309,6 @@ return *this;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef _GLIBCPP_NO_TEMPLATE_EXPORT
|
|
||||||
|
|
||||||
#define INSTANTIZE(T) \
|
#define INSTANTIZE(T) \
|
||||||
template SparseMat<T> & SparseMat<T>::oplusequal(const SparseMat<T> &rhs);\
|
template SparseMat<T> & SparseMat<T>::oplusequal(const SparseMat<T> &rhs);\
|
||||||
@ -1363,4 +1362,3 @@ INSTANTIZE(double)
|
|||||||
INSTANTIZE(complex<double>) //some functions are not OK for hermitean matrices, needs a revision!!!
|
INSTANTIZE(complex<double>) //some functions are not OK for hermitean matrices, needs a revision!!!
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
11
t.cc
11
t.cc
@ -1105,7 +1105,7 @@ for(int iter=1; iter<100 && norm>1e-8 ; ++iter)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(1)
|
if(0)
|
||||||
{
|
{
|
||||||
NRMat<double> a,b;
|
NRMat<double> a,b;
|
||||||
cin >>a;
|
cin >>a;
|
||||||
@ -1115,5 +1115,14 @@ cout <<b*b;
|
|||||||
cout <<(b*b-a).norm();
|
cout <<(b*b-a).norm();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(1)
|
||||||
|
{
|
||||||
|
NRSMat<double> a;
|
||||||
|
NRMat<double> b;
|
||||||
|
cin >>a>>b;
|
||||||
|
cout <<a*b;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user