Skip to content

Commit

Permalink
change some variables from pointers to vector (#3977)
Browse files Browse the repository at this point in the history
* change Unitcell.lc from int* to vector

* fix

* initialize lc

* try to fix test fail

* change some variables from * to vector

* Revert "try to fix test fail"

This reverts commit e9c3f75.

* Revert "initialize lc"

This reverts commit e9c7bce.

* Revert "fix"

This reverts commit 5394e65.

* Revert "change Unitcell.lc from int* to vector"

This reverts commit bbb7c4d.

* change some variables into vector and fix problem

change * to vector
and fix the problem of unecessary fuction calls

* fix losing ;
  • Loading branch information
AmengFromCDH committed Apr 15, 2024
1 parent 9e6f12f commit 3035d4d
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 38 deletions.
23 changes: 10 additions & 13 deletions source/module_hamilt_general/module_surchem/minimize_cg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -184,54 +184,51 @@ void surchem::Leps2(const UnitCell& ucell,
grad_phi[ir].y *= epsilon[ir];
grad_phi[ir].z *= epsilon[ir];
}

double *lp_real = new double[rho_basis->nrxx];
ModuleBase::GlobalFunc::ZEROS(lp_real, rho_basis->nrxx);
std::vector<double> lp_real(rho_basis->nrxx,0);
ModuleBase::GlobalFunc::ZEROS(lp, rho_basis->npw);

double *grad_grad_phi = new double[rho_basis->nrxx];
std::vector<double> grad_grad_phi(rho_basis->nrxx,0);
complex<double> *grad_grad_phi_G = new complex<double>[rho_basis->npw];
ModuleBase::Vector3<double> *tmp_vector3 = new ModuleBase::Vector3<double>[rho_basis->nrxx];

// x
ModuleBase::GlobalFunc::ZEROS(grad_grad_phi, rho_basis->nrxx);
ModuleBase::GlobalFunc::ZEROS(grad_grad_phi_G, rho_basis->npw);
ModuleBase::GlobalFunc::ZEROS(tmp_vector3, rho_basis->nrxx);
for (int ir = 0; ir < rho_basis->nrxx; ir++)
{
grad_grad_phi[ir] = grad_phi[ir].x;
}
rho_basis->real2recip(grad_grad_phi, grad_grad_phi_G);
rho_basis->real2recip(grad_grad_phi.data(), grad_grad_phi_G);
XC_Functional::grad_rho(grad_grad_phi_G, tmp_vector3, rho_basis, ucell.tpiba);
for (int ir = 0; ir < rho_basis->nrxx; ir++)
{
lp_real[ir] += tmp_vector3[ir].x;
}

// y
ModuleBase::GlobalFunc::ZEROS(grad_grad_phi, rho_basis->nrxx);
grad_grad_phi.assign(grad_grad_phi.size(),0.0);
ModuleBase::GlobalFunc::ZEROS(grad_grad_phi_G, rho_basis->npw);
ModuleBase::GlobalFunc::ZEROS(tmp_vector3, rho_basis->nrxx);
for (int ir = 0; ir < rho_basis->nrxx; ir++)
{
grad_grad_phi[ir] = grad_phi[ir].y;
}
rho_basis->real2recip(grad_grad_phi, grad_grad_phi_G);
rho_basis->real2recip(grad_grad_phi.data(), grad_grad_phi_G);
XC_Functional::grad_rho(grad_grad_phi_G, tmp_vector3, rho_basis, ucell.tpiba);
for (int ir = 0; ir < rho_basis->nrxx; ir++)
{
lp_real[ir] += tmp_vector3[ir].y;
}

// z
ModuleBase::GlobalFunc::ZEROS(grad_grad_phi, rho_basis->nrxx);
grad_grad_phi.assign(grad_grad_phi.size(),0.0);
ModuleBase::GlobalFunc::ZEROS(grad_grad_phi_G, rho_basis->npw);
ModuleBase::GlobalFunc::ZEROS(tmp_vector3, rho_basis->nrxx);
for (int ir = 0; ir < rho_basis->nrxx; ir++)
{
grad_grad_phi[ir] = grad_phi[ir].z;
}
rho_basis->real2recip(grad_grad_phi, grad_grad_phi_G);
rho_basis->real2recip(grad_grad_phi.data(), grad_grad_phi_G);
XC_Functional::grad_rho(grad_grad_phi_G, tmp_vector3, rho_basis, ucell.tpiba);
for (int ir = 0; ir < rho_basis->nrxx; ir++)
{
Expand All @@ -242,13 +239,13 @@ void surchem::Leps2(const UnitCell& ucell,
// cout << lp_real << [i] << endl;
// }

rho_basis->real2recip(lp_real, lp);
rho_basis->real2recip(lp_real.data(), lp);
// cout<<"lp: "<<endl;
// test_print(lp, 10);

delete[] grad_phi;
delete[] lp_real;
delete[] grad_grad_phi;
std::vector<double>().swap(lp_real);
std::vector<double>().swap(grad_grad_phi);
delete[] grad_grad_phi_G;
delete[] tmp_vector3;
}
28 changes: 12 additions & 16 deletions source/module_hsolver/hsolver_pw.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -192,8 +192,7 @@ void HSolverPW<T, Device>::solve(hamilt::Hamilt<T, Device>* pHamilt,
_gk[ig] = this->wfc_basis->getgpluskcar(ik, ig);
}

double* kpt;
kpt = new double[3];
std::vector<double> kpt(3,0);
kpt[0] = this->wfc_basis->kvec_c[ik].x;
kpt[1] = this->wfc_basis->kvec_c[ik].y;
kpt[2] = this->wfc_basis->kvec_c[ik].z;
Expand All @@ -217,15 +216,15 @@ void HSolverPW<T, Device>::solve(hamilt::Hamilt<T, Device>* pHamilt,

GlobalC::paw_cell.set_paw_k(npw,
wfc_basis->npwk_max,
kpt,
kpt.data(),
this->wfc_basis->get_ig2ix(ik).data(),
this->wfc_basis->get_ig2iy(ik).data(),
this->wfc_basis->get_ig2iz(ik).data(),
(const double**)kpg,
GlobalC::ucell.tpiba,
(const double**)gcar);

delete[] kpt;
std::vector<double>().swap(kpt);
for (int ipw = 0; ipw < npw; ipw++)
{
delete[] kpg[ipw];
Expand Down Expand Up @@ -293,8 +292,7 @@ void HSolverPW<T, Device>::solve(hamilt::Hamilt<T, Device>* pHamilt,
_gk[ig] = this->wfc_basis->getgpluskcar(ik, ig);
}

double* kpt;
kpt = new double[3];
std::vector<double> kpt(3,0);
kpt[0] = this->wfc_basis->kvec_c[ik].x;
kpt[1] = this->wfc_basis->kvec_c[ik].y;
kpt[2] = this->wfc_basis->kvec_c[ik].z;
Expand All @@ -318,15 +316,15 @@ void HSolverPW<T, Device>::solve(hamilt::Hamilt<T, Device>* pHamilt,

GlobalC::paw_cell.set_paw_k(npw,
wfc_basis->npwk_max,
kpt,
kpt.data(),
this->wfc_basis->get_ig2ix(ik).data(),
this->wfc_basis->get_ig2iy(ik).data(),
this->wfc_basis->get_ig2iz(ik).data(),
(const double**)kpg,
GlobalC::ucell.tpiba,
(const double**)gcar);

delete[] kpt;
std::vector<double>().swap(kpt);
for (int ipw = 0; ipw < npw; ipw++)
{
delete[] kpg[ipw];
Expand Down Expand Up @@ -413,8 +411,7 @@ void HSolverPW<T, Device>::solve(hamilt::Hamilt<T, Device>* pHamilt, // ESolver_
_gk[ig] = this->wfc_basis->getgpluskcar(ik, ig);
}

double* kpt;
kpt = new double[3];
std::vector<double> kpt(3,0);
kpt[0] = this->wfc_basis->kvec_c[ik].x;
kpt[1] = this->wfc_basis->kvec_c[ik].y;
kpt[2] = this->wfc_basis->kvec_c[ik].z;
Expand All @@ -438,15 +435,15 @@ void HSolverPW<T, Device>::solve(hamilt::Hamilt<T, Device>* pHamilt, // ESolver_

GlobalC::paw_cell.set_paw_k(npw,
wfc_basis->npwk_max,
kpt,
kpt.data(),
this->wfc_basis->get_ig2ix(ik).data(),
this->wfc_basis->get_ig2iy(ik).data(),
this->wfc_basis->get_ig2iz(ik).data(),
(const double**)kpg,
GlobalC::ucell.tpiba,
(const double**)gcar);

delete[] kpt;
std::vector<double>().swap(kpt);
for (int ipw = 0; ipw < npw; ipw++)
{
delete[] kpg[ipw];
Expand Down Expand Up @@ -518,8 +515,7 @@ void HSolverPW<T, Device>::solve(hamilt::Hamilt<T, Device>* pHamilt, // ESolver_
_gk[ig] = this->wfc_basis->getgpluskcar(ik, ig);
}

double* kpt;
kpt = new double[3];
std::vector<double> kpt(3,0);
kpt[0] = this->wfc_basis->kvec_c[ik].x;
kpt[1] = this->wfc_basis->kvec_c[ik].y;
kpt[2] = this->wfc_basis->kvec_c[ik].z;
Expand All @@ -543,15 +539,15 @@ void HSolverPW<T, Device>::solve(hamilt::Hamilt<T, Device>* pHamilt, // ESolver_

GlobalC::paw_cell.set_paw_k(npw,
wfc_basis->npwk_max,
kpt,
kpt.data(),
this->wfc_basis->get_ig2ix(ik).data(),
this->wfc_basis->get_ig2iy(ik).data(),
this->wfc_basis->get_ig2iz(ik).data(),
(const double**)kpg,
GlobalC::ucell.tpiba,
(const double**)gcar);

delete[] kpt;
std::vector<double>().swap(kpt);
for (int ipw = 0; ipw < npw; ipw++)
{
delete[] kpg[ipw];
Expand Down
17 changes: 8 additions & 9 deletions source/module_io/write_dm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,13 +128,12 @@ void ModuleIO::write_dm(

#else
//xiaohui modify 2014-06-18

double* tmp = new double[nlocal];
int* count = new int[nlocal];
std::vector<double> tmp(nlocal,0);
std::vector<int> count(nlocal,0);
for (int i=0; i<nlocal; ++i)
{
// when reduce, there may be 'redundance', we need to count them.
ModuleBase::GlobalFunc::ZEROS(count, nlocal);
count.assign(count.size(),0);
const int mu = trace_lo[i];
if (mu >= 0)
{
Expand All @@ -147,10 +146,10 @@ void ModuleIO::write_dm(
}
}
}
Parallel_Reduce::reduce_all(count, nlocal);
Parallel_Reduce::reduce_all(count.data(), nlocal);

// reduce the density matrix for 'i' line.
ModuleBase::GlobalFunc::ZEROS(tmp, nlocal);
tmp.assign(tmp.size(),0);
if (mu >= 0)
{
for (int j=0; j<nlocal; j++)
Expand All @@ -163,7 +162,7 @@ void ModuleIO::write_dm(
}
}
}
Parallel_Reduce::reduce_all(tmp, nlocal);
Parallel_Reduce::reduce_all(tmp.data(), nlocal);

if(my_rank==0)
{
Expand All @@ -181,8 +180,8 @@ void ModuleIO::write_dm(
}
}
}
delete[] tmp;
delete[] count;
std::vector<double>().swap(tmp);
std::vector<int>().swap(count);
#endif
if(my_rank==0)
{
Expand Down

0 comments on commit 3035d4d

Please sign in to comment.