From 6a8606dcb3c43c6179f1ac881968aac7252c2518 Mon Sep 17 00:00:00 2001 From: Critsium-xy Date: Thu, 24 Oct 2024 19:13:22 +0800 Subject: [PATCH 1/3] Fix #5343 by directly remove consts in diago_dav_subspace --- source/module_hsolver/diago_dav_subspace.cpp | 16 ++++++---------- source/module_hsolver/diago_dav_subspace.h | 2 +- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/source/module_hsolver/diago_dav_subspace.cpp b/source/module_hsolver/diago_dav_subspace.cpp index 7d298be7ac..d035d815b8 100644 --- a/source/module_hsolver/diago_dav_subspace.cpp +++ b/source/module_hsolver/diago_dav_subspace.cpp @@ -25,10 +25,6 @@ Diago_DavSubspace::Diago_DavSubspace(const std::vector& precond { this->device = base_device::get_device_type(this->ctx); - this->one = this->cs.one; - this->zero = this->cs.zero; - this->neg_one = this->cs.neg_one; - assert(david_ndim_in > 1); assert(david_ndim_in * nband_in < nbasis_in * this->diag_comm.nproc); @@ -559,8 +555,8 @@ void Diago_DavSubspace::diag_zhegvx(const int& nbase, } else { - std::vector> h_diag(nbase, std::vector(nbase, cs.zero[0])); - std::vector> s_diag(nbase, std::vector(nbase, cs.zero[0])); + std::vector> h_diag(nbase, std::vector(nbase, *this->zero)); + std::vector> s_diag(nbase, std::vector(nbase, *this->zero)); for (size_t i = 0; i < nbase; i++) { @@ -589,10 +585,10 @@ void Diago_DavSubspace::diag_zhegvx(const int& nbase, for (size_t j = nbase; j < this->nbase_x; j++) { - hcc[i * this->nbase_x + j] = cs.zero[0]; - hcc[j * this->nbase_x + i] = cs.zero[0]; - scc[i * this->nbase_x + j] = cs.zero[0]; - scc[j * this->nbase_x + i] = cs.zero[0]; + hcc[i * this->nbase_x + j] = *this->zero; + hcc[j * this->nbase_x + i] = *this->zero; + scc[i * this->nbase_x + j] = *this->zero; + scc[j * this->nbase_x + i] = *this->zero; } } } diff --git a/source/module_hsolver/diago_dav_subspace.h b/source/module_hsolver/diago_dav_subspace.h index c335513a71..dc1e6c79a6 100644 --- a/source/module_hsolver/diago_dav_subspace.h +++ b/source/module_hsolver/diago_dav_subspace.h @@ -158,8 +158,8 @@ class Diago_DavSubspace using syncmem_h2d_op = base_device::memory::synchronize_memory_op; using syncmem_d2h_op = base_device::memory::synchronize_memory_op; - const_nums cs; const T *one = nullptr, *zero = nullptr, *neg_one = nullptr; + const T one_ = static_cast(1.0), zero_ = static_cast(0.0), neg_one_ = static_cast(-1.0); }; } // namespace hsolver From 541be8c790b2033dbe3f62577ccaaaf552dc5514 Mon Sep 17 00:00:00 2001 From: Critsium-xy Date: Thu, 24 Oct 2024 19:47:23 +0800 Subject: [PATCH 2/3] Fix 1 --- source/module_hsolver/diago_dav_subspace.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/module_hsolver/diago_dav_subspace.cpp b/source/module_hsolver/diago_dav_subspace.cpp index d035d815b8..cbea5aa69f 100644 --- a/source/module_hsolver/diago_dav_subspace.cpp +++ b/source/module_hsolver/diago_dav_subspace.cpp @@ -193,7 +193,7 @@ int Diago_DavSubspace::diag_once(const HPsiFunc& hpsi_func, this->dim, this->vcc, this->nbase_x, - this->zero, + *this->zero, psi_in, psi_in_dmax); @@ -279,7 +279,7 @@ void Diago_DavSubspace::cal_grad(const HPsiFunc& hpsi_func, this->dim, vcc, this->nbase_x, - this->zero, + *this->zero, psi_iter + (nbase) * this->dim, this->dim); @@ -413,7 +413,7 @@ void Diago_DavSubspace::cal_elem(const int& dim, this->dim, &hphi[nbase * this->dim], this->dim, - this->zero, + *this->zero, &hcc[nbase * this->nbase_x], this->nbase_x); @@ -433,7 +433,7 @@ void Diago_DavSubspace::cal_elem(const int& dim, this->dim, psi_iter + nbase * this->dim, this->dim, - this->zero, + *this->zero, &scc[nbase * this->nbase_x], this->nbase_x); @@ -640,7 +640,7 @@ void Diago_DavSubspace::refresh(const int& dim, this->dim, this->vcc, this->nbase_x, - this->zero, + *this->zero, psi_iter + nband * this->dim, this->dim); From 3a0a50cabedc94a181feaad920a41a0a441caafc Mon Sep 17 00:00:00 2001 From: Critsium-xy Date: Thu, 24 Oct 2024 19:51:06 +0800 Subject: [PATCH 3/3] Fix 2 --- source/module_hsolver/diago_dav_subspace.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/source/module_hsolver/diago_dav_subspace.cpp b/source/module_hsolver/diago_dav_subspace.cpp index cbea5aa69f..c1724eb136 100644 --- a/source/module_hsolver/diago_dav_subspace.cpp +++ b/source/module_hsolver/diago_dav_subspace.cpp @@ -25,6 +25,10 @@ Diago_DavSubspace::Diago_DavSubspace(const std::vector& precond { this->device = base_device::get_device_type(this->ctx); + this->one = &one_; + this->zero = &zero_; + this->neg_one = &neg_one_; + assert(david_ndim_in > 1); assert(david_ndim_in * nband_in < nbasis_in * this->diag_comm.nproc); @@ -193,7 +197,7 @@ int Diago_DavSubspace::diag_once(const HPsiFunc& hpsi_func, this->dim, this->vcc, this->nbase_x, - *this->zero, + this->zero, psi_in, psi_in_dmax); @@ -279,7 +283,7 @@ void Diago_DavSubspace::cal_grad(const HPsiFunc& hpsi_func, this->dim, vcc, this->nbase_x, - *this->zero, + this->zero, psi_iter + (nbase) * this->dim, this->dim); @@ -413,7 +417,7 @@ void Diago_DavSubspace::cal_elem(const int& dim, this->dim, &hphi[nbase * this->dim], this->dim, - *this->zero, + this->zero, &hcc[nbase * this->nbase_x], this->nbase_x); @@ -433,7 +437,7 @@ void Diago_DavSubspace::cal_elem(const int& dim, this->dim, psi_iter + nbase * this->dim, this->dim, - *this->zero, + this->zero, &scc[nbase * this->nbase_x], this->nbase_x); @@ -640,7 +644,7 @@ void Diago_DavSubspace::refresh(const int& dim, this->dim, this->vcc, this->nbase_x, - *this->zero, + this->zero, psi_iter + nband * this->dim, this->dim);