(git:98357aa)
Loading...
Searching...
No Matches
qs_dispersion_pairpot.F
Go to the documentation of this file.
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 Calculation of dispersion using pair potentials
10!> \author JGH
11! **************************************************************************************************
13
19 USE bibliography, ONLY: &
21 cite_reference, grimme2006, grimme2010, grimme2011
22 USE cell_types, ONLY: cell_type
33 USE eeq_input, ONLY: read_eeq_param
42 USE kinds, ONLY: default_path_length,&
44 dp
46 USE physcon, ONLY: bohr,&
47 kcalmol,&
48 kjmol
50 setcn,&
51 seten,&
52 setr0ab,&
60 USE qs_dispersion_types, ONLY: dftd2_pp,&
61 dftd3_pp,&
62 dftd4_pp,&
68 USE qs_kind_types, ONLY: get_qs_kind,&
71 USE virial_types, ONLY: virial_type
72#include "./base/base_uses.f90"
73
74 IMPLICIT NONE
75
76 PRIVATE
77
78 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_dispersion_pairpot'
79
81
82! **************************************************************************************************
83
84CONTAINS
85
86! **************************************************************************************************
87!> \brief ...
88!> \param atomic_kind_set ...
89!> \param qs_kind_set ...
90!> \param dispersion_env ...
91!> \param pp_section ...
92!> \param para_env ...
93! **************************************************************************************************
94 SUBROUTINE qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, pp_section, para_env)
95 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
96 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
97 TYPE(qs_dispersion_type), POINTER :: dispersion_env
98 TYPE(section_vals_type), OPTIONAL, POINTER :: pp_section
99 TYPE(mp_para_env_type), POINTER :: para_env
100
101 CHARACTER(len=*), PARAMETER :: routinen = 'qs_dispersion_pairpot_init'
102
103 CHARACTER(LEN=2) :: symbol
104 CHARACTER(LEN=default_path_length) :: filename
105 CHARACTER(LEN=default_string_length) :: aname, error_msg
106 CHARACTER(LEN=default_string_length), &
107 DIMENSION(:), POINTER :: tmpstringlist
108 INTEGER :: elem, handle, i, ikind, j, max_elem, &
109 maxc, n_rep, nkind, nl, vdw_pp_type, &
110 vdw_type
111 INTEGER, DIMENSION(:), POINTER :: exlist
112 LOGICAL :: at_end, explicit, found, is_available
113 REAL(kind=dp) :: dum
114 TYPE(qs_atom_dispersion_type), POINTER :: disp
115 TYPE(section_vals_type), POINTER :: eeq_section
116
117 CALL timeset(routinen, handle)
118
119 nkind = SIZE(atomic_kind_set)
120
121 vdw_type = dispersion_env%type
122 SELECT CASE (vdw_type)
123 CASE DEFAULT
124 ! do nothing
125 CASE (xc_vdw_fun_pairpot)
126 ! setup information on pair potentials
127 vdw_pp_type = dispersion_env%type
128 SELECT CASE (dispersion_env%pp_type)
129 CASE DEFAULT
130 ! do nothing
131 CASE (vdw_pairpot_dftd2)
132 CALL cite_reference(grimme2006)
133 DO ikind = 1, nkind
134 CALL get_atomic_kind(atomic_kind_set(ikind), element_symbol=symbol, z=elem)
135 ALLOCATE (disp)
136 disp%type = dftd2_pp
137 ! get filename of parameter file
138 filename = dispersion_env%parameter_file_name
139 ! check for local parameters
140 found = .false.
141 IF (PRESENT(pp_section)) THEN
142 CALL section_vals_val_get(pp_section, "ATOMPARM", n_rep_val=n_rep)
143 DO i = 1, n_rep
144 CALL section_vals_val_get(pp_section, "ATOMPARM", i_rep_val=i, &
145 c_vals=tmpstringlist)
146 IF (trim(tmpstringlist(1)) == trim(symbol)) THEN
147 ! we assume the parameters are in atomic units!
148 READ (tmpstringlist(2), *) disp%c6
149 READ (tmpstringlist(3), *) disp%vdw_radii
150 found = .true.
151 EXIT
152 END IF
153 END DO
154 END IF
155 IF (.NOT. found) THEN
156 ! check for internal parameters
157 CALL dftd2_param(elem, disp%c6, disp%vdw_radii, found)
158 END IF
159 IF (.NOT. found) THEN
160 ! check on file
161 INQUIRE (file=filename, exist=is_available)
162 IF (is_available) THEN
163 block
164 TYPE(cp_parser_type) :: parser
165 CALL parser_create(parser, filename, para_env=para_env)
166 DO
167 at_end = .false.
168 CALL parser_get_next_line(parser, 1, at_end)
169 IF (at_end) EXIT
170 CALL parser_get_object(parser, aname)
171 IF (trim(aname) == trim(symbol)) THEN
172 CALL parser_get_object(parser, disp%c6)
173 ! we have to change the units J*nm^6*mol^-1 -> Hartree*Bohr^6
174 disp%c6 = disp%c6*1000._dp*bohr**6/kjmol
175 CALL parser_get_object(parser, disp%vdw_radii)
176 disp%vdw_radii = disp%vdw_radii*bohr
177 found = .true.
178 EXIT
179 END IF
180 END DO
181 CALL parser_release(parser)
182 END block
183 END IF
184 END IF
185 IF (found) THEN
186 disp%defined = .true.
187 ELSE
188 disp%defined = .false.
189 END IF
190 ! Check if the parameter is defined
191 IF (.NOT. disp%defined) THEN
192 CALL cp_abort(__location__, &
193 "Dispersion parameters for element ("//trim(symbol)//") are not defined! "// &
194 "Please provide a valid set of parameters through the input section or "// &
195 "through an external file! ")
196 END IF
197 CALL set_qs_kind(qs_kind_set(ikind), dispersion=disp)
198 END DO
200 !DFT-D3 Method initial setup
201 CALL cite_reference(grimme2010)
202 CALL cite_reference(grimme2011)
203 CALL cite_reference(goerigk2017)
204 CALL cite_reference(wittmann2024)
205 max_elem = 103
206 maxc = 7
207 dispersion_env%max_elem = max_elem
208 dispersion_env%maxc = maxc
209 ALLOCATE (dispersion_env%maxci(max_elem))
210 ALLOCATE (dispersion_env%c6ab(max_elem, max_elem, maxc, maxc, 3))
211 ALLOCATE (dispersion_env%r0ab(max_elem, max_elem))
212 ALLOCATE (dispersion_env%rcov(max_elem))
213 ALLOCATE (dispersion_env%eneg(max_elem))
214 ALLOCATE (dispersion_env%r2r4(max_elem))
215 ALLOCATE (dispersion_env%cn(max_elem))
216
217 IF (dispersion_env%d3_reference_code) THEN
218 CALL dftd3_param_from_library(dispersion_env%c6ab, dispersion_env%maxci, &
219 dispersion_env%r0ab, dispersion_env%rcov, &
220 dispersion_env%r2r4, &
221 dispersion_env%pp_type, dispersion_env%ref_functional, &
222 dispersion_env%s6, dispersion_env%s8, &
223 dispersion_env%a1, dispersion_env%a2, &
224 dispersion_env%sr6, para_env, error=error_msg, &
225 calc_scaling=.NOT. dispersion_env%d3_scaling_explicit)
226 IF (error_msg /= "") THEN
227 CALL cp_abort(__location__, error_msg)
228 END IF
229 ELSE
230 filename = dispersion_env%parameter_file_name
231 CALL dftd3_c6_param(dispersion_env%c6ab, dispersion_env%maxci, filename, para_env)
232 CALL setrcov(dispersion_env%rcov)
233 CALL setr0ab(dispersion_env%r0ab, dispersion_env%rcov, dispersion_env%r2r4)
234 END IF
235 ! Electronegativity
236 CALL seten(dispersion_env%eneg)
237 ! the default coordination numbers
238 CALL setcn(dispersion_env%cn)
239 ! scale r4/r2 values of the atoms by sqrt(Z)
240 ! sqrt is also globally close to optimum
241 ! together with the factor 1/2 this yield reasonable
242 ! c8 for he, ne and ar. for larger Z, C8 becomes too large
243 ! which effectively mimics higher R^n terms neglected due
244 ! to stability reasons
245 IF (.NOT. dispersion_env%d3_reference_code) THEN
246 DO i = 1, max_elem
247 dum = 0.5_dp*dispersion_env%r2r4(i)*real(i, dp)**0.5_dp
248 ! store it as sqrt because the geom. av. is taken
249 dispersion_env%r2r4(i) = sqrt(dum)
250 END DO
251 END IF
252 ! parameters
253 dispersion_env%k1 = 16.0_dp
254 dispersion_env%k2 = 4._dp/3._dp
255 ! reasonable choices are between 3 and 5
256 ! this gives smoth curves with maxima around the integer values
257 ! k3=3 give for CN=0 a slightly smaller value than computed
258 ! for the free atom. This also yields to larger CN for atoms
259 ! in larger molecules but with the same chem. environment
260 ! which is physically not right
261 ! values >5 might lead to bumps in the potential
262 dispersion_env%k3 = -4._dp
263 IF (.NOT. dispersion_env%d3_reference_code) THEN
264 dispersion_env%rcov = dispersion_env%k2*dispersion_env%rcov*bohr
265 END IF
266 ! alpha default parameter
267 dispersion_env%alp = 14._dp
268 !
269 DO ikind = 1, nkind
270 CALL get_atomic_kind(atomic_kind_set(ikind), element_symbol=symbol, z=elem)
271 ALLOCATE (disp)
272 disp%type = dftd3_pp
273 IF (elem <= max_elem) THEN
274 disp%defined = .true.
275 ELSE
276 disp%defined = .false.
277 END IF
278 IF (.NOT. disp%defined) THEN
279 CALL cp_abort(__location__, &
280 "Dispersion parameters for element ("//trim(symbol)//") are not defined! "// &
281 "Please provide a valid set of parameters through the input section or "// &
282 "through an external file! ")
283 END IF
284 CALL set_qs_kind(qs_kind_set(ikind), dispersion=disp)
285 END DO
286
287 IF (PRESENT(pp_section)) THEN
288 ! Check for coordination numbers
289 CALL section_vals_val_get(pp_section, "KIND_COORDINATION_NUMBERS", n_rep_val=n_rep)
290 IF (n_rep > 0) THEN
291 ALLOCATE (dispersion_env%cnkind(n_rep))
292 DO i = 1, n_rep
293 CALL section_vals_val_get(pp_section, "KIND_COORDINATION_NUMBERS", i_rep_val=i, &
294 c_vals=tmpstringlist)
295 READ (tmpstringlist(1), *) dispersion_env%cnkind(i)%cnum
296 READ (tmpstringlist(2), *) dispersion_env%cnkind(i)%kind
297 END DO
298 END IF
299 CALL section_vals_val_get(pp_section, "ATOM_COORDINATION_NUMBERS", n_rep_val=n_rep)
300 IF (n_rep > 0) THEN
301 ALLOCATE (dispersion_env%cnlist(n_rep))
302 DO i = 1, n_rep
303 CALL section_vals_val_get(pp_section, "ATOM_COORDINATION_NUMBERS", i_rep_val=i, &
304 c_vals=tmpstringlist)
305 nl = SIZE(tmpstringlist)
306 ALLOCATE (dispersion_env%cnlist(i)%atom(nl - 1))
307 dispersion_env%cnlist(i)%natom = nl - 1
308 READ (tmpstringlist(1), *) dispersion_env%cnlist(i)%cnum
309 DO j = 1, nl - 1
310 READ (tmpstringlist(j + 1), *) dispersion_env%cnlist(i)%atom(j)
311 END DO
312 END DO
313 END IF
314 ! Check for exclusion lists
315 CALL section_vals_val_get(pp_section, "D3_EXCLUDE_KIND", explicit=explicit)
316 IF (explicit) THEN
317 CALL section_vals_val_get(pp_section, "D3_EXCLUDE_KIND", i_vals=exlist)
318 DO j = 1, SIZE(exlist)
319 ikind = exlist(j)
320 CALL get_qs_kind(qs_kind_set(ikind), dispersion=disp)
321 disp%defined = .false.
322 END DO
323 END IF
324 CALL section_vals_val_get(pp_section, "D3_EXCLUDE_KIND_PAIR", n_rep_val=n_rep)
325 dispersion_env%nd3_exclude_pair = n_rep
326 IF (n_rep > 0) THEN
327 ALLOCATE (dispersion_env%d3_exclude_pair(n_rep, 2))
328 DO i = 1, n_rep
329 CALL section_vals_val_get(pp_section, "D3_EXCLUDE_KIND_PAIR", i_rep_val=i, &
330 i_vals=exlist)
331 dispersion_env%d3_exclude_pair(i, :) = exlist
332 END DO
333 END IF
334 END IF
335 CASE (vdw_pairpot_dftd4)
336 !most checks are done by the library
337 CALL cite_reference(caldeweyher2017)
338 CALL cite_reference(caldeweyher2019)
339 CALL cite_reference(caldeweyher2020)
340 DO ikind = 1, nkind
341 CALL get_atomic_kind(atomic_kind_set(ikind), element_symbol=symbol, z=elem)
342 ALLOCATE (disp)
343 disp%type = dftd4_pp
344 disp%defined = .true.
345 CALL set_qs_kind(qs_kind_set(ikind), dispersion=disp)
346 END DO
347 ! maybe needed in cnumber calculations
348 max_elem = 103
349 maxc = 7
350 dispersion_env%max_elem = max_elem
351 dispersion_env%maxc = maxc
352 ALLOCATE (dispersion_env%maxci(max_elem))
353 ALLOCATE (dispersion_env%rcov(max_elem))
354 ALLOCATE (dispersion_env%eneg(max_elem))
355 ALLOCATE (dispersion_env%cn(max_elem))
356 ! the default covalent radii
357 CALL setrcov(dispersion_env%rcov)
358 ! the default coordination numbers
359 CALL setcn(dispersion_env%cn)
360 ! Electronegativity
361 CALL seten(dispersion_env%eneg)
362 ! parameters
363 dispersion_env%k1 = 16.0_dp
364 dispersion_env%k2 = 4._dp/3._dp
365 dispersion_env%k3 = -4._dp
366 dispersion_env%rcov = dispersion_env%k2*dispersion_env%rcov*bohr
367 dispersion_env%alp = 14._dp
368 !
369 dispersion_env%cnfun = 3
370 IF (dispersion_env%rc_cn < 0.0_dp) THEN
371 dispersion_env%rc_cn = get_cn_radius(dispersion_env)
372 END IF
373 IF (PRESENT(pp_section)) THEN
374 eeq_section => section_vals_get_subs_vals(pp_section, "EEQ")
375 CALL read_eeq_param(eeq_section, dispersion_env%eeq_sparam)
376 END IF
377 END SELECT
378 END SELECT
379
380 CALL timestop(handle)
381
382 END SUBROUTINE qs_dispersion_pairpot_init
383
384! **************************************************************************************************
385!> \brief ...
386!> \param qs_env ...
387!> \param dispersion_env ...
388!> \param energy ...
389!> \param calculate_forces ...
390!> \param atevdw ...
391! **************************************************************************************************
392 SUBROUTINE calculate_dispersion_pairpot(qs_env, dispersion_env, energy, calculate_forces, atevdw)
393
394 TYPE(qs_environment_type), POINTER :: qs_env
395 TYPE(qs_dispersion_type), POINTER :: dispersion_env
396 REAL(kind=dp), INTENT(INOUT) :: energy
397 LOGICAL, INTENT(IN) :: calculate_forces
398 REAL(kind=dp), DIMENSION(:), OPTIONAL :: atevdw
399
400 CHARACTER(LEN=*), PARAMETER :: routinen = 'calculate_dispersion_pairpot'
401
402 INTEGER :: atom_a, handle, iatom, ikind, iw, natom, &
403 nkind, unit_nr
404 INTEGER, ALLOCATABLE, DIMENSION(:) :: atom_of_kind, kind_of
405 LOGICAL :: atenergy, atex, debugall, use_virial
406 REAL(kind=dp) :: evdw, gnorm
407 REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: atomic_energy
408 REAL(kind=dp), DIMENSION(3) :: fdij
409 REAL(kind=dp), DIMENSION(3, 3) :: dvirial, pv_loc, pv_virial_thread
410 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
411 TYPE(atprop_type), POINTER :: atprop
412 TYPE(cell_type), POINTER :: cell
413 TYPE(cp_logger_type), POINTER :: logger
414 TYPE(mp_para_env_type), POINTER :: para_env
415 TYPE(qs_force_type), DIMENSION(:), POINTER :: force
416 TYPE(virial_type), POINTER :: virial
417
418 energy = 0._dp
419 ! make valgrind happy
420 use_virial = .false.
421
422 IF (dispersion_env%type /= xc_vdw_fun_pairpot) THEN
423 RETURN
424 END IF
425
426 CALL timeset(routinen, handle)
427
428 NULLIFY (atomic_kind_set)
429
430 CALL get_qs_env(qs_env=qs_env, nkind=nkind, natom=natom, atomic_kind_set=atomic_kind_set, &
431 cell=cell, virial=virial, para_env=para_env, atprop=atprop)
432
433 debugall = dispersion_env%verbose
434
435 NULLIFY (logger)
436 logger => cp_get_default_logger()
437 IF (ASSOCIATED(dispersion_env%dftd_section)) THEN
438 unit_nr = cp_print_key_unit_nr(logger, dispersion_env%dftd_section, "PRINT_DFTD", &
439 extension=".dftd")
440 ELSE
441 unit_nr = -1
442 END IF
443
444 ! atomic energy and stress arrays
445 atenergy = atprop%energy
446 ! external atomic energy
447 atex = .false.
448 IF (PRESENT(atevdw)) THEN
449 atex = .true.
450 END IF
451
452 IF (unit_nr > 0) THEN
453 WRITE (unit_nr, *)
454 WRITE (unit_nr, *) " Pair potential vdW calculation"
455 IF (dispersion_env%pp_type == vdw_pairpot_dftd2) THEN
456 WRITE (unit_nr, *) " Dispersion potential type: DFT-D2"
457 WRITE (unit_nr, *) " Scaling parameter (s6) ", dispersion_env%scaling
458 WRITE (unit_nr, *) " Exponential prefactor ", dispersion_env%exp_pre
459 ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd3) THEN
460 WRITE (unit_nr, *) " Dispersion potential type: DFT-D3"
461 ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd3bj) THEN
462 WRITE (unit_nr, *) " Dispersion potential type: DFT-D3(BJ)"
463 ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd4) THEN
464 WRITE (unit_nr, *) " Dispersion potential type: DFT-D4"
465 END IF
466 END IF
467
468 CALL get_qs_env(qs_env=qs_env, force=force)
469 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
470 IF (use_virial .AND. debugall) THEN
471 dvirial = virial%pv_virial
472 END IF
473 IF (use_virial) THEN
474 pv_loc = virial%pv_virial
475 END IF
476
477 evdw = 0._dp
478 pv_virial_thread(:, :) = 0._dp
479
480 CALL get_atomic_kind_set(atomic_kind_set, atom_of_kind=atom_of_kind, kind_of=kind_of)
481
482 IF (dispersion_env%pp_type == vdw_pairpot_dftd2) THEN
483 CALL calculate_dispersion_d2_pairpot(qs_env, dispersion_env, evdw, calculate_forces, atevdw)
484 ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd3 .OR. &
485 dispersion_env%pp_type == vdw_pairpot_dftd3bj) THEN
486 CALL calculate_dispersion_d3_pairpot(qs_env, dispersion_env, evdw, calculate_forces, &
487 unit_nr, atevdw)
488 ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd4) THEN
489 IF (dispersion_env%lrc) THEN
490 cpabort("Long range correction with DFTD4 not implemented")
491 END IF
492 IF (dispersion_env%srb) THEN
493 cpabort("Short range bond correction with DFTD4 not implemented")
494 END IF
495 IF (dispersion_env%domol) THEN
496 cpabort("Molecular approximation with DFTD4 not implemented")
497 END IF
498 !
499 iw = -1
500 IF (dispersion_env%verbose) iw = cp_logger_get_default_io_unit(logger)
501 !
502 IF (atenergy .OR. atex) THEN
503 ALLOCATE (atomic_energy(natom))
504 CALL calculate_dispersion_d4_pairpot(qs_env, dispersion_env, evdw, calculate_forces, &
505 iw, atomic_energy=atomic_energy)
506 ELSE
507 CALL calculate_dispersion_d4_pairpot(qs_env, dispersion_env, evdw, calculate_forces, iw)
508 END IF
509 !
510 IF (atex) THEN
511 atevdw(1:natom) = atomic_energy(1:natom)
512 END IF
513 IF (atenergy) THEN
514 CALL atprop_array_init(atprop%atevdw, natom)
515 atprop%atevdw(1:natom) = atomic_energy(1:natom)
516 END IF
517 IF (atenergy .OR. atex) THEN
518 DEALLOCATE (atomic_energy)
519 END IF
520 END IF
521
522 ! set dispersion energy
523 CALL para_env%sum(evdw)
524 energy = evdw
525 IF (unit_nr > 0) THEN
526 WRITE (unit_nr, *) " Total vdW energy [au] :", evdw
527 WRITE (unit_nr, *) " Total vdW energy [kcal] :", evdw*kcalmol
528 WRITE (unit_nr, *)
529 END IF
530 IF (calculate_forces .AND. debugall) THEN
531 IF (unit_nr > 0) THEN
532 WRITE (unit_nr, *) " Dispersion Forces "
533 WRITE (unit_nr, *) " Atom Kind Forces "
534 END IF
535 gnorm = 0._dp
536 DO iatom = 1, natom
537 ikind = kind_of(iatom)
538 atom_a = atom_of_kind(iatom)
539 fdij(1:3) = force(ikind)%dispersion(:, atom_a)
540 CALL para_env%sum(fdij)
541 gnorm = gnorm + sum(abs(fdij))
542 IF (unit_nr > 0) WRITE (unit_nr, "(i5,i7,3F20.14)") iatom, ikind, fdij
543 END DO
544 IF (unit_nr > 0) THEN
545 WRITE (unit_nr, *)
546 WRITE (unit_nr, *) "|G| = ", gnorm
547 WRITE (unit_nr, *)
548 END IF
549 IF (use_virial) THEN
550 dvirial = virial%pv_virial - dvirial
551 CALL para_env%sum(dvirial)
552 IF (unit_nr > 0) THEN
553 WRITE (unit_nr, *) "Stress Tensor (dispersion)"
554 WRITE (unit_nr, "(3G20.12)") dvirial
555 WRITE (unit_nr, *) " Tr(P)/3 : ", (dvirial(1, 1) + dvirial(2, 2) + dvirial(3, 3))/3._dp
556 WRITE (unit_nr, *)
557 END IF
558 END IF
559 END IF
560
561 IF (calculate_forces .AND. use_virial) THEN
562 virial%pv_vdw = virial%pv_vdw + (virial%pv_virial - pv_loc)
563 END IF
564
565 IF (ASSOCIATED(dispersion_env%dftd_section)) THEN
566 CALL cp_print_key_finished_output(unit_nr, logger, dispersion_env%dftd_section, "PRINT_DFTD")
567 END IF
568
569 CALL timestop(handle)
570
571 END SUBROUTINE calculate_dispersion_pairpot
572
573END MODULE qs_dispersion_pairpot
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind_set(atomic_kind_set, atom_of_kind, kind_of, natom_of_kind, maxatom, natom, nshell, fist_potential_present, shell_present, shell_adiabatic, shell_check_distance, damping_present)
Get attributes of an atomic kind set.
subroutine, public get_atomic_kind(atomic_kind, fist_potential, element_symbol, name, mass, kind_number, natom, atom_list, rcov, rvdw, z, qeff, apol, cpol, mm_radius, shell, shell_active, damping)
Get attributes of an atomic kind.
Holds information on atomic properties.
subroutine, public atprop_array_init(atarray, natom)
...
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public caldeweyher2020
integer, save, public grimme2006
integer, save, public caldeweyher2019
integer, save, public caldeweyher2017
integer, save, public goerigk2017
integer, save, public wittmann2024
integer, save, public grimme2011
integer, save, public grimme2010
Handles all functions related to the CELL.
Definition cell_types.F:15
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
Utility routines to read data from files. Kept as close as possible to the old parser because.
subroutine, public parser_get_next_line(parser, nline, at_end)
Read the next input line and broadcast the input information. Skip (nline-1) lines and skip also all ...
Utility routines to read data from files. Kept as close as possible to the old parser because.
subroutine, public parser_release(parser)
releases the parser
subroutine, public parser_create(parser, file_name, unit_nr, para_env, end_section_label, separator_chars, comment_char, continuation_char, quote_char, section_char, parse_white_lines, initial_variables, apply_preprocessing)
Start a parser run. Initial variables allow to @SET stuff before opening the file.
Input definition and setup for EEQ model.
Definition eeq_input.F:12
subroutine, public read_eeq_param(eeq_section, eeq_sparam)
...
Definition eeq_input.F:110
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public vdw_pairpot_dftd3
integer, parameter, public vdw_pairpot_dftd4
integer, parameter, public vdw_pairpot_dftd2
integer, parameter, public xc_vdw_fun_pairpot
integer, parameter, public vdw_pairpot_dftd3bj
objects that represent the structure of input sections and the data contained in an input section
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
integer, parameter, public default_path_length
Definition kinds.F:58
Interface to the message passing library MPI.
Definition of physical constants:
Definition physcon.F:68
real(kind=dp), parameter, public kcalmol
Definition physcon.F:171
real(kind=dp), parameter, public kjmol
Definition physcon.F:168
real(kind=dp), parameter, public bohr
Definition physcon.F:147
Coordination number routines for dispersion pairpotentials.
real(kind=dp) function, public get_cn_radius(dispersion_env)
...
subroutine, public setr0ab(rout, rcov, r2r4)
...
subroutine, public setrcov(rcov)
...
subroutine, public seten(enout)
...
subroutine, public setcn(cnout)
...
Calculation of D2 dispersion.
subroutine, public calculate_dispersion_d2_pairpot(qs_env, dispersion_env, evdw, calculate_forces, atevdw)
...
subroutine, public dftd2_param(z, c6, r, found)
...
Calculation of D3 dispersion.
subroutine, public dftd3_c6_param(c6ab, maxci, filename, para_env)
...
subroutine, public calculate_dispersion_d3_pairpot(qs_env, dispersion_env, evdw, calculate_forces, unit_nr, atevdw)
...
Calculation of dispersion using pair potentials.
subroutine, public calculate_dispersion_d4_pairpot(qs_env, dispersion_env, evdw, calculate_forces, iw, atomic_energy)
...
Calculation of dispersion using pair potentials.
subroutine, public qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, pp_section, para_env)
...
subroutine, public calculate_dispersion_pairpot(qs_env, dispersion_env, energy, calculate_forces, atevdw)
...
subroutine, public dftd3_param_from_library(c6ab, maxci, r0ab, rcov, r2r4, pp_type, ref_functional, s6, s8, a1, a2, sr6, para_env, error, calc_scaling)
...
Definition of disperson types for DFT calculations.
integer, parameter, public dftd2_pp
integer, parameter, public dftd4_pp
integer, parameter, public dftd3_pp
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, mimic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_vhxc, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, xcint_weights, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, cneo_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, hund_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, proj_shell_charge, lr_atom, do_mtlr, u_j_loop, ao_coef, init_u_ramping_each_scf, reltmat, ghost, monovalent, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
subroutine, public set_qs_kind(qs_kind, paw_atom, ghost, floating, hard_radius, hard0_radius, covalent_radius, vdw_radius, lmax_rho0, zeff, no_optimize, dispersion, u_minus_j, hund_j, reltmat, dftb_parameter, xtb_parameter, elec_conf, pao_basis_size)
Set the components of an atomic kind data set.
Provides all information about an atomic kind.
type for the atomic properties
Type defining parameters related to the simulation cell.
Definition cell_types.F:60
type of a logger, at the moment it contains just a print level starting at which level it should be l...
stores all the informations relevant to an mpi environment
Provides all information about a quickstep kind.