*** empty log message ***
This commit is contained in:
parent
58d7d5bd50
commit
5f84d14ce2
15
nonclass.cc
15
nonclass.cc
@ -178,7 +178,7 @@ void linear_solve(NRMat<double> &A, NRMat<double> *B, double *det, int n)
|
|||||||
if(n<=0) n=A.nrows(); //default - whole matrix
|
if(n<=0) n=A.nrows(); //default - whole matrix
|
||||||
if (n==A.nrows() && B && A.nrows() != B->ncols() || B && n>B->ncols() ||n>A.nrows()) laerror("incompatible matrices in linear_solve()");
|
if (n==A.nrows() && B && A.nrows() != B->ncols() || B && n>B->ncols() ||n>A.nrows()) laerror("incompatible matrices in linear_solve()");
|
||||||
if(B) B->copyonwrite();
|
if(B) B->copyonwrite();
|
||||||
linear_solve_do(A,B?(double *)B:NULL,B?B->nrows() : 0, B?B->ncols():A.nrows(), det,n);
|
linear_solve_do(A,B?(*B)[0]:NULL,B?B->nrows() : 0, B?B->ncols():A.nrows(), det,n);
|
||||||
}
|
}
|
||||||
|
|
||||||
void linear_solve(NRMat<double> &A, NRVec<double> &B, double *det, int n)
|
void linear_solve(NRMat<double> &A, NRVec<double> &B, double *det, int n)
|
||||||
@ -186,7 +186,7 @@ void linear_solve(NRMat<double> &A, NRVec<double> &B, double *det, int n)
|
|||||||
if(n<=0) n=A.nrows(); //default - whole matrix
|
if(n<=0) n=A.nrows(); //default - whole matrix
|
||||||
if(n==A.nrows() && A.nrows() != B.size() || n>B.size()||n>A.nrows() ) laerror("incompatible matrices in linear_solve()");
|
if(n==A.nrows() && A.nrows() != B.size() || n>B.size()||n>A.nrows() ) laerror("incompatible matrices in linear_solve()");
|
||||||
B.copyonwrite();
|
B.copyonwrite();
|
||||||
linear_solve_do(A,(double *)B,1,A.nrows(),det,n);
|
linear_solve_do(A,&B[0],1,A.nrows(),det,n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -425,7 +425,7 @@ if(gdbeta) {tmp=gdbeta[i]; gdbeta[i]=gdbeta[j]; gdbeta[j]=tmp;}
|
|||||||
|
|
||||||
void gdiagonalize(NRMat<double> &a, NRVec<double> &wr, NRVec<double> &wi,
|
void gdiagonalize(NRMat<double> &a, NRVec<double> &wr, NRVec<double> &wi,
|
||||||
NRMat<double> *vl, NRMat<double> *vr, const bool corder, int n,
|
NRMat<double> *vl, NRMat<double> *vr, const bool corder, int n,
|
||||||
const int sorttype, const bool biorthonormalize,
|
const int sorttype, const int biorthonormalize,
|
||||||
NRMat<double> *b, NRVec<double> *beta)
|
NRMat<double> *b, NRVec<double> *beta)
|
||||||
{
|
{
|
||||||
if(n<=0) n = a.nrows();
|
if(n<=0) n = a.nrows();
|
||||||
@ -470,7 +470,7 @@ void gdiagonalize(NRMat<double> &a, NRVec<double> &wr, NRVec<double> &wi,
|
|||||||
else FORNAME(dgeev)(&jobvr, &jobvl, &n, a, &lda, wr, wi, vr?vr[0]:(double *)0,
|
else FORNAME(dgeev)(&jobvr, &jobvl, &n, a, &lda, wr, wi, vr?vr[0]:(double *)0,
|
||||||
&ldvr, vl?vl[0]:(double *)0, &ldvl, work, &lwork, &r);
|
&ldvr, vl?vl[0]:(double *)0, &ldvl, work, &lwork, &r);
|
||||||
delete[] work;
|
delete[] work;
|
||||||
//@@@
|
|
||||||
//cout <<"TEST dgeev\n"<<wr<<wi<<*vr<<*vl<<endl;
|
//cout <<"TEST dgeev\n"<<wr<<wi<<*vr<<*vl<<endl;
|
||||||
|
|
||||||
if (r < 0) laerror("illegal argument in ggev/geev in gdiagonalize()");
|
if (r < 0) laerror("illegal argument in ggev/geev in gdiagonalize()");
|
||||||
@ -487,9 +487,8 @@ void gdiagonalize(NRMat<double> &a, NRVec<double> &wr, NRVec<double> &wi,
|
|||||||
//calculate scaling paramter
|
//calculate scaling paramter
|
||||||
double tmp;
|
double tmp;
|
||||||
tmp=cblas_ddot(n,(*vl)[i],1,(*vr)[i], 1);
|
tmp=cblas_ddot(n,(*vl)[i],1,(*vr)[i], 1);
|
||||||
tmp=1./sqrt(abs(tmp));
|
if(biorthonormalize==1) cblas_dscal(n,1./tmp,(*vl)[i],1);
|
||||||
cblas_dscal(n,tmp,(*vl)[i],1);
|
if(biorthonormalize==2) cblas_dscal(n,1./tmp,(*vr)[i],1);
|
||||||
cblas_dscal(n,tmp,(*vr)[i],1);
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
else //complex pair
|
else //complex pair
|
||||||
@ -567,7 +566,7 @@ void gdiagonalize(NRMat<double> &a, NRVec<double> &wr, NRVec<double> &wi,
|
|||||||
|
|
||||||
void gdiagonalize(NRMat<double> &a, NRVec< complex<double> > &w,
|
void gdiagonalize(NRMat<double> &a, NRVec< complex<double> > &w,
|
||||||
NRMat< complex<double> >*vl, NRMat< complex<double> > *vr,
|
NRMat< complex<double> >*vl, NRMat< complex<double> > *vr,
|
||||||
const bool corder, int n, const int sorttype, const bool biorthonormalize,
|
const bool corder, int n, const int sorttype, const int biorthonormalize,
|
||||||
NRMat<double> *b, NRVec<double> *beta)
|
NRMat<double> *b, NRVec<double> *beta)
|
||||||
{
|
{
|
||||||
if(!corder) laerror("gdiagonalize() corder 0 not implemented");
|
if(!corder) laerror("gdiagonalize() corder 0 not implemented");
|
||||||
|
@ -105,11 +105,11 @@ declare_la(complex<double>)
|
|||||||
// Separate declarations
|
// Separate declarations
|
||||||
//general nonsymmetric matrix and generalized diagonalization
|
//general nonsymmetric matrix and generalized diagonalization
|
||||||
extern void gdiagonalize(NRMat<double> &a, NRVec<double> &wr, NRVec<double> &wi,
|
extern void gdiagonalize(NRMat<double> &a, NRVec<double> &wr, NRVec<double> &wi,
|
||||||
NRMat<double> *vl, NRMat<double> *vr, const bool corder=1, int n=0, const int sorttype=0, const bool biorthonormalize=0,
|
NRMat<double> *vl, NRMat<double> *vr, const bool corder=1, int n=0, const int sorttype=0, const int biorthonormalize=0,
|
||||||
NRMat<double> *b=NULL, NRVec<double> *beta=NULL);
|
NRMat<double> *b=NULL, NRVec<double> *beta=NULL);
|
||||||
extern void gdiagonalize(NRMat<double> &a, NRVec< complex<double> > &w,
|
extern void gdiagonalize(NRMat<double> &a, NRVec< complex<double> > &w,
|
||||||
NRMat< complex<double> >*vl, NRMat< complex<double> > *vr,
|
NRMat< complex<double> >*vl, NRMat< complex<double> > *vr,
|
||||||
const bool corder=1, int n=0, const int sorttype=0, const bool biorthonormalize=0,
|
const bool corder=1, int n=0, const int sorttype=0, const int biorthonormalize=0,
|
||||||
NRMat<double> *b=NULL, NRVec<double> *beta=NULL);
|
NRMat<double> *b=NULL, NRVec<double> *beta=NULL);
|
||||||
extern NRMat<double> matrixfunction(NRSMat<double> a, double (*f) (double));
|
extern NRMat<double> matrixfunction(NRSMat<double> a, double (*f) (double));
|
||||||
extern NRMat<double> realmatrixfunction(NRMat<double> a, double (*f) (double)); //a has to by in fact symmetric
|
extern NRMat<double> realmatrixfunction(NRMat<double> a, double (*f) (double)); //a has to by in fact symmetric
|
||||||
@ -143,7 +143,9 @@ const NRMat<T> inverse(NRMat<T> a, T *det=0)
|
|||||||
#endif
|
#endif
|
||||||
NRMat<T> result(a.nrows(),a.nrows());
|
NRMat<T> result(a.nrows(),a.nrows());
|
||||||
result = (T)1.;
|
result = (T)1.;
|
||||||
|
a.copyonwrite();
|
||||||
linear_solve(a, &result, det);
|
linear_solve(a, &result, det);
|
||||||
|
result.transposeme(); //tested with noncblas
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user