Skip to content

Commit cd4c43d

Browse files
committed
support libxc
1 parent 802c2ad commit cd4c43d

File tree

6 files changed

+555
-123
lines changed

6 files changed

+555
-123
lines changed
Lines changed: 348 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,348 @@
1+
/**
2+
* This file stores the mapping from XC names in LibXC format
3+
* to conventional names in DFTD3.
4+
*/
5+
#include <map>
6+
#include <string>
7+
#include <cassert>
8+
#include "module_base/formatter.h"
9+
#include <iostream>
10+
#include <regex>
11+
12+
namespace DFTD3 {
13+
const std::map<std::string, std::string> xcname_libxc_xc_ = {
14+
{"XC_LDA_XC_TETER93", "teter93"},
15+
{"XC_LDA_XC_ZLP", "zlp"},
16+
{"XC_MGGA_XC_OTPSS_D", "otpss_d"},
17+
{"XC_GGA_XC_OPBE_D", "opbe_d"},
18+
{"XC_GGA_XC_OPWLYP_D", "opwlyp_d"},
19+
{"XC_GGA_XC_OBLYP_D", "oblyp_d"},
20+
{"XC_GGA_XC_HCTH_407P", "hcth_407p"},
21+
{"XC_GGA_XC_HCTH_P76", "hcth_p76"},
22+
{"XC_GGA_XC_HCTH_P14", "hcth_p14"},
23+
{"XC_GGA_XC_B97_GGA1", "b97_gga1"},
24+
{"XC_GGA_XC_KT2", "kt2"},
25+
{"XC_GGA_XC_TH1", "th1"},
26+
{"XC_GGA_XC_TH2", "th2"},
27+
{"XC_GGA_XC_TH3", "th3"},
28+
{"XC_GGA_XC_TH4", "th4"},
29+
{"XC_GGA_XC_HCTH_93", "hcth_93"},
30+
{"XC_GGA_XC_HCTH_120", "hcth_120"},
31+
{"XC_GGA_XC_HCTH_147", "hcth_147"},
32+
{"XC_GGA_XC_HCTH_407", "hcth_407"},
33+
{"XC_GGA_XC_EDF1", "edf1"},
34+
{"XC_GGA_XC_XLYP", "xlyp"},
35+
{"XC_GGA_XC_KT1", "kt1"},
36+
{"XC_GGA_XC_B97_D", "b97_d"},
37+
{"XC_GGA_XC_PBE1W", "pbe1w"},
38+
{"XC_GGA_XC_MPWLYP1W", "mpwlyp1w"},
39+
{"XC_GGA_XC_PBELYP1W", "pbelyp1w"},
40+
{"XC_HYB_LDA_XC_LDA0", "lda0"},
41+
{"XC_HYB_LDA_XC_CAM_LDA0", "cam_lda0"},
42+
{"XC_GGA_XC_NCAP", "ncap"},
43+
{"XC_GGA_XC_MOHLYP", "mohlyp"},
44+
{"XC_GGA_XC_MOHLYP2", "mohlyp2"},
45+
{"XC_GGA_XC_TH_FL", "th_fl"},
46+
{"XC_GGA_XC_TH_FC", "th_fc"},
47+
{"XC_GGA_XC_TH_FCFO", "th_fcfo"},
48+
{"XC_GGA_XC_TH_FCO", "th_fco"},
49+
{"XC_MGGA_XC_CC06", "cc06"},
50+
{"XC_MGGA_XC_TPSSLYP1W", "tpsslyp1w"},
51+
{"XC_MGGA_XC_B97M_V", "b97m_v"},
52+
{"XC_GGA_XC_VV10", "vv10"},
53+
{"XC_LDA_XC_KSDT", "ksdt"},
54+
{"XC_HYB_GGA_XC_B97_1P", "b97_1p"},
55+
{"XC_HYB_GGA_XC_PBE_MOL0", "pbe_mol0"},
56+
{"XC_HYB_GGA_XC_PBE_SOL0", "pbe_sol0"},
57+
{"XC_HYB_GGA_XC_PBEB0", "pbeb0"},
58+
{"XC_HYB_GGA_XC_PBE_MOLB0", "pbe_molb0"},
59+
{"XC_GGA_XC_BEEFVDW", "beefvdw"},
60+
{"XC_MGGA_XC_HLE17", "hle17"},
61+
{"XC_HYB_GGA_XC_PBE50", "pbe50"},
62+
{"XC_HYB_GGA_XC_HFLYP", "hflyp"},
63+
{"XC_HYB_GGA_XC_B3P86_NWCHEM", "b3p86_nwchem"},
64+
{"XC_LDA_XC_CORRKSDT", "corrksdt"},
65+
{"XC_HYB_GGA_XC_RELPBE0", "relpbe0"},
66+
{"XC_GGA_XC_B97_3C", "b97_3c"},
67+
{"XC_HYB_MGGA_XC_BR3P86", "br3p86"},
68+
{"XC_HYB_GGA_XC_CASE21", "case21"},
69+
{"XC_HYB_GGA_XC_PBE_2X", "pbe_2x"},
70+
{"XC_HYB_GGA_XC_PBE38", "pbe38"},
71+
{"XC_HYB_GGA_XC_B3LYP3", "b3lyp3"},
72+
{"XC_HYB_GGA_XC_CAM_O3LYP", "cam_o3lyp"},
73+
{"XC_HYB_MGGA_XC_TPSS0", "tpss0"},
74+
{"XC_HYB_MGGA_XC_B94_HYB", "b94_hyb"},
75+
{"XC_HYB_GGA_XC_WB97X_D3", "wb97x_d3"},
76+
{"XC_HYB_GGA_XC_LC_BLYP", "lc_blyp"},
77+
{"XC_HYB_GGA_XC_B3PW91", "b3pw91"},
78+
{"XC_HYB_GGA_XC_B3LYP", "b3lyp"},
79+
{"XC_HYB_GGA_XC_B3P86", "b3p86"},
80+
{"XC_HYB_GGA_XC_O3LYP", "o3lyp"},
81+
{"XC_HYB_GGA_XC_MPW1K", "mpw1k"},
82+
{"XC_HYB_GGA_XC_PBEH", "pbeh"},
83+
{"XC_HYB_GGA_XC_B97", "b97"},
84+
{"XC_HYB_GGA_XC_B97_1", "b97_1"},
85+
{"XC_HYB_GGA_XC_APF", "apf"},
86+
{"XC_HYB_GGA_XC_B97_2", "b97_2"},
87+
{"XC_HYB_GGA_XC_X3LYP", "x3lyp"},
88+
{"XC_HYB_GGA_XC_B1WC", "b1wc"},
89+
{"XC_HYB_GGA_XC_B97_K", "b97_k"},
90+
{"XC_HYB_GGA_XC_B97_3", "b97_3"},
91+
{"XC_HYB_GGA_XC_MPW3PW", "mpw3pw"},
92+
{"XC_HYB_GGA_XC_B1LYP", "b1lyp"},
93+
{"XC_HYB_GGA_XC_B1PW91", "b1pw91"},
94+
{"XC_HYB_GGA_XC_MPW1PW", "mpw1pw"},
95+
{"XC_HYB_GGA_XC_MPW3LYP", "mpw3lyp"},
96+
{"XC_HYB_GGA_XC_SB98_1A", "sb98_1a"},
97+
{"XC_HYB_GGA_XC_SB98_1B", "sb98_1b"},
98+
{"XC_HYB_GGA_XC_SB98_1C", "sb98_1c"},
99+
{"XC_HYB_GGA_XC_SB98_2A", "sb98_2a"},
100+
{"XC_HYB_GGA_XC_SB98_2B", "sb98_2b"},
101+
{"XC_HYB_GGA_XC_SB98_2C", "sb98_2c"},
102+
{"XC_HYB_GGA_XC_HSE03", "hse03"},
103+
{"XC_HYB_GGA_XC_HSE06", "hse06"},
104+
{"XC_HYB_GGA_XC_HJS_PBE", "hjs_pbe"},
105+
{"XC_HYB_GGA_XC_HJS_PBE_SOL", "hjs_pbe_sol"},
106+
{"XC_HYB_GGA_XC_HJS_B88", "hjs_b88"},
107+
{"XC_HYB_GGA_XC_HJS_B97X", "hjs_b97x"},
108+
{"XC_HYB_GGA_XC_CAM_B3LYP", "cam_b3lyp"},
109+
{"XC_HYB_GGA_XC_TUNED_CAM_B3LYP", "tuned_cam_b3lyp"},
110+
{"XC_HYB_GGA_XC_BHANDH", "bhandh"},
111+
{"XC_HYB_GGA_XC_BHANDHLYP", "bhandhlyp"},
112+
{"XC_HYB_GGA_XC_MB3LYP_RC04", "mb3lyp_rc04"},
113+
{"XC_HYB_MGGA_XC_B88B95", "b88b95"},
114+
{"XC_HYB_MGGA_XC_B86B95", "b86b95"},
115+
{"XC_HYB_MGGA_XC_PW86B95", "pw86b95"},
116+
{"XC_HYB_MGGA_XC_BB1K", "bb1k"},
117+
{"XC_HYB_MGGA_XC_MPW1B95", "mpw1b95"},
118+
{"XC_HYB_MGGA_XC_MPWB1K", "mpwb1k"},
119+
{"XC_HYB_MGGA_XC_X1B95", "x1b95"},
120+
{"XC_HYB_MGGA_XC_XB1K", "xb1k"},
121+
{"XC_HYB_MGGA_XC_PW6B95", "pw6b95"},
122+
{"XC_HYB_MGGA_XC_PWB6K", "pwb6k"},
123+
{"XC_HYB_GGA_XC_MPWLYP1M", "mpwlyp1m"},
124+
{"XC_HYB_GGA_XC_REVB3LYP", "revb3lyp"},
125+
{"XC_HYB_GGA_XC_CAMY_BLYP", "camy_blyp"},
126+
{"XC_HYB_GGA_XC_PBE0_13", "pbe0_13"},
127+
{"XC_HYB_MGGA_XC_TPSSH", "tpssh"},
128+
{"XC_HYB_MGGA_XC_REVTPSSH", "revtpssh"},
129+
{"XC_HYB_GGA_XC_B3LYPS", "b3lyps"},
130+
{"XC_HYB_GGA_XC_QTP17", "qtp17"},
131+
{"XC_HYB_GGA_XC_B3LYP_MCM1", "b3lyp_mcm1"},
132+
{"XC_HYB_GGA_XC_B3LYP_MCM2", "b3lyp_mcm2"},
133+
{"XC_HYB_GGA_XC_WB97", "wb97"},
134+
{"XC_HYB_GGA_XC_WB97X", "wb97x"},
135+
{"XC_HYB_GGA_XC_LRC_WPBEH", "lrc_wpbeh"},
136+
{"XC_HYB_GGA_XC_WB97X_V", "wb97x_v"},
137+
{"XC_HYB_GGA_XC_LCY_PBE", "lcy_pbe"},
138+
{"XC_HYB_GGA_XC_LCY_BLYP", "lcy_blyp"},
139+
{"XC_HYB_GGA_XC_LC_VV10", "lc_vv10"},
140+
{"XC_HYB_GGA_XC_CAMY_B3LYP", "camy_b3lyp"},
141+
{"XC_HYB_GGA_XC_WB97X_D", "wb97x_d"},
142+
{"XC_HYB_GGA_XC_HPBEINT", "hpbeint"},
143+
{"XC_HYB_GGA_XC_LRC_WPBE", "lrc_wpbe"},
144+
{"XC_HYB_GGA_XC_B3LYP5", "b3lyp5"},
145+
{"XC_HYB_GGA_XC_EDF2", "edf2"},
146+
{"XC_HYB_GGA_XC_CAP0", "cap0"},
147+
{"XC_HYB_GGA_XC_LC_WPBE", "lc_wpbe"},
148+
{"XC_HYB_GGA_XC_HSE12", "hse12"},
149+
{"XC_HYB_GGA_XC_HSE12S", "hse12s"},
150+
{"XC_HYB_GGA_XC_HSE_SOL", "hse_sol"},
151+
{"XC_HYB_GGA_XC_CAM_QTP_01", "cam_qtp_01"},
152+
{"XC_HYB_GGA_XC_MPW1LYP", "mpw1lyp"},
153+
{"XC_HYB_GGA_XC_MPW1PBE", "mpw1pbe"},
154+
{"XC_HYB_GGA_XC_KMLYP", "kmlyp"},
155+
{"XC_HYB_GGA_XC_LC_WPBE_WHS", "lc_wpbe_whs"},
156+
{"XC_HYB_GGA_XC_LC_WPBEH_WHS", "lc_wpbeh_whs"},
157+
{"XC_HYB_GGA_XC_LC_WPBE08_WHS", "lc_wpbe08_whs"},
158+
{"XC_HYB_GGA_XC_LC_WPBESOL_WHS", "lc_wpbesol_whs"},
159+
{"XC_HYB_GGA_XC_CAM_QTP_00", "cam_qtp_00"},
160+
{"XC_HYB_GGA_XC_CAM_QTP_02", "cam_qtp_02"},
161+
{"XC_HYB_GGA_XC_LC_QTP", "lc_qtp"},
162+
{"XC_HYB_GGA_XC_BLYP35", "blyp35"},
163+
{"XC_HYB_MGGA_XC_WB97M_V", "wb97m_v"},
164+
{"XC_LDA_XC_1D_EHWLRG_1", "1d_ehwlrg_1"},
165+
{"XC_LDA_XC_1D_EHWLRG_2", "1d_ehwlrg_2"},
166+
{"XC_LDA_XC_1D_EHWLRG_3", "1d_ehwlrg_3"},
167+
{"XC_GGA_XC_HLE16", "hle16"},
168+
{"XC_LDA_XC_LP_A", "lp_a"},
169+
{"XC_LDA_XC_LP_B", "lp_b"},
170+
{"XC_HYB_MGGA_XC_B0KCIS", "b0kcis"},
171+
{"XC_MGGA_XC_LP90", "lp90"},
172+
{"XC_HYB_MGGA_XC_MPW1KCIS", "mpw1kcis"},
173+
{"XC_HYB_MGGA_XC_MPWKCIS1K", "mpwkcis1k"},
174+
{"XC_HYB_MGGA_XC_PBE1KCIS", "pbe1kcis"},
175+
{"XC_HYB_MGGA_XC_TPSS1KCIS", "tpss1kcis"},
176+
{"XC_HYB_GGA_XC_B5050LYP", "b5050lyp"},
177+
{"XC_LDA_XC_GDSMFB", "gdsmfb"},
178+
{"XC_GGA_XC_KT3", "kt3"},
179+
{"XC_HYB_LDA_XC_BN05", "bn05"},
180+
{"XC_HYB_GGA_XC_LB07", "lb07"},
181+
{"XC_HYB_MGGA_XC_B98", "b98"},
182+
{"XC_LDA_XC_TIH", "tih"},
183+
{"XC_HYB_GGA_XC_APBE0", "apbe0"},
184+
{"XC_HYB_GGA_XC_HAPBE", "hapbe"},
185+
{"XC_HYB_GGA_XC_RCAM_B3LYP", "rcam_b3lyp"},
186+
{"XC_HYB_GGA_XC_WC04", "wc04"},
187+
{"XC_HYB_GGA_XC_WP04", "wp04"},
188+
{"XC_HYB_GGA_XC_CAMH_B3LYP", "camh_b3lyp"},
189+
{"XC_HYB_GGA_XC_WHPBE0", "whpbe0"},
190+
{"XC_HYB_GGA_XC_LC_BLYP_EA", "lc_blyp_ea"},
191+
{"XC_HYB_GGA_XC_LC_BOP", "lc_bop"},
192+
{"XC_HYB_GGA_XC_LC_PBEOP", "lc_pbeop"},
193+
{"XC_HYB_GGA_XC_LC_BLYPR", "lc_blypr"},
194+
{"XC_HYB_GGA_XC_MCAM_B3LYP", "mcam_b3lyp"},
195+
{"XC_MGGA_XC_VCML_RVV10", "vcml_rvv10"},
196+
{"XC_HYB_MGGA_XC_GAS22", "gas22"},
197+
{"XC_HYB_MGGA_XC_R2SCANH", "r2scanh"},
198+
{"XC_HYB_MGGA_XC_R2SCAN0", "r2scan0"},
199+
{"XC_HYB_MGGA_XC_R2SCAN50", "r2scan50"},
200+
{"XC_HYB_GGA_XC_CAM_PBEH", "cam_pbeh"},
201+
{"XC_HYB_GGA_XC_CAMY_PBEH", "camy_pbeh"},
202+
{"XC_HYB_MGGA_XC_EDMGGAH", "edmggah"},
203+
{"XC_HYB_MGGA_XC_LC_TMLYP", "lc_tmlyp"},
204+
};
205+
const std::map<std::string, std::string> xcname_libxc_xplusc_ = {
206+
{"XC_GGA_X_GAM+XC_GGA_C_GAM", "gam"},
207+
{"XC_GGA_X_HCTH_A+XC_GGA_C_HCTH_A", "hcth_a"},
208+
{"XC_HYB_MGGA_X_DLDF+XC_MGGA_C_DLDF", "dldf"},
209+
{"XC_GGA_X_Q2D+XC_GGA_C_Q2D", "q2d"},
210+
{"XC_GGA_X_PBE_MOL+XC_GGA_C_PBE_MOL", "pbe_mol"},
211+
{"XC_GGA_X_PBEINT+XC_GGA_C_PBEINT", "pbeint"},
212+
{"XC_HYB_GGA_X_N12_SX+XC_GGA_C_N12_SX", "n12_sx"},
213+
{"XC_GGA_X_N12+XC_GGA_C_N12", "n12"},
214+
{"XC_GGA_X_PBE+XC_GGA_C_PBE", "pbe"},
215+
{"XC_GGA_X_B88+XC_MGGA_C_B88", "b88"},
216+
{"XC_GGA_X_PW91+XC_GGA_C_PW91", "pw91"},
217+
{"XC_GGA_X_PBE_SOL+XC_GGA_C_PBE_SOL", "pbe_sol"},
218+
{"XC_GGA_X_AM05+XC_GGA_C_AM05", "am05"},
219+
{"XC_GGA_X_XPBE+XC_GGA_C_XPBE", "xpbe"},
220+
{"XC_GGA_X_RGE2+XC_GGA_C_RGE2", "rge2"},
221+
{"XC_GGA_X_SOGGA11+XC_GGA_C_SOGGA11", "sogga11"},
222+
{"XC_GGA_X_APBE+XC_GGA_C_APBE", "apbe"},
223+
{"XC_MGGA_X_TPSS+XC_MGGA_C_TPSS", "tpss"},
224+
{"XC_MGGA_X_M06_L+XC_MGGA_C_M06_L", "m06_l"},
225+
{"XC_HYB_MGGA_X_TAU_HCTH+XC_GGA_C_TAU_HCTH", "tau_hcth"},
226+
{"XC_MGGA_X_REVTPSS+XC_MGGA_C_REVTPSS", "revtpss"},
227+
{"XC_MGGA_X_PKZB+XC_MGGA_C_PKZB", "pkzb"},
228+
{"XC_MGGA_X_M11_L+XC_MGGA_C_M11_L", "m11_l"},
229+
{"XC_MGGA_X_MN12_L+XC_MGGA_C_MN12_L", "mn12_l"},
230+
{"XC_HYB_MGGA_X_MN12_SX+XC_MGGA_C_MN12_SX", "mn12_sx"},
231+
{"XC_MGGA_X_MN15_L+XC_MGGA_C_MN15_L", "mn15_l"},
232+
{"XC_MGGA_X_SCAN+XC_MGGA_C_SCAN", "scan"},
233+
{"XC_GGA_X_PBEFE+XC_GGA_C_PBEFE", "pbefe"},
234+
{"XC_HYB_MGGA_X_MN15+XC_MGGA_C_MN15", "mn15"},
235+
{"XC_HYB_MGGA_X_BMK+XC_GGA_C_BMK", "bmk"},
236+
{"XC_MGGA_X_REVM06_L+XC_MGGA_C_REVM06_L", "revm06_l"},
237+
{"XC_HYB_MGGA_X_M08_HX+XC_MGGA_C_M08_HX", "m08_hx"},
238+
{"XC_HYB_MGGA_X_M08_SO+XC_MGGA_C_M08_SO", "m08_so"},
239+
{"XC_HYB_MGGA_X_M11+XC_MGGA_C_M11", "m11"},
240+
{"XC_GGA_X_CHACHIYO+XC_GGA_C_CHACHIYO", "chachiyo"},
241+
{"XC_HYB_MGGA_X_REVM11+XC_MGGA_C_REVM11", "revm11"},
242+
{"XC_HYB_MGGA_X_REVM06+XC_MGGA_C_REVM06", "revm06"},
243+
{"XC_HYB_MGGA_X_M06_SX+XC_MGGA_C_M06_SX", "m06_sx"},
244+
{"XC_GGA_X_PBE_GAUSSIAN+XC_GGA_C_PBE_GAUSSIAN", "pbe_gaussian"},
245+
{"XC_HYB_GGA_X_SOGGA11_X+XC_GGA_C_SOGGA11_X", "sogga11_x"},
246+
{"XC_HYB_MGGA_X_M05+XC_MGGA_C_M05", "m05"},
247+
{"XC_HYB_MGGA_X_M05_2X+XC_MGGA_C_M05_2X", "m05_2x"},
248+
{"XC_HYB_MGGA_X_M06_HF+XC_MGGA_C_M06_HF", "m06_hf"},
249+
{"XC_HYB_MGGA_X_M06+XC_MGGA_C_M06", "m06"},
250+
{"XC_HYB_MGGA_X_M06_2X+XC_MGGA_C_M06_2X", "m06_2x"},
251+
{"XC_MGGA_X_RSCAN+XC_MGGA_C_RSCAN", "rscan"},
252+
{"XC_MGGA_X_R2SCAN+XC_MGGA_C_R2SCAN", "r2scan"},
253+
{"XC_GGA_X_SG4+XC_GGA_C_SG4", "sg4"},
254+
{"XC_MGGA_X_TM+XC_MGGA_C_TM", "tm"},
255+
{"XC_MGGA_X_REVSCAN+XC_MGGA_C_REVSCAN", "revscan"},
256+
{"XC_MGGA_X_REGTPSS+XC_GGA_C_REGTPSS", "regtpss"},
257+
{"XC_MGGA_X_R2SCAN01+XC_MGGA_C_R2SCAN01", "r2scan01"},
258+
{"XC_MGGA_X_RPPSCAN+XC_MGGA_C_RPPSCAN", "rppscan"},
259+
{"XC_MGGA_X_REVTM+XC_MGGA_C_REVTM", "revtm"},
260+
{"XC_MGGA_X_SCANL+XC_MGGA_C_SCANL", "scanl"},
261+
{"XC_MGGA_X_MGGAC+XC_GGA_C_MGGAC", "mggac"},
262+
{"XC_MGGA_X_R2SCANL+XC_MGGA_C_R2SCANL", "r2scanl"},
263+
{"XC_GGA_X_B88+XC_GGA_C_LYP", "blyp"},
264+
{"XC_GGA_X_B88+XC_GGA_C_P86", "bp86"},
265+
{"XC_GGA_X_PW91+XC_GGA_C_PW91", "pw91"},
266+
{"XC_GGA_X_PBE+XC_GGA_C_PBE", "pbe"},
267+
{"XC_GGA_X_PBE_SOL+XC_GGA_C_PBE_SOL", "pbesol"},
268+
{"XC_MGGA_X_PKZB+XC_MGGA_C_PKZB", "pkzb"},
269+
{"XC_MGGA_X_TPSS+XC_MGGA_C_TPSS", "tpss"},
270+
{"XC_MGGA_X_REVTPSS+XC_MGGA_C_REVTPSS", "revtpss"},
271+
{"XC_MGGA_X_SCAN+XC_MGGA_C_SCAN", "scan"},
272+
{"XC_GGA_X_SOGGA+XC_GGA_C_PBE", "sogga"},
273+
{"XC_MGGA_X_BLOC+XC_MGGA_C_TPSSLOC", "bloc"},
274+
{"XC_GGA_X_OPTX+XC_GGA_C_LYP", "olyp"},
275+
{"XC_GGA_X_RPBE+XC_GGA_C_PBE", "rpbe"},
276+
{"XC_GGA_X_B88+XC_GGA_C_PBE", "bpbe"},
277+
{"XC_GGA_X_MPW91+XC_GGA_C_PW91", "mpw91"},
278+
{"XC_MGGA_X_MS0+XC_GGA_C_REGTPSS", "ms0"},
279+
{"XC_MGGA_X_MS1+XC_GGA_C_REGTPSS", "ms1"},
280+
{"XC_MGGA_X_MS2+XC_GGA_C_REGTPSS", "ms2"},
281+
{"XC_HYB_MGGA_X_MS2H+XC_GGA_C_REGTPSS", "ms2h"},
282+
{"XC_MGGA_X_MVS+XC_GGA_C_REGTPSS", "mvs"},
283+
{"XC_HYB_MGGA_X_MVSH+XC_GGA_C_REGTPSS", "mvsh"},
284+
{"XC_GGA_X_SOGGA11+XC_GGA_C_SOGGA11", "sogga11"},
285+
{"XC_HYB_GGA_X_SOGGA11_X+XC_GGA_C_SOGGA11_X", "sogga11-x"},
286+
{"XC_HYB_MGGA_X_DLDF+XC_MGGA_C_DLDF", "dldf"},
287+
{"XC_GGA_X_GAM+XC_GGA_C_GAM", "gam"},
288+
{"XC_MGGA_X_M06_L+XC_MGGA_C_M06_L", "m06-l"},
289+
{"XC_MGGA_X_M11_L+XC_MGGA_C_M11_L", "m11-l"},
290+
{"XC_MGGA_X_MN12_L+XC_MGGA_C_MN12_L", "mn12-l"},
291+
{"XC_MGGA_X_MN15_L+XC_MGGA_C_MN15_L", "mn15-l"},
292+
{"XC_GGA_X_N12+XC_GGA_C_N12", "n12"},
293+
{"XC_HYB_GGA_X_N12_SX+XC_GGA_C_N12_SX", "n12-sx"},
294+
{"XC_HYB_MGGA_X_MN12_SX+XC_MGGA_C_MN12_SX", "mn12-sx"},
295+
{"XC_HYB_MGGA_X_MN15+XC_MGGA_C_MN15", "mn15"},
296+
{"XC_MGGA_X_MBEEF+XC_GGA_C_PBE_SOL", "mbeef"},
297+
{"XC_HYB_MGGA_X_SCAN0+XC_MGGA_C_SCAN", "scan0"},
298+
{"XC_GGA_X_PBE+XC_GGA_C_OP_PBE", "pbeop"},
299+
{"XC_GGA_X_B88+XC_GGA_C_OP_B88", "bop"}
300+
};
301+
302+
void search_xcname_libxc_xplusc(const std::string& xcpattern, std::string& xname)
303+
{
304+
std::vector<std::string> xc_words = FmtCore::split(xcpattern, "+");
305+
assert(xc_words.size() == 2);
306+
307+
std::vector<std::string> words = FmtCore::split(xc_words[0], "_");
308+
const std::string key = (words[2] == "X")? xcpattern: xc_words[1] + "+" + xc_words[0];
309+
310+
if (xcname_libxc_xplusc_.find(key) != xcname_libxc_xplusc_.end()) {
311+
xname = xcname_libxc_xplusc_.at(key);
312+
} else {
313+
std::cout << " WARNING: DFT-D3 parameter for XC `" << key << "` not found, fall back to PBE-D3" << std::endl;
314+
xname = "pbe";
315+
}
316+
}
317+
318+
void search_xcname_libxc_xc(const std::string& xcpattern, std::string& xname)
319+
{
320+
std::vector<std::string> words = FmtCore::split(xcpattern, "_");
321+
if (xcname_libxc_xc_.find(xcpattern) != xcname_libxc_xc_.end()) {
322+
xname = xcname_libxc_xc_.at(xcpattern);
323+
} else {
324+
std::cout << " WARNING: DFT-D3 parameter for XC `" << xcpattern << "` not found, fall back to PBE-D3" << std::endl;
325+
xname = "pbe";
326+
}
327+
}
328+
329+
void search_xcname_libxc(const std::string& xcpattern, std::string& xname)
330+
{
331+
if (xcpattern.find("+") != std::string::npos) {
332+
search_xcname_libxc_xplusc(xcpattern, xname);
333+
} else {
334+
search_xcname_libxc_xc(xcpattern, xname);
335+
}
336+
}
337+
338+
std::string search_xcname(const std::string& xcpattern)
339+
{
340+
std::string xcname = xcpattern;
341+
const std::regex pattern("XC_(LDA|GGA|MGGA|HYB|HYB_LDA|HYB_GGA|HYB_MGGA)_(X|C|XC|K)_(.*)");
342+
// as long as there is piece in xcpattern that can match, we can search for the corresponding name
343+
if (std::regex_match(xcpattern, pattern)) {
344+
search_xcname_libxc(xcpattern, xcname);
345+
}
346+
return xcname;
347+
}
348+
}

