|
7 | 7 | // ============================================================ |
8 | 8 |
|
9 | 9 | #include "esolver_dfpt_pw.h" |
| 10 | + |
10 | 11 | #include "source_base/tool_quit.h" |
11 | 12 |
|
12 | | -namespace ModuleESolver { |
| 13 | +namespace ModuleESolver |
| 14 | +{ |
13 | 15 |
|
14 | | -ESolver_DFPT_PW::ESolver_DFPT_PW() { |
| 16 | +ESolver_DFPT_PW::ESolver_DFPT_PW() |
| 17 | +{ |
15 | 18 | this->classname = "ESolver_DFPT_PW"; |
16 | 19 | this->basisname = "PW"; |
17 | 20 | gs_done_ = false; |
18 | 21 | dfpt_ = nullptr; |
19 | 22 | } |
20 | 23 |
|
21 | | -ESolver_DFPT_PW::~ESolver_DFPT_PW() { |
22 | | - if (dfpt_ != nullptr) { |
| 24 | +ESolver_DFPT_PW::~ESolver_DFPT_PW() |
| 25 | +{ |
| 26 | + if (dfpt_ != nullptr) |
| 27 | + { |
23 | 28 | delete dfpt_; |
24 | 29 | dfpt_ = nullptr; |
25 | 30 | } |
26 | 31 | } |
27 | 32 |
|
28 | | -void ESolver_DFPT_PW::before_all_runners(UnitCell& ucell, const Input_para& inp) { |
| 33 | +void ESolver_DFPT_PW::before_all_runners(BaseCell& basecell, const Input_para& inp) |
| 34 | +{ |
| 35 | + basecell.require_kind(BaseCell::Kind::unit_cell, __FUNCTION__); |
| 36 | + UnitCell& ucell = static_cast<UnitCell&>(basecell); |
| 37 | + |
29 | 38 | ModuleBase::TITLE("ESolver_DFPT_PW", "before_all_runners"); |
30 | | - |
| 39 | + |
31 | 40 | ESolver_KS_PW<std::complex<double>, base_device::DEVICE_CPU>::before_all_runners(ucell, inp); |
32 | | - |
| 41 | + |
33 | 42 | init_dfpt(ucell); |
34 | 43 | } |
35 | 44 |
|
36 | | -void ESolver_DFPT_PW::runner(UnitCell& ucell, const int istep) { |
| 45 | +void ESolver_DFPT_PW::runner(BaseCell& basecell, const int istep) |
| 46 | +{ |
| 47 | + basecell.require_kind(BaseCell::Kind::unit_cell, __FUNCTION__); |
| 48 | + UnitCell& ucell = static_cast<UnitCell&>(basecell); |
| 49 | + |
37 | 50 | ModuleBase::TITLE("ESolver_DFPT_PW", "runner"); |
38 | | - |
39 | | - if (!gs_done_) { |
| 51 | + |
| 52 | + if (!gs_done_) |
| 53 | + { |
40 | 54 | run_gs(ucell); |
41 | 55 | gs_done_ = true; |
42 | 56 | } |
43 | | - |
44 | | - if (dfpt_ != nullptr) { |
| 57 | + |
| 58 | + if (dfpt_ != nullptr) |
| 59 | + { |
45 | 60 | dfpt_->run(); |
46 | 61 | } |
47 | | - |
| 62 | + |
48 | 63 | run_post_process(ucell); |
49 | 64 | } |
50 | 65 |
|
51 | | -void ESolver_DFPT_PW::after_all_runners(UnitCell& ucell) { |
| 66 | +void ESolver_DFPT_PW::after_all_runners(BaseCell& basecell) |
| 67 | +{ |
| 68 | + basecell.require_kind(BaseCell::Kind::unit_cell, __FUNCTION__); |
| 69 | + UnitCell& ucell = static_cast<UnitCell&>(basecell); |
| 70 | + |
52 | 71 | ModuleBase::TITLE("ESolver_DFPT_PW", "after_all_runners"); |
53 | | - |
| 72 | + |
54 | 73 | ESolver_KS_PW<std::complex<double>, base_device::DEVICE_CPU>::after_all_runners(ucell); |
55 | 74 | } |
56 | 75 |
|
57 | | -void ESolver_DFPT_PW::run_gs(UnitCell& ucell) { |
| 76 | +void ESolver_DFPT_PW::run_gs(UnitCell& ucell) |
| 77 | +{ |
58 | 78 | ModuleBase::TITLE("ESolver_DFPT_PW", "run_gs"); |
59 | | - |
| 79 | + |
60 | 80 | ESolver_KS_PW<std::complex<double>, base_device::DEVICE_CPU>::runner(ucell, 0); |
61 | 81 | } |
62 | 82 |
|
63 | | -void ESolver_DFPT_PW::init_dfpt(UnitCell& ucell) { |
| 83 | +void ESolver_DFPT_PW::init_dfpt(UnitCell& ucell) |
| 84 | +{ |
64 | 85 | ModuleBase::TITLE("ESolver_DFPT_PW", "init_dfpt"); |
65 | | - |
| 86 | + |
66 | 87 | dfpt_ = new ModuleDFPT::DFPT_PW(); |
67 | | - |
68 | | -// dfpt_->init(ucell, *this->stp.psi, this->pelec->nelec, PARAM.inp.ecutwfc); |
69 | | - |
| 88 | + |
| 89 | + // dfpt_->init(ucell, *this->stp.psi, this->pelec->nelec, PARAM.inp.ecutwfc); |
| 90 | + |
70 | 91 | dfpt_->set_parameters("dfpt.in"); |
71 | | - |
| 92 | + |
72 | 93 | dfpt_->set_qmesh(1, 1, 1); |
73 | | - |
| 94 | + |
74 | 95 | dfpt_->set_conv_thr(1e-8); |
75 | 96 | dfpt_->set_max_iter(100); |
76 | 97 | } |
77 | 98 |
|
78 | | -void ESolver_DFPT_PW::run_post_process(UnitCell& ucell) { |
| 99 | +void ESolver_DFPT_PW::run_post_process(UnitCell& ucell) |
| 100 | +{ |
79 | 101 | ModuleBase::TITLE("ESolver_DFPT_PW", "run_post_process"); |
80 | 102 | } |
81 | 103 |
|
|
0 commit comments