Skip to content

Commit 579e58a

Browse files
committed
change ucell in module_ri/rpa_lri.cpp
1 parent 9bb0813 commit 579e58a

File tree

6 files changed

+36
-23
lines changed

6 files changed

+36
-23
lines changed

source/module_esolver/esolver_ks_lcao.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1080,7 +1080,7 @@ void ESolver_KS_LCAO<TK, TR>::after_scf(UnitCell& ucell, const int istep)
10801080
this->kv,
10811081
orb_);
10821082
rpa_lri_double.init(MPI_COMM_WORLD, this->kv, orb_.cutoffs());
1083-
rpa_lri_double.out_for_RPA(this->pv, *(this->psi), this->pelec);
1083+
rpa_lri_double.out_for_RPA(ucell,this->pv, *(this->psi), this->pelec);
10841084
}
10851085
#endif
10861086

source/module_ri/Exx_LRI.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ void Exx_LRI<Tdata>::cal_exx_ions(const UnitCell& ucell,
138138
list_As_Vs = RI::Distribute_Equally::distribute_atoms_periods(this->mpi_comm, atoms, period_Vs, 2, false);
139139

140140
std::map<TA,std::map<TAC,RI::Tensor<Tdata>>>
141-
Vs = this->cv.cal_Vs(
141+
Vs = this->cv.cal_Vs(ucell,
142142
list_As_Vs.first, list_As_Vs.second[0],
143143
{{"writable_Vws",true}});
144144
this->cv.Vws = LRI_CV_Tools::get_CVws(Vs);
@@ -148,7 +148,7 @@ void Exx_LRI<Tdata>::cal_exx_ions(const UnitCell& ucell,
148148
if(PARAM.inp.cal_force || PARAM.inp.cal_stress)
149149
{
150150
std::array<std::map<TA,std::map<TAC,RI::Tensor<Tdata>>>,3>
151-
dVs = this->cv.cal_dVs(
151+
dVs = this->cv.cal_dVs(ucell,
152152
list_As_Vs.first, list_As_Vs.second[0],
153153
{{"writable_dVws",true}});
154154
this->cv.dVws = LRI_CV_Tools::get_dCVws(dVs);
@@ -166,6 +166,7 @@ void Exx_LRI<Tdata>::cal_exx_ions(const UnitCell& ucell,
166166

167167
std::pair<std::map<TA,std::map<TAC,RI::Tensor<Tdata>>>, std::array<std::map<TA,std::map<TAC,RI::Tensor<Tdata>>>,3>>
168168
Cs_dCs = this->cv.cal_Cs_dCs(
169+
ucell,
169170
list_As_Cs.first, list_As_Cs.second[0],
170171
{{"cal_dC",PARAM.inp.cal_force||PARAM.inp.cal_stress},
171172
{"writable_Cws",true}, {"writable_dCws",true}, {"writable_Vws",false}, {"writable_dVws",false}});

source/module_ri/LRI_CV.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,20 @@ class LRI_CV
4242
const double &ccp_rmesh_times_in);
4343
inline std::map<TA,std::map<TAC,RI::Tensor<Tdata>>>
4444
cal_Vs(
45+
const UnitCell &ucell,
4546
const std::vector<TA> &list_A0,
4647
const std::vector<TAC> &list_A1,
4748
const std::map<std::string,bool> &flags); // "writable_Vws"
4849
inline std::array<std::map<TA,std::map<TAC,RI::Tensor<Tdata>>>,3>
4950
cal_dVs(
51+
const UnitCell &ucell,
5052
const std::vector<TA> &list_A0,
5153
const std::vector<TAC> &list_A1,
5254
const std::map<std::string,bool> &flags); // "writable_dVws"
5355
std::pair<std::map<TA,std::map<TAC,RI::Tensor<Tdata>>>,
5456
std::array<std::map<TA,std::map<TAC,RI::Tensor<Tdata>>>,3>>
5557
cal_Cs_dCs(
58+
const UnitCell &ucell,
5659
const std::vector<TA> &list_A0,
5760
const std::vector<TAC> &list_A1,
5861
const std::map<std::string,bool> &flags); // "cal_dC", "writable_Cws", "writable_dCws", "writable_Vws", "writable_dVws"
@@ -91,6 +94,7 @@ class LRI_CV
9194
template<typename Tresult>
9295
std::map<TA,std::map<TAC,Tresult>>
9396
cal_datas(
97+
const UnitCell &ucell,
9498
const std::vector<TA> &list_A0,
9599
const std::vector<TAC> &list_A1,
96100
const std::map<std::string,bool> &flags,

source/module_ri/LRI_CV.hpp

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ void LRI_CV<Tdata>::set_orbitals(
7676

7777
template<typename Tdata> template<typename Tresult>
7878
auto LRI_CV<Tdata>::cal_datas(
79+
const UnitCell &ucell,
7980
const std::vector<TA> &list_A0,
8081
const std::vector<TAC> &list_A1,
8182
const std::map<std::string,bool> &flags,
@@ -96,17 +97,17 @@ auto LRI_CV<Tdata>::cal_datas(
9697
const TA iat0 = list_A0[i0];
9798
const TA iat1 = list_A1[i1].first;
9899
const TC &cell1 = list_A1[i1].second;
99-
const int it0 = GlobalC::ucell.iat2it[iat0];
100-
const int ia0 = GlobalC::ucell.iat2ia[iat0];
101-
const int it1 = GlobalC::ucell.iat2it[iat1];
102-
const int ia1 = GlobalC::ucell.iat2ia[iat1];
103-
const ModuleBase::Vector3<double> tau0 = GlobalC::ucell.atoms[it0].tau[ia0];
104-
const ModuleBase::Vector3<double> tau1 = GlobalC::ucell.atoms[it1].tau[ia1];
100+
const int it0 = ucell.iat2it[iat0];
101+
const int ia0 = ucell.iat2ia[iat0];
102+
const int it1 = ucell.iat2it[iat1];
103+
const int ia1 = ucell.iat2ia[iat1];
104+
const ModuleBase::Vector3<double> tau0 = ucell.atoms[it0].tau[ia0];
105+
const ModuleBase::Vector3<double> tau1 = ucell.atoms[it1].tau[ia1];
105106
const double Rcut = std::min(
106107
orb_cutoff_[it0] * rmesh_times + orb_cutoff_[it1],
107108
orb_cutoff_[it1] * rmesh_times + orb_cutoff_[it0]);
108-
const Abfs::Vector3_Order<double> R_delta = -tau0+tau1+(RI_Util::array3_to_Vector3(cell1)*GlobalC::ucell.latvec);
109-
if( R_delta.norm()*GlobalC::ucell.lat0 < Rcut )
109+
const Abfs::Vector3_Order<double> R_delta = -tau0+tau1+(RI_Util::array3_to_Vector3(cell1)*ucell.latvec);
110+
if( R_delta.norm()*ucell.lat0 < Rcut )
110111
{
111112
const Tresult Data = func_DPcal_data(it0, it1, R_delta, flags);
112113
// if(Data.norm(std::numeric_limits<double>::max()) > threshold)
@@ -124,6 +125,7 @@ auto LRI_CV<Tdata>::cal_datas(
124125

125126
template<typename Tdata>
126127
auto LRI_CV<Tdata>::cal_Vs(
128+
const UnitCell &ucell,
127129
const std::vector<TA> &list_A0,
128130
const std::vector<TAC> &list_A1,
129131
const std::map<std::string,bool> &flags) // + "writable_Vws"
@@ -134,11 +136,12 @@ auto LRI_CV<Tdata>::cal_Vs(
134136
func_DPcal_V = std::bind(
135137
&LRI_CV<Tdata>::DPcal_V, this,
136138
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4);
137-
return this->cal_datas(list_A0, list_A1, flags, this->ccp_rmesh_times, func_DPcal_V);
139+
return this->cal_datas(ucell,list_A0, list_A1, flags, this->ccp_rmesh_times, func_DPcal_V);
138140
}
139141

140142
template<typename Tdata>
141143
auto LRI_CV<Tdata>::cal_dVs(
144+
const UnitCell &ucell,
142145
const std::vector<TA> &list_A0,
143146
const std::vector<TAC> &list_A1,
144147
const std::map<std::string,bool> &flags) // + "writable_dVws"
@@ -150,11 +153,12 @@ auto LRI_CV<Tdata>::cal_dVs(
150153
&LRI_CV<Tdata>::DPcal_dV, this,
151154
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4);
152155
return LRI_CV_Tools::change_order(
153-
this->cal_datas(list_A0, list_A1, flags, this->ccp_rmesh_times, func_DPcal_dV));
156+
this->cal_datas(ucell,list_A0, list_A1, flags, this->ccp_rmesh_times, func_DPcal_dV));
154157
}
155158

156159
template<typename Tdata>
157160
auto LRI_CV<Tdata>::cal_Cs_dCs(
161+
const UnitCell &ucell,
158162
const std::vector<TA> &list_A0,
159163
const std::vector<TAC> &list_A1,
160164
const std::map<std::string,bool> &flags) // "cal_dC" + "writable_Cws", "writable_dCws", "writable_Vws", "writable_dVws"
@@ -166,7 +170,7 @@ auto LRI_CV<Tdata>::cal_Cs_dCs(
166170
&LRI_CV<Tdata>::DPcal_C_dC, this,
167171
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4);
168172
std::map<TA,std::map<TAC, std::pair<RI::Tensor<Tdata>, std::array<RI::Tensor<Tdata>,3>>>>
169-
Cs_dCs_tmp = this->cal_datas(list_A0, list_A1, flags, std::min(1.0,this->ccp_rmesh_times), func_DPcal_C_dC);
173+
Cs_dCs_tmp = this->cal_datas(ucell,list_A0, list_A1, flags, std::min(1.0,this->ccp_rmesh_times), func_DPcal_C_dC);
170174

171175
std::map<TA,std::map<TAC,RI::Tensor<Tdata>>> Cs;
172176
std::array<std::map<TA,std::map<TAC,RI::Tensor<Tdata>>>,3> dCs;

source/module_ri/RPA_LRI.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,14 @@ template <typename T, typename Tdata> class RPA_LRI
3838
}
3939
~RPA_LRI(){};
4040
void init(const MPI_Comm &mpi_comm_in, const K_Vectors &kv_in, const std::vector<double>& orb_cutoff);
41-
void cal_rpa_cv();
41+
void cal_rpa_cv(const UnitCell &ucell);
4242
void cal_postSCF_exx(const elecstate::DensityMatrix<T, Tdata>& dm,
4343
const MPI_Comm& mpi_comm_in,
4444
const UnitCell& ucell,
4545
const K_Vectors& kv,
4646
const LCAO_Orbitals& orb);
47-
void out_for_RPA(const Parallel_Orbitals& parav,
47+
void out_for_RPA(const UnitCell& ucell,
48+
const Parallel_Orbitals& parav,
4849
const psi::Psi<T>& psi,
4950
const elecstate::ElecState* pelec);
5051
void out_eigen_vector(const Parallel_Orbitals& parav, const psi::Psi<T>& psi);

source/module_ri/RPA_LRI.hpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ void RPA_LRI<T, Tdata>::init(const MPI_Comm& mpi_comm_in, const K_Vectors& kv_in
3131
}
3232

3333
template <typename T, typename Tdata>
34-
void RPA_LRI<T, Tdata>::cal_rpa_cv()
34+
void RPA_LRI<T, Tdata>::cal_rpa_cv(const UnitCell& ucell)
3535
{
36-
std::vector<TA> atoms(GlobalC::ucell.nat);
37-
for (int iat = 0; iat < GlobalC::ucell.nat; ++iat)
36+
std::vector<TA> atoms(ucell.nat);
37+
for (int iat = 0; iat < ucell.nat; ++iat)
3838
{
3939
atoms[iat] = iat;
4040
}
@@ -44,7 +44,8 @@ void RPA_LRI<T, Tdata>::cal_rpa_cv()
4444
const std::pair<std::vector<TA>, std::vector<std::vector<std::pair<TA, std::array<Tcell, Ndim>>>>> list_As_Vs
4545
= RI::Distribute_Equally::distribute_atoms(this->mpi_comm, atoms, period_Vs, 2, false);
4646

47-
std::map<TA, std::map<TAC, RI::Tensor<Tdata>>> Vs = exx_lri_rpa.cv.cal_Vs(list_As_Vs.first,
47+
std::map<TA, std::map<TAC, RI::Tensor<Tdata>>> Vs = exx_lri_rpa.cv.cal_Vs(ucell,
48+
list_As_Vs.first,
4849
list_As_Vs.second[0],
4950
{
5051
{"writable_Vws", true}
@@ -57,7 +58,8 @@ void RPA_LRI<T, Tdata>::cal_rpa_cv()
5758

5859
std::pair<std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>,
5960
std::array<std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>, 3>>
60-
Cs_dCs = exx_lri_rpa.cv.cal_Cs_dCs(list_As_Cs.first,
61+
Cs_dCs = exx_lri_rpa.cv.cal_Cs_dCs(ucell,
62+
list_As_Cs.first,
6163
list_As_Cs.second[0],
6264
{
6365
{"cal_dC", false},
@@ -118,7 +120,8 @@ void RPA_LRI<T, Tdata>::cal_postSCF_exx(const elecstate::DensityMatrix<T, Tdata>
118120
}
119121

120122
template <typename T, typename Tdata>
121-
void RPA_LRI<T, Tdata>::out_for_RPA(const Parallel_Orbitals& parav,
123+
void RPA_LRI<T, Tdata>::out_for_RPA(const UnitCell& ucell,
124+
const Parallel_Orbitals& parav,
122125
const psi::Psi<T>& psi,
123126
const elecstate::ElecState* pelec)
124127
{
@@ -127,7 +130,7 @@ void RPA_LRI<T, Tdata>::out_for_RPA(const Parallel_Orbitals& parav,
127130
this->out_eigen_vector(parav, psi);
128131
this->out_struc();
129132

130-
this->cal_rpa_cv();
133+
this->cal_rpa_cv(ucell);
131134
std::cout << "rpa_pca_threshold: " << this->info.pca_threshold << std::endl;
132135
std::cout << "rpa_ccp_rmesh_times: " << this->info.ccp_rmesh_times << std::endl;
133136
std::cout << "rpa_lcao_exx(Ha): " << std::fixed << std::setprecision(15) << exx_lri_rpa.Eexx / 2.0 << std::endl;

0 commit comments

Comments
 (0)