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+ }
0 commit comments