// LAPACK++ (V. 1.1)
// (C) 1992-1996 All Rights Reserved.
#ifndef _LA_SPD_FACT_DOUBLE_H_
#define _LA_SPD_FACT_DOUBLE_H_
#include LA_SPD_MAT_DOUBLE_H
#include "lapack.h"
class LaSpdFactDouble
{
int size_;
int gdim_;
LaSpdMatDouble S_;
public:
LaSpdFactDouble();
LaSpdFactDouble(int,int);
LaSpdFactDouble(const LaSpdFactDouble&);
~LaSpdFactDouble();
LaSpdFactDouble& ref(LaSpdFactDouble&);
LaSpdFactDouble& ref(LaSpdMatDouble&);
LaSpdFactDouble& copy(const LaSpdFactDouble&);
LaSpdFactDouble& copy(const LaSpdMatDouble&);
LaSpdMatDouble& S() { return S_; }
int size() { return size_; }
int gdim() { return gdim_; }
};
inline LaSpdFactDouble::LaSpdFactDouble(): S_(), size_(0), gdim_(0)
{}
inline LaSpdFactDouble::LaSpdFactDouble(int m,int n):S_(m,n),
size_(n), gdim_(m)
{}
inline LaSpdFactDouble::LaSpdFactDouble(const LaSpdFactDouble &X)
{
size_ = X.size_;
gdim_ = X.gdim_;
S_.copy(X.S_);
}
inline LaSpdFactDouble::~LaSpdFactDouble()
{}
inline LaSpdFactDouble& LaSpdFactDouble::ref(LaSpdFactDouble &X)
{
size_ = X.size_;
gdim_ = X.gdim_;
S_.ref(X.S_);
return *this;
}
inline LaSpdFactDouble& LaSpdFactDouble::ref(LaSpdMatDouble &X)
{
size_ = X.size(1);
gdim_ = X.gdim(0);
S_.ref(X);
return *this;
}
inline LaSpdFactDouble& LaSpdFactDouble::copy(const LaSpdFactDouble &X)
{
size_ = X.size_;
gdim_ = X.gdim_;
S_.copy(X.S_);
return *this;
}
inline LaSpdFactDouble& LaSpdFactDouble::copy(const LaSpdMatDouble &X)
{
size_ = X.size(1);
gdim_ = X.gdim(0);
S_.copy(X);
return *this;
}
inline void LaSpdMatFactorize(LaSpdMatDouble &A, LaSpdFactDouble &AF)
{
char uplo = 'L';
integer N = A.size(1), lda = A.gdim(0), info = 0;
AF.copy(A);
F77NAME(dpotrf)(&uplo, &N, &(AF.S()(0,0)), &lda, &info);
}
inline void LaLinearSolve(LaSpdFactDouble &AF, LaGenMatDouble &X,
LaGenMatDouble &B)
{
char uplo = 'L';
integer N = AF.size(), nrhs = X.size(1), lda = AF.gdim(),
ldb = B.size(0), info = 0;
X.inject(B);
F77NAME(dpotrs)(&uplo, &N, &nrhs, &(AF.S()(0,0)), &lda, &X(0,0),
&ldb, &info);
}
#endif
// _LA_SPD_FACT_DOUBLE_H_
syntax highlighted by Code2HTML, v. 0.9.1