(git:d18deda)
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_string_length,&
48 dp
50 USE physcon, ONLY: bohr,&
51 kcalmol,&
52 kjmol
54 setcn,&
55 seten,&
56 setr0ab,&
63 USE qs_dispersion_types, ONLY: dftd2_pp,&
64 dftd3_pp,&
65 dftd4_pp,&
71 USE qs_kind_types, ONLY: get_qs_kind,&
74 USE virial_types, ONLY: virial_type
75#include "./base/base_uses.f90"
76
77 IMPLICIT NONE
78
79 PRIVATE
80
81 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_dispersion_pairpot'
82
84
85! **************************************************************************************************
86
87CONTAINS
88
89! **************************************************************************************************
90!> \brief ...
91!> \param atomic_kind_set ...
92!> \param qs_kind_set ...
93!> \param dispersion_env ...
94!> \param pp_section ...
95!> \param para_env ...
96! **************************************************************************************************
97 SUBROUTINE qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, pp_section, para_env)
98 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
99 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
100 TYPE(qs_dispersion_type), POINTER :: dispersion_env
101 TYPE(section_vals_type), OPTIONAL, POINTER :: pp_section
102 TYPE(mp_para_env_type), POINTER :: para_env
103
104 CHARACTER(len=*), PARAMETER :: routinen = 'qs_dispersion_pairpot_init'
105
106 CHARACTER(LEN=2) :: symbol
107 CHARACTER(LEN=default_string_length) :: aname, filename
108 CHARACTER(LEN=default_string_length), &
109 DIMENSION(:), POINTER :: tmpstringlist
110 INTEGER :: elem, handle, i, ikind, j, max_elem, &
111 maxc, n_rep, nkind, nl, vdw_pp_type, &
112 vdw_type
113 INTEGER, DIMENSION(:), POINTER :: exlist
114 LOGICAL :: at_end, explicit, found, is_available
115 REAL(kind=dp) :: dum
116 TYPE(qs_atom_dispersion_type), POINTER :: disp
117 TYPE(section_vals_type), POINTER :: eeq_section
118
119 CALL timeset(routinen, handle)
120
121 nkind = SIZE(atomic_kind_set)
122
123 vdw_type = dispersion_env%type
124 SELECT CASE (vdw_type)
125 CASE DEFAULT
126 ! do nothing
127 CASE (xc_vdw_fun_pairpot)
128 ! setup information on pair potentials
129 vdw_pp_type = dispersion_env%type
130 SELECT CASE (dispersion_env%pp_type)
131 CASE DEFAULT
132 ! do nothing
133 CASE (vdw_pairpot_dftd2)
134 CALL cite_reference(grimme2006)
135 DO ikind = 1, nkind
136 CALL get_atomic_kind(atomic_kind_set(ikind), element_symbol=symbol, z=elem)
137 ALLOCATE (disp)
138 disp%type = dftd2_pp
139 ! get filename of parameter file
140 filename = dispersion_env%parameter_file_name
141 ! check for local parameters
142 found = .false.
143 IF (PRESENT(pp_section)) THEN
144 CALL section_vals_val_get(pp_section, "ATOMPARM", n_rep_val=n_rep)
145 DO i = 1, n_rep
146 CALL section_vals_val_get(pp_section, "ATOMPARM", i_rep_val=i, &
147 c_vals=tmpstringlist)
148 IF (trim(tmpstringlist(1)) == trim(symbol)) THEN
149 ! we assume the parameters are in atomic units!
150 READ (tmpstringlist(2), *) disp%c6
151 READ (tmpstringlist(3), *) disp%vdw_radii
152 found = .true.
153 EXIT
154 END IF
155 END DO
156 END IF
157 IF (.NOT. found) THEN
158 ! check for internal parameters
159 CALL dftd2_param(elem, disp%c6, disp%vdw_radii, found)
160 END IF
161 IF (.NOT. found) THEN
162 ! check on file
163 INQUIRE (file=filename, exist=is_available)
164 IF (is_available) THEN
165 block
166 TYPE(cp_parser_type) :: parser
167 CALL parser_create(parser, filename, para_env=para_env)
168 DO
169 at_end = .false.
170 CALL parser_get_next_line(parser, 1, at_end)
171 IF (at_end) EXIT
172 CALL parser_get_object(parser, aname)
173 IF (trim(aname) == trim(symbol)) THEN
174 CALL parser_get_object(parser, disp%c6)
175 ! we have to change the units J*nm^6*mol^-1 -> Hartree*Bohr^6
176 disp%c6 = disp%c6*1000._dp*bohr**6/kjmol
177 CALL parser_get_object(parser, disp%vdw_radii)
178 disp%vdw_radii = disp%vdw_radii*bohr
179 found = .true.
180 EXIT
181 END IF
182 END DO
183 CALL parser_release(parser)
184 END block
185 END IF
186 END IF
187 IF (found) THEN
188 disp%defined = .true.
189 ELSE
190 disp%defined = .false.
191 END IF
192 ! Check if the parameter is defined
193 IF (.NOT. disp%defined) &
194 CALL cp_abort(__location__, &
195 "Dispersion parameters for element ("//trim(symbol)//") are not defined! "// &
196 "Please provide a valid set of parameters through the input section or "// &
197 "through an external file! ")
198 CALL set_qs_kind(qs_kind_set(ikind), dispersion=disp)
199 END DO
201 !DFT-D3 Method initial setup
202 CALL cite_reference(grimme2010)
203 CALL cite_reference(grimme2011)
204 CALL cite_reference(goerigk2017)
205 max_elem = 94
206 maxc = 5
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 ! get filename of parameter file
218 filename = dispersion_env%parameter_file_name
219 CALL dftd3_c6_param(dispersion_env%c6ab, dispersion_env%maxci, filename, para_env)
220 CALL setr0ab(dispersion_env%r0ab, dispersion_env%rcov, dispersion_env%r2r4)
221 ! Electronegativity
222 CALL seten(dispersion_env%eneg)
223 ! the default coordination numbers
224 CALL setcn(dispersion_env%cn)
225 ! scale r4/r2 values of the atoms by sqrt(Z)
226 ! sqrt is also globally close to optimum
227 ! together with the factor 1/2 this yield reasonable
228 ! c8 for he, ne and ar. for larger Z, C8 becomes too large
229 ! which effectively mimics higher R^n terms neglected due
230 ! to stability reasons
231 DO i = 1, max_elem
232 dum = 0.5_dp*dispersion_env%r2r4(i)*real(i, dp)**0.5_dp
233 ! store it as sqrt because the geom. av. is taken
234 dispersion_env%r2r4(i) = sqrt(dum)
235 END DO
236 ! parameters
237 dispersion_env%k1 = 16.0_dp
238 dispersion_env%k2 = 4._dp/3._dp
239 ! reasonable choices are between 3 and 5
240 ! this gives smoth curves with maxima around the integer values
241 ! k3=3 give for CN=0 a slightly smaller value than computed
242 ! for the free atom. This also yields to larger CN for atoms
243 ! in larger molecules but with the same chem. environment
244 ! which is physically not right
245 ! values >5 might lead to bumps in the potential
246 dispersion_env%k3 = -4._dp
247 dispersion_env%rcov = dispersion_env%k2*dispersion_env%rcov*bohr
248 ! alpha default parameter
249 dispersion_env%alp = 14._dp
250 !
251 DO ikind = 1, nkind
252 CALL get_atomic_kind(atomic_kind_set(ikind), element_symbol=symbol, z=elem)
253 ALLOCATE (disp)
254 disp%type = dftd3_pp
255 IF (elem <= 94) THEN
256 disp%defined = .true.
257 ELSE
258 disp%defined = .false.
259 END IF
260 IF (.NOT. disp%defined) &
261 CALL cp_abort(__location__, &
262 "Dispersion parameters for element ("//trim(symbol)//") are not defined! "// &
263 "Please provide a valid set of parameters through the input section or "// &
264 "through an external file! ")
265 CALL set_qs_kind(qs_kind_set(ikind), dispersion=disp)
266 END DO
267
268 IF (PRESENT(pp_section)) THEN
269 ! Check for coordination numbers
270 CALL section_vals_val_get(pp_section, "KIND_COORDINATION_NUMBERS", n_rep_val=n_rep)
271 IF (n_rep > 0) THEN
272 ALLOCATE (dispersion_env%cnkind(n_rep))
273 DO i = 1, n_rep
274 CALL section_vals_val_get(pp_section, "KIND_COORDINATION_NUMBERS", i_rep_val=i, &
275 c_vals=tmpstringlist)
276 READ (tmpstringlist(1), *) dispersion_env%cnkind(i)%cnum
277 READ (tmpstringlist(2), *) dispersion_env%cnkind(i)%kind
278 END DO
279 END IF
280 CALL section_vals_val_get(pp_section, "ATOM_COORDINATION_NUMBERS", n_rep_val=n_rep)
281 IF (n_rep > 0) THEN
282 ALLOCATE (dispersion_env%cnlist(n_rep))
283 DO i = 1, n_rep
284 CALL section_vals_val_get(pp_section, "ATOM_COORDINATION_NUMBERS", i_rep_val=i, &
285 c_vals=tmpstringlist)
286 nl = SIZE(tmpstringlist)
287 ALLOCATE (dispersion_env%cnlist(i)%atom(nl - 1))
288 dispersion_env%cnlist(i)%natom = nl - 1
289 READ (tmpstringlist(1), *) dispersion_env%cnlist(i)%cnum
290 DO j = 1, nl - 1
291 READ (tmpstringlist(j + 1), *) dispersion_env%cnlist(i)%atom(j)
292 END DO
293 END DO
294 END IF
295 ! Check for exclusion lists
296 CALL section_vals_val_get(pp_section, "D3_EXCLUDE_KIND", explicit=explicit)
297 IF (explicit) THEN
298 CALL section_vals_val_get(pp_section, "D3_EXCLUDE_KIND", i_vals=exlist)
299 DO j = 1, SIZE(exlist)
300 ikind = exlist(j)
301 CALL get_qs_kind(qs_kind_set(ikind), dispersion=disp)
302 disp%defined = .false.
303 END DO
304 END IF
305 CALL section_vals_val_get(pp_section, "D3_EXCLUDE_KIND_PAIR", n_rep_val=n_rep)
306 dispersion_env%nd3_exclude_pair = n_rep
307 IF (n_rep > 0) THEN
308 ALLOCATE (dispersion_env%d3_exclude_pair(n_rep, 2))
309 DO i = 1, n_rep
310 CALL section_vals_val_get(pp_section, "D3_EXCLUDE_KIND_PAIR", i_rep_val=i, &
311 i_vals=exlist)
312 dispersion_env%d3_exclude_pair(i, :) = exlist
313 END DO
314 END IF
315 END IF
316 CASE (vdw_pairpot_dftd4)
317 !most checks are done by the library
318 CALL cite_reference(caldeweyher2017)
319 CALL cite_reference(caldeweyher2019)
320 CALL cite_reference(caldeweyher2020)
321 DO ikind = 1, nkind
322 CALL get_atomic_kind(atomic_kind_set(ikind), element_symbol=symbol, z=elem)
323 ALLOCATE (disp)
324 disp%type = dftd4_pp
325 disp%defined = .true.
326 CALL set_qs_kind(qs_kind_set(ikind), dispersion=disp)
327 END DO
328 ! maybe needed in cnumber calculations
329 max_elem = 94
330 maxc = 5
331 dispersion_env%max_elem = max_elem
332 dispersion_env%maxc = maxc
333 ALLOCATE (dispersion_env%maxci(max_elem))
334 ALLOCATE (dispersion_env%rcov(max_elem))
335 ALLOCATE (dispersion_env%eneg(max_elem))
336 ALLOCATE (dispersion_env%cn(max_elem))
337 ! the default covalent radii
338 CALL setrcov(dispersion_env%rcov)
339 ! the default coordination numbers
340 CALL setcn(dispersion_env%cn)
341 ! Electronegativity
342 CALL seten(dispersion_env%eneg)
343 ! parameters
344 dispersion_env%k1 = 16.0_dp
345 dispersion_env%k2 = 4._dp/3._dp
346 dispersion_env%k3 = -4._dp
347 dispersion_env%rcov = dispersion_env%k2*dispersion_env%rcov*bohr
348 dispersion_env%alp = 14._dp
349 !
350 dispersion_env%cnfun = 3
351 dispersion_env%rc_cn = get_cn_radius(dispersion_env)
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 .NE. 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 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
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)
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.