45inline std::vector<T>
cVc(
T* V,
55 const T alpha = (
T)1.0;
56 const T beta = (
T)0.0;
60 nbasis, nbands, nbasis,
61 alpha, V, i1, i1, pv.
desc,
63 beta, Vc.data(), i1, i1, pv.
desc_wfc);
65 container::BlasConnector::gemm(transa, transb, nbasis, nbands, nbasis, alpha, V, nbasis, c, nbasis, beta, Vc.data(), nbasis);
67 std::vector<T>
cVc(p2d.
nloc, 0.0);
68 transa = (std::is_same<T, double>::value ?
'T' :
'C');
71 nbands, nbands, nbasis,
74 beta,
cVc.data(), i1, i1, p2d.
desc);
76 container::BlasConnector::gemm(transa, transb, nbands, nbands, nbasis, alpha, c, nbasis, Vc.data(), nbasis, beta,
cVc.data(), nbasis);
81inline double get_real(
const std::complex<double>& c)
115 std::vector<double> e(nbands, 0.0);
116 for (
int i = 0; i < nbands; ++i)
128#ifndef SET_GINT_POINTER_H
129#define SET_GINT_POINTER_H
143void set_gint_pointer<std::complex<double>>(
Gint_Gamma& gint_gamma,
152 const int nspin0,
const int nbands,
153 const std::vector<std::vector<double>>& e_orb,
154 const std::string& term,
const std::string& label,
const bool app =
false)
156 assert(e_orb.size() == kv.
get_nks());
157 const int nk = kv.
get_nks() / nspin0;
160 app ? std::ios::app : std::ios::out);
161 ofs << nk <<
"\n" << nspin0 <<
"\n" << nbands <<
"\n";
162 ofs << std::scientific << std::setprecision(16);
163 for (
int ik = 0; ik < nk; ++ik)
165 for (
int is = 0; is < nspin0; ++is)
167 for (
auto e : e_orb[is * nk + ik])
177template <
typename TK,
typename TR>
193 const std::vector<double>& orb_cutoff,
198 std::vector<std::map<
int, std::map<
TAC, RI::Tensor<double>>>>* Hexxd =
nullptr,
199 std::vector<std::map<
int, std::map<
TAC, RI::Tensor<std::complex<double>>>>>* Hexxc =
nullptr
212 =
new elecstate::Potential(&rhod_basis, &rho_basis, &ucell, &vloc, &sf, &solvent, &etxc, &vtxc);
213 std::vector<std::string> compnents_list = {
"xc"};
219 int nspin0 = (nspin == 2) ? 2 : 1;
221 for (
int is = 0; is < nspin0; ++is) {
222 vxcs_R_ao[is].set_zero();
223 if (std::is_same<TK, double>::value) { vxcs_R_ao[is].fix_gamma(); }
232 set_gint_pointer<TK>(gint_gamma, gint_k, gint);
234 std::vector<hamilt::Veff<hamilt::OperatorLCAO<TK, TR>>*> vxcs_op_ao(nspin0);
235 for (
int is = 0; is < nspin0; ++is)
238 &vxc_k_ao, kv.
kvec_d, potxc, &vxcs_R_ao[is], &ucell, orb_cutoff, &gd, nspin);
242 std::vector<std::vector<double>> e_orb_locxc;
243 std::vector<std::vector<double>> e_orb_tot;
245 hamilt::OperatorEXX<hamilt::OperatorLCAO<TK, TR>> vexx_op_ao(&vxc_k_ao,
246 &vxcs_R_ao[0],ucell, kv, Hexxd, Hexxc, hamilt::Add_Hexx_Type::k);
248 hamilt::OperatorEXX<hamilt::OperatorLCAO<TK, TR>> vexxonly_op_ao(&vexxonly_k_ao,
249 &vxcs_R_ao[0],ucell, kv, Hexxd, Hexxc, hamilt::Add_Hexx_Type::k);
250 std::vector<std::vector<double>> e_orb_exx;
262 for (
int ik = 0; ik < kv.
get_nks(); ++ik)
267 const std::vector<TK>& vlocxc_k_mo =
cVc(vxc_k_ao.
get_hk(), &
psi(ik, 0, 0), nbasis, nbands, *pv, p2d);
272 e_orb_locxc.emplace_back(
orbital_energy(ik, nbands, vlocxc_k_mo, p2d));
274 vexx_op_ao.contributeHk(ik);
275 vexxonly_op_ao.contributeHk(ik);
276 std::vector<TK> vexx_k_mo =
cVc(vexxonly_k_ao.
get_hk(), &
psi(ik, 0, 0), nbasis, nbands, *pv, p2d);
277 e_orb_exx.emplace_back(
orbital_energy(ik, nbands, vexx_k_mo, p2d));
287 const std::vector<TK>& vxc_tot_k_mo =
cVc(vxc_k_ao.
get_hk(), &
psi(ik, 0, 0), nbasis, nbands, *pv, p2d);
288 e_orb_tot.emplace_back(
orbital_energy(ik, nbands, vxc_tot_k_mo, p2d));
293 const int istep = -1;
294 const int out_label = 1;
295 const bool out_app_flag = 0;
301 out_label,out_app_flag,gamma_only,istep);
326 for (
int is = 0; is < nspin0; ++is)
328 delete vxcs_op_ao[is];
Definition gint_gamma.h:23
Definition sltk_grid_driver.h:43
int get_nks() const
Definition klist.h:68
std::vector< ModuleBase::Vector3< double > > kvec_d
Cartesian coordinates of k points.
Definition klist.h:16
std::vector< int > ik2iktot
[nks] map ik to the global index of k points
Definition klist.h:128
std::vector< int > isk
ngk, number of plane waves for each k point
Definition klist.h:21
int get_nkstot() const
Definition klist.h:73
int nc
Definition matrix.h:24
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56
This class packs the basic information of 2D-block-cyclic parallel distribution of an arbitrary matri...
Definition parallel_2d.h:12
bool in_this_processor(const int iw1_all, const int iw2_all) const
check whether a global index is in this process
Definition parallel_2d.cpp:8
int blacs_ctxt
BLACS context.
Definition parallel_2d.h:100
int local2global_col(const int ilc) const
get the global index of a local index (col)
Definition parallel_2d.h:63
int set(const int mg, const int ng, const int nb, const int blacs_ctxt)
Set up the info of a block-cyclic distribution using given BLACS context.
Definition parallel_2d.cpp:115
int get_row_size() const
number of local rows
Definition parallel_2d.h:21
void set_serial(const int mg, const int ng)
Definition parallel_2d.cpp:124
int local2global_row(const int ilr) const
get the global index of a local index (row)
Definition parallel_2d.h:57
int nb
block size
Definition parallel_2d.h:123
int global2local_col(const int igc) const
get the local index of a global index (col)
Definition parallel_2d.h:51
int global2local_row(const int igr) const
get the local index of a global index (row)
Definition parallel_2d.h:45
int64_t nloc
Definition parallel_2d.h:117
int desc[9]
ScaLAPACK descriptor.
Definition parallel_2d.h:103
int get_col_size() const
number of local columns
Definition parallel_2d.h:27
Definition parallel_orbitals.h:9
long nloc_wfc
ncol_bands*nrow
Definition parallel_orbitals.h:20
int desc_wfc[9]
Definition parallel_orbitals.h:37
const Input_para & inp
Definition parameter.h:26
const System_para & globalv
Definition parameter.h:30
static void gemm(const char transa, const char transb, const int M, const int N, const int K, const double alpha, const double *A, const int IA, const int JA, const int *DESCA, const double *B, const int IB, const int JB, const int *DESCB, const double beta, double *C, const int IC, const int JC, const int *DESCC)
Definition scalapack_connector.h:244
Definition structure_factor.h:11
Definition potential_new.h:48
void pot_register(const std::vector< std::string > &components_list)
Definition potential_new.cpp:62
void update_from_charge(const Charge *const chg, const UnitCell *const ucell)
Definition potential_new.cpp:152
Definition hcontainer.h:144
Definition hs_matrix_k.hpp:11
void set_zero_hk()
Definition hs_matrix_k.hpp:29
TK * get_hk()
Definition hs_matrix_k.hpp:23
Definition op_dftu_lcao.h:14
void contributeHk(int ik)
Definition op_dftu_lcao.cpp:24
Definition operator_lcao.h:12
Definition veff_lcao.h:20
void contributeHR()
Definition veff_lcao.cpp:60
std::complex< double > complex
Definition diago_cusolver.cpp:13
#define T
Definition exp.cpp:237
Exx_Info exx_info
Definition test_xc.cpp:29
int MY_RANK
global index of process
Definition global_variable.cpp:21
void ZEROS(std::complex< T > *u, const TI n)
Definition global_function.h:109
const double Ry_to_eV
Definition constants.h:81
void TITLE(const std::string &class_name, const std::string &function_name, const bool disable)
Definition tool_title.cpp:18
This class has two functions: restart psi from the previous calculation, and write psi to the disk.
Definition cal_dos.h:9
void set_para2d_MO(const Parallel_Orbitals &pv, const int nbands, Parallel_2D &p2d)
Definition write_vxc.hpp:34
double get_real(const std::complex< double > &c)
Definition write_vxc.hpp:81
std::vector< double > orbital_energy(const int ik, const int nbands, const std::vector< T > &mat_mo, const Parallel_2D &p2d)
Definition write_vxc.hpp:110
std::pair< int, TC > TAC
Definition restart_exx_csr.h:11
std::vector< T > cVc(T *V, T *c, const int nbasis, const int nbands, const Parallel_Orbitals &pv, const Parallel_2D &p2d)
Definition write_vxc.hpp:45
void save_mat(const int istep, const T *mat, const int dim, const bool bit, const int precision, const bool tri, const bool app, const std::string &file_name, const Parallel_2D &pv, const int drank, const bool reduce=true)
save a square matrix, such as H(k) and S(k)
Definition write_HS.hpp:99
void set_gint_pointer< double >(Gint_Gamma &gint_gamma, Gint_k &gint_k, typename TGint< double >::type *&gint)
Definition write_vxc.hpp:136
std::string filename_output(const std::string &directory, const std::string &property, const std::string &basis, const int ik_local, const std::vector< int > &ik2iktot, const int nspin, const int nkstot, const int out_type, const bool out_app_flag, const bool gamma_only, const int istep)
Definition filename.cpp:8
void write_Vxc(const int nspin, const int nbasis, const int drank, const Parallel_Orbitals *pv, const psi::Psi< TK > &psi, const UnitCell &ucell, Structure_Factor &sf, surchem &solvent, const ModulePW::PW_Basis &rho_basis, const ModulePW::PW_Basis &rhod_basis, const ModuleBase::matrix &vloc, const Charge &chg, Gint_Gamma &gint_gamma, Gint_k &gint_k, const K_Vectors &kv, const std::vector< double > &orb_cutoff, const ModuleBase::matrix &wg, Grid_Driver &gd)
write the Vxc matrix in KS orbital representation, usefull for GW calculation including terms: local/...
Definition write_vxc.hpp:178
void set_gint_pointer(Gint_Gamma &gint_gamma, Gint_k &gint_k, typename TGint< T >::type *&gint)
double all_band_energy(const int ik, const std::vector< T > &mat_mo, const Parallel_2D &p2d, const ModuleBase::matrix &wg)
Definition write_vxc.hpp:92
void write_orb_energy(const K_Vectors &kv, const int nspin0, const int nbands, const std::vector< std::vector< double > > &e_orb, const std::string &term, const std::string &label, const bool app=false)
Definition write_vxc.hpp:151
void reduce_all(T &object)
reduce in all process
Definition depend_mock.cpp:14
Parameter PARAM
Definition parameter.cpp:3
base device SOURCES math_dngvd_test cpp endif() if(ENABLE_GOOGLEBENCH) AddTest(TARGET PERF_MODULE_HSOLVER_KERNELS LIBS parameter $
Definition CMakeLists.txt:10
bool gamma_only_local
Definition system_parameter.h:38
std::string global_out_dir
global output directory
Definition system_parameter.h:42
Definition write_vxc.hpp:16