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