12#ifndef MFEM_COMPLEX_DENSEMAT
13#define MFEM_COMPLEX_DENSEMAT
53ComplexDenseMatrix *
Mult(
const ComplexDenseMatrix &B,
54 const ComplexDenseMatrix &C);
57ComplexDenseMatrix *
MultAtB(
const ComplexDenseMatrix &A,
58 const ComplexDenseMatrix &B);
78 std::complex<real_t> *
data =
nullptr;
95 mfem_error(
"ComplexFactors::ComplexFactors(...)");
99 virtual std::complex<real_t>
Det(
int m)
const
127#ifdef MFEM_USE_LAPACK
155 virtual std::complex<real_t>
Det(
int m)
const;
161 void Mult(
int m,
int n, std::complex<real_t> *X)
const;
213 virtual std::complex<real_t>
Det(
int m)
const;
void UMult(int m, int n, real_t *X_r, real_t *X_i) const
void LSolve(int m, int n, real_t *X_r, real_t *X_i) const
ComplexCholeskyFactors(real_t *data_r_, real_t *data_i_)
virtual void GetInverseMatrix(int m, real_t *X_r, real_t *X_i) const
Assuming L.L^H = A factored data of size (m x m), compute X <- A^{-1}.
virtual void Solve(int m, int n, real_t *X_r, real_t *X_i) const
void USolve(int m, int n, real_t *X_r, real_t *X_i) const
virtual std::complex< real_t > Det(int m) const
void RightSolve(int m, int n, real_t *X_r, real_t *X_i) const
virtual bool Factor(int m, real_t TOL=0.0)
Compute the Cholesky factorization of the current matrix.
void LMult(int m, int n, real_t *X_r, real_t *X_i) const
Specialization of the ComplexOperator built from a pair of Dense Matrices. The purpose of this specia...
virtual Type GetType() const
ComplexDenseMatrix(DenseMatrix *A_Real, DenseMatrix *A_Imag, bool ownReal, bool ownImag, Convention convention=HERMITIAN)
DenseMatrix * GetSystemMatrix() const
ComplexDenseMatrix * ComputeInverse()
virtual DenseMatrix & real()
Real or imaginary part accessor methods.
virtual DenseMatrix & imag()
virtual std::complex< real_t > Det(int m) const
virtual void Solve(int m, int n, real_t *X_r, real_t *X_i) const
virtual bool Factor(int m, real_t TOL=0.0)
void ResetComplexData(int m)
std::complex< real_t > * data
virtual ~ComplexFactors()
virtual void GetInverseMatrix(int m, real_t *X_r, real_t *X_i) const
void ComplexToReal(int m, const std::complex< real_t > *x, real_t *x_r, real_t *x_i) const
ComplexFactors(real_t *data_r_, real_t *data_i_)
void SetComplexData(int m)
std::complex< real_t > * RealToComplex(int m, const real_t *x_r, const real_t *x_i) const
void Mult(int m, int n, std::complex< real_t > *X) const
virtual void GetInverseMatrix(int m, real_t *X_r, real_t *X_i) const
Assuming L.U = P.A factored data of size (m x m), compute X <- A^{-1}.
ComplexLUFactors(real_t *data_r_, real_t *data_i, int *ipiv_)
void LSolve(int m, int n, real_t *X_r, real_t *X_i) const
void USolve(int m, int n, real_t *X_r, real_t *X_i) const
void RightSolve(int m, int n, real_t *X_r, real_t *X_i) const
virtual bool Factor(int m, real_t TOL=0.0)
Compute the LU factorization of the current matrix.
static const int ipiv_base
virtual void Solve(int m, int n, real_t *X_r, real_t *X_i) const
virtual std::complex< real_t > Det(int m) const
void Mult(int m, int n, real_t *X_r, real_t *X_i) const
Mimic the action of a complex operator using two real operators.
@ HERMITIAN
Native convention for Hermitian operators.
Data type dense matrix using column-major storage.
Type
Enumeration defining IDs for some classes derived from Operator.
@ Complex_DenseMat
ID for class ComplexDenseMatrix.
void mfem_error(const char *msg)
void Mult(const Table &A, const Table &B, Table &C)
C = A * B (as boolean matrices)
ComplexDenseMatrix * MultAtB(const ComplexDenseMatrix &A, const ComplexDenseMatrix &B)
Multiply the complex conjugate transpose of a matrix A with a matrix B. A^H*B.