NRMat complexify(real,imag)

This commit is contained in:
Jiri Pittner 2022-07-08 11:35:23 +02:00
parent dbbe16fc30
commit 997bcc95ad

15
mat.h
View File

@ -322,7 +322,7 @@ public:
//! transpose this matrix and return the result by value //! transpose this matrix and return the result by value
const NRMat transpose(bool conj = false) const; const NRMat transpose(bool conj = false) const;
//! conjugate this matrix and return the result by value //! conjugate this matrix and return the result by value
const NRMat conjugate() const; const NRMat conjugate() const {NRMat r(*this); r.conjugateme(); return r;};
//! extract specified submatrix //! extract specified submatrix
const NRMat submatrix(const int fromrow, const int torow, const int fromcol, const int tocol) const; const NRMat submatrix(const int fromrow, const int torow, const int fromcol, const int tocol) const;
@ -1258,6 +1258,19 @@ NRMat<std::complex<T> > complexify(const NRMat<T> &rhs) {
return r; return r;
} }
//this is general for any type, complexmatrix() uses blas for doubles
template<typename T>
NRMat<std::complex<T> > complexify(const NRMat<T> &rhsr, const NRMat<T> &rhsi) {
NOT_GPU(rhsr);
NOT_GPU(rhsi);
if(rhsr.nrows()!=rhsi.nrows() || rhsr.ncols()!=rhsi.ncols()) laerror("inconsistent dimensions in complexify");
NRMat<std::complex<T> > r(rhsr.nrows(), rhsr.ncols(), rhsr.getlocation());
for(register int i=0; i<rhsr.nrows(); ++i){
for(register int j=0; j<rhsr.ncols(); ++j) r(i,j) = std::complex<T>(rhsr(i,j),rhsi(i,j));
}
return r;
}
/***************************************************************************//** /***************************************************************************//**
* output operator * output operator
* @param[in,out] s output stream * @param[in,out] s output stream