Line data Source code
1 : !--------------------------------------------------------------------------------------------------!
2 : ! CP2K: A general program to perform molecular dynamics simulations !
3 : ! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4 : ! !
5 : ! SPDX-License-Identifier: GPL-2.0-or-later !
6 : !--------------------------------------------------------------------------------------------------!
7 :
8 : ! **************************************************************************************************
9 : !> \brief Set disperson types for DFT calculations
10 : !> \author JGH (04.2014)
11 : ! **************************************************************************************************
12 : MODULE qs_dispersion_utils
13 :
14 : USE atomic_kind_types, ONLY: atomic_kind_type,&
15 : get_atomic_kind
16 : USE cp_log_handling, ONLY: cp_get_default_logger,&
17 : cp_logger_type
18 : USE cp_output_handling, ONLY: cp_print_key_finished_output,&
19 : cp_print_key_unit_nr
20 : USE input_constants, ONLY: &
21 : vdw_nl_DRSLL, vdw_nl_LMKLL, vdw_nl_RVV10, vdw_pairpot_dftd2, vdw_pairpot_dftd2chg, &
22 : vdw_pairpot_dftd3, vdw_pairpot_dftd3bj, vdw_pairpot_dftd4, xc_funct_b3lyp, xc_funct_blyp, &
23 : xc_funct_bp, xc_funct_no_shortcut, xc_funct_pbe, xc_funct_pbe0, xc_funct_tpss, xc_none, &
24 : xc_vdw_fun_nonloc, xc_vdw_fun_pairpot
25 : USE input_section_types, ONLY: section_vals_get_subs_vals,&
26 : section_vals_type,&
27 : section_vals_val_get
28 : USE kinds, ONLY: default_string_length,&
29 : dp
30 : USE physcon, ONLY: bohr,&
31 : kjmol
32 : USE qs_dispersion_types, ONLY: qs_atom_dispersion_type,&
33 : qs_dispersion_type
34 : USE qs_environment_types, ONLY: get_qs_env,&
35 : qs_environment_type
36 : USE qs_kind_types, ONLY: get_qs_kind,&
37 : qs_kind_type
38 : USE string_utilities, ONLY: lowercase,&
39 : uppercase
40 : #include "./base/base_uses.f90"
41 :
42 : IMPLICIT NONE
43 :
44 : PRIVATE
45 :
46 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_dispersion_utils'
47 :
48 : PUBLIC :: qs_dispersion_env_set, qs_write_dispersion, &
49 : qs_scaling_dftd3, qs_scaling_dftd3bj
50 : PUBLIC :: cellhash, xc_functional_to_d_name, xc_functional_to_d4_name_int, xc_functional_detect_expanded
51 :
52 : ! **************************************************************************************************
53 : CONTAINS
54 : ! **************************************************************************************************
55 : !> \brief ...
56 : !> \param xc_functional_name ...
57 : !> \param d_functional_name ...
58 : ! **************************************************************************************************
59 86 : SUBROUTINE xc_functional_to_d_name(xc_functional_name, d_functional_name)
60 : CHARACTER(len=*), INTENT(IN) :: xc_functional_name
61 : CHARACTER(len=*), INTENT(OUT) :: d_functional_name
62 :
63 86 : IF (TRIM(ADJUSTL(xc_functional_name)) == "BP") THEN
64 12 : d_functional_name = "bp86"
65 : ELSE
66 74 : d_functional_name = TRIM(ADJUSTL(xc_functional_name))
67 74 : CALL lowercase(d_functional_name)
68 : END IF
69 :
70 86 : END SUBROUTINE xc_functional_to_d_name
71 :
72 : ! **************************************************************************************************
73 : !> \brief ...
74 : !> \param xc_functional_id ...
75 : !> \param xc_functional_name ...
76 : ! **************************************************************************************************
77 0 : SUBROUTINE xc_functional_to_d4_name_int(xc_functional_id, xc_functional_name)
78 : INTEGER, INTENT(IN) :: xc_functional_id
79 : CHARACTER(len=*), INTENT(OUT) :: xc_functional_name
80 :
81 0 : SELECT CASE (xc_functional_id)
82 : CASE (xc_funct_pbe)
83 0 : xc_functional_name = "PBE"
84 : CASE (xc_funct_pbe0)
85 0 : xc_functional_name = "PBE0"
86 : CASE (xc_funct_b3lyp)
87 0 : xc_functional_name = "B3LYP"
88 : CASE (xc_funct_blyp)
89 0 : xc_functional_name = "BLYP"
90 : CASE (xc_funct_bp)
91 0 : xc_functional_name = "BP"
92 : CASE (xc_funct_tpss)
93 0 : xc_functional_name = "TPSS"
94 : CASE DEFAULT
95 0 : xc_functional_name = "NONE"
96 : END SELECT
97 :
98 0 : END SUBROUTINE xc_functional_to_d4_name_int
99 :
100 : ! **************************************************************************************************
101 : !> \brief ...
102 : !> \param xc_fun_section ...
103 : !> \param xc_functional_name ...
104 : ! **************************************************************************************************
105 7035 : SUBROUTINE xc_functional_detect_expanded(xc_fun_section, xc_functional_name)
106 : TYPE(section_vals_type), POINTER :: xc_fun_section
107 : CHARACTER(len=*), INTENT(OUT) :: xc_functional_name
108 :
109 7035 : CHARACTER(len=20), ALLOCATABLE :: sub_names(:)
110 : INTEGER :: i, n_explicit
111 : LOGICAL :: has_becke88, has_lyp, has_mgga_c_r2scan, has_mgga_c_scan, has_mgga_x_r2scan, &
112 : has_mgga_x_scan, has_optx, has_p86c, has_pbe0_13, has_vwn, has_xalpha
113 : REAL(dp) :: scal_x_pbe
114 : TYPE(section_vals_type), POINTER :: sub_section
115 :
116 7035 : n_explicit = 0
117 7035 : has_becke88 = .FALSE.; has_lyp = .FALSE.; has_vwn = .FALSE.; has_p86c = .FALSE.
118 7035 : has_xalpha = .FALSE.; has_optx = .FALSE.; has_pbe0_13 = .FALSE.
119 7035 : has_mgga_c_r2scan = .FALSE.; has_mgga_x_r2scan = .FALSE.
120 7035 : has_mgga_c_scan = .FALSE.; has_mgga_x_scan = .FALSE.
121 :
122 21105 : ALLOCATE (sub_names(xc_fun_section%section%n_subsections))
123 :
124 5142585 : DO i = 1, xc_fun_section%section%n_subsections
125 5135550 : sub_section => xc_fun_section%subs_vals(i, 1)%section_vals
126 5142585 : IF (SIZE(sub_section%values, 2) > 0) THEN
127 7275 : n_explicit = n_explicit + 1
128 7275 : sub_names(n_explicit) = TRIM(ADJUSTL(sub_section%section%name))
129 508 : SELECT CASE (sub_names(n_explicit))
130 508 : CASE ("BECKE88"); has_becke88 = .TRUE.
131 496 : CASE ("LYP"); has_lyp = .TRUE.
132 32 : CASE ("VWN"); has_vwn = .TRUE.
133 14 : CASE ("P86C"); has_p86c = .TRUE.
134 62 : CASE ("XALPHA"); has_xalpha = .TRUE.
135 4 : CASE ("OPTX"); has_optx = .TRUE.
136 10 : CASE ("MGGA_C_R2SCAN"); has_mgga_c_r2scan = .TRUE.
137 10 : CASE ("MGGA_X_R2SCAN"); has_mgga_x_r2scan = .TRUE.
138 4 : CASE ("MGGA_C_SCAN"); has_mgga_c_scan = .TRUE.
139 4 : CASE ("MGGA_X_SCAN"); has_mgga_x_scan = .TRUE.
140 0 : CASE ("PBE0_1/3"); has_pbe0_13 = .TRUE.
141 : CASE ("PBE")
142 2825 : CALL section_vals_val_get(sub_section, "SCALE_X", r_val=scal_x_pbe)
143 7275 : IF (ABS(scal_x_pbe - 0.75_dp) < 0.01_dp) has_pbe0_13 = .TRUE.
144 : END SELECT
145 : END IF
146 : END DO
147 :
148 7035 : IF (has_becke88 .AND. has_lyp .AND. has_vwn .AND. has_xalpha) THEN
149 32 : xc_functional_name = "B3LYP"
150 7003 : ELSE IF (has_becke88 .AND. has_lyp) THEN
151 912 : xc_functional_name = MERGE("PBE0", "BLYP", has_pbe0_13)
152 6547 : ELSE IF (has_becke88 .AND. has_p86c) THEN
153 14 : xc_functional_name = "BP"
154 6533 : ELSE IF (has_optx .AND. has_lyp) THEN
155 4 : xc_functional_name = "OLYP"
156 6529 : ELSE IF (has_mgga_c_r2scan .AND. has_mgga_x_r2scan) THEN
157 10 : xc_functional_name = "R2SCAN"
158 6519 : ELSE IF (has_mgga_c_scan .AND. has_mgga_x_scan) THEN
159 4 : xc_functional_name = "SCAN"
160 6515 : ELSE IF (n_explicit == 1 .AND. has_pbe0_13) THEN
161 628 : xc_functional_name = "PBE0"
162 5887 : ELSE IF (n_explicit == 1) THEN
163 5099 : xc_functional_name = sub_names(1)
164 : ELSE
165 788 : xc_functional_name = "NONE"
166 : END IF
167 :
168 14070 : END SUBROUTINE xc_functional_detect_expanded
169 :
170 : !> \brief ...
171 : !> \param dispersion_env ...
172 : !> \param xc_section ...
173 : ! **************************************************************************************************
174 14070 : SUBROUTINE qs_dispersion_env_set(dispersion_env, xc_section)
175 : TYPE(qs_dispersion_type), POINTER :: dispersion_env
176 : TYPE(section_vals_type), POINTER :: xc_section
177 :
178 : CHARACTER(len=default_string_length) :: xc_functional_name
179 : INTEGER :: xc_functional_id
180 : LOGICAL :: exfun, explicit
181 7035 : REAL(dp), POINTER :: params(:), scal(:)
182 : TYPE(section_vals_type), POINTER :: nl_section, pp_section, vdw_section, &
183 : xc_fun_section
184 :
185 0 : CPASSERT(ASSOCIATED(dispersion_env))
186 :
187 : ! set general defaults
188 7035 : dispersion_env%doabc = .FALSE.
189 7035 : dispersion_env%c9cnst = .FALSE.
190 7035 : dispersion_env%lrc = .FALSE.
191 7035 : dispersion_env%srb = .FALSE.
192 7035 : dispersion_env%verbose = .FALSE.
193 7035 : dispersion_env%nd3_exclude_pair = 0
194 7035 : NULLIFY (dispersion_env%c6ab, dispersion_env%maxci, dispersion_env%r0ab, dispersion_env%rcov, &
195 7035 : dispersion_env%r2r4, dispersion_env%cn, dispersion_env%cnkind, dispersion_env%cnlist, &
196 7035 : dispersion_env%d3_exclude_pair)
197 7035 : NULLIFY (dispersion_env%q_mesh, dispersion_env%kernel_table, dispersion_env%d2y_dx2)
198 7035 : NULLIFY (dispersion_env%sab_vdw, dispersion_env%sab_cn)
199 7035 : NULLIFY (dispersion_env%dftd_section)
200 7035 : NULLIFY (vdw_section, xc_fun_section)
201 7035 : vdw_section => section_vals_get_subs_vals(xc_section, "vdw_potential")
202 7035 : xc_fun_section => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL")
203 7035 : CALL section_vals_val_get(xc_fun_section, "_SECTION_PARAMETERS_", i_val=xc_functional_id)
204 7035 : IF (xc_functional_id == xc_funct_no_shortcut .OR. xc_functional_id == xc_none) THEN
205 7035 : CALL xc_functional_detect_expanded(xc_fun_section, xc_functional_name)
206 : ELSE
207 0 : CALL xc_functional_to_d4_name_int(xc_functional_id, xc_functional_name)
208 : END IF
209 7035 : CALL section_vals_val_get(vdw_section, "POTENTIAL_TYPE", i_val=dispersion_env%type)
210 7035 : IF (dispersion_env%type == xc_vdw_fun_pairpot) THEN
211 244 : NULLIFY (pp_section)
212 244 : pp_section => section_vals_get_subs_vals(vdw_section, "PAIR_POTENTIAL")
213 244 : CALL section_vals_val_get(pp_section, "VERBOSE_OUTPUT", l_val=dispersion_env%verbose)
214 244 : CALL section_vals_val_get(pp_section, "TYPE", i_val=dispersion_env%pp_type)
215 244 : IF (dispersion_env%pp_type == vdw_pairpot_dftd2 .OR. &
216 : dispersion_env%pp_type == vdw_pairpot_dftd2chg) THEN
217 : ! functional parameters for D2 with Grimme or Chai-Head-Gordon damping
218 36 : CALL section_vals_val_get(pp_section, "EXP_PRE", r_val=dispersion_env%exp_pre, explicit=explicit)
219 36 : IF (dispersion_env%pp_type == vdw_pairpot_dftd2chg) THEN
220 2 : IF (explicit) CPABORT("D2_EXP_PRE is not applicable to DFTD2(CHG)")
221 2 : dispersion_env%exp_pre = 0._dp
222 : END IF
223 36 : CALL section_vals_val_get(pp_section, "SCALING", explicit=explicit)
224 36 : IF (.NOT. explicit) THEN
225 24 : CALL section_vals_val_get(pp_section, "REFERENCE_FUNCTIONAL", explicit=exfun)
226 24 : IF (.NOT. exfun) THEN
227 12 : CALL xc_functional_to_d_name(xc_functional_name, dispersion_env%ref_functional)
228 12 : IF (dispersion_env%ref_functional == "none") THEN
229 : CALL cp_abort(__LOCATION__, &
230 : "D2 vdW: XC_FUNCTIONAL not supported. "// &
231 : "Set REFERENCE_FUNCTIONAL explicitly. "// &
232 : "Go to https://www.chemie.uni-bonn.de/grimme/de/software/dft-d3/ "// &
233 0 : "for a full list of supported functionals")
234 : END IF
235 : ELSE
236 : CALL section_vals_val_get(vdw_section, &
237 : "PAIR_POTENTIAL%REFERENCE_FUNCTIONAL", &
238 12 : c_val=dispersion_env%ref_functional)
239 : END IF
240 24 : IF (dispersion_env%pp_type == vdw_pairpot_dftd2chg) THEN
241 2 : xc_functional_name = dispersion_env%ref_functional
242 2 : CALL uppercase(xc_functional_name)
243 4 : SELECT CASE (TRIM(xc_functional_name))
244 : CASE ("WB97X-D", "WB97XD")
245 2 : dispersion_env%scaling = 1._dp
246 : CASE DEFAULT
247 : CALL cp_abort(__LOCATION__, &
248 2 : "DFTD2(CHG): set REFERENCE_FUNCTIONAL WB97X-D or D2_SCALING explicitly")
249 : END SELECT
250 : ELSE
251 22 : CALL qs_scaling_dftd2(dispersion_env%scaling, dispersion_env%ref_functional)
252 : END IF
253 : ELSE
254 12 : CALL section_vals_val_get(pp_section, "SCALING", r_val=dispersion_env%scaling)
255 : END IF
256 : ELSE
257 208 : dispersion_env%exp_pre = 0._dp
258 208 : dispersion_env%scaling = 0._dp
259 : END IF
260 244 : IF (dispersion_env%pp_type == vdw_pairpot_dftd3 .OR. &
261 : dispersion_env%pp_type == vdw_pairpot_dftd3bj) THEN
262 : ! functional parameters for Grimme DFT-D3 type
263 160 : CALL section_vals_val_get(pp_section, "EPS_CN", r_val=dispersion_env%eps_cn)
264 160 : CALL section_vals_val_get(pp_section, "CALCULATE_C9_TERM", l_val=dispersion_env%doabc)
265 160 : CALL section_vals_val_get(pp_section, "REFERENCE_C9_TERM", l_val=dispersion_env%c9cnst)
266 160 : CALL section_vals_val_get(pp_section, "LONG_RANGE_CORRECTION", l_val=dispersion_env%lrc)
267 160 : CALL section_vals_val_get(pp_section, "SHORT_RANGE_CORRECTION", l_val=dispersion_env%srb)
268 160 : CALL section_vals_val_get(pp_section, "SHORT_RANGE_CORRECTION_PARAMETERS", r_vals=params)
269 1440 : dispersion_env%srb_params(1:4) = params(1:4)
270 : ! KG corrections
271 160 : CALL section_vals_val_get(pp_section, "MOLECULE_CORRECTION", l_val=dispersion_env%domol)
272 160 : CALL section_vals_val_get(pp_section, "MOLECULE_CORRECTION_C8", r_val=dispersion_env%kgc8)
273 160 : IF (dispersion_env%pp_type == vdw_pairpot_dftd3) THEN
274 82 : CALL section_vals_val_get(pp_section, "D3_SCALING", explicit=explicit)
275 78 : ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd3bj) THEN
276 78 : CALL section_vals_val_get(pp_section, "D3BJ_SCALING", explicit=explicit)
277 : END IF
278 160 : IF (.NOT. explicit) THEN
279 148 : CALL section_vals_val_get(pp_section, "REFERENCE_FUNCTIONAL", explicit=exfun)
280 148 : IF (.NOT. exfun) THEN
281 54 : CALL xc_functional_to_d_name(xc_functional_name, dispersion_env%ref_functional)
282 54 : IF (dispersion_env%ref_functional == "none") THEN
283 : CALL cp_abort(__LOCATION__, &
284 : "D3 vdW: XC_FUNCTIONAL not supported. "// &
285 : "Set REFERENCE_FUNCTIONAL explicitly. "// &
286 : "Go to https://www.chemie.uni-bonn.de/grimme/de/software/dft-d3/ for a full "// &
287 0 : "list of supported functionals")
288 : END IF
289 : ELSE
290 : CALL section_vals_val_get(vdw_section, &
291 : "PAIR_POTENTIAL%REFERENCE_FUNCTIONAL", &
292 94 : c_val=dispersion_env%ref_functional)
293 : END IF
294 : CALL section_vals_val_get(pp_section, "D3_REFERENCE_CODE", &
295 148 : l_val=dispersion_env%d3_reference_code)
296 148 : IF (.NOT. dispersion_env%d3_reference_code) THEN
297 98 : IF (dispersion_env%pp_type == vdw_pairpot_dftd3) THEN
298 : CALL qs_scaling_dftd3(dispersion_env%s6, dispersion_env%sr6, dispersion_env%s8, &
299 58 : dispersion_env%sr8, dispersion_env%ref_functional)
300 40 : ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd3bj) THEN
301 : CALL qs_scaling_dftd3bj(dispersion_env%s6, dispersion_env%a1, dispersion_env%s8, &
302 40 : dispersion_env%a2, dispersion_env%ref_functional)
303 : END IF
304 : END IF
305 : ELSE
306 12 : dispersion_env%d3_scaling_explicit = .TRUE.
307 12 : CALL section_vals_val_get(pp_section, "REFERENCE_FUNCTIONAL", explicit=exfun)
308 12 : IF (.NOT. exfun) THEN
309 6 : CALL xc_functional_to_d_name(xc_functional_name, dispersion_env%ref_functional)
310 6 : IF (dispersion_env%ref_functional == "none") THEN
311 0 : dispersion_env%ref_functional = ""
312 : END IF
313 : ELSE
314 : CALL section_vals_val_get(vdw_section, &
315 : "PAIR_POTENTIAL%REFERENCE_FUNCTIONAL", &
316 6 : c_val=dispersion_env%ref_functional)
317 : END IF
318 : CALL section_vals_val_get(pp_section, "D3_REFERENCE_CODE", &
319 12 : l_val=dispersion_env%d3_reference_code)
320 12 : IF (.NOT. dispersion_env%d3_reference_code) THEN
321 10 : IF (dispersion_env%pp_type == vdw_pairpot_dftd3) THEN
322 : CALL qs_scaling_dftd3(dispersion_env%s6, dispersion_env%sr6, dispersion_env%s8, &
323 4 : dispersion_env%sr8, dispersion_env%ref_functional)
324 6 : ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd3bj) THEN
325 : CALL qs_scaling_dftd3bj(dispersion_env%s6, dispersion_env%a1, dispersion_env%s8, &
326 6 : dispersion_env%a2, dispersion_env%ref_functional)
327 : END IF
328 : END IF
329 12 : IF (dispersion_env%pp_type == vdw_pairpot_dftd3) THEN
330 4 : CALL section_vals_val_get(pp_section, "D3_SCALING", r_vals=scal)
331 4 : dispersion_env%s6 = scal(1)
332 4 : dispersion_env%sr6 = scal(2)
333 4 : dispersion_env%s8 = scal(3)
334 4 : dispersion_env%a1 = 0.0_dp
335 4 : dispersion_env%a2 = 0.0_dp
336 8 : ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd3bj) THEN
337 8 : CALL section_vals_val_get(pp_section, "D3BJ_SCALING", r_vals=scal)
338 8 : dispersion_env%s6 = scal(1)
339 8 : dispersion_env%a1 = scal(2)
340 8 : dispersion_env%s8 = scal(3)
341 8 : dispersion_env%a2 = scal(4)
342 8 : dispersion_env%sr6 = 0.0_dp
343 : END IF
344 : END IF
345 : ELSE
346 84 : dispersion_env%s6 = 0._dp
347 84 : dispersion_env%sr6 = 0._dp
348 84 : dispersion_env%s8 = 0._dp
349 84 : dispersion_env%s9 = 0._dp
350 84 : dispersion_env%a1 = 0._dp
351 84 : dispersion_env%a2 = 0._dp
352 84 : dispersion_env%eps_cn = 0._dp
353 : END IF
354 244 : IF (dispersion_env%pp_type == vdw_pairpot_dftd4) THEN
355 48 : CALL section_vals_val_get(pp_section, "D4_SCALING", explicit=explicit)
356 48 : IF (.NOT. explicit) THEN
357 48 : CALL section_vals_val_get(pp_section, "REFERENCE_FUNCTIONAL", explicit=exfun)
358 48 : IF (.NOT. exfun) THEN
359 14 : CALL xc_functional_to_d_name(xc_functional_name, dispersion_env%ref_functional)
360 : ELSE
361 : CALL section_vals_val_get(vdw_section, &
362 : "PAIR_POTENTIAL%REFERENCE_FUNCTIONAL", &
363 34 : c_val=dispersion_env%ref_functional)
364 : END IF
365 48 : IF (TRIM(ADJUSTL(dispersion_env%ref_functional)) == "none") THEN
366 0 : CPABORT("D4: XC_FUNCTIONAL not supported. Set REFERENCE_FUNCTIONAL explicitly.")
367 : END IF
368 : ELSE
369 0 : CALL section_vals_val_get(pp_section, "D4_SCALING", r_vals=scal)
370 0 : dispersion_env%s6 = scal(1)
371 0 : dispersion_env%a1 = scal(2)
372 0 : dispersion_env%s8 = scal(3)
373 0 : dispersion_env%a2 = scal(4)
374 0 : dispersion_env%sr6 = 0.0_dp
375 0 : dispersion_env%ref_functional = "none"
376 : END IF
377 48 : CALL section_vals_val_get(pp_section, "EPS_CN", r_val=dispersion_env%eps_cn)
378 : CALL section_vals_val_get(pp_section, "D4_REFERENCE_CODE", &
379 48 : l_val=dispersion_env%d4_reference_code)
380 48 : CALL section_vals_val_get(pp_section, "D4_DEBUG", l_val=dispersion_env%d4_debug)
381 : CALL section_vals_val_get(pp_section, "D3_REFERENCE_CODE", &
382 48 : l_val=dispersion_env%d3_reference_code)
383 48 : CALL section_vals_val_get(pp_section, "D4_CUTOFF", r_val=dispersion_env%rc_d4)
384 : CALL section_vals_val_get(pp_section, "D4_CUTOFF_WIDTH", &
385 48 : r_val=dispersion_env%d4_cutoff_width)
386 : CALL section_vals_val_get(pp_section, "D4_3B_CUTOFF_WIDTH", &
387 48 : r_val=dispersion_env%d4_3b_cutoff_width)
388 48 : CALL section_vals_val_get(pp_section, "D4_CN_CUTOFF", r_val=dispersion_env%rc_cn)
389 48 : CALL section_vals_val_get(pp_section, "FACTOR_S9_TERM", r_val=dispersion_env%s9)
390 : !C9 term default=T for D4
391 48 : CALL section_vals_val_get(pp_section, "CALCULATE_C9_TERM", explicit=exfun)
392 48 : IF (exfun) THEN
393 8 : CALL section_vals_val_get(pp_section, "CALCULATE_C9_TERM", l_val=dispersion_env%doabc)
394 : ELSE
395 40 : dispersion_env%doabc = .TRUE.
396 : END IF
397 : END IF
398 244 : CALL section_vals_val_get(pp_section, "R_CUTOFF", r_val=dispersion_env%rc_disp)
399 : CALL section_vals_val_get(pp_section, "PARAMETER_FILE_NAME", &
400 244 : c_val=dispersion_env%parameter_file_name)
401 : ! set DFTD section for output handling
402 244 : dispersion_env%dftd_section => pp_section
403 6791 : ELSE IF (dispersion_env%type == xc_vdw_fun_nonloc) THEN
404 66 : NULLIFY (nl_section)
405 66 : nl_section => section_vals_get_subs_vals(vdw_section, "NON_LOCAL")
406 66 : CALL section_vals_val_get(nl_section, "VERBOSE_OUTPUT", l_val=dispersion_env%verbose)
407 : CALL section_vals_val_get(nl_section, "KERNEL_FILE_NAME", &
408 66 : c_val=dispersion_env%kernel_file_name)
409 66 : CALL section_vals_val_get(nl_section, "TYPE", i_val=dispersion_env%nl_type)
410 66 : CALL section_vals_val_get(nl_section, "CUTOFF", r_val=dispersion_env%pw_cutoff)
411 66 : CALL section_vals_val_get(nl_section, "PARAMETERS", r_vals=params)
412 66 : CALL section_vals_val_get(nl_section, "SCALE", r_val=dispersion_env%scale_rvv10)
413 66 : dispersion_env%b_value = params(1)
414 66 : dispersion_env%c_value = params(2)
415 : END IF
416 7035 : END SUBROUTINE qs_dispersion_env_set
417 :
418 : ! **************************************************************************************************
419 : !> \brief ...
420 : !> \param qs_env ...
421 : !> \param dispersion_env ...
422 : !> \param ounit ...
423 : ! **************************************************************************************************
424 8033 : SUBROUTINE qs_write_dispersion(qs_env, dispersion_env, ounit)
425 : TYPE(qs_environment_type), POINTER :: qs_env
426 : TYPE(qs_dispersion_type), POINTER :: dispersion_env
427 : INTEGER, INTENT(in), OPTIONAL :: ounit
428 :
429 : CHARACTER(LEN=2) :: symbol
430 : INTEGER :: i, ikind, nkind, output_unit
431 8033 : TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
432 : TYPE(cp_logger_type), POINTER :: logger
433 : TYPE(qs_atom_dispersion_type), POINTER :: disp
434 8033 : TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
435 : TYPE(section_vals_type), POINTER :: dft_section
436 :
437 8033 : IF (PRESENT(ounit)) THEN
438 0 : output_unit = ounit
439 : ELSE
440 8033 : NULLIFY (logger)
441 8033 : logger => cp_get_default_logger()
442 :
443 8033 : dft_section => section_vals_get_subs_vals(qs_env%input, "DFT")
444 : output_unit = cp_print_key_unit_nr(logger, dft_section, &
445 8033 : "PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
446 : END IF
447 :
448 8033 : IF (output_unit > 0) THEN
449 : ! vdW type specific output
450 1629 : IF (dispersion_env%type == xc_vdw_fun_pairpot) THEN
451 133 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T67,'Pair Potential')")
452 : ! Pair potentials
453 133 : IF (dispersion_env%pp_type == vdw_pairpot_dftd2 .OR. &
454 : dispersion_env%pp_type == vdw_pairpot_dftd2chg) THEN
455 15 : IF (dispersion_env%pp_type == vdw_pairpot_dftd2chg) THEN
456 0 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T35,'DFT-D2(CHG)')")
457 0 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'Chai-Head-Gordon, PCCP 10: 6615 (2008)')")
458 0 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T35,'CHG Damping: a=6, alpha=12')")
459 : ELSE
460 15 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T35,'DFT-D2')")
461 15 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T35,'Potential Form: S. Grimme, JCC 27: 1787 (2006)')")
462 : END IF
463 15 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T35,'Cutoff Radius [Bohr]:',T73,F8.2)") dispersion_env%rc_disp
464 15 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T35,'Scaling Factor:',T73,F8.4)") dispersion_env%scaling
465 15 : IF (dispersion_env%pp_type == vdw_pairpot_dftd2) THEN
466 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T35,'Exp Prefactor for Damping:',T73,F8.1)") &
467 15 : dispersion_env%exp_pre
468 : END IF
469 15 : CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
470 15 : nkind = SIZE(atomic_kind_set)
471 40 : DO ikind = 1, nkind
472 25 : CALL get_atomic_kind(atomic_kind_set(ikind), element_symbol=symbol)
473 25 : CALL get_qs_kind(qs_kind_set(ikind), dispersion=disp)
474 40 : IF (disp%defined) THEN
475 : WRITE (output_unit, fmt="(' vdW PARAMETER| ',T18,'Atom=',A2, "// &
476 : "T28,'C6[J*nm^6*mol^-1]=',F8.4,T63,'r(vdW)[A]=',F8.4)") &
477 25 : symbol, disp%c6/(1000._dp*bohr**6/kjmol), disp%vdw_radii/bohr
478 : ELSE
479 0 : WRITE (output_unit, fmt="(' vdW PARAMETER| ',T20,'Atom=',A2,T70,'not defined')")
480 : END IF
481 : END DO
482 118 : ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd3) THEN
483 26 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'DFT-D3 (Version 3.1)')")
484 26 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'Potential Form: S. Grimme et al, JCP 132: 154104 (2010)')")
485 26 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'Zero Damping')")
486 26 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'Cutoff Radius [Bohr]:',T73,F8.2)") dispersion_env%rc_disp
487 26 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'s6 Scaling Factor:',T73,F8.4)") dispersion_env%s6
488 26 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'sr6 Scaling Factor:',T73,F8.4)") dispersion_env%sr6
489 26 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'s8 Scaling Factor:',T73,F8.4)") dispersion_env%s8
490 26 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'Cutoff for CN calculation:',T69,E12.4)") dispersion_env%eps_cn
491 26 : IF (dispersion_env%nd3_exclude_pair > 0) THEN
492 0 : DO i = 1, dispersion_env%nd3_exclude_pair
493 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'Excluded Pairs: ',T76,I2,' ',I2)") &
494 0 : dispersion_env%d3_exclude_pair(i, :)
495 : END DO
496 : END IF
497 92 : ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd3bj) THEN
498 73 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'DFT-D3 (Version 3.1)')")
499 73 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'Potential Form: S. Grimme et al, JCP 132: 154104 (2010)')")
500 73 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'BJ Damping: S. Grimme et al, JCC 32: 1456 (2011)')")
501 73 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'Cutoff Radius [Bohr]:',T73,F8.2)") dispersion_env%rc_disp
502 73 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'s6 Scaling Factor:',T73,F8.4)") dispersion_env%s6
503 73 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'a1 Damping Factor:',T73,F8.4)") dispersion_env%a1
504 73 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'s8 Scaling Factor:',T73,F8.4)") dispersion_env%s8
505 73 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'a2 Damping Factor:',T73,F8.4)") dispersion_env%a2
506 73 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'Cutoff for CN calculation:',T69,E12.4)") dispersion_env%eps_cn
507 73 : IF (dispersion_env%nd3_exclude_pair > 0) THEN
508 0 : DO i = 1, dispersion_env%nd3_exclude_pair
509 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'Excluded Kind Pairs: ',T76,I2,' ',I2)") &
510 0 : dispersion_env%d3_exclude_pair(i, :)
511 : END DO
512 : END IF
513 19 : ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd4) THEN
514 19 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'DFT-D4 (Version 4.2)')")
515 19 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'see https://github.com/dftd4/dftd4')")
516 19 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'E. Caldeweyher et al, PCCP 22: 8499 (2020)')")
517 19 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'E. Caldeweyher et al, JCP 150: 154122 (2019)')")
518 19 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'E. Caldeweyher et al, JCP 147: 034112 (2017)')")
519 : END IF
520 1496 : ELSE IF (dispersion_env%type == xc_vdw_fun_nonloc) THEN
521 13 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T61,'Non-local Functional')")
522 : WRITE (output_unit, &
523 13 : fmt="(' vdW POTENTIAL| ','Implementation: G. Roman-Perez, J. Soler, PRL 103: 096102 (2009)')")
524 : WRITE (output_unit, &
525 13 : fmt="(' vdW POTENTIAL| ',T38,' T. Thonhauser et al, PRB 76: 125112 (2007)')")
526 : WRITE (output_unit, &
527 13 : fmt="(' vdW POTENTIAL| ',T22,' R. Sabatini et al, J.Phys:Condens Matter 24: 424209 (2012)')")
528 : WRITE (output_unit, &
529 13 : fmt="(' vdW POTENTIAL| ',T16,' Based on QE implementation by Brian Kolb, Timo Thonhauser (2009)')")
530 13 : SELECT CASE (dispersion_env%nl_type)
531 : CASE DEFAULT
532 : ! unknown functional
533 0 : CPABORT("Unknown vdW nonlocal functional")
534 : CASE (vdw_nl_DRSLL)
535 : WRITE (output_unit, &
536 8 : fmt="(' vdW POTENTIAL| ','DRSLL Functional: M. Dion et al, PRL 92: 246401 (2004)')")
537 : CASE (vdw_nl_LMKLL)
538 : WRITE (output_unit, &
539 3 : fmt="(' vdW POTENTIAL| ','LMKLL Functional: K. Lee et al, PRB 82: 081101 (2010)')")
540 : CASE (vdw_nl_RVV10)
541 : WRITE (output_unit, &
542 13 : fmt="(' vdW POTENTIAL| ','RVV10 Functional: R. Sabatini et al, PRB 87: 041108(R) (2013)')")
543 : END SELECT
544 13 : IF (dispersion_env%verbose) THEN
545 : WRITE (output_unit, &
546 12 : fmt="(' vdW POTENTIAL| ',' Carrying out vdW-DF run using the following parameters:')")
547 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ','Nqs =',I8,' Nr_points =',I8,' r_max =',F10.3)") &
548 12 : dispersion_env%nqs, dispersion_env%nr_points, dispersion_env%r_max
549 12 : WRITE (output_unit, fmt="(' vdW POTENTIAL| ','q_mesh =')")
550 252 : WRITE (output_unit, fmt="(8X,4F18.8)") (dispersion_env%q_mesh(i), i=1, dispersion_env%nqs)
551 : WRITE (output_unit, &
552 : fmt="(' vdW POTENTIAL| ','Density cutoff for convolution [a.u.]:',T71,F10.1)") &
553 12 : dispersion_env%pw_cutoff
554 : END IF
555 : END IF
556 : END IF
557 8033 : IF (.NOT. PRESENT(ounit)) THEN
558 : CALL cp_print_key_finished_output(output_unit, logger, dft_section, &
559 8033 : "PRINT%DFT_CONTROL_PARAMETERS")
560 : END IF
561 :
562 8033 : END SUBROUTINE qs_write_dispersion
563 :
564 : ! **************************************************************************************************
565 : !> \brief ...
566 : !> \param scaling ...
567 : !> \param ref_functional ...
568 : ! **************************************************************************************************
569 22 : SUBROUTINE qs_scaling_dftd2(scaling, ref_functional)
570 : REAL(KIND=dp), INTENT(inout) :: scaling
571 : CHARACTER(LEN=default_string_length), INTENT(in) :: ref_functional
572 :
573 : CHARACTER(LEN=default_string_length) :: functional
574 :
575 22 : functional = ref_functional
576 22 : CALL uppercase(functional)
577 22 : SELECT CASE (TRIM(functional))
578 : CASE DEFAULT
579 : ! unknown functional
580 0 : CPABORT("No DFT-D2 s6 value available for this functional:"//TRIM(functional))
581 : CASE ("BLYP")
582 6 : scaling = 1.20_dp
583 : CASE ("B3LYP")
584 2 : scaling = 1.05_dp
585 : CASE ("TPSS")
586 2 : scaling = 1.00_dp
587 : CASE ("PBE")
588 8 : scaling = 0.75_dp
589 : CASE ("PBE0")
590 2 : scaling = 0.6_dp
591 : CASE ("B2PLYP")
592 0 : scaling = 0.55_dp
593 : CASE ("BP86")
594 2 : scaling = 1.05_dp
595 : CASE ("B97")
596 22 : scaling = 1.25_dp
597 : END SELECT
598 :
599 22 : END SUBROUTINE qs_scaling_dftd2
600 :
601 : ! **************************************************************************************************
602 : !> \brief ...
603 : !> \param s6 ...
604 : !> \param sr6 ...
605 : !> \param s8 ...
606 : !> \param sr8 ...
607 : !> \param ref_functional ...
608 : ! **************************************************************************************************
609 62 : SUBROUTINE qs_scaling_dftd3(s6, sr6, s8, sr8, ref_functional)
610 :
611 : REAL(KIND=dp), INTENT(inout) :: s6, sr6, s8, sr8
612 : CHARACTER(LEN=default_string_length), INTENT(in) :: ref_functional
613 :
614 : CHARACTER(LEN=default_string_length) :: functional
615 :
616 62 : functional = ref_functional
617 62 : CALL uppercase(functional)
618 62 : sr8 = 1.0_dp
619 : ! values for different functionals from:
620 : ! https://www.chemie.uni-bonn.de/grimme/de/software/dft-d3/zero_damping
621 : ! L. Goerigk et al. PCCP 2017, 32147-32744, SI
622 : ! alternatively see the parameter file for the s-dftd3 program:
623 : ! https://github.com/dftd3/simple-dftd3/blob/main/assets/parameters.toml
624 62 : SELECT CASE (TRIM(functional))
625 : CASE DEFAULT
626 0 : CPABORT("No DFT-D3 values available for this functional:"//TRIM(ref_functional))
627 : CASE ("B1B95")
628 0 : s6 = 1.000_dp
629 0 : sr6 = 1.613_dp
630 0 : s8 = 1.868_dp
631 : CASE ("B2GPPLYP")
632 : ! L. Goerigk and S. Grimme
633 : ! J. Chem. Theory Comput. 2011, 7, 291-309; doi:10.1021/ct100466k
634 0 : s6 = 0.56_dp
635 0 : sr6 = 1.586_dp
636 0 : s8 = 0.760_dp
637 : CASE ("B2PLYP")
638 : ! L. Goerigk and S. Grimme
639 : ! J. Chem. Theory Comput. 2011, 7, 291-309; doi:10.1021/ct100466k
640 2 : s6 = 0.64_dp
641 2 : sr6 = 1.427_dp
642 2 : s8 = 1.022_dp
643 : CASE ("DSD-BLYP")
644 : ! L. Goerigk and S. Grimme
645 : ! J. Chem. Theory Comput. 2011, 7, 291-309; doi:10.1021/ct100466k
646 0 : s6 = 0.50_dp
647 0 : sr6 = 1.569_dp
648 0 : s8 = 0.705_dp
649 : CASE ("B3LYP")
650 : ! S. Grimme, J. Antony, S. Ehrlich, and H. Krieg
651 : ! J. Chem. Phys. 132,154104 (2010); doi:10.1063/1.3382344
652 2 : s6 = 1.000_dp
653 2 : sr6 = 1.261_dp
654 2 : s8 = 1.703_dp
655 : CASE ("B97-D")
656 : ! S. Grimme, J. Antony, S. Ehrlich, and H. Krieg
657 : ! J. Chem. Phys. 132,154104 (2010); doi:10.1063/1.3382344
658 0 : s6 = 1.000_dp
659 0 : sr6 = 0.892_dp
660 0 : s8 = 0.909_dp
661 : CASE ("BHLYP")
662 0 : s6 = 1.000_dp
663 0 : sr6 = 1.370_dp
664 0 : s8 = 1.442_dp
665 : CASE ("BLYP")
666 : ! S. Grimme, J. Antony, S. Ehrlich, and H. Krieg
667 : ! J. Chem. Phys. 132,154104 (2010); doi:10.1063/1.3382344
668 4 : s6 = 1.000_dp
669 4 : sr6 = 1.094_dp
670 4 : s8 = 1.682_dp
671 : CASE ("BP86")
672 : ! S. Grimme, J. Antony, S. Ehrlich, and H. Krieg
673 : ! J. Chem. Phys. 132,154104 (2010); doi:10.1063/1.3382344
674 2 : s6 = 1.000_dp
675 2 : sr6 = 1.139_dp
676 2 : s8 = 1.683_dp
677 : CASE ("BPBE")
678 0 : s6 = 1.000_dp
679 0 : sr6 = 1.087_dp
680 0 : s8 = 2.033_dp
681 : CASE ("MPWLYP")
682 0 : s6 = 1.000_dp
683 0 : sr6 = 1.239_dp
684 0 : s8 = 1.098_dp
685 : CASE ("PBE")
686 : ! S. Grimme, J. Antony, S. Ehrlich, and H. Krieg
687 : ! J. Chem. Phys. 132,154104 (2010); doi:10.1063/1.3382344
688 46 : s6 = 1.000_dp
689 46 : sr6 = 1.217_dp
690 46 : s8 = 0.722_dp
691 : CASE ("PBEHPBE")
692 0 : s6 = 1.000_dp
693 0 : sr6 = 1.5703_dp
694 0 : s8 = 1.4010_dp
695 : CASE ("PBE0")
696 : ! S. Grimme, J. Antony, S. Ehrlich, and H. Krieg
697 : ! J. Chem. Phys. 132,154104 (2010); doi:10.1063/1.3382344
698 2 : s6 = 1.000_dp
699 2 : sr6 = 1.287_dp
700 2 : s8 = 0.928_dp
701 : CASE ("PW6B95")
702 : ! S. Grimme, J. Antony, S. Ehrlich, and H. Krieg
703 : ! J. Chem. Phys. 132,154104 (2010); doi:10.1063/1.3382344
704 0 : s6 = 1.000_dp
705 0 : sr6 = 1.532_dp
706 0 : s8 = 0.862_dp
707 : CASE ("PWB6K")
708 0 : s6 = 1.000_dp
709 0 : sr6 = 1.660_dp
710 0 : s8 = 0.550_dp
711 : CASE ("REVPBE")
712 : ! S. Grimme, J. Antony, S. Ehrlich, and H. Krieg
713 : ! J. Chem. Phys. 132,154104 (2010); doi:10.1063/1.3382344
714 0 : s6 = 1.000_dp
715 0 : sr6 = 0.923_dp
716 0 : s8 = 1.010_dp
717 : CASE ("RPBE")
718 0 : s6 = 1.000_dp
719 0 : sr6 = 0.872_dp
720 0 : s8 = 0.514_dp
721 : CASE ("TPSS")
722 : ! S. Grimme, J. Antony, S. Ehrlich, and H. Krieg
723 : ! J. Chem. Phys. 132,154104 (2010); doi:10.1063/1.3382344
724 2 : s6 = 1.000_dp
725 2 : sr6 = 1.166_dp
726 2 : s8 = 1.105_dp
727 : CASE ("TPSS0")
728 : ! S. Grimme, J. Antony, S. Ehrlich, and H. Krieg
729 : ! J. Chem. Phys. 132,154104 (2010); doi:10.1063/1.3382344
730 0 : s6 = 1.000_dp
731 0 : sr6 = 1.252_dp
732 0 : s8 = 1.242_dp
733 : CASE ("TPSSH")
734 0 : s6 = 1.000_dp
735 0 : sr6 = 1.223_dp
736 0 : s8 = 1.219_dp
737 : CASE ("B1LYP")
738 0 : s6 = 1.000_dp
739 0 : sr6 = 1.3725_dp
740 0 : s8 = 1.9467_dp
741 : CASE ("B1P86")
742 0 : s6 = 1.000_dp
743 0 : sr6 = 1.1815_dp
744 0 : s8 = 1.1209_dp
745 : CASE ("B3P86")
746 0 : s6 = 1.000_dp
747 0 : sr6 = 1.1897_dp
748 0 : s8 = 1.1961_dp
749 : CASE ("B3PW91")
750 0 : s6 = 1.000_dp
751 0 : sr6 = 1.176_dp
752 0 : s8 = 1.775_dp
753 : CASE ("BMK")
754 0 : s6 = 1.000_dp
755 0 : sr6 = 1.931_dp
756 0 : s8 = 2.168_dp
757 : CASE ("CAMB3LYP")
758 0 : s6 = 1.000_dp
759 0 : sr6 = 1.378_dp
760 0 : s8 = 1.217_dp
761 : CASE ("LCWPBE")
762 0 : s6 = 1.000_dp
763 0 : sr6 = 1.355_dp
764 0 : s8 = 1.279_dp
765 : CASE ("M052X")
766 0 : s6 = 1.000_dp
767 0 : sr6 = 1.417_dp
768 0 : s8 = 0.000_dp
769 : CASE ("M05")
770 0 : s6 = 1.000_dp
771 0 : sr6 = 1.373_dp
772 0 : s8 = 0.595_dp
773 : CASE ("M062X")
774 0 : s6 = 1.000_dp
775 0 : sr6 = 1.619_dp
776 0 : s8 = 0.000_dp
777 : CASE ("M06HF")
778 0 : s6 = 1.000_dp
779 0 : sr6 = 1.446_dp
780 0 : s8 = 0.000_dp
781 : CASE ("M06L")
782 0 : s6 = 1.000_dp
783 0 : sr6 = 1.581_dp
784 0 : s8 = 0.000_dp
785 : CASE ("M06N")
786 0 : s6 = 1.000_dp
787 0 : sr6 = 1.325_dp
788 0 : s8 = 0.000_dp
789 : CASE ("HCTH120")
790 0 : s6 = 1.000_dp
791 0 : sr6 = 1.221_dp
792 0 : s8 = 1.206_dp
793 : CASE ("HCTH407")
794 0 : s6 = 1.000_dp
795 0 : sr6 = 4.0426_dp
796 0 : s8 = 2.7694_dp
797 : CASE ("MPW2PLYP")
798 0 : s6 = 1.000_dp
799 0 : sr6 = 1.5527_dp
800 0 : s8 = 0.7529_dp
801 : CASE ("PKZB")
802 0 : s6 = 1.000_dp
803 0 : sr6 = 0.6327_dp
804 0 : s8 = 0.000_dp
805 : CASE ("PTPSS")
806 0 : s6 = 0.750_dp
807 0 : sr6 = 1.541_dp
808 0 : s8 = 0.879_dp
809 : CASE ("PWPB95")
810 0 : s6 = 0.820_dp
811 0 : sr6 = 1.557_dp
812 0 : s8 = 0.705_dp
813 : CASE ("OLYP")
814 0 : s6 = 1.000_dp
815 0 : sr6 = 0.806_dp
816 0 : s8 = 1.764_dp
817 : CASE ("OPBE")
818 0 : s6 = 1.000_dp
819 0 : sr6 = 0.837_dp
820 0 : s8 = 2.055_dp
821 : CASE ("OTPSS")
822 0 : s6 = 1.000_dp
823 0 : sr6 = 1.128_dp
824 0 : s8 = 1.494_dp
825 : CASE ("PBE1KCIS")
826 0 : s6 = 1.000_dp
827 0 : sr6 = 3.6355_dp
828 0 : s8 = 1.7934_dp
829 : CASE ("PBE38")
830 0 : s6 = 1.000_dp
831 0 : sr6 = 1.333_dp
832 0 : s8 = 0.998_dp
833 : CASE ("PBEH1PBE")
834 0 : s6 = 1.000_dp
835 0 : sr6 = 1.3719_dp
836 0 : s8 = 1.0430_dp
837 : CASE ("PBESOL")
838 0 : s6 = 1.000_dp
839 0 : sr6 = 1.345_dp
840 0 : s8 = 0.612_dp
841 : CASE ("REVSSB")
842 0 : s6 = 1.000_dp
843 0 : sr6 = 1.221_dp
844 0 : s8 = 0.560_dp
845 : CASE ("REVTPSS")
846 0 : s6 = 1.000_dp
847 0 : sr6 = 1.3491_dp
848 0 : s8 = 1.3666_dp
849 : CASE ("SSB")
850 0 : s6 = 1.000_dp
851 0 : sr6 = 1.215_dp
852 0 : s8 = 0.663_dp
853 : CASE ("B97-1")
854 0 : s6 = 1.000_dp
855 0 : sr6 = 3.7924_dp
856 0 : s8 = 1.6418_dp
857 : CASE ("B97-2")
858 0 : s6 = 1.000_dp
859 0 : sr6 = 1.7066_dp
860 0 : s8 = 2.4661_dp
861 : CASE ("B98")
862 0 : s6 = 1.000_dp
863 0 : sr6 = 2.6895_dp
864 0 : s8 = 1.9078_dp
865 : CASE ("BOP")
866 0 : s6 = 1.000_dp
867 0 : sr6 = 0.929_dp
868 0 : s8 = 1.975_dp
869 : CASE ("HISS")
870 0 : s6 = 1.000_dp
871 0 : sr6 = 1.3338_dp
872 0 : s8 = 0.7615_dp
873 : CASE ("HSE03")
874 0 : s6 = 1.000_dp
875 0 : sr6 = 1.3944_dp
876 0 : s8 = 1.0156_dp
877 : CASE ("HSE06")
878 0 : s6 = 1.000_dp
879 0 : sr6 = 1.129_dp
880 0 : s8 = 0.109_dp
881 : CASE ("M08HX")
882 0 : s6 = 1.000_dp
883 0 : sr6 = 1.6247_dp
884 0 : s8 = 0.000_dp
885 : CASE ("MN15L")
886 0 : s6 = 1.000_dp
887 0 : sr6 = 3.3388_dp
888 0 : s8 = 0.000_dp
889 : CASE ("MPWPW91")
890 0 : s6 = 1.0000_dp
891 0 : sr6 = 1.3725_dp
892 0 : s8 = 1.9467_dp
893 : CASE ("MPW1B95")
894 0 : s6 = 1.000_dp
895 0 : sr6 = 1.605_dp
896 0 : s8 = 1.118_dp
897 : CASE ("MPW1KCIS")
898 0 : s6 = 1.000_dp
899 0 : sr6 = 1.7231_dp
900 0 : s8 = 2.2917_dp
901 : CASE ("MPW1LYP")
902 0 : s6 = 1.000_dp
903 0 : sr6 = 2.0512_dp
904 0 : s8 = 1.9529_dp
905 : CASE ("MPW1PW91")
906 0 : s6 = 1.000_dp
907 0 : sr6 = 1.2892_dp
908 0 : s8 = 1.4758_dp
909 : CASE ("MPWB1K")
910 0 : s6 = 1.000_dp
911 0 : sr6 = 1.671_dp
912 0 : s8 = 1.061_dp
913 : CASE ("MPWKCIS1K")
914 0 : s6 = 1.000_dp
915 0 : sr6 = 1.4853_dp
916 0 : s8 = 1.7553_dp
917 : CASE ("O3LYP")
918 0 : s6 = 1.000_dp
919 0 : sr6 = 1.4060_dp
920 0 : s8 = 1.8058_dp
921 : CASE ("PW1PW")
922 0 : s6 = 1.000_dp
923 0 : sr6 = 1.4968_dp
924 0 : s8 = 1.1786_dp
925 : CASE ("PW91P86")
926 0 : s6 = 1.0000_dp
927 0 : sr6 = 2.1040_dp
928 0 : s8 = 0.8747_dp
929 : CASE ("REVPBE0")
930 0 : s6 = 1.000_dp
931 0 : sr6 = 0.949_dp
932 0 : s8 = 0.792_dp
933 : CASE ("REVPBE38")
934 0 : s6 = 1.000_dp
935 0 : sr6 = 1.021_dp
936 0 : s8 = 0.862_dp
937 : CASE ("REVTPSSH")
938 0 : s6 = 1.000_dp
939 0 : sr6 = 1.3224_dp
940 0 : s8 = 1.2504_dp
941 : CASE ("REVTPSS0")
942 0 : s6 = 1.000_dp
943 0 : sr6 = 1.2881_dp
944 0 : s8 = 1.0649_dp
945 : CASE ("TPSS1KCIS")
946 0 : s6 = 1.000_dp
947 0 : sr6 = 1.7729_dp
948 0 : s8 = 2.0902_dp
949 : CASE ("THCTHHYB")
950 0 : s6 = 1.000_dp
951 0 : sr6 = 1.5001_dp
952 0 : s8 = 1.6302_dp
953 : CASE ("RPW86PBE")
954 0 : s6 = 1.000_dp
955 0 : sr6 = 1.224_dp
956 0 : s8 = 0.901_dp
957 : CASE ("SCAN")
958 0 : s6 = 1.000_dp
959 0 : sr6 = 1.324_dp
960 0 : s8 = 0.000_dp
961 : CASE ("THCTH")
962 0 : s6 = 1.000_dp
963 0 : sr6 = 0.932_dp
964 0 : s8 = 0.5662_dp
965 : CASE ("WB97X")
966 : ! wB97X-D3 (doi:10.1021/ct300715s)
967 2 : s6 = 1.000_dp
968 2 : sr6 = 1.281_dp
969 2 : s8 = 1.000_dp
970 2 : sr8 = 1.094_dp
971 : CASE ("XLYP")
972 0 : s6 = 1.0000_dp
973 0 : sr6 = 0.9384_dp
974 0 : s8 = 0.7447_dp
975 : CASE ("X3LYP")
976 0 : s6 = 1.000_dp
977 0 : sr6 = 1.0000_dp
978 62 : s8 = 0.2990_dp
979 : END SELECT
980 :
981 62 : END SUBROUTINE qs_scaling_dftd3
982 :
983 : ! **************************************************************************************************
984 : !> \brief ...
985 : !> \param s6 ...
986 : !> \param a1 ...
987 : !> \param s8 ...
988 : !> \param a2 ...
989 : !> \param ref_functional ...
990 : ! **************************************************************************************************
991 46 : SUBROUTINE qs_scaling_dftd3bj(s6, a1, s8, a2, ref_functional)
992 : REAL(KIND=dp), INTENT(inout) :: s6, a1, s8, a2
993 : CHARACTER(LEN=default_string_length), INTENT(in) :: ref_functional
994 :
995 : CHARACTER(LEN=default_string_length) :: functional
996 :
997 46 : functional = ref_functional
998 46 : CALL uppercase(functional)
999 :
1000 : ! values for different functionals from:
1001 : ! https://www.chemie.uni-bonn.de/grimme/de/software/dft-d3/bj_damping
1002 : ! L. Goerigk et al. PCCP 2017, 32147-32744, SI
1003 : ! alternatively see the parameter file for the s-dftd3 program:
1004 : ! https://github.com/dftd3/simple-dftd3/blob/main/assets/parameters.toml
1005 46 : SELECT CASE (TRIM(functional))
1006 : CASE DEFAULT
1007 0 : CPABORT("No DFT-D3(BJ) values available for this functional:"//TRIM(functional))
1008 : CASE ("B1B95")
1009 0 : s6 = 1.0000_dp
1010 0 : a1 = 0.2092_dp
1011 0 : s8 = 1.4507_dp
1012 0 : a2 = 5.5545_dp
1013 : CASE ("B2GPPLYP")
1014 0 : s6 = 0.5600_dp
1015 0 : a1 = 0.0000_dp
1016 0 : s8 = 0.2597_dp
1017 0 : a2 = 6.3332_dp
1018 : CASE ("B3PW91")
1019 0 : s6 = 1.0000_dp
1020 0 : a1 = 0.4312_dp
1021 0 : s8 = 2.8524_dp
1022 0 : a2 = 4.4693_dp
1023 : CASE ("BHLYP")
1024 0 : s6 = 1.0000_dp
1025 0 : a1 = 0.2793_dp
1026 0 : s8 = 1.0354_dp
1027 0 : a2 = 4.9615_dp
1028 : CASE ("BMK")
1029 0 : s6 = 1.0000_dp
1030 0 : a1 = 0.1940_dp
1031 0 : s8 = 2.0860_dp
1032 0 : a2 = 5.9197_dp
1033 : CASE ("BOP")
1034 0 : s6 = 1.0000_dp
1035 0 : a1 = 0.4870_dp
1036 0 : s8 = 3.2950_dp
1037 0 : a2 = 3.5043_dp
1038 : CASE ("BPBE")
1039 0 : s6 = 1.0000_dp
1040 0 : a1 = 0.4567_dp
1041 0 : s8 = 4.0728_dp
1042 0 : a2 = 4.3908_dp
1043 : CASE ("B97-3C")
1044 4 : s6 = 1.0000_dp
1045 4 : a1 = 0.3700_dp
1046 4 : s8 = 1.5000_dp
1047 4 : a2 = 4.1000_dp
1048 : CASE ("CAMB3LYP")
1049 0 : s6 = 1.0000_dp
1050 0 : a1 = 0.3708_dp
1051 0 : s8 = 2.0674_dp
1052 0 : a2 = 5.4743_dp
1053 : CASE ("DSDBLYP")
1054 0 : s6 = 0.5000_dp
1055 0 : a1 = 0.0000_dp
1056 0 : s8 = 0.2130_dp
1057 0 : a2 = 6.0519_dp
1058 : CASE ("DSDPBEP86")
1059 0 : s6 = 0.4180_dp
1060 0 : a1 = 0.0000_dp
1061 0 : s8 = 0.0000_dp
1062 0 : a2 = 5.6500_dp
1063 : CASE ("DSDPBEB95")
1064 0 : s6 = 0.6100_dp
1065 0 : a1 = 0.0000_dp
1066 0 : s8 = 0.0000_dp
1067 0 : a2 = 6.2000_dp
1068 : CASE ("LCWPBE")
1069 0 : s6 = 1.0000_dp
1070 0 : a1 = 0.3919_dp
1071 0 : s8 = 1.8541_dp
1072 0 : a2 = 5.0897_dp
1073 : CASE ("LCWHPBE")
1074 0 : s6 = 1.0000_dp
1075 0 : a1 = 0.2746_dp
1076 0 : s8 = 1.1908_dp
1077 0 : a2 = 5.3157_dp
1078 : CASE ("MPW1B95")
1079 0 : s6 = 1.0000_dp
1080 0 : a1 = 0.1955_dp
1081 0 : s8 = 1.0508_dp
1082 0 : a2 = 6.4177_dp
1083 : CASE ("MPW2PLYP")
1084 0 : s6 = 0.6600_dp
1085 0 : a1 = 0.4105_dp
1086 0 : s8 = 0.6223_dp
1087 0 : a2 = 5.0136_dp
1088 : CASE ("MPWB1K")
1089 0 : s6 = 1.0000_dp
1090 0 : a1 = 0.1474_dp
1091 0 : s8 = 0.9499_dp
1092 0 : a2 = 6.6223_dp
1093 : CASE ("MPWLYP")
1094 0 : s6 = 1.0000_dp
1095 0 : a1 = 0.4831_dp
1096 0 : s8 = 2.0077_dp
1097 0 : a2 = 4.5323_dp
1098 : CASE ("OLYP")
1099 0 : s6 = 1.0000_dp
1100 0 : a1 = 0.5299_dp
1101 0 : s8 = 2.6205_dp
1102 0 : a2 = 2.8065_dp
1103 : CASE ("OPBE")
1104 0 : s6 = 1.0000_dp
1105 0 : a1 = 0.5512_dp
1106 0 : s8 = 3.3816_dp
1107 0 : a2 = 2.9444_dp
1108 : CASE ("OTPSS")
1109 0 : s6 = 1.0000_dp
1110 0 : a1 = 0.4634_dp
1111 0 : s8 = 2.7495_dp
1112 0 : a2 = 4.3153_dp
1113 : CASE ("PBE38")
1114 0 : s6 = 1.0000_dp
1115 0 : a1 = 0.3995_dp
1116 0 : s8 = 1.4623_dp
1117 0 : a2 = 5.1405_dp
1118 : CASE ("PBESOL")
1119 0 : s6 = 1.0000_dp
1120 0 : a1 = 0.4466_dp
1121 0 : s8 = 2.9491_dp
1122 0 : a2 = 6.1742_dp
1123 : CASE ("PTPSS")
1124 0 : s6 = 0.7500_dp
1125 0 : a1 = 0.0000_dp
1126 0 : s8 = 0.2804_dp
1127 0 : a2 = 6.5745_dp
1128 : CASE ("PWB6K")
1129 0 : s6 = 1.0000_dp
1130 0 : a1 = 0.1805_dp
1131 0 : s8 = 0.9383_dp
1132 0 : a2 = 7.7627_dp
1133 : CASE ("REVSSB")
1134 0 : s6 = 1.0000_dp
1135 0 : a1 = 0.4720_dp
1136 0 : s8 = 0.4389_dp
1137 0 : a2 = 4.0986_dp
1138 : CASE ("SSB")
1139 0 : s6 = 1.0000_dp
1140 0 : a1 = -0.0952_dp
1141 0 : s8 = -0.1744_dp
1142 0 : a2 = 5.2170_dp
1143 : CASE ("TPSSH")
1144 0 : s6 = 1.0000_dp
1145 0 : a1 = 0.4529_dp
1146 0 : s8 = 2.2382_dp
1147 0 : a2 = 4.6550_dp
1148 : CASE ("HCTH120")
1149 0 : s6 = 1.0000_dp
1150 0 : a1 = 0.3563_dp
1151 0 : s8 = 1.0821_dp
1152 0 : a2 = 4.3359_dp
1153 : CASE ("B2PLYP")
1154 0 : s6 = 0.6400_dp
1155 0 : a1 = 0.3065_dp
1156 0 : s8 = 0.9147_dp
1157 0 : a2 = 5.0570_dp
1158 : CASE ("B1LYP")
1159 0 : s6 = 1.0000_dp
1160 0 : a1 = 0.1986_dp
1161 0 : s8 = 2.1167_dp
1162 0 : a2 = 5.3875_dp
1163 : CASE ("B1P86")
1164 0 : s6 = 1.0000_dp
1165 0 : a1 = 0.4724_dp
1166 0 : s8 = 3.5681_dp
1167 0 : a2 = 4.9858_dp
1168 : CASE ("B3LYP", "SKALA", "SKALA-1.1", "SKALA1.1")
1169 4 : s6 = 1.0000_dp
1170 4 : a1 = 0.3981_dp
1171 4 : s8 = 1.9889_dp
1172 4 : a2 = 4.4211_dp
1173 : CASE ("B3P86")
1174 0 : s6 = 1.0000_dp
1175 0 : a1 = 0.4601_dp
1176 0 : s8 = 3.3211_dp
1177 0 : a2 = 4.9294_dp
1178 : CASE ("B97-1")
1179 0 : s6 = 1.0000_dp
1180 0 : a1 = 0.0000_dp
1181 0 : s8 = 0.4814_dp
1182 0 : a2 = 6.2279_dp
1183 : CASE ("B97-2")
1184 0 : s6 = 1.0000_dp
1185 0 : a1 = 0.0000_dp
1186 0 : s8 = 0.9448_dp
1187 0 : a2 = 5.4603_dp
1188 : CASE ("B97-D")
1189 0 : s6 = 1.0000_dp
1190 0 : a1 = 0.5545_dp
1191 0 : s8 = 2.2609_dp
1192 0 : a2 = 3.2297_dp
1193 : CASE ("B98")
1194 0 : s6 = 1.0000_dp
1195 0 : a1 = 0.0000_dp
1196 0 : s8 = 0.7086_dp
1197 0 : a2 = 6.0672_dp
1198 : CASE ("BLYP")
1199 8 : s6 = 1.0000_dp
1200 8 : a1 = 0.4298_dp
1201 8 : s8 = 2.6996_dp
1202 8 : a2 = 4.2359_dp
1203 : CASE ("BP86")
1204 2 : s6 = 1.0000_dp
1205 2 : a1 = 0.3946_dp
1206 2 : s8 = 3.2822_dp
1207 2 : a2 = 4.8516_dp
1208 : CASE ("DSD-BLYP")
1209 0 : s6 = 0.5000_dp
1210 0 : a1 = 0.0000_dp
1211 0 : s8 = 0.2130_dp
1212 0 : a2 = 6.0519_dp
1213 : CASE ("HCTH407")
1214 0 : s6 = 1.0000_dp
1215 0 : a1 = 0.0000_dp
1216 0 : s8 = 0.6490_dp
1217 0 : a2 = 4.8162_dp
1218 : CASE ("HISS")
1219 0 : s6 = 1.0000_dp
1220 0 : a1 = 0.0000_dp
1221 0 : s8 = 1.6112_dp
1222 0 : a2 = 7.3539_dp
1223 : CASE ("HSE03")
1224 0 : s6 = 1.0000_dp
1225 0 : a1 = 0.0000_dp
1226 0 : s8 = 1.1243_dp
1227 0 : a2 = 6.8889_dp
1228 : CASE ("HSE06")
1229 0 : s6 = 1.0000_dp
1230 0 : a1 = 0.3830_dp
1231 0 : s8 = 2.3100_dp
1232 0 : a2 = 5.6850_dp
1233 : CASE ("M11")
1234 0 : s6 = 1.0000_dp
1235 0 : a1 = 0.0000_dp
1236 0 : s8 = 2.8112_dp
1237 0 : a2 = 10.1389_dp
1238 : CASE ("MN12SX")
1239 0 : s6 = 1.0000_dp
1240 0 : a1 = 0.0983_dp
1241 0 : s8 = 1.1674_dp
1242 0 : a2 = 8.0259_dp
1243 : CASE ("MN15")
1244 0 : s6 = 1.0000_dp
1245 0 : a1 = 2.0971_dp
1246 0 : s8 = 0.7862_dp
1247 0 : a2 = 7.5923_dp
1248 : CASE ("MPWPW91")
1249 0 : s6 = 1.0000_dp
1250 0 : a1 = 0.3168_dp
1251 0 : s8 = 1.7974_dp
1252 0 : a2 = 4.7732_dp
1253 : CASE ("MPW1PW91")
1254 0 : s6 = 1.0000_dp
1255 0 : a1 = 0.3342_dp
1256 0 : s8 = 1.8744_dp
1257 0 : a2 = 4.9819_dp
1258 : CASE ("MPW1KCIS")
1259 0 : s6 = 1.0000_dp
1260 0 : a1 = 0.0576_dp
1261 0 : s8 = 1.0893_dp
1262 0 : a2 = 5.5314_dp
1263 : CASE ("MPWKCIS1K")
1264 0 : s6 = 1.0000_dp
1265 0 : a1 = 0.0855_dp
1266 0 : s8 = 1.2875_dp
1267 0 : a2 = 5.8961_dp
1268 : CASE ("N12SX")
1269 0 : s6 = 1.0000_dp
1270 0 : a1 = 0.3283_dp
1271 0 : s8 = 2.4900_dp
1272 0 : a2 = 5.7898_dp
1273 : CASE ("O3LYP")
1274 0 : s6 = 1.0000_dp
1275 0 : a1 = 0.0963_dp
1276 0 : s8 = 1.8171_dp
1277 0 : a2 = 5.9940_dp
1278 : CASE ("PBE0")
1279 2 : s6 = 1.0000_dp
1280 2 : a1 = 0.4145_dp
1281 2 : s8 = 1.2177_dp
1282 2 : a2 = 4.8593_dp
1283 : CASE ("PBE")
1284 22 : s6 = 1.0000_dp
1285 22 : a1 = 0.4289_dp
1286 22 : s8 = 0.7875_dp
1287 22 : a2 = 4.4407_dp
1288 : CASE ("PBEHPBE")
1289 0 : s6 = 1.0000_dp
1290 0 : a1 = 0.0000_dp
1291 0 : s8 = 1.1152_dp
1292 0 : a2 = 6.7184_dp
1293 : CASE ("PBEH1PBE")
1294 0 : s6 = 1.0000_dp
1295 0 : a1 = 0.0000_dp
1296 0 : s8 = 1.4877_dp
1297 0 : a2 = 7.0385_dp
1298 : CASE ("PBE1KCIS")
1299 0 : s6 = 1.0000_dp
1300 0 : a1 = 0.0000_dp
1301 0 : s8 = 0.7688_dp
1302 0 : a2 = 6.2794_dp
1303 : CASE ("PW1PW")
1304 0 : s6 = 1.0000_dp
1305 0 : a1 = 0.3807_dp
1306 0 : s8 = 2.3363_dp
1307 0 : a2 = 5.8844_dp
1308 : CASE ("PW6B95")
1309 0 : s6 = 1.0000_dp
1310 0 : a1 = 0.2076_dp
1311 0 : s8 = 0.7257_dp
1312 0 : a2 = 6.3750_dp
1313 : CASE ("PWPB95")
1314 0 : s6 = 0.8200_dp
1315 0 : a1 = 0.0000_dp
1316 0 : s8 = 0.2904_dp
1317 0 : a2 = 7.3141_dp
1318 : CASE ("R2SCAN")
1319 : ! J. Chem. Phys. 154, 061101 (2021), doi: 10.1063/5.0041008
1320 0 : s6 = 1.00000000_dp
1321 0 : a1 = 0.49484001_dp
1322 0 : s8 = 0.78981345_dp
1323 0 : a2 = 5.73083694_dp
1324 : CASE ("R2SCAN0")
1325 : ! J. Chem. Phys. 156, 134105 (2022), doi: 10.1063/5.0086040
1326 0 : s6 = 1.0000_dp
1327 0 : a1 = 0.4534_dp
1328 0 : s8 = 1.1846_dp
1329 0 : a2 = 5.8972_dp
1330 : CASE ("R2SCAN50")
1331 : ! J. Chem. Phys. 156, 134105 (2022), doi: 10.1063/5.0086040
1332 0 : s6 = 1.0000_dp
1333 0 : a1 = 0.4311_dp
1334 0 : s8 = 1.3294_dp
1335 0 : a2 = 5.9240_dp
1336 : CASE ("R2SCANH")
1337 : ! J. Chem. Phys. 156, 134105 (2022), doi: 10.1063/5.0086040
1338 0 : s6 = 1.0000_dp
1339 0 : a1 = 0.4709_dp
1340 0 : s8 = 1.1236_dp
1341 0 : a2 = 5.9157_dp
1342 : CASE ("REVPBE0")
1343 0 : s6 = 1.0000_dp
1344 0 : a1 = 0.4679_dp
1345 0 : s8 = 1.7588_dp
1346 0 : a2 = 3.7619_dp
1347 : CASE ("REVPBE38")
1348 0 : s6 = 1.0000_dp
1349 0 : a1 = 0.4309_dp
1350 0 : s8 = 1.4760_dp
1351 0 : a2 = 3.9446_dp
1352 : CASE ("REVPBE")
1353 0 : s6 = 1.0000_dp
1354 0 : a1 = 0.5238_dp
1355 0 : s8 = 2.3550_dp
1356 0 : a2 = 3.5016_dp
1357 : CASE ("REVTPSS")
1358 0 : s6 = 1.0000_dp
1359 0 : a1 = 0.4426_dp
1360 0 : s8 = 1.4023_dp
1361 0 : a2 = 4.4723_dp
1362 : CASE ("REVTPSS0")
1363 0 : s6 = 1.0000_dp
1364 0 : a1 = 0.2218_dp
1365 0 : s8 = 1.6151_dp
1366 0 : a2 = 5.7985_dp
1367 : CASE ("REVTPSSH")
1368 0 : s6 = 1.0000_dp
1369 0 : a1 = 0.2660_dp
1370 0 : s8 = 1.4076_dp
1371 0 : a2 = 5.3761_dp
1372 : CASE ("RPBE")
1373 0 : s6 = 1.0000_dp
1374 0 : a1 = 0.1820_dp
1375 0 : s8 = 0.8318_dp
1376 0 : a2 = 4.0094_dp
1377 : CASE ("RPW86PBE")
1378 0 : s6 = 1.0000_dp
1379 0 : a1 = 0.4613_dp
1380 0 : s8 = 1.3845_dp
1381 0 : a2 = 4.5062_dp
1382 : CASE ("RSCAN")
1383 : ! J. Chem. Phys. 154, 061101 (2021), doi: 10.1063/5.0041008
1384 0 : s6 = 1.00000000_dp
1385 0 : a1 = 0.47023427_dp
1386 0 : s8 = 1.08859014_dp
1387 0 : a2 = 5.73408312_dp
1388 : CASE ("SCAN")
1389 0 : s6 = 1.0000_dp
1390 0 : a1 = 0.538_dp
1391 0 : s8 = 0.0000_dp
1392 0 : a2 = 5.420_dp
1393 : CASE ("SOGGA11X")
1394 0 : s6 = 1.0000_dp
1395 0 : a1 = 0.1330_dp
1396 0 : s8 = 1.1426_dp
1397 0 : a2 = 5.7381_dp
1398 : CASE ("TPSS0")
1399 0 : s6 = 1.0000_dp
1400 0 : a1 = 0.3768_dp
1401 0 : s8 = 1.2576_dp
1402 0 : a2 = 4.5865_dp
1403 : CASE ("TPSS1KCIS")
1404 0 : s6 = 1.0000_dp
1405 0 : a1 = 0.0000_dp
1406 0 : s8 = 1.0542_dp
1407 0 : a2 = 6.0201_dp
1408 : CASE ("TPSS")
1409 2 : s6 = 1.0000_dp
1410 2 : a1 = 0.4535_dp
1411 2 : s8 = 1.9435_dp
1412 2 : a2 = 4.4752_dp
1413 : CASE ("THCTH")
1414 0 : s6 = 1.0000_dp
1415 0 : a1 = 0.0000_dp
1416 0 : s8 = 1.2626_dp
1417 0 : a2 = 5.6162_dp
1418 : CASE ("THCTHHYB")
1419 0 : s6 = 1.0000_dp
1420 0 : a1 = 0.0000_dp
1421 0 : s8 = 0.9585_dp
1422 0 : a2 = 6.2303_dp
1423 : CASE ("WB97X")
1424 2 : s6 = 1.0000_dp
1425 2 : a1 = 0.0000_dp
1426 2 : s8 = 0.2641_dp
1427 2 : a2 = 5.4959_dp
1428 : CASE ("XLYP")
1429 0 : s6 = 1.0000_dp
1430 0 : a1 = 0.0809_dp
1431 0 : s8 = 1.5669_dp
1432 0 : a2 = 5.3166_dp
1433 : CASE ("X3LYP")
1434 0 : s6 = 1.0000_dp
1435 0 : a1 = 0.2022_dp
1436 0 : s8 = 1.5744_dp
1437 46 : a2 = 5.4184_dp
1438 : END SELECT
1439 :
1440 46 : END SUBROUTINE qs_scaling_dftd3bj
1441 :
1442 : ! **************************************************************************************************
1443 : !> \brief ...
1444 : !> \param cell ...
1445 : !> \param ncell ...
1446 : !> \return ...
1447 : ! **************************************************************************************************
1448 4160368 : FUNCTION cellhash(cell, ncell) RESULT(hash)
1449 : INTEGER, DIMENSION(3), INTENT(IN) :: cell, ncell
1450 : INTEGER :: hash
1451 :
1452 : INTEGER :: ix, iy, iz, nx, ny, nz
1453 :
1454 16641472 : CPASSERT(ALL(ABS(cell) <= ncell))
1455 :
1456 4160368 : ix = cell(1)
1457 4160368 : IF (ix /= 0) THEN
1458 3561752 : ix = 2*ABS(ix) - (1 + SIGN(1, ix))/2
1459 : END IF
1460 4160368 : iy = cell(2)
1461 4160368 : IF (iy /= 0) THEN
1462 3561764 : iy = 2*ABS(iy) - (1 + SIGN(1, iy))/2
1463 : END IF
1464 4160368 : iz = cell(3)
1465 4160368 : IF (iz /= 0) THEN
1466 3561764 : iz = 2*ABS(iz) - (1 + SIGN(1, iz))/2
1467 : END IF
1468 :
1469 4160368 : nx = 2*ncell(1) + 1
1470 4160368 : ny = 2*ncell(2) + 1
1471 4160368 : nz = 2*ncell(3) + 1
1472 :
1473 4160368 : hash = ix*ny*nz + iy*nz + iz + 1
1474 :
1475 4160368 : END FUNCTION cellhash
1476 : ! **************************************************************************************************
1477 :
1478 : END MODULE qs_dispersion_utils
|