Skip to content

Commit 5f57188

Browse files
committed
Revert unnecessary changes
1 parent cdc1942 commit 5f57188

File tree

1 file changed

+86
-55
lines changed

1 file changed

+86
-55
lines changed

source/module_hamilt_general/module_xc/xc_functional.cpp

Lines changed: 86 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
#include "module_hamilt_pw/hamilt_pwdft/global.h"
33
#include "module_parameter/parameter.h"
44
#include "module_base/global_function.h"
5+
#ifdef USE_PAW
6+
#include "module_cell/module_paw/paw_cell.h"
7+
#endif
58

69
#ifdef USE_LIBXC
710
#include "xc_functional_libxc.h"
@@ -13,7 +16,6 @@ XC_Functional::~XC_Functional(){}
1316

1417
std::vector<int> XC_Functional::func_id(1);
1518
int XC_Functional::func_type = 0;
16-
bool XC_Functional::ked_flag = false;
1719
bool XC_Functional::use_libxc = true;
1820
double XC_Functional::hybrid_alpha = 0.25;
1921
std::map<int, double> XC_Functional::scaling_factor_xc = { {1, 1.0} }; // added by jghan, 2024-10-10
@@ -23,6 +25,15 @@ void XC_Functional::set_hybrid_alpha(const double alpha_in)
2325
hybrid_alpha = alpha_in;
2426
}
2527

