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