chi0.h Source File

LibRPA: chi0.h Source File
LibRPA
chi0.h
Go to the documentation of this file.
1 
5 #pragma once
6 #include <vector>
7 #include <set>
8 #include "meanfield.h"
9 #include "timefreq.h"
10 #include "atoms.h"
11 #include "ri.h"
12 #include "vector3_order.h"
13 
14 using std::vector;
15 
17 class Chi0
18 {
19  private:
20  size_t gf_save;
21  size_t gf_discard;
23 
28  map<int, atom_mapping<map<Vector3_Order<int>, map<double, matrix>>>::pair_t_old> gf_is_R_tau;
29 
31  vector<Vector3_Order<int>> Rlist_gf;
33  map<double, map<Vector3_Order<double>, atom_mapping<ComplexMatrix>::pair_t_old>> chi0_q;
34  void build_gf_Rt(Vector3_Order<int> R, double tau);
36  /*
37  @todo add threshold parameter. Maybe in the class level?
38  */
39  void build_chi0_q_space_time(const Cs_LRI &Cs,
40  const Vector3_Order<int> &R_period,
41  const vector<atpair_t> &atpairs_ABF,
42  const vector<Vector3_Order<double>> &qlist);
43  void build_chi0_q_space_time_atom_pair_routing(const Cs_LRI &Cs,
44  const Vector3_Order<int> &R_period,
45  const vector<atpair_t> &atpairs_ABF,
46  const vector<Vector3_Order<double>> &qlist);
47  void build_chi0_q_space_time_R_tau_routing(const Cs_LRI &Cs,
48  const Vector3_Order<int> &R_period,
49  const vector<atpair_t> &atpairs_ABF,
50  const vector<Vector3_Order<double>> &qlist);
51  void build_chi0_q_space_time_LibRI_routing(const Cs_LRI &Cs,
52  const Vector3_Order<int> &R_period,
53  const vector<atpair_t> &atpairs_ABF,
54  const vector<Vector3_Order<double>> &qlist);
55 
57  // TODO: implement the conventional method
58  void build_chi0_q_conventional(const Cs_LRI &Cs,
59  const Vector3_Order<int> &R_period,
60  const vector<atpair_t> &atpairs_ABF,
61  const vector<Vector3_Order<double>> &qlist);
66  matrix compute_chi0_s_munu_tau_R(const atpair_R_mat_t &Cs_IJR,
67  const Vector3_Order<int> &R_period,
68  int spin_channel,
69  atom_t mu, atom_t nu, double tau, Vector3_Order<int> R);
70  // copy some reshape method inside chi0, test performance
71  /* matrix reshape_Cs(const size_t n1, const size_t n2, const size_t n3, const std::shared_ptr<matrix> &Cs); */
72  /* matrix reshape_dim_Cs(const size_t n1, const size_t n2, const size_t n3, const std::shared_ptr<matrix> &Cs);//(n1*n2,n3) -> (n1,n2*n3) */
73  /* matrix reshape_mat(const size_t n1, const size_t n2, const size_t n3, const matrix &mat); */
74  /* matrix reshape_mat_21(const size_t n1, const size_t n2, const size_t n3, const matrix &mat); //(n1,n2*n3) -> (n1*n2,n3) */
75  public:
76  double gf_R_threshold;
77  MeanField mf;
78  const vector<Vector3_Order<double>> &klist;
79  TFGrids tfg;
80  Chi0(const MeanField &mf_in,
81  const vector<Vector3_Order<double>> &klist_in,
82  unsigned n_tf_grids):
83  mf(mf_in), klist(klist_in), tfg(n_tf_grids) { gf_R_threshold = 1e-9; }
84  ~Chi0() {};
86  void build(const Cs_LRI &Cs,
87  const vector<Vector3_Order<int>> &Rlist,
88  const Vector3_Order<int> &R_period,
89  const vector<atpair_t> &atpair_ABF,
90  const vector<Vector3_Order<double>> &qlist,
91  TFGrids::GRID_TYPES gt, bool use_space_time);
92  const map<double, map<Vector3_Order<double>, atom_mapping<ComplexMatrix>::pair_t_old>> & get_chi0_q() const { return chi0_q; }
93  void free_chi0_q(const double freq, const Vector3_Order<double> q);
94 
95 };
96 
98 
108 map<size_t, matrix> compute_chi0_munu_tau_LRI_saveN_noreshape(const map<size_t, atom_mapping<matrix>::pair_t_old> &gf_occ_ab_t,
109  const map<size_t, atom_mapping<matrix>::pair_t_old> &gf_unocc_ab_t,
110  const atpair_R_mat_t &LRI_Cs,
111  const vector<Vector3_Order<int>> &Rlist, const Vector3_Order<int> &R_period,
112  const vector<int> iRs,
113  atom_t mu, atom_t nu);
114 
Utilies to handle atomic model and related data.
size_t atom_t
type of atom indices
Definition: atoms.h:22
map< size_t, matrix > compute_chi0_munu_tau_LRI_saveN_noreshape(const map< size_t, atom_mapping< matrix >::pair_t_old > &gf_occ_ab_t, const map< size_t, atom_mapping< matrix >::pair_t_old > &gf_unocc_ab_t, const atpair_R_mat_t &LRI_Cs, const vector< Vector3_Order< int >> &Rlist, const Vector3_Order< int > &R_period, const vector< int > iRs, atom_t mu, atom_t nu)
Compute the real-space independent reponse function in space-time method on a particular time.
Definition: chi0.cpp:851
Object to handle calculation of independent repsonse function ( )
Definition: chi0.h:18
void build(const Cs_LRI &Cs, const vector< Vector3_Order< int >> &Rlist, const Vector3_Order< int > &R_period, const vector< atpair_t > &atpair_ABF, const vector< Vector3_Order< double >> &qlist, TFGrids::GRID_TYPES gt, bool use_space_time)
Build the independent response function in q-omega domain for ABFs on the atom pairs atpair_ABF and q...
Definition: chi0.cpp:35
Object of the meanfield input of Green's function.
Definition: meanfield.h:20
Object to handle time/frequency grids for quadrature.
Definition: timefreq.h:21
Definition: vector3_order.h:15
Definition: matrix.h:23
Utilities to handle the mean-field starting point for many-body calculation.
Utilies related to resolution of identity.
atom_mapping< map< Vector3_Order< int >, std::shared_ptr< matrix > > >::pair_t_old atpair_R_mat_t
type alias of atom-pair mapping to real matrix indexed by unit-cell vector
Definition: ri.h:39
Definition: ri.h:46
map< atom_t, map< atom_t, T > > pair_t_old
mapping between atom pair and data. Nested map, old style
Definition: atoms.h:39
Utilities related to quadrature on time/frequency domain.