Bridge++  Version 1.5.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
decompose_LU_Cmplx.h
Go to the documentation of this file.
1 
14 #ifndef DECOMPOSE_LU_CMPLX_INCLUDED
15 #define DECOMPOSE_LU_CMPLX_INCLUDED
16 
17 #include <cfloat>
18 #include <cmath>
19 #include <valarray>
20 
21 #include "bridge_complex.h"
22 
23 #include "IO/bridgeIO.h"
24 
26 {
27  public:
28  Decompose_LU_Cmplx(size_t N) : N(N), N2(2 * N), size(N * N2), m_lu(size) {}
29 
30  void set_matrix(const double *mat);
31 
32  // solve Ax = b: vec -> A^{-1} vec
33  void solve(double *vec);
34 
35  // M -> A^{-1}
36  void get_inverse(double *mat_inv);
37 
38  // M -> A^{-1} * M
39  void mult_inverse(double *mat);
40 
41  // return det(A)
42  dcomplex determinant();
43 
44  private:
45  int N;
46  int N2;
47  int size;
48  std::valarray<double> m_lu;
49 
50  inline size_t re(int i, int j)
51  {
52  return N2 * i + 2 * j;
53  }
54 
55  inline size_t im(int i, int j)
56  {
57  return N2 * i + 2 * j + 1;
58  }
59 
60  inline size_t re(int i)
61  {
62  return 2 * i;
63  }
64 
65  inline size_t im(int i)
66  {
67  return 2 * i + 1;
68  }
69 };
70 #endif
void mult_inverse(double *mat)
std::valarray< double > m_lu
void solve(double *vec)
void get_inverse(double *mat_inv)
size_t im(int i, int j)
void set_matrix(const double *mat)
size_t re(int i, int j)