source/module_hamilt_general/module_vdw/dftd3.h renamed to source/module_hamilt_general/module_vdw/dftd3_xc_param.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,31 @@
1+
/**
2+
* This file stores XC dependent DFT-D3 parameters for Grimme-D3
3+
* dispersion correction.
4+
*
5+
* Supported forms:
6+
*
7+
* DFT-D3(0): zero-damping
8+
* DFT-D3(BJ): Becke-Johnson damping
9+
* DFT-D3M(0): zero-damping with modified damping function
10+
* DFT-D3M(BJ): Becke-Johnson damping with modified damping function
11+
*
12+
* Usage
13+
* -----
14+
* call function DFTD3::search(xc, method, param) to get the DFT-D3 parameters
15+
* for the given XC functional. The obtained param should be a std::vector<double>,
16+
* in which the first 9 elements are the DFT-D3 parameters:
17+
* 's6', 'sr6', 'a1', 's8', 'sr8', 'a2', 's9', 'alp', 'bet'
18+
*
19+
* Fall-back
20+
* ---------
21+
* If the DFT-D3 parameters are not found:
22+
*
23+
* DFT-D3M(BJ) -> DFT-D3(BJ) -> PBE-D3(BJ)
24+
* DFT-D3M(0) -> DFT-D3(0) -> PBE-D3(0)
25+
*
26+
* Please always look the warnning message to check the fall-back.
27+
*/
28+
129
#include <map>
230
#include <string>
331
#include <vector>

source/module_hamilt_general/module_vdw/test/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,9 @@ AddTest(
99
TARGET vdwTest
1010
LIBS parameter ${math_libs} base device vdw
1111
SOURCES vdw_test.cpp
12+
)
13+
14+
AddTest(
15+
TARGET dftd3_xc
16+
SOURCES dftd3_xc_test.cpp
1217
)

0 commit comments

Comments
 (0)