Skip to content

Commit 262c4e5

Browse files
committed
change evolve_phi with evolve_ofdft; change to vector
1 parent d311eb3 commit 262c4e5

File tree

6 files changed

+40
-65
lines changed

6 files changed

+40
-65
lines changed

source/Makefile.Objects

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ OBJS_HAMILT_OF=kedf_tf.o\
361361
kedf_xwm.o\
362362
kedf_lkt.o\
363363
kedf_manager.o\
364-
evolve_phi.o\
364+
evolve_ofdft.o\
365365

366366
OBJS_HAMILT_LCAO=hamilt_lcao.o\
367367
operator_lcao.o\

source/source_esolver/esolver_of_tddft.cpp

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,12 @@ namespace ModuleESolver
2222
ESolver_OF_TDDFT::ESolver_OF_TDDFT()
2323
{
2424
this->classname = "ESolver_OF_TDDFT";
25-
this->evolve_phi=new EVOLVE_PHI();
25+
this->evolve_ofdft=new Evolve_OFDFT();
2626
}
2727

2828
ESolver_OF_TDDFT::~ESolver_OF_TDDFT()
2929
{
30-
delete this->evolve_phi;
31-
for (int is = 0; is < PARAM.inp.nspin; ++is)
32-
{
33-
delete[] this->pphi_td[is];
34-
}
35-
delete[] this->pphi_td;
30+
delete this->evolve_ofdft;
3631
}
3732

3833

@@ -52,11 +47,11 @@ void ESolver_OF_TDDFT::runner(UnitCell& ucell, const int istep)
5247

5348
if (istep==0)
5449
{
55-
this->pphi_td= new std::complex<double>*[PARAM.inp.nspin];
50+
this->pphi_td.resize(PARAM.inp.nspin);
5651

5752
for (int is = 0; is < PARAM.inp.nspin; ++is)
5853
{
59-
this->pphi_td[is]= new std::complex<double>[pw_rho->nrxx];
54+
this->pphi_td[is].resize(this->pw_rho->nrxx);
6055
}
6156
}
6257

@@ -94,18 +89,18 @@ void ESolver_OF_TDDFT::runner(UnitCell& ucell, const int istep)
9489

