ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
Exx_LRI.h
Go to the documentation of this file.
1//=======================
2// AUTHOR : Peize Lin
3// DATE : 2022-08-17
4//=======================
5
6#ifndef EXX_LRI_H
7#define EXX_LRI_H
8
9#include "LRI_CV.h"
12#include "source_base/matrix.h"
13#include <RI/physics/Exx.h>
14
15#include <vector>
16#include <array>
17#include <map>
18#include <deque>
19#include <mpi.h>
20
22
24
25 template<typename T, typename Tdata>
26 class RPA_LRI;
27
28 template<typename T, typename Tdata>
30
31 namespace LR
32 {
33 template<typename T, typename TR>
34 class ESolver_LR;
35
36 template<typename T>
38 }
39
40template<typename Tdata>
42{
43 // match with Conv_Coulomb_Pot_K::Coulomb_Method
44 public:
46 std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> abfs_ccp;
47};
48
49template<typename Tdata>
51{
52private:
53 using TA = int;
54 using Tcell = int;
55 static constexpr std::size_t Ndim = 3;
56 using TC = std::array<Tcell,Ndim>;
57 using TAC = std::pair<TA,TC>;
58 using TatomR = std::array<double,Ndim>; // tmp
59
60public:
61 Exx_LRI(const Exx_Info::Exx_Info_RI& info_in) :info(info_in) {}
62 Exx_LRI operator=(const Exx_LRI&) = delete;
64
65 void init(
66 const MPI_Comm &mpi_comm_in,
67 const UnitCell &ucell,
68 const K_Vectors &kv_in,
69 const LCAO_Orbitals& orb);
70 void cal_exx_ions(const UnitCell& ucell, const bool write_cv = false);
71 void cal_exx_elec(
72 const std::vector<std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>>& Ds,
73 const UnitCell& ucell,
74 const Parallel_Orbitals& pv,
75 const ModuleSymmetry::Symmetry_rotation* p_symrot = nullptr);
76 void cal_exx_force(const int& nat);
77 void cal_exx_stress(const double& omega, const double& lat0);
78
79 void reset_Cs(const std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>& Cs_in) { this->exx_lri.set_Cs(Cs_in, this->info.C_threshold); }
80 void reset_Vs(const std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>& Vs_in) { this->exx_lri.set_Vs(Vs_in, this->info.V_threshold); }
81 //std::vector<std::vector<int>> get_abfs_nchis() const;
82
83 std::vector< std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>> Hexxs;
84 double Eexx;
87
88
89private:
91 MPI_Comm mpi_comm;
92 const K_Vectors *p_kv = nullptr;
94 std::vector<double> orb_cutoff_;
95
96 std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> lcaos;
97 std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> abfs;
98 //std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> abfs_ccp;
99 std::map<Conv_Coulomb_Pot_K::Coulomb_Method, Exx_Obj<Tdata>> exx_objs;
100 //LRI_CV<Tdata> cv;
101 RI::Exx<TA,Tcell,Ndim,Tdata> exx_lri;
103 std::pair<bool,
105 std::vector<std::map<std::string,std::string>>>>> coulomb_settings;
106
107 void post_process_Hexx( std::map<TA, std::map<TAC, RI::Tensor<Tdata>>> &Hexxs_io ) const;
108 double post_process_Eexx(const double& Eexx_in) const;
109
110 friend class RPA_LRI<double, Tdata>;
111 friend class RPA_LRI<std::complex<double>, Tdata>;
112 friend class Exx_LRI_Interface<double, Tdata>;
113 friend class Exx_LRI_Interface<std::complex<double>, Tdata>;
114 friend class LR::ESolver_LR<double, double>;
115 friend class LR::ESolver_LR<std::complex<double>, double>;
116 friend class LR::OperatorLREXX<double>;
117 friend class LR::OperatorLREXX<std::complex<double>>;
118};
119
120#include "Exx_LRI.hpp"
121
122#endif
Definition Exx_LRI_interface.h:32
Definition Exx_LRI.h:51
ModuleBase::matrix stress_exx
Definition Exx_LRI.h:86
void post_process_Hexx(std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > &Hexxs_io) const
Definition Exx_LRI.hpp:237
std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > lcaos
Definition Exx_LRI.h:96
std::map< Conv_Coulomb_Pot_K::Coulomb_Method, std::pair< bool, std::map< Conv_Coulomb_Pot_K::Coulomb_Type, std::vector< std::map< std::string, std::string > > > > > coulomb_settings
Definition Exx_LRI.h:105
std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > abfs
Definition Exx_LRI.h:97
void init(const MPI_Comm &mpi_comm_in, const UnitCell &ucell, const K_Vectors &kv_in, const LCAO_Orbitals &orb)
Definition Exx_LRI.hpp:29
void reset_Vs(const std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > &Vs_in)
Definition Exx_LRI.h:80
static constexpr std::size_t Ndim
Definition Exx_LRI.h:55
const Exx_Info::Exx_Info_RI & info
Definition Exx_LRI.h:90
ORB_gaunt_table MGT
Definition Exx_LRI.h:93
Exx_LRI(const Exx_Info::Exx_Info_RI &info_in)
Definition Exx_LRI.h:61
std::vector< std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > > Hexxs
Definition Exx_LRI.h:83
ModuleBase::matrix force_exx
Definition Exx_LRI.h:85
void cal_exx_elec(const std::vector< std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > > &Ds, const UnitCell &ucell, const Parallel_Orbitals &pv, const ModuleSymmetry::Symmetry_rotation *p_symrot=nullptr)
Definition Exx_LRI.hpp:185
double post_process_Eexx(const double &Eexx_in) const
Definition Exx_LRI.hpp:248
std::pair< TA, TC > TAC
Definition Exx_LRI.h:57
void reset_Cs(const std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > &Cs_in)
Definition Exx_LRI.h:79
int TA
Definition Exx_LRI.h:53
double Eexx
Definition Exx_LRI.h:84
std::map< Conv_Coulomb_Pot_K::Coulomb_Method, Exx_Obj< Tdata > > exx_objs
Definition Exx_LRI.h:99
void cal_exx_ions(const UnitCell &ucell, const bool write_cv=false)
Definition Exx_LRI.hpp:70
MPI_Comm mpi_comm
Definition Exx_LRI.h:91
void cal_exx_force(const int &nat)
Definition Exx_LRI.hpp:274
std::array< Tcell, Ndim > TC
Definition Exx_LRI.h:56
std::array< double, Ndim > TatomR
Definition Exx_LRI.h:58
RI::Exx< TA, Tcell, Ndim, Tdata > exx_lri
Definition Exx_LRI.h:101
Exx_LRI operator=(const Exx_LRI &)=delete
int Tcell
Definition Exx_LRI.h:54
void cal_exx_stress(const double &omega, const double &lat0)
Definition Exx_LRI.hpp:297
const K_Vectors * p_kv
Definition Exx_LRI.h:92
Exx_LRI operator=(Exx_LRI &&)
std::vector< double > orb_cutoff_
Definition Exx_LRI.h:94
Definition Exx_LRI.h:42
LRI_CV< Tdata > cv
Definition Exx_LRI.h:45
std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > abfs_ccp
Definition Exx_LRI.h:46
Definition klist.h:13
Definition ORB_read.h:19
Definition LRI_CV.h:25
Excited State Solver: Linear Response TDDFT (Tamm Dancoff Approximation)
Definition esolver_lrtd_lcao.h:30
Definition Exx_LRI.h:37
Definition matrix.h:19
Definition symmetry_rotation.h:16
Definition ORB_gaunt_table.h:9
Definition parallel_orbitals.h:9
Definition RPA_LRI.h:26
Definition unitcell.h:16
std::complex< double > complex
Definition diago_cusolver.cpp:13
Coulomb_Type
Definition conv_coulomb_pot_k.h:10
Coulomb_Method
Definition conv_coulomb_pot_k.h:16
Definition esolver_ks_lcao.h:37
Definition exx_info.h:53
double V_threshold
Definition exx_info.h:61
double C_threshold
Definition exx_info.h:60