(git:64e569e)
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,&
59 USE qs_dispersion_types, ONLY: dftd2_pp,&
60 dftd3_pp,&
61 dftd4_pp,&
67 USE qs_kind_types, ONLY: get_qs_kind,&
70 USE virial_types, ONLY: virial_type
71#include "./base/base_uses.f90"
72
73 IMPLICIT NONE
74
75 PRIVATE
76
77 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_dispersion_pairpot'
78
80
81! **************************************************************************************************
82
83CONTAINS
84
85! **************************************************************************************************
86!> \brief ...
87!> \param atomic_kind_set ...
88!> \param qs_kind_set ...
89!> \param dispersion_env ...
90!> \param pp_section ...
91!> \param para_env ...
92! **************************************************************************************************
93 SUBROUTINE qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, pp_section, para_env)
94 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
95 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
96 TYPE(qs_dispersion_type), POINTER :: dispersion_env
97 TYPE(section_vals_type), OPTIONAL, POINTER :: pp_section
98 TYPE(mp_para_env_type), POINTER :: para_env
99
100 CHARACTER(len=*), PARAMETER :: routinen = 'qs_dispersion_pairpot_init'
101
102 CHARACTER(LEN=2) :: symbol
103 CHARACTER(LEN=default_path_length) :: filename
104 CHARACTER(LEN=default_string_length) :: aname
105 CHARACTER(LEN=default_string_length), &
106 DIMENSION(:), POINTER :: tmpstringlist
107 INTEGER :: elem, handle, i, ikind, j, max_elem, &
108 maxc, n_rep, nkind, nl, vdw_pp_type, &
109 vdw_type
110 INTEGER, DIMENSION(:), POINTER :: exlist
111 LOGICAL :: at_end, explicit, found, is_available
112 REAL(kind=dp) :: dum
113 TYPE(qs_atom_dispersion_type), POINTER :: disp
114 TYPE(section_vals_type), POINTER :: eeq_section
115
116 CALL timeset(routinen, handle)
117
118 nkind = SIZE(atomic_kind_set)
119
120 vdw_type = dispersion_env%type
121 SELECT CASE (vdw_type)
122 CASE DEFAULT
123 ! do nothing
124 CASE (xc_vdw_fun_pairpot)
125 ! setup information on pair potentials
126 vdw_pp_type = dispersion_env%type
127 SELECT CASE (dispersion_env%pp_type)
128 CASE DEFAULT
129 ! do nothing
130 CASE (vdw_pairpot_dftd2)
131 CALL cite_reference(grimme2006)
132 DO ikind = 1, nkind
133 CALL get_atomic_kind(atomic_kind_set(ikind), element_symbol=symbol, z=elem)
134 ALLOCATE (disp)
135 disp%type = dftd2_pp
136 ! get filename of parameter file
137 filename = dispersion_env%parameter_file_name
138 ! check for local parameters
139 found = .false.
140 IF (PRESENT(pp_section)) THEN
141 CALL section_vals_val_get(pp_section, "ATOMPARM", n_rep_val=n_rep)
142 DO i = 1, n_rep
143 CALL section_vals_val_get(pp_section, "ATOMPARM", i_rep_val=i, &
144 c_vals=tmpstringlist)
145 IF (trim(tmpstringlist(1)) == trim(symbol)) THEN
146 ! we assume the parameters are in atomic units!
147 READ (tmpstringlist(2), *) disp%c6
148 READ (tmpstringlist(3), *) disp%vdw_radii
149 found = .true.
150 EXIT
151 END IF
152 END DO
153 END IF
154 IF (.NOT. found) THEN
155 ! check for internal parameters
156 CALL dftd2_param(elem, disp%c6, disp%vdw_radii, found)
157 END IF
158 IF (.NOT. found) THEN
159 ! check on file
160 INQUIRE (file=filename, exist=is_available)
161 IF (is_available) THEN
162 block
163 TYPE(cp_parser_type) :: parser
164 CALL parser_create(parser, filename, para_env=para_env)
165 DO
166 at_end = .false.
167 CALL parser_get_next_line(parser, 1, at_end)
168 IF (at_end) EXIT
169 CALL parser_get_object(parser, aname)
170 IF (trim(aname) == trim(symbol)) THEN
171 CALL parser_get_object(parser, disp%c6)
172 ! we have to change the units J*nm^6*mol^-1 -> Hartree*Bohr^6
173 disp%c6 = disp%c6*1000._dp*bohr**6/kjmol
174 CALL parser_get_object(parser, disp%vdw_radii)
175 disp%vdw_radii = disp%vdw_radii*bohr
176 found = .true.
177 EXIT
178 END IF
179 END DO
180 CALL parser_release(parser)
181 END block
182 END IF
183 END IF
184 IF (found) THEN
185 disp%defined = .true.
186 ELSE
187 disp%defined = .false.
188 END IF
189 ! Check if the parameter is defined
190 IF (.NOT. disp%defined) &
191 CALL cp_abort(__location__, &
192 "Dispersion parameters for element ("//trim(symbol)//") are not defined! "// &
193 "Please provide a valid set of parameters through the input section or "// &
194 "through an external file! ")
195 CALL set_qs_kind(qs_kind_set(ikind), dispersion=disp)
196 END DO
198 !DFT-D3 Method initial setup
199 CALL cite_reference(grimme2010)
200 CALL cite_reference(grimme2011)
201 CALL cite_reference(goerigk2017)
202 CALL cite_reference(wittmann2024)
203 max_elem = 103
204 maxc = 7
205 dispersion_env%max_elem = max_elem
206 dispersion_env%maxc = maxc
207 ALLOCATE (dispersion_env%maxci(max_elem))
208 ALLOCATE (dispersion_env%c6ab(max_elem, max_elem, maxc, maxc, 3))
209 ALLOCATE (dispersion_env%r0ab(max_elem, max_elem))
210 ALLOCATE (dispersion_env%rcov(max_elem))
211 ALLOCATE (dispersion_env%eneg(max_elem))
212 ALLOCATE (dispersion_env%r2r4(max_elem))
213 ALLOCATE (dispersion_env%cn(max_elem))
214
215 ! get filename of parameter file
216 filename = dispersion_env%parameter_file_name
217 CALL dftd3_c6_param(dispersion_env%c6ab, dispersion_env%maxci, filename, para_env)
218 CALL setr0ab(dispersion_env%r0ab, dispersion_env%rcov, dispersion_env%r2r4)
219 ! Electronegativity
220 CALL seten(dispersion_env%eneg)
221 ! the default coordination numbers
222 CALL setcn(dispersion_env%cn)
223 ! scale r4/r2 values of the atoms by sqrt(Z)
224 ! sqrt is also globally close to optimum
225 ! together with the factor 1/2 this yield reasonable
226 ! c8 for he, ne and ar. for larger Z, C8 becomes too large
227 ! which effectively mimics higher R^n terms neglected due
228 ! to stability reasons
229 DO i = 1, max_elem
230 dum = 0.5_dp*dispersion_env%r2r4(i)*real(i, dp)**0.5_dp
231 ! store it as sqrt because the geom. av. is taken
232 dispersion_env%r2r4(i) = sqrt(dum)
233 END DO
234 ! parameters
235 dispersion_env%k1 = 16.0_dp
236 dispersion_env%k2 = 4._dp/3._dp
237 ! reasonable choices are between 3 and 5
238 ! this gives smoth curves with maxima around the integer values
239 ! k3=3 give for CN=0 a slightly smaller value than computed
240 ! for the free atom. This also yields to larger CN for atoms
241 ! in larger molecules but with the same chem. environment
242 ! which is physically not right
243 ! values >5 might lead to bumps in the potential
244 dispersion_env%k3 = -4._dp
245 dispersion_env%rcov = dispersion_env%k2*dispersion_env%rcov*bohr
246 ! alpha default parameter
247 dispersion_env%alp = 14._dp
248 !
249 DO ikind = 1, nkind
250 CALL get_atomic_kind(atomic_kind_set(ikind), element_symbol=symbol, z=elem)
251 ALLOCATE (disp)
252 disp%type = dftd3_pp
253 IF (elem <= max_elem) THEN
254 disp%defined = .true.
255 ELSE
256 disp%defined = .false.
257 END IF
258 IF (.NOT. disp%defined) &
259 CALL cp_abort(__location__, &
260 "Dispersion parameters for element ("//trim(symbol)//") are not defined! "// &
261 "Please provide a valid set of parameters through the input section or "// &
262 "through an external file! ")
263 CALL set_qs_kind(qs_kind_set(ikind), dispersion=disp)
264 END DO
265
266 IF (PRESENT(pp_section)) THEN
267 ! Check for coordination numbers
268 CALL section_vals_val_get(pp_section, "KIND_COORDINATION_NUMBERS", n_rep_val=n_rep)
269 IF (n_rep > 0) THEN
270 ALLOCATE (dispersion_env%cnkind(n_rep))
271 DO i = 1, n_rep
272 CALL section_vals_val_get(pp_section, "KIND_COORDINATION_NUMBERS", i_rep_val=i, &
273 c_vals=tmpstringlist)
274 READ (tmpstringlist(1), *) dispersion_env%cnkind(i)%cnum
275 READ (tmpstringlist(2), *) dispersion_env%cnkind(i)%kind
276 END DO
277 END IF
278 CALL section_vals_val_get(pp_section, "ATOM_COORDINATION_NUMBERS", n_rep_val=n_rep)
279 IF (n_rep > 0) THEN
280 ALLOCATE (dispersion_env%cnlist(n_rep))
281 DO i = 1, n_rep
282 CALL section_vals_val_get(pp_section, "ATOM_COORDINATION_NUMBERS", i_rep_val=i, &
283 c_vals=tmpstringlist)
284 nl = SIZE(tmpstringlist)
285 ALLOCATE (dispersion_env%cnlist(i)%atom(nl - 1))
286 dispersion_env%cnlist(i)%natom = nl - 1
287 READ (tmpstringlist(1), *) dispersion_env%cnlist(i)%cnum
288 DO j = 1, nl - 1
289 READ (tmpstringlist(j + 1), *) dispersion_env%cnlist(i)%atom(j)
290 END DO
291 END DO
292 END IF
293 ! Check for exclusion lists
294 CALL section_vals_val_get(pp_section, "D3_EXCLUDE_KIND", explicit=explicit)
295 IF (explicit) THEN
296 CALL section_vals_val_get(pp_section, "D3_EXCLUDE_KIND", i_vals=exlist)
297 DO j = 1, SIZE(exlist)
298 ikind = exlist(j)
299 CALL get_qs_kind(qs_kind_set(ikind), dispersion=disp)
300 disp%defined = .false.
301 END DO
302 END IF
303 CALL section_vals_val_get(pp_section, "D3_EXCLUDE_KIND_PAIR", n_rep_val=n_rep)
304 dispersion_env%nd3_exclude_pair = n_rep
305 IF (n_rep > 0) THEN
306 ALLOCATE (dispersion_env%d3_exclude_pair(n_rep, 2))
307 DO i = 1, n_rep
308 CALL section_vals_val_get(pp_section, "D3_EXCLUDE_KIND_PAIR", i_rep_val=i, &
309 i_vals=exlist)
310 dispersion_env%d3_exclude_pair(i, :) = exlist
311 END DO
312 END IF
313 END IF
314 CASE (vdw_pairpot_dftd4)
315 !most checks are done by the library
316 CALL cite_reference(caldeweyher2017)
317 CALL cite_reference(caldeweyher2019)
318 CALL cite_reference(caldeweyher2020)
319 DO ikind = 1, nkind
320 CALL get_atomic_kind(atomic_kind_set(ikind), element_symbol=symbol, z=elem)
321 ALLOCATE (disp)
322 disp%type = dftd4_pp
323 disp%defined = .true.
324 CALL set_qs_kind(qs_kind_set(ikind), dispersion=disp)
325 END DO
326 ! maybe needed in cnumber calculations
327 max_elem = 103
328 maxc = 7
329 dispersion_env%max_elem = max_elem
330 dispersion_env%maxc = maxc
331 ALLOCATE (dispersion_env%maxci(max_elem))
332 ALLOCATE (dispersion_env%rcov(max_elem))
333 ALLOCATE (dispersion_env%eneg(max_elem))
334 ALLOCATE (dispersion_env%cn(max_elem))
335 ! the default covalent radii
336 CALL setrcov(dispersion_env%rcov)
337 ! the default coordination numbers
338 CALL setcn(dispersion_env%cn)
339 ! Electronegativity
340 CALL seten(dispersion_env%eneg)
341 ! parameters
342 dispersion_env%k1 = 16.0_dp
343 dispersion_env%k2 = 4._dp/3._dp
344 dispersion_env%k3 = -4._dp
345 dispersion_env%rcov = dispersion_env%k2*dispersion_env%rcov*bohr
346 dispersion_env%alp = 14._dp
347 !
348 dispersion_env%cnfun = 3
349 IF (dispersion_env%rc_cn < 0.0_dp) THEN
350 dispersion_env%rc_cn = get_cn_radius(dispersion_env)
351 END IF
352 IF (PRESENT(pp_section)) THEN
353 eeq_section => section_vals_get_subs_vals(pp_section, "EEQ")
354 CALL read_eeq_param(eeq_section, dispersion_env%eeq_sparam)
355 END IF
356 END SELECT
357 END SELECT
358
359 CALL timestop(handle)
360
361 END SUBROUTINE qs_dispersion_pairpot_init
362
363! **************************************************************************************************
364!> \brief ...
365!> \param qs_env ...
366!> \param dispersion_env ...
367!> \param energy ...
368!> \param calculate_forces ...
369!> \param atevdw ...
370! **************************************************************************************************
371 SUBROUTINE calculate_dispersion_pairpot(qs_env, dispersion_env, energy, calculate_forces, atevdw)
372
373 TYPE(qs_environment_type), POINTER :: qs_env
374 TYPE(qs_dispersion_type), POINTER :: dispersion_env
375 REAL(kind=dp), INTENT(INOUT) :: energy
376 LOGICAL, INTENT(IN) :: calculate_forces
377 REAL(kind=dp), DIMENSION(:), OPTIONAL :: atevdw
378
379 CHARACTER(LEN=*), PARAMETER :: routinen = 'calculate_dispersion_pairpot'
380
381 INTEGER :: atom_a, handle, iatom, ikind, iw, natom, &
382 nkind, unit_nr
383 INTEGER, ALLOCATABLE, DIMENSION(:) :: atom_of_kind, kind_of
384 LOGICAL :: atenergy, atex, debugall, use_virial
385 REAL(kind=dp) :: evdw, gnorm
386 REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: atomic_energy
387 REAL(kind=dp), DIMENSION(3) :: fdij
388 REAL(kind=dp), DIMENSION(3, 3) :: dvirial, pv_loc, pv_virial_thread
389 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
390 TYPE(atprop_type), POINTER :: atprop
391 TYPE(cell_type), POINTER :: cell
392 TYPE(cp_logger_type), POINTER :: logger
393 TYPE(mp_para_env_type), POINTER :: para_env
394 TYPE(qs_force_type), DIMENSION(:), POINTER :: force
395 TYPE(virial_type), POINTER :: virial
396
397 energy = 0._dp
398 ! make valgrind happy
399 use_virial = .false.
400
401 IF (dispersion_env%type /= xc_vdw_fun_pairpot) THEN
402 RETURN
403 END IF
404
405 CALL timeset(routinen, handle)
406
407 NULLIFY (atomic_kind_set)
408
409 CALL get_qs_env(qs_env=qs_env, nkind=nkind, natom=natom, atomic_kind_set=atomic_kind_set, &
410 cell=cell, virial=virial, para_env=para_env, atprop=atprop)
411
412 debugall = dispersion_env%verbose
413
414 NULLIFY (logger)
415 logger => cp_get_default_logger()
416 IF (ASSOCIATED(dispersion_env%dftd_section)) THEN
417 unit_nr = cp_print_key_unit_nr(logger, dispersion_env%dftd_section, "PRINT_DFTD", &
418 extension=".dftd")
419 ELSE
420 unit_nr = -1
421 END IF
422
423 ! atomic energy and stress arrays
424 atenergy = atprop%energy
425 ! external atomic energy
426 atex = .false.
427 IF (PRESENT(atevdw)) THEN
428 atex = .true.
429 END IF
430
431 IF (unit_nr > 0) THEN
432 WRITE (unit_nr, *)
433 WRITE (unit_nr, *) " Pair potential vdW calculation"
434 IF (dispersion_env%pp_type == vdw_pairpot_dftd2) THEN
435 WRITE (unit_nr, *) " Dispersion potential type: DFT-D2"
436 WRITE (unit_nr, *) " Scaling parameter (s6) ", dispersion_env%scaling
437 WRITE (unit_nr, *) " Exponential prefactor ", dispersion_env%exp_pre
438 ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd3) THEN
439 WRITE (unit_nr, *) " Dispersion potential type: DFT-D3"
440 ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd3bj) THEN
441 WRITE (unit_nr, *) " Dispersion potential type: DFT-D3(BJ)"
442 ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd4) THEN
443 WRITE (unit_nr, *) " Dispersion potential type: DFT-D4"
444 END IF
445 END IF
446
447 CALL get_qs_env(qs_env=qs_env, force=force)
448 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
449 IF (use_virial .AND. debugall) THEN
450 dvirial = virial%pv_virial
451 END IF
452 IF (use_virial) THEN
453 pv_loc = virial%pv_virial
454 END IF
455
456 evdw = 0._dp
457 pv_virial_thread(:, :) = 0._dp
458
459 CALL get_atomic_kind_set(atomic_kind_set, atom_of_kind=atom_of_kind, kind_of=kind_of)
460
461 IF (dispersion_env%pp_type == vdw_pairpot_dftd2) THEN
462 CALL calculate_dispersion_d2_pairpot(qs_env, dispersion_env, evdw, calculate_forces, atevdw)
463 ELSEIF (dispersion_env%pp_type == vdw_pairpot_dftd3 .OR. &
464 dispersion_env%pp_type == vdw_pairpot_dftd3bj) THEN
465 CALL calculate_dispersion_d3_pairpot(qs_env, dispersion_env, evdw, calculate_forces, &
466 unit_nr, atevdw)
467 ELSEIF (dispersion_env%pp_type == vdw_pairpot_dftd4) THEN
468 IF (dispersion_env%lrc) THEN
469 cpabort("Long range correction with DFTD4 not implemented")
470 END IF
471 IF (dispersion_env%srb) THEN
472 cpabort("Short range bond correction with DFTD4 not implemented")
473 END IF
474 IF (dispersion_env%domol) THEN
475 cpabort("Molecular approximation with DFTD4 not implemented")
476 END IF
477 !
478 iw = -1
479 IF (dispersion_env%verbose) iw = cp_logger_get_default_io_unit(logger)
480 !
481 IF (atenergy .OR. atex) THEN
482 ALLOCATE (atomic_energy(natom))
483 CALL calculate_dispersion_d4_pairpot(qs_env, dispersion_env, evdw, calculate_forces, &
484 iw, atomic_energy=atomic_energy)
485 ELSE
486 CALL calculate_dispersion_d4_pairpot(qs_env, dispersion_env, evdw, calculate_forces, iw)
487 END IF
488 !
489 IF (atex) THEN
490 atevdw(1:natom) = atomic_energy(1:natom)
491 END IF
492 IF (atenergy) THEN
493 CALL atprop_array_init(atprop%atevdw, natom)
494 atprop%atevdw(1:natom) = atomic_energy(1:natom)
495 END IF
496 IF (atenergy .OR. atex) THEN
497 DEALLOCATE (atomic_energy)
498 END IF
499 END IF
500
501 ! set dispersion energy
502 CALL para_env%sum(evdw)
503 energy = evdw
504 IF (unit_nr > 0) THEN
505 WRITE (unit_nr, *) " Total vdW energy [au] :", evdw
506 WRITE (unit_nr, *) " Total vdW energy [kcal] :", evdw*kcalmol
507 WRITE (unit_nr, *)
508 END IF
509 IF (calculate_forces .AND. debugall) THEN
510 IF (unit_nr > 0) THEN
511 WRITE (unit_nr, *) " Dispersion Forces "
512 WRITE (unit_nr, *) " Atom Kind Forces "
513 END IF
514 gnorm = 0._dp
515 DO iatom = 1, natom
516 ikind = kind_of(iatom)
517 atom_a = atom_of_kind(iatom)
518 fdij(1:3) = force(ikind)%dispersion(:, atom_a)
519 CALL para_env%sum(fdij)
520 gnorm = gnorm + sum(abs(fdij))
521 IF (unit_nr > 0) WRITE (unit_nr, "(i5,i7,3F20.14)") iatom, ikind, fdij
522 END DO
523 IF (unit_nr > 0) THEN
524 WRITE (unit_nr, *)
525 WRITE (unit_nr, *) "|G| = ", gnorm
526 WRITE (unit_nr, *)
527 END IF
528 IF (use_virial) THEN
529 dvirial = virial%pv_virial - dvirial
530 CALL para_env%sum(dvirial)
531 IF (unit_nr > 0) THEN
532 WRITE (unit_nr, *) "Stress Tensor (dispersion)"
533 WRITE (unit_nr, "(3G20.12)") dvirial
534 WRITE (unit_nr, *) " Tr(P)/3 : ", (dvirial(1, 1) + dvirial(2, 2) + dvirial(3, 3))/3._dp
535 WRITE (unit_nr, *)
536 END IF
537 END IF
538 END IF
539
540 IF (calculate_forces .AND. use_virial) THEN
541 virial%pv_vdw = virial%pv_vdw + (virial%pv_virial - pv_loc)
542 END IF
543
544 IF (ASSOCIATED(dispersion_env%dftd_section)) THEN
545 CALL cp_print_key_finished_output(unit_nr, logger, dispersion_env%dftd_section, "PRINT_DFTD")
546 END IF
547
548 CALL timestop(handle)
549
550 END SUBROUTINE calculate_dispersion_pairpot
551
552END 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)
...
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, 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, 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, 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, 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.