9590
for (int is = 0; is < PARAM.inp.nspin; ++is)
9691
{
97-
for (int ir = 0; ir < pw_rho->nrxx; ++ir)
92+
for (int ir = 0; ir < this->pw_rho->nrxx; ++ir)
9893
{
9994
pphi_td[is][ir]=pphi_[is][ir];
10095
}
10196
}
10297
}
10398
else
10499
{
105-
this->evolve_phi->propagate_psi(this->pelec, this->chr, ucell, this->pphi_td, this->pw_rho);
100+
this->evolve_ofdft->propagate_psi(this->pelec, this->chr, ucell, this->pphi_td, this->pw_rho);
106101
for (int is = 0; is < PARAM.inp.nspin; ++is)
107102
{
108-
for (int ir = 0; ir < pw_rho->nrxx; ++ir)
103+
for (int ir = 0; ir < this->pw_rho->nrxx; ++ir)
109104
{
110105
pphi_[is][ir]=abs(pphi_td[is][ir]);
111106
}

source/source_esolver/esolver_of_tddft.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#define ESOLVER_OF_TDDFT_H
33

44
#include "esolver_of.h"
5-
#include "source_pw/module_ofdft/evolve_phi.h"
5+
#include "source_pw/module_ofdft/evolve_ofdft.h"
66

77
namespace ModuleESolver
88
{
@@ -15,8 +15,8 @@ class ESolver_OF_TDDFT : public ESolver_OF
1515
virtual void runner(UnitCell& ucell, const int istep) override;
1616

1717
protected:
18-
std::complex<double>** pphi_td = nullptr; // pphi[i] = ppsi.get_pointer(i), which will be freed in ~Psi().
19-
EVOLVE_PHI* evolve_phi=nullptr;
18+
std::vector<std::vector<std::complex<double>>> pphi_td; // pphi[i] = ppsi.get_pointer(i), which will be freed in ~Psi().
19+
Evolve_OFDFT* evolve_ofdft=nullptr;
2020
};
2121
} // namespace ModuleESolver
2222

source/source_pw/module_ofdft/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ list(APPEND hamilt_ofdft_srcs
66
kedf_lkt.cpp
77
kedf_manager.cpp
88
of_stress_pw.cpp
9-
evolve_phi.cpp
9+
evolve_ofdft.cpp
1010
)
1111

1212
add_library(

source/source_pw/module_ofdft/evolve_phi.cpp renamed to source/source_pw/module_ofdft/evolve_ofdft.cpp

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
#include "evolve_phi.h"
1+
#include "evolve_ofdft.h"
22

33
#include "source_io/module_parameter/parameter.h"
44
#include <iostream>
55

66
#include "source_base/parallel_reduce.h"
77

8-
void EVOLVE_PHI::get_Hpsi(elecstate::ElecState* pelec, const Charge& chr, UnitCell& ucell, const std::complex<double>* const* psi_, ModulePW::PW_Basis* pw_rho, std::complex<double>** Hpsi)
8+
void Evolve_OFDFT::get_Hpsi(elecstate::ElecState* pelec, const Charge& chr, UnitCell& ucell, std::vector<std::vector<std::complex<double>>> psi_, ModulePW::PW_Basis* pw_rho, std::vector<std::vector<std::complex<double>>> Hpsi)
99
{
1010
// update rho
1111
for (int is = 0; is < PARAM.inp.nspin; ++is)
@@ -29,7 +29,7 @@ void EVOLVE_PHI::get_Hpsi(elecstate::ElecState* pelec, const Charge& chr, UnitCe
2929
this->get_vw_potential_phi(psi_, pw_rho, Hpsi);
3030
}
3131

32-
void EVOLVE_PHI::get_tf_potential(const double* const* prho, ModulePW::PW_Basis* pw_rho, ModuleBase::matrix& rpot)
32+
void Evolve_OFDFT::get_tf_potential(const double* const* prho, ModulePW::PW_Basis* pw_rho, ModuleBase::matrix& rpot)
3333
{
3434
if (PARAM.inp.nspin == 1)
3535
{
@@ -50,18 +50,22 @@ void EVOLVE_PHI::get_tf_potential(const double* const* prho, ModulePW::PW_Basis*
5050
}
5151
}
5252

53-
void EVOLVE_PHI::get_vw_potential_phi(const std::complex<double>* const* pphi, ModulePW::PW_Basis* pw_rho, std::complex<double>** Hpsi)
53+
void Evolve_OFDFT::get_vw_potential_phi(std::vector<std::vector<std::complex<double>>> pphi, ModulePW::PW_Basis* pw_rho, std::vector<std::vector<std::complex<double>>> Hpsi)
5454
{
5555
std::complex<double>** rLapPhi = new std::complex<double>*[PARAM.inp.nspin];
5656
for (int is = 0; is < PARAM.inp.nspin; ++is) {
5757
rLapPhi[is] = new std::complex<double>[pw_rho->nrxx];
58+
for (int ir = 0; ir < pw_rho->nrxx; ++ir)
59+
{
60+
rLapPhi[is][ir]=pphi[is][ir];
61+
}
5862
}
5963
std::complex<double>** recipPhi = new std::complex<double>*[PARAM.inp.nspin];
6064
for (int is = 0; is < PARAM.inp.nspin; ++is)
6165
{
6266
recipPhi[is] = new std::complex<double>[pw_rho->npw];
6367

64-
pw_rho->real2recip(pphi[is], recipPhi[is]);
68+
pw_rho->real2recip(rLapPhi[is], recipPhi[is]);
6569
for (int ik = 0; ik < pw_rho->npw; ++ik)
6670
{
6771
recipPhi[is][ik] *= pw_rho->gg[ik] * pw_rho->tpiba2;
@@ -82,7 +86,7 @@ void EVOLVE_PHI::get_vw_potential_phi(const std::complex<double>* const* pphi, M
8286
delete[] rLapPhi;
8387
}
8488

85-
void EVOLVE_PHI::get_CD_potential(const std::complex<double>* const* psi_, ModulePW::PW_Basis* pw_rho, ModuleBase::matrix& rpot)
89+
void Evolve_OFDFT::get_CD_potential(std::vector<std::vector<std::complex<double>>> psi_, ModulePW::PW_Basis* pw_rho, ModuleBase::matrix& rpot)
8690
{
8791
for (int is = 0; is < PARAM.inp.nspin; ++is)
8892
{
@@ -91,28 +95,20 @@ void EVOLVE_PHI::get_CD_potential(const std::complex<double>* const* psi_, Modul
9195
}
9296
}
9397

94-
void EVOLVE_PHI::propagate_psi(elecstate::ElecState* pelec, const Charge& chr, UnitCell& ucell, std::complex<double>** pphi_, ModulePW::PW_Basis* pw_rho)
98+
void Evolve_OFDFT::propagate_psi(elecstate::ElecState* pelec, const Charge& chr, UnitCell& ucell, std::vector<std::vector<std::complex<double>>> pphi_, ModulePW::PW_Basis* pw_rho)
9599
{
96100
ModuleBase::timer::tick("ESolver_OF_TDDFT", "propagte_psi");
97101

98102
std::complex<double> imag(0.0,1.0);
99103
double dt=PARAM.inp.mdp.md_dt;
100-
std::complex<double>** K1 = new std::complex<double>*[PARAM.inp.nspin];
101-
std::complex<double>** K2 = new std::complex<double>*[PARAM.inp.nspin];
102-
std::complex<double>** K3 = new std::complex<double>*[PARAM.inp.nspin];
103-
std::complex<double>** K4 = new std::complex<double>*[PARAM.inp.nspin];
104-
std::complex<double>** psi1 = new std::complex<double>*[PARAM.inp.nspin];
105-
std::complex<double>** psi2 = new std::complex<double>*[PARAM.inp.nspin];
106-
std::complex<double>** psi3 = new std::complex<double>*[PARAM.inp.nspin];
107-
for (int is = 0; is < PARAM.inp.nspin; ++is) {
108-
K1[is] = new std::complex<double>[pw_rho->nrxx];
109-
K2[is] = new std::complex<double>[pw_rho->nrxx];
110-
K3[is] = new std::complex<double>[pw_rho->nrxx];
111-
K4[is] = new std::complex<double>[pw_rho->nrxx];
112-
psi1[is] = new std::complex<double>[pw_rho->nrxx];
113-
psi2[is] = new std::complex<double>[pw_rho->nrxx];
114-
psi3[is] = new std::complex<double>[pw_rho->nrxx];
115-
}
104+
std::vector<std::vector<std::complex<double>>> K1(PARAM.inp.nspin,std::vector<std::complex<double>>(pw_rho->nrxx));
105+
std::vector<std::vector<std::complex<double>>> K2(PARAM.inp.nspin,std::vector<std::complex<double>>(pw_rho->nrxx));
106+
std::vector<std::vector<std::complex<double>>> K3(PARAM.inp.nspin,std::vector<std::complex<double>>(pw_rho->nrxx));
107+
std::vector<std::vector<std::complex<double>>> K4(PARAM.inp.nspin,std::vector<std::complex<double>>(pw_rho->nrxx));
108+
std::vector<std::vector<std::complex<double>>> psi1(PARAM.inp.nspin,std::vector<std::complex<double>>(pw_rho->nrxx));
109+
std::vector<std::vector<std::complex<double>>> psi2(PARAM.inp.nspin,std::vector<std::complex<double>>(pw_rho->nrxx));
110+
std::vector<std::vector<std::complex<double>>> psi3(PARAM.inp.nspin,std::vector<std::complex<double>>(pw_rho->nrxx));
111+
116112
get_Hpsi(pelec,chr,ucell,pphi_,pw_rho,K1);
117113
for (int is = 0; is < PARAM.inp.nspin; ++is){
118114
for (int ir = 0; ir < pw_rho->nrxx; ++ir)
@@ -146,21 +142,5 @@ void EVOLVE_PHI::propagate_psi(elecstate::ElecState* pelec, const Charge& chr, U
146142
}
147143
}
148144

149-
for (int is = 0; is < PARAM.inp.nspin; ++is) {
150-
delete[] K1[is];
151-
delete[] K2[is];
152-
delete[] K3[is];
153-
delete[] K4[is];
154-
delete[] psi1[is];
155-
delete[] psi2[is];
156-
delete[] psi3[is];
157-
}
158-
delete[] K1;
159-
delete[] K2;
160-
delete[] K3;
161-
delete[] K4;
162-
delete[] psi1;
163-
delete[] psi2;
164-
delete[] psi3;
165145
ModuleBase::timer::tick("ESolver_OF_TDDFT", "propagte_psi");
166146
}
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
#ifndef EVOLVE_PHI_H
2-
#define EVOLVE_PHI_H
1+
#ifndef Evolve_OFDFT_H
2+
#define Evolve_OFDFT_H
33
#include <math.h>
44
#include <stdio.h>
55

@@ -15,26 +15,26 @@
1515
* @brief TDOFDFT
1616
* @author liyuanbo on 2025-09
1717
*/
18-
class EVOLVE_PHI
18+
class Evolve_OFDFT
1919
{
2020
public:
21-
EVOLVE_PHI()
21+
Evolve_OFDFT()
2222
{
2323
}
24-
~EVOLVE_PHI()
24+
~Evolve_OFDFT()
2525
{
2626
}
27-
void propagate_psi(elecstate::ElecState* pelec, const Charge& chr, UnitCell& ucell, std::complex<double>** pphi_, ModulePW::PW_Basis* pw_rho);
27+
void propagate_psi(elecstate::ElecState* pelec, const Charge& chr, UnitCell& ucell, std::vector<std::vector<std::complex<double>>> pphi_, ModulePW::PW_Basis* pw_rho);
2828

2929
private:
3030
const double c_tf_
3131
= 3.0 / 10.0 * std::pow(3 * std::pow(M_PI, 2.0), 2.0 / 3.0)
3232
* 2; // 10/3*(3*pi^2)^{2/3}, multiply by 2 to convert unit from Hartree to Ry, finally in Ry*Bohr^(-2)
3333

34-
void get_Hpsi(elecstate::ElecState* pelec, const Charge& chr, UnitCell& ucell, const std::complex<double>* const* psi_, ModulePW::PW_Basis* pw_rho, std::complex<double>** Hpsi);
34+
void get_Hpsi(elecstate::ElecState* pelec, const Charge& chr, UnitCell& ucell, std::vector<std::vector<std::complex<double>>> psi_, ModulePW::PW_Basis* pw_rho, std::vector<std::vector<std::complex<double>>> Hpsi);
3535
void get_tf_potential(const double* const* prho, ModulePW::PW_Basis* pw_rho, ModuleBase::matrix& rpot);
36-
void get_vw_potential_phi(const std::complex<double>* const* pphi, ModulePW::PW_Basis* pw_rho, std::complex<double>** Hpsi); // -1/2 \nabla^2 \phi
37-
void get_CD_potential(const std::complex<double>* const* psi_, ModulePW::PW_Basis* pw_rho, ModuleBase::matrix& rpot);
36+
void get_vw_potential_phi(std::vector<std::vector<std::complex<double>>> pphi, ModulePW::PW_Basis* pw_rho, std::vector<std::vector<std::complex<double>>> Hpsi); // -1/2 \nabla^2 \phi
37+
void get_CD_potential(std::vector<std::vector<std::complex<double>>> psi_, ModulePW::PW_Basis* pw_rho, ModuleBase::matrix& rpot);
3838

3939
};
4040
#endif

0 commit comments

Comments
 (0)