ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
RPA_LRI.h
Go to the documentation of this file.
1//=======================
2// AUTHOR : Rong Shi
3// DATE : 2022-12-09
4//=======================
5
6#ifndef RPA_LRI_H
7#define RPA_LRI_H
8
9#include "LRI_CV.h"
10// #include "module_xc/exx_info.h"
11// #include "source_basis/module_ao/ORB_atomic_lm.h"
12#include "source_base/matrix.h"
13// #include "source_lcao/module_ri/Exx_LRI.h"
14// #include <RI/physics/Exx.h>
15#include <RI/ri/RI_Tools.h>
16#include <array>
17#include <map>
18#include <mpi.h>
19#include <vector>
20
22class K_Vectors;
23
24template <typename T, typename Tdata> class RPA_LRI
25{
26 private:
27 using TA = int;
28 using Tcell = int;
29 static constexpr std::size_t Ndim = 3;
30 using TC = std::array<Tcell, Ndim>;
31 using Tq = std::array<double, Ndim>;
32 using TAC = std::pair<TA, TC>;
33 using TAq = std::pair<TA, Tq>;
34 using TatomR = std::array<double, Ndim>; // tmp
35
36 public:
37 RPA_LRI(const Exx_Info::Exx_Info_RI &info_in) : info(info_in)
38 {
39 }
41 void postSCF(const UnitCell& ucell,
42 const MPI_Comm& mpi_comm_in,
44 const elecstate::ElecState* pelec,
45 const K_Vectors& kv,
46 const LCAO_Orbitals& orb,
47 const Parallel_Orbitals& parav,
48 const psi::Psi<T>& psi);
49 void init(const MPI_Comm &mpi_comm_in, const K_Vectors &kv_in, const std::vector<double>& orb_cutoff);
51 const MPI_Comm& mpi_comm_in,
52 const UnitCell& ucell,
53 const K_Vectors& kv,
54 const LCAO_Orbitals& orb);
55 void output_ewald_coulomb(const UnitCell& ucell, const K_Vectors& kv, const LCAO_Orbitals& orb);
56 void cal_large_Cs(const UnitCell& ucell, const LCAO_Orbitals& orb, const K_Vectors& kv);
57 void cal_abfs_overlap(const UnitCell& ucell, const LCAO_Orbitals& orb, const K_Vectors& kv);
58 void inverse_olp(const UnitCell& ucell,
59 std::map<TA, std::map<TAq, RI::Tensor<std::complex<double>>>>& overlap_abfs_abfs,
61 void out_abfs_overlap(const UnitCell& ucell,
62 std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>& overlap_abfs_abfs,
63 std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>& overlap_abfs_abf,
64 std::string filename,
67 void out_eigen_vector(const Parallel_Orbitals& parav, const psi::Psi<T>& psi);
68 void out_struc(const UnitCell& ucell);
69 void out_bands(const elecstate::ElecState *pelec);
70
72 void out_Cs(const UnitCell& ucell, std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>& Cs_in, std::string filename);
73 void out_coulomb_k(const UnitCell& ucell,
74 std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>& Vs,
75 std::string filename,
76 Exx_LRI<double>* exx_lri);
77 // void print_matrix(char *desc, const ModuleBase::matrix &mat);
78 // void print_complex_matrix(char *desc, const ModuleBase::ComplexMatrix &mat);
79 // void init(const MPI_Comm &mpi_comm_in);
80 // void cal_rpa_ions();
81
82 Tdata Erpa;
83
84 private:
86 const K_Vectors *p_kv=nullptr;
87 MPI_Comm mpi_comm;
88 std::vector<double> orb_cutoff_;
90
91 std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> lcaos;
92 std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> abfs;
93 // shrinked abfs
94 std::shared_ptr<ORB_gaunt_table> MGT;
95 std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> abfs_shrink;
96
97
98 // Exx_LRI<double> exx_postSCF_double(info);
99 // LRI_CV<Tdata> cv;
100 std::map<TA, std::map<TAC, RI::Tensor<Tdata>>> Vs_period;
101 std::map<TA, std::map<TAC, RI::Tensor<Tdata>>> Cs_period;
102 // RI::RPA<TA,Tcell,Ndim,Tdata> rpa_lri;
103
104 // Tdata post_process_Erpa( const Tdata &Erpa_in ) const;
105
108};
110#include "RPA_LRI.hpp"
111
112#endif
Exx_LRI< double > exx_lri_rpa(GlobalC::exx_info.info_ri)
Definition Exx_LRI.h:53
Definition klist.h:12
Definition ORB_read.h:18
Definition parallel_orbitals.h:9
Definition RPA_LRI.h:25
std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > abfs_shrink
Definition RPA_LRI.h:95
std::vector< double > orb_cutoff_
Definition RPA_LRI.h:88
const Exx_Info::Exx_Info_RI & info
Definition RPA_LRI.h:85
std::pair< TA, Tq > TAq
Definition RPA_LRI.h:33
std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > Cs_period
Definition RPA_LRI.h:101
void cal_postSCF_exx(const elecstate::DensityMatrix< T, Tdata > &dm, const MPI_Comm &mpi_comm_in, const UnitCell &ucell, const K_Vectors &kv, const LCAO_Orbitals &orb)
Definition RPA_LRI.hpp:103
static constexpr std::size_t Ndim
Definition RPA_LRI.h:29
Exx_LRI< double > * exx_cut_coulomb
Definition RPA_LRI.h:106
void output_cut_coulomb_cs(const UnitCell &ucell, Exx_LRI< double > *exx_lri_rpa)
Definition RPA_LRI.hpp:200
MPI_Comm mpi_comm
Definition RPA_LRI.h:87
void cal_large_Cs(const UnitCell &ucell, const LCAO_Orbitals &orb, const K_Vectors &kv)
Definition RPA_LRI.hpp:311
void out_abfs_overlap(const UnitCell &ucell, std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > &overlap_abfs_abfs, std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > &overlap_abfs_abf, std::string filename, const ModuleBase::Element_Basis_Index::IndexLNM &index_abfs_s, const ModuleBase::Element_Basis_Index::IndexLNM &index_abfs)
Definition RPA_LRI.hpp:576
void out_Cs(const UnitCell &ucell, std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > &Cs_in, std::string filename)
Definition RPA_LRI.hpp:1105
std::array< double, Ndim > Tq
Definition RPA_LRI.h:31
void out_bands(const elecstate::ElecState *pelec)
Definition RPA_LRI.hpp:1067
void out_coulomb_k(const UnitCell &ucell, std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > &Vs, std::string filename, Exx_LRI< double > *exx_lri)
Definition RPA_LRI.hpp:1147
std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > Vs_period
Definition RPA_LRI.h:100
int Tcell
Definition RPA_LRI.h:28
void inverse_olp(const UnitCell &ucell, std::map< TA, std::map< TAq, RI::Tensor< std::complex< double > > > > &overlap_abfs_abfs, const ModuleBase::Element_Basis_Index::IndexLNM &index_abfs_s)
Definition RPA_LRI.hpp:736
void postSCF(const UnitCell &ucell, const MPI_Comm &mpi_comm_in, const elecstate::DensityMatrix< T, Tdata > &dm, const elecstate::ElecState *pelec, const K_Vectors &kv, const LCAO_Orbitals &orb, const Parallel_Orbitals &parav, const psi::Psi< T > &psi)
Definition RPA_LRI.hpp:37
double ccp_rmesh_times_ewald
Definition RPA_LRI.h:89
void out_struc(const UnitCell &ucell)
Definition RPA_LRI.hpp:1002
int TA
Definition RPA_LRI.h:27
RPA_LRI(const Exx_Info::Exx_Info_RI &info_in)
Definition RPA_LRI.h:37
std::array< Tcell, Ndim > TC
Definition RPA_LRI.h:30
Tdata Erpa
Definition RPA_LRI.h:82
std::shared_ptr< ORB_gaunt_table > MGT
Definition RPA_LRI.h:94
void output_ewald_coulomb(const UnitCell &ucell, const K_Vectors &kv, const LCAO_Orbitals &orb)
Definition RPA_LRI.hpp:254
std::pair< TA, TC > TAC
Definition RPA_LRI.h:32
const K_Vectors * p_kv
Definition RPA_LRI.h:86
std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > abfs
Definition RPA_LRI.h:92
~RPA_LRI()
Definition RPA_LRI.h:40
std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > lcaos
Definition RPA_LRI.h:91
void out_eigen_vector(const Parallel_Orbitals &parav, const psi::Psi< T > &psi)
Definition RPA_LRI.hpp:936
void cal_abfs_overlap(const UnitCell &ucell, const LCAO_Orbitals &orb, const K_Vectors &kv)
Definition RPA_LRI.hpp:418
std::array< double, Ndim > TatomR
Definition RPA_LRI.h:34
void init(const MPI_Comm &mpi_comm_in, const K_Vectors &kv_in, const std::vector< double > &orb_cutoff)
Definition RPA_LRI.hpp:79
Exx_LRI< double > * exx_full_coulomb
Definition RPA_LRI.h:107
Definition unitcell.h:15
Definition density_matrix.h:70
Definition elecstate.h:15
Definition psi.h:37
Exx_Info exx_info
Definition exx_info.cpp:8
std::vector< Index_T > IndexLNM
Definition element_basis_index.h:42
Definition exx_lip.h:23
std::pair< int, TC > TAC
Definition ri_cv_io_test.cpp:10
Definition exx_info.h:52