28+
double XC_Functional::get_hybrid_alpha()
29+
{
30+
return hybrid_alpha;
31+
}
32+
33+
int XC_Functional::get_func_type()
34+
{
35+
return func_type;
36+
}
2637
void XC_Functional::set_xc_first_loop(const UnitCell& ucell)
2738
{
2839
/** In the special "two-level" calculation case,
@@ -58,98 +69,123 @@ void XC_Functional::set_xc_type(const std::string xc_func_in)
5869
scaling_factor_xc.clear(); // added by jghan, 2024-07-07
5970
std::string xc_func = xc_func_in;
6071
std::transform(xc_func.begin(), xc_func.end(), xc_func.begin(), (::toupper));
61-
if( xc_func == "LDA" || xc_func == "PZ" || xc_func == "SLAPZNOGXNOGC") //SLA+PZ
62-
{
72+
if( xc_func == "LDA" || xc_func == "PZ" || xc_func == "SLAPZNOGXNOGC") //SLA+PZ
73+
{
6374
func_id.push_back(XC_LDA_X);
6475
func_id.push_back(XC_LDA_C_PZ);
6576
func_type = 1;
6677
use_libxc = false;
67-
}
78+
#ifdef USE_PAW
79+
if(PARAM.inp.use_paw)
80+
{
81+
if(PARAM.inp.nspin != 1)
82+
{
83+
ModuleBase::WARNING_QUIT("set_xc_type","paw does not support pz with spin polarization");
84+
}
85+
else
86+
{
87+
GlobalC::paw_cell.set_libpaw_xc(1,2);
88+
}
89+
}
90+
#endif
91+
}
6892
else if (xc_func == "PWLDA")
6993
{
7094
func_id.push_back(XC_LDA_X);
7195
func_id.push_back(XC_LDA_C_PW);
7296
func_type = 1;
7397
use_libxc = false;
98+
#ifdef USE_PAW
99+
if(PARAM.inp.use_paw) { GlobalC::paw_cell.set_libpaw_xc(1,7);
100+
}
101+
#endif
74102
}
75-
else if ( xc_func == "PBE" || xc_func == "SLAPWPBXPBC") //PBX+PBC
76-
{
103+
else if ( xc_func == "PBE" || xc_func == "SLAPWPBXPBC") //PBX+PBC
104+
{
77105
func_id.push_back(XC_GGA_X_PBE);
78106
func_id.push_back(XC_GGA_C_PBE);
79107
func_type = 2;
80108
use_libxc = false;
81-
}
82-
else if ( xc_func == "PBESOL") //PBX_S+PBC_S
83-
{
109+
#ifdef USE_PAW
110+
if(PARAM.inp.use_paw) { GlobalC::paw_cell.set_libpaw_xc(2,11);
111+
}
112+
#endif
113+
}
114+
else if ( xc_func == "PBESOL") //PBX_S+PBC_S
115+
{
84116
func_id.push_back(XC_GGA_X_PBE_SOL);
85117
func_id.push_back(XC_GGA_C_PBE_SOL);
86118
func_type = 2;
87119
use_libxc = false;
88-
}
89-
else if( xc_func == "REVPBE" ) //PBX_r+PBC
90-
{
91-
func_id.push_back(XC_GGA_X_PBE_R);
120+
}
121+
else if( xc_func == "REVPBE" ) //PBX_r+PBC
122+
{
123+
func_id.push_back(XC_GGA_X_PBE_R);
92124
func_id.push_back(XC_GGA_C_PBE);
93125
func_type = 2;
94126
use_libxc = false;
95-
}
96-
else if ( xc_func == "WC") //WC+PBC
97-
{
127+
#ifdef USE_PAW
128+
if(PARAM.inp.use_paw) { GlobalC::paw_cell.set_libpaw_xc(2,14);
129+
}
130+
#endif
131+
}
132+
else if ( xc_func == "WC") //WC+PBC
133+
{
98134
func_id.push_back(XC_GGA_X_WC);
99135
func_id.push_back(XC_GGA_C_PBE);
100136
func_type = 2;
101137
use_libxc = false;
102-
}
103-
else if ( xc_func == "BLYP") //B88+LYP
104-
{
138+
}
139+
else if ( xc_func == "BLYP") //B88+LYP
140+
{
105141
func_id.push_back(XC_GGA_X_B88);
106142
func_id.push_back(XC_GGA_C_LYP);
107143
func_type = 2;
108144
use_libxc = false;
109-
}
110-
else if ( xc_func == "BP") //B88+P86
111-
{
145+
}
146+
else if ( xc_func == "BP") //B88+P86
147+
{
112148
func_id.push_back(XC_GGA_X_B88);
113149
func_id.push_back(XC_GGA_C_P86);
114150
func_type = 2;
115151
use_libxc = false;
116-
}
117-
else if ( xc_func == "PW91") //PW91_X+PW91_C
118-
{
152+
}
153+
else if ( xc_func == "PW91") //PW91_X+PW91_C
154+
{
119155
func_id.push_back(XC_GGA_X_PW91);
120156
func_id.push_back(XC_GGA_C_PW91);
121157
func_type = 2;
122158
use_libxc = false;
123-
}
124-
else if ( xc_func == "HCTH") //HCTH_X+HCTH_C
125-
{
159+
}
160+
else if ( xc_func == "HCTH") //HCTH_X+HCTH_C
161+
{
126162
func_id.push_back(XC_GGA_X_HCTH_A);
127163
func_id.push_back(XC_GGA_C_HCTH_A);
128164
func_type = 2;
129165
use_libxc = false;
130-
}
131-
else if ( xc_func == "OLYP") //OPTX+LYP
132-
{
166+
}
167+
else if ( xc_func == "OLYP") //OPTX+LYP
168+
{
133169
func_id.push_back(XC_GGA_X_OPTX);
134170
func_id.push_back(XC_GGA_C_LYP);
135171
func_type = 2;
136172
use_libxc = false;
137-
}
173+
}
138174
#ifdef USE_LIBXC
139-
else if ( xc_func == "SCAN")
140-
{
175+
else if ( xc_func == "SCAN")
176+
{
141177
func_id.push_back(XC_MGGA_X_SCAN);
142178
func_id.push_back(XC_MGGA_C_SCAN);
143179
func_type = 3;
144180
use_libxc = true;
145-
}
181+
}
146182
else if ( xc_func == "SCAN0")
147-
{
183+
{
148184
func_id.push_back(XC_MGGA_X_SCAN);
149185
func_id.push_back(XC_MGGA_C_SCAN);
150186
func_type = 5;
151187
use_libxc = true;
152-
}
188+
}
153189
else if( xc_func == "LC_PBE")
154190
{
155191
func_id.push_back(XC_HYB_GGA_XC_LC_PBEOP);
@@ -186,12 +222,12 @@ void XC_Functional::set_xc_type(const std::string xc_func_in)
186222
func_type = 4;
187223
use_libxc = false;
188224
}
189-
else if( xc_func == "PBE0")
190-
{
225+
else if( xc_func == "PBE0")
226+
{
191227
func_id.push_back(XC_HYB_GGA_XC_PBEH);
192228
func_type = 4;
193229
use_libxc = false;
194-
}
230+
}
195231
else if( xc_func == "OPT_ORB" || xc_func == "NONE" || xc_func == "NOX+NOC")
196232
{
197233
// not doing anything
@@ -274,33 +310,28 @@ void XC_Functional::set_xc_type(const std::string xc_func_in)
274310
#endif
275311
}
276312

277-
if (func_type == 3 || func_type == 5)
278-
{
279-
ked_flag = true;
280-
}
281-
else
282-
{
283-
ked_flag = false;
284-
}
285-
286313
if (func_id[0] == XC_GGA_X_OPTX)
287314
{
288315
std::cerr << "\n OPTX untested please test,";
289316
}
290317

291-
// if((func_type == 4 || func_type == 5) && PARAM.inp.basis_type == "pw")
292-
// {
293-
// ModuleBase::WARNING_QUIT("set_xc_type","hybrid functional not realized for planewave yet");
294-
// }
318+
if((func_type == 4 || func_type == 5) && PARAM.inp.basis_type == "pw")
319+
{
320+
ModuleBase::WARNING_QUIT("set_xc_type","hybrid functional not realized for planewave yet");
321+
}
295322
if((func_type == 3 || func_type == 5) && PARAM.inp.nspin==4)
296323
{
297324
ModuleBase::WARNING_QUIT("set_xc_type","meta-GGA has not been implemented for nspin = 4 yet");
298325
}
326+
//if((func_type == 3 || func_type == 5) && PARAM.inp.cal_stress == 1 && PARAM.inp.nspin!=1)
327+
//{
328+
// ModuleBase::WARNING_QUIT("set_xc_type","mgga stress not implemented for polarized case yet");
329+
//}
299330

300331
#ifndef __EXX
301-
if((func_type == 4 || func_type == 5) && PARAM.inp.basis_type == "lcao")
332+
if(func_type == 4 || func_type == 5)
302333
{
303-
ModuleBase::WARNING_QUIT("set_xc_type","compile with libri to use hybrid functional in lcao basis");
334+
ModuleBase::WARNING_QUIT("set_xc_type","compile with libri to use hybrid functional");
304335
}
305336
#endif
306337

0 commit comments

Comments
 (0)