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