30 #ifndef OOMPH_COMPLEX_MATRICES_HEADER
31 #define OOMPH_COMPLEX_MATRICES_HEADER
35 #include <oomph-lib-config.h>
68 virtual unsigned long nrow()
const = 0;
71 virtual unsigned long ncol()
const = 0;
79 virtual std::complex<double>
operator()(
const unsigned long&
i,
80 const unsigned long&
j)
const = 0;
87 "ludecompose() has not been written for this matrix class\n",
100 "lubksub() has not been written for this matrix class\n",
109 virtual void solve(
Vector<std::complex<double>>& rhs);
113 virtual void solve(
const Vector<std::complex<double>>& rhs,
114 Vector<std::complex<double>>& soln);
118 const Vector<std::complex<double>>&
b,
125 const Vector<std::complex<double>>& rhs)
127 unsigned long n = rhs.size();
131 for (
unsigned long i = 0;
i <
n;
i++)
140 Vector<std::complex<double>>& soln) = 0;
144 Vector<std::complex<double>>& soln) = 0;
202 const unsigned long&
m,
203 const std::complex<double>& initial_val)
219 inline unsigned long nrow()
const
225 inline unsigned long ncol()
const
233 const unsigned long&
j)
const
241 const unsigned long&
j)
261 const Vector<std::complex<double>>& rhs,
266 Vector<std::complex<double>>& soln);
270 Vector<std::complex<double>>& soln);
301 const unsigned long&
n,
302 const unsigned long&
m)
339 inline unsigned long nrow()
const
345 inline unsigned long ncol()
const
352 const unsigned long&
j)
const
368 const Vector<std::complex<double>>&
b,
373 Vector<std::complex<double>>& soln);
378 Vector<std::complex<double>>& soln);
391 public CCMatrix<std::complex<double>>
421 const unsigned long&
n,
422 const unsigned long&
m)
458 inline unsigned long nrow()
const
464 inline unsigned long ncol()
const
472 const unsigned long&
j)
const
488 const Vector<std::complex<double>>&
b,
494 Vector<std::complex<double>>& soln);
499 Vector<std::complex<double>>& soln);
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition: PartialRedux_count.cpp:3
Scalar * b
Definition: benchVecAdd.cpp:17
A class for compressed column matrices that store doubles.
Definition: complex_matrices.h:392
virtual ~CCComplexMatrix()
Destructor: Kill the LU factors if they have been setup.
Definition: complex_matrices.h:438
std::complex< double > operator()(const unsigned long &i, const unsigned long &j) const
Definition: complex_matrices.h:471
void multiply(const Vector< std::complex< double >> &x, Vector< std::complex< double >> &soln)
Multiply the matrix by the vector x: soln=Ax.
Definition: complex_matrices.cc:854
int Info
Info flag for the SuperLU solver.
Definition: complex_matrices.h:398
void lubksub(Vector< std::complex< double >> &rhs)
LU back solve for given RHS.
Definition: complex_matrices.cc:668
unsigned long nrow() const
Return the number of rows of the matrix.
Definition: complex_matrices.h:458
CCComplexMatrix()
Default constructor.
Definition: complex_matrices.h:407
unsigned long ncol() const
Return the number of columns of the matrix.
Definition: complex_matrices.h:464
int ludecompose()
LU decomposition using SuperLU.
Definition: complex_matrices.cc:614
void clean_up_memory()
LU clean up (perhaps this should happen in the destructor)
Definition: complex_matrices.cc:750
bool Doc_stats_during_solve
Definition: complex_matrices.h:403
void operator=(const CCComplexMatrix &)=delete
Broken assignment operator.
void residual(const Vector< std::complex< double >> &x, const Vector< std::complex< double >> &b, Vector< std::complex< double >> &residual)
Find the residulal to x of Ax=b, ie r=b-Ax.
Definition: complex_matrices.cc:791
CCComplexMatrix(const CCComplexMatrix &matrix)=delete
Broken copy constructor.
void * F_factors
Storage for the LU factors as required by SuperLU.
Definition: complex_matrices.h:395
void multiply_transpose(const Vector< std::complex< double >> &x, Vector< std::complex< double >> &soln)
Multiply the transposed matrix by the vector x: soln=A^T x.
Definition: complex_matrices.cc:896
void disable_doc_stats()
the solve
Definition: complex_matrices.h:452
CCComplexMatrix(const Vector< std::complex< double >> &value, const Vector< int > &row_index, const Vector< int > &column_start, const unsigned long &n, const unsigned long &m)
Definition: complex_matrices.h:418
void enable_doc_stats()
Definition: complex_matrices.h:445
Definition: matrices.h:2585
int * column_start()
Access to C-style column_start array.
Definition: matrices.h:2692
std::complex< double > get_entry(const unsigned long &i, const unsigned long &j) const
Definition: matrices.h:2654
int * row_index()
Access to C-style row index array.
Definition: matrices.h:2704
A class for compressed row matrices.
Definition: complex_matrices.h:279
unsigned long nrow() const
Return the number of rows of the matrix.
Definition: complex_matrices.h:339
std::complex< double > operator()(const unsigned long &i, const unsigned long &j) const
Overload the round-bracket access operator for read-only access.
Definition: complex_matrices.h:351
void * F_factors
Storage for the LU factors as required by SuperLU.
Definition: complex_matrices.h:282
void enable_doc_stats()
Definition: complex_matrices.h:326
void multiply(const Vector< std::complex< double >> &x, Vector< std::complex< double >> &soln)
Multiply the matrix by the vector x: soln=Ax.
Definition: complex_matrices.cc:1169
virtual ~CRComplexMatrix()
Destructor: Kill the LU decomposition if it has been computed.
Definition: complex_matrices.h:319
unsigned long ncol() const
Return the number of columns of the matrix.
Definition: complex_matrices.h:345
bool Doc_stats_during_solve
Definition: complex_matrices.h:383
int ludecompose()
LU decomposition using SuperLU.
Definition: complex_matrices.cc:946
CRComplexMatrix(const CRComplexMatrix &matrix)=delete
Broken copy constructor.
void disable_doc_stats()
the solve
Definition: complex_matrices.h:333
CRComplexMatrix()
Default constructor.
Definition: complex_matrices.h:289
void lubksub(Vector< std::complex< double >> &rhs)
LU back solve for given RHS.
Definition: complex_matrices.cc:999
void operator=(const CRComplexMatrix &)=delete
Broken assignment operator.
int Info
Info flag for the SuperLU solver.
Definition: complex_matrices.h:285
void residual(const Vector< std::complex< double >> &x, const Vector< std::complex< double >> &b, Vector< std::complex< double >> &residual)
Find the residual to x of Ax=b, i.e. r=b-Ax.
Definition: complex_matrices.cc:1120
void multiply_transpose(const Vector< std::complex< double >> &x, Vector< std::complex< double >> &soln)
Multiply the transposed matrix by the vector x: soln=A^T x.
Definition: complex_matrices.cc:1207
CRComplexMatrix(const Vector< std::complex< double >> &value, const Vector< int > &column_index, const Vector< int > &row_start, const unsigned long &n, const unsigned long &m)
Definition: complex_matrices.h:298
void clean_up_memory()
LU clean up (perhaps this should happen in the destructor)
Definition: complex_matrices.cc:1080
Definition: matrices.h:682
int * row_start()
Access to C-style row_start array.
Definition: matrices.h:785
int * column_index()
Access to C-style column index array.
Definition: matrices.h:797
std::complex< double > get_entry(const unsigned long &i, const unsigned long &j) const
Definition: matrices.h:748
Definition: complex_matrices.h:56
virtual int ludecompose()
Definition: complex_matrices.h:84
virtual ~ComplexMatrixBase()
virtual (empty) destructor
Definition: complex_matrices.h:74
virtual double max_residual(const Vector< std::complex< double >> &x, const Vector< std::complex< double >> &rhs)
Definition: complex_matrices.h:124
virtual std::complex< double > operator()(const unsigned long &i, const unsigned long &j) const =0
virtual unsigned long ncol() const =0
Return the number of columns of the matrix.
virtual void multiply(const Vector< std::complex< double >> &x, Vector< std::complex< double >> &soln)=0
Multiply the matrix by the vector x: soln=Ax.
virtual void lubksub(Vector< std::complex< double >> &rhs)
Definition: complex_matrices.h:97
void operator=(const ComplexMatrixBase &)=delete
Broken assignment operator.
virtual void residual(const Vector< std::complex< double >> &x, const Vector< std::complex< double >> &b, Vector< std::complex< double >> &residual)=0
Find the residual, i.e. r=b-Ax the residual.
virtual void multiply_transpose(const Vector< std::complex< double >> &x, Vector< std::complex< double >> &soln)=0
Multiply the transposed matrix by the vector x: soln=A^T x.
virtual unsigned long nrow() const =0
Return the number of rows of the matrix.
ComplexMatrixBase()
(Empty) constructor.
Definition: complex_matrices.h:59
virtual void solve(Vector< std::complex< double >> &rhs)
Definition: complex_matrices.cc:34
ComplexMatrixBase(const ComplexMatrixBase &matrix)=delete
Broken copy constructor.
Definition: complex_matrices.h:155
std::complex< double > & operator()(const unsigned long &i, const unsigned long &j)
Definition: complex_matrices.h:240
bool Overwrite_matrix_storage
Definition: complex_matrices.h:165
void lubksub(Vector< std::complex< double >> &rhs)
Back substitute an LU decomposed matrix.
Definition: complex_matrices.cc:374
virtual ~DenseComplexMatrix()
Destructor, delete the storage for Index vector and LU storage (if any)
Definition: complex_matrices.cc:104
unsigned long ncol() const
Return the number of columns of the matrix.
Definition: complex_matrices.h:225
Vector< long > * Index
Pointer to storage for the index of permutations in the LU solve.
Definition: complex_matrices.h:158
void residual(const Vector< std::complex< double >> &x, const Vector< std::complex< double >> &rhs, Vector< std::complex< double >> &residual)
Find the residual of Ax=b, i.e. r=b-Ax.
Definition: complex_matrices.cc:450
void multiply(const Vector< std::complex< double >> &x, Vector< std::complex< double >> &soln)
Multiply the matrix by the vector x: soln=Ax.
Definition: complex_matrices.cc:507
int ludecompose()
Definition: complex_matrices.cc:121
DenseComplexMatrix(const unsigned long &n, const unsigned long &m, const std::complex< double > &initial_val)
Definition: complex_matrices.h:201
DenseComplexMatrix(const DenseComplexMatrix &matrix)=delete
Broken copy constructor.
void delete_lu_factors()
Definition: complex_matrices.cc:87
DenseComplexMatrix(const unsigned long &n, const unsigned long &m)
Constructor to build a matrix with n rows and m columns.
Definition: complex_matrices.h:191
void operator=(const DenseComplexMatrix &)=delete
Broken assignment operator.
DenseComplexMatrix(const unsigned long &n)
Constructor to build a square n by n matrix.
Definition: complex_matrices.h:182
DenseComplexMatrix()
Empty constructor, simply assign the lengths N and M to 0.
Definition: complex_matrices.h:173
std::complex< double > operator()(const unsigned long &i, const unsigned long &j) const
Definition: complex_matrices.h:232
std::complex< double > * LU_factors
Pointer to storage for the LU decomposition.
Definition: complex_matrices.h:161
unsigned long nrow() const
Return the number of rows of the matrix.
Definition: complex_matrices.h:219
void multiply_transpose(const Vector< std::complex< double >> &x, Vector< std::complex< double >> &soln)
Multiply the transposed matrix by the vector x: soln=A^T x.
Definition: complex_matrices.cc:545
Definition: matrices.h:386
std::complex< double > & entry(const unsigned long &i, const unsigned long &j)
Definition: matrices.h:447
std::complex< double > get_entry(const unsigned long &i, const unsigned long &j) const
Definition: matrices.h:457
Definition: oomph_definitions.h:222
T * value()
Access to C-style value array.
Definition: matrices.h:616
Definition: oomph-lib/src/generic/Vector.h:58
Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor >, 0, Eigen::OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition: common.h:85
#define max(a, b)
Definition: datatypes.h:23
int * m
Definition: level2_cplx_impl.h:294
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
list x
Definition: plotDoE.py:28
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
Definition: datatypes.h:12
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2