(git:7fc1fe1)
Loading...
Searching...
No Matches
qs_core_energies.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 the energies concerning the core charge distribution
10!> \par History
11!> - Full refactoring of calculate_ecore and calculate_ecore_overlap (jhu)
12!> \author Matthias Krack (27.04.2001)
13! **************************************************************************************************
20 USE cell_types, ONLY: cell_type,&
21 pbc
22 USE cp_dbcsr_api, ONLY: dbcsr_get_info,&
25 USE cp_dbcsr_contrib, ONLY: dbcsr_dot,&
28 USE kinds, ONLY: dp
29 USE mathconstants, ONLY: oorootpi,&
30 twopi
31 USE message_passing, ONLY: mp_comm_type,&
39 USE qs_kind_types, ONLY: get_qs_kind,&
48 USE virial_types, ONLY: virial_type
49#include "./base/base_uses.f90"
50
51 IMPLICIT NONE
52
53 PRIVATE
54
55! *** Global parameters ***
56
57 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_core_energies'
58
59 PUBLIC :: calculate_ptrace, &
62
64 MODULE PROCEDURE calculate_ptrace_1, calculate_ptrace_gamma, calculate_ptrace_kp
65 END INTERFACE
66
67! **************************************************************************************************
68
69CONTAINS
70
71! **************************************************************************************************
72!> \brief Calculate the trace of a operator matrix with the density matrix.
73!> Sum over all spin components (in P, no spin in H)
74!> \param hmat ...
75!> \param pmat ...
76!> \param ecore ...
77!> \param nspin ...
78!> \param spinmat Flag for spin dependency of operator matrix
79!> \date 29.07.2014
80!> \par History
81!> - none
82!> \author JGH
83!> \version 1.0
84! **************************************************************************************************
85 SUBROUTINE calculate_ptrace_gamma(hmat, pmat, ecore, nspin, spinmat)
86
87 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: hmat, pmat
88 REAL(KIND=dp), INTENT(OUT) :: ecore
89 INTEGER, INTENT(IN) :: nspin
90 LOGICAL, INTENT(IN), OPTIONAL :: spinmat
91
92 CHARACTER(len=*), PARAMETER :: routineN = 'calculate_ptrace_gamma'
93
94 INTEGER :: handle, ispin
95 LOGICAL :: lspin
96 REAL(KIND=dp) :: etr
97
98 CALL timeset(routinen, handle)
99
100 lspin = .false.
101 IF (PRESENT(spinmat)) lspin = spinmat
102
103 ecore = 0.0_dp
104 DO ispin = 1, nspin
105 etr = 0.0_dp
106 IF (lspin) THEN
107 CALL dbcsr_dot(hmat(ispin)%matrix, pmat(ispin)%matrix, etr)
108 ELSE
109 CALL dbcsr_dot(hmat(1)%matrix, pmat(ispin)%matrix, etr)
110 END IF
111 ecore = ecore + etr
112 END DO
113
114 CALL timestop(handle)
115
116 END SUBROUTINE calculate_ptrace_gamma
117
118! **************************************************************************************************
119!> \brief Calculate the trace of a operator matrix with the density matrix.
120!> Sum over all spin components (in P, no spin in H) and the real space
121!> coordinates
122!> \param hmat H matrix
123!> \param pmat P matrices
124!> \param ecore Tr(HP) output
125!> \param nspin Number of P matrices
126!> \param spinmat Flag for spin dependency of operator matrix
127!> \date 29.07.2014
128!> \author JGH
129!> \version 1.0
130! **************************************************************************************************
131 SUBROUTINE calculate_ptrace_kp(hmat, pmat, ecore, nspin, spinmat)
132
133 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: hmat, pmat
134 REAL(kind=dp), INTENT(OUT) :: ecore
135 INTEGER, INTENT(IN) :: nspin
136 LOGICAL, INTENT(IN), OPTIONAL :: spinmat
137
138 CHARACTER(len=*), PARAMETER :: routinen = 'calculate_ptrace_kp'
139
140 INTEGER :: handle, ic, ispin, j, nc
141 LOGICAL :: lspin
142 REAL(kind=dp), ALLOCATABLE :: traces(:)
143 TYPE(dbcsr_p_type), ALLOCATABLE :: h(:), p(:)
144 TYPE(mp_comm_type) :: group
145
146 CALL timeset(routinen, handle)
147
148 lspin = .false.
149 IF (PRESENT(spinmat)) lspin = spinmat
150
151 nc = SIZE(pmat, 2)
152 ALLOCATE (h(nspin*nc), p(nspin*nc), traces(nspin*nc))
153 j = 0
154 DO ispin = 1, nspin
155 DO ic = 1, nc
156 j = j + 1
157 IF (lspin) THEN
158 h(j)%matrix => hmat(ispin, ic)%matrix
159 ELSE
160 h(j)%matrix => hmat(1, ic)%matrix
161 END IF
162 p(j)%matrix => pmat(ispin, ic)%matrix
163 END DO
164 END DO
165 IF (SIZE(h) > 0) CALL dbcsr_get_info(h(1)%matrix, group=group)
166 CALL dbcsr_dot_batch(h, p, traces, comm=group)
167 ! Retain the spin/image accumulation order after the common MPI reduction.
168 ecore = 0.0_dp
169 DO j = 1, SIZE(traces)
170 ecore = ecore + traces(j)
171 END DO
172
173 CALL timestop(handle)
174
175 END SUBROUTINE calculate_ptrace_kp
176
177! **************************************************************************************************
178!> \brief Calculate the core Hamiltonian energy which includes the kinetic
179!> and the potential energy of the electrons. It is assumed, that
180!> the core Hamiltonian matrix h and the density matrix p have the
181!> same sparse matrix structure (same atomic blocks and block
182!> ordering)
183!> \param h ...
184!> \param p ...
185!> \param ecore ...
186!> \date 03.05.2001
187!> \par History
188!> - simplified taking advantage of new non-redundant matrix
189!> structure (27.06.2003,MK)
190!> - simplified using DBCSR trace function (21.07.2010, jhu)
191!> \author MK
192!> \version 1.0
193! **************************************************************************************************
194 SUBROUTINE calculate_ptrace_1(h, p, ecore)
195
196 TYPE(dbcsr_type), POINTER :: h, p
197 REAL(KIND=dp), INTENT(OUT) :: ecore
198
199 CHARACTER(len=*), PARAMETER :: routineN = 'calculate_ptrace_1'
200
201 INTEGER :: handle
202
203 CALL timeset(routinen, handle)
204
205 ecore = 0.0_dp
206 CALL dbcsr_dot(h, p, ecore)
207
208 CALL timestop(handle)
209
210 END SUBROUTINE calculate_ptrace_1
211
212! **************************************************************************************************
213!> \brief Calculate the overlap energy of the core charge distribution.
214!> \param qs_env ...
215!> \param para_env ...
216!> \param calculate_forces ...
217!> \param molecular ...
218!> \param E_overlap_core ...
219!> \param atecc ...
220!> \date 30.04.2001
221!> \par History
222!> - Force calculation added (03.06.2002,MK)
223!> - Parallelized using a list of local atoms for rows and
224!> columns (19.07.2003,MK)
225!> - Use precomputed neighborlists (sab_core) and nl iterator (28.07.2010,jhu)
226!> \author MK
227!> \version 1.0
228! **************************************************************************************************
229 SUBROUTINE calculate_ecore_overlap(qs_env, para_env, calculate_forces, molecular, &
230 E_overlap_core, atecc)
231 TYPE(qs_environment_type), POINTER :: qs_env
232 TYPE(mp_para_env_type), POINTER :: para_env
233 LOGICAL, INTENT(IN) :: calculate_forces
234 LOGICAL, INTENT(IN), OPTIONAL :: molecular
235 REAL(kind=dp), INTENT(OUT), OPTIONAL :: e_overlap_core
236 REAL(kind=dp), DIMENSION(:), OPTIONAL :: atecc
237
238 CHARACTER(len=*), PARAMETER :: routinen = 'calculate_ecore_overlap'
239
240 INTEGER :: atom_a, atom_b, handle, iatom, ikind, &
241 jatom, jkind, natom, nkind
242 INTEGER, ALLOCATABLE, DIMENSION(:) :: atom_of_kind
243 LOGICAL :: atenergy, only_molecule, use_virial
244 REAL(kind=dp) :: aab, dab, eab, ecore_overlap, f, fab, &
245 rab2, rootaab, zab
246 REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: alpha, radius, zeff
247 REAL(kind=dp), DIMENSION(3) :: deab, rab
248 REAL(kind=dp), DIMENSION(3, 3) :: pv_loc
249 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
250 TYPE(atprop_type), POINTER :: atprop
251 TYPE(cneo_potential_type), POINTER :: cneo_potential
252 TYPE(mp_comm_type) :: group
254 DIMENSION(:), POINTER :: nl_iterator
255 TYPE(neighbor_list_set_p_type), DIMENSION(:), &
256 POINTER :: sab_core
257 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
258 TYPE(qs_energy_type), POINTER :: energy
259 TYPE(qs_force_type), DIMENSION(:), POINTER :: force
260 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
261 TYPE(virial_type), POINTER :: virial
262
263 CALL timeset(routinen, handle)
264
265 NULLIFY (atomic_kind_set)
266 NULLIFY (qs_kind_set)
267 NULLIFY (energy)
268 NULLIFY (atprop)
269 NULLIFY (force)
270 NULLIFY (particle_set)
271
272 group = para_env
273
274 only_molecule = .false.
275 IF (PRESENT(molecular)) only_molecule = molecular
276
277 CALL get_qs_env(qs_env=qs_env, &
278 atomic_kind_set=atomic_kind_set, &
279 qs_kind_set=qs_kind_set, &
280 particle_set=particle_set, &
281 energy=energy, &
282 force=force, &
283 sab_core=sab_core, &
284 atprop=atprop, &
285 virial=virial)
286
287 ! Allocate work storage
288 nkind = SIZE(atomic_kind_set)
289 natom = SIZE(particle_set)
290
291 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
292
293 ALLOCATE (alpha(nkind), radius(nkind), zeff(nkind))
294 alpha(:) = 0.0_dp
295 radius(:) = 0.0_dp
296 zeff(:) = 0.0_dp
297
298 IF (calculate_forces) THEN
299 CALL get_atomic_kind_set(atomic_kind_set, atom_of_kind=atom_of_kind)
300 END IF
301
302 atenergy = .false.
303 IF (ASSOCIATED(atprop)) THEN
304 IF (atprop%energy) THEN
305 atenergy = .true.
306 CALL atprop_array_init(atprop%atecc, natom)
307 END IF
308 END IF
309
310 DO ikind = 1, nkind
311 ! cneo quantum nuclei have their core energies calculated elsewhere
312 NULLIFY (cneo_potential)
313 CALL get_qs_kind(qs_kind_set(ikind), cneo_potential=cneo_potential)
314 IF (ASSOCIATED(cneo_potential)) THEN
315 alpha(ikind) = 1.0_dp
316 radius(ikind) = 1.0_dp
317 zeff(ikind) = 0.0_dp
318 ELSE
319 CALL get_qs_kind(qs_kind_set(ikind), &
320 alpha_core_charge=alpha(ikind), &
321 core_charge_radius=radius(ikind), &
322 zeff=zeff(ikind))
323 END IF
324 END DO
325
326 ecore_overlap = 0.0_dp
327 pv_loc = 0.0_dp
328
329 CALL neighbor_list_iterator_create(nl_iterator, sab_core)
330 DO WHILE (neighbor_list_iterate(nl_iterator) == 0)
331 CALL get_iterator_info(nl_iterator, ikind=ikind, jkind=jkind, iatom=iatom, jatom=jatom, r=rab)
332 zab = zeff(ikind)*zeff(jkind)
333 aab = alpha(ikind)*alpha(jkind)/(alpha(ikind) + alpha(jkind))
334 rootaab = sqrt(aab)
335 fab = 2.0_dp*oorootpi*zab*rootaab
336 rab2 = rab(1)*rab(1) + rab(2)*rab(2) + rab(3)*rab(3)
337 IF (rab2 > 1.e-8_dp) THEN
338 IF (ikind == jkind .AND. iatom == jatom) THEN
339 f = 0.5_dp
340 ELSE
341 f = 1.0_dp
342 END IF
343 dab = sqrt(rab2)
344 eab = zab*erfc(rootaab*dab)/dab
345 ecore_overlap = ecore_overlap + f*eab
346 IF (atenergy) THEN
347 atprop%atecc(iatom) = atprop%atecc(iatom) + 0.5_dp*f*eab
348 atprop%atecc(jatom) = atprop%atecc(jatom) + 0.5_dp*f*eab
349 END IF
350 IF (PRESENT(atecc)) THEN
351 atecc(iatom) = atecc(iatom) + 0.5_dp*f*eab
352 atecc(jatom) = atecc(jatom) + 0.5_dp*f*eab
353 END IF
354 IF (calculate_forces) THEN
355 deab(:) = rab(:)*f*(eab + fab*exp(-aab*rab2))/rab2
356 atom_a = atom_of_kind(iatom)
357 atom_b = atom_of_kind(jatom)
358 force(ikind)%core_overlap(:, atom_a) = force(ikind)%core_overlap(:, atom_a) + deab(:)
359 force(jkind)%core_overlap(:, atom_b) = force(jkind)%core_overlap(:, atom_b) - deab(:)
360 IF (use_virial) THEN
361 CALL virial_pair_force(pv_loc, 1._dp, deab, rab)
362 END IF
363 END IF
364 END IF
365 END DO
366 CALL neighbor_list_iterator_release(nl_iterator)
367
368 DEALLOCATE (alpha, radius, zeff)
369 IF (calculate_forces) THEN
370 DEALLOCATE (atom_of_kind)
371 END IF
372 IF (calculate_forces .AND. use_virial) THEN
373 virial%pv_ecore_overlap = virial%pv_ecore_overlap + pv_loc
374 virial%pv_virial = virial%pv_virial + pv_loc
375 END IF
376
377 CALL group%sum(ecore_overlap)
378
379 energy%core_overlap = ecore_overlap
380
381 IF (PRESENT(e_overlap_core)) THEN
382 e_overlap_core = energy%core_overlap
383 END IF
384
385 CALL timestop(handle)
386
387 END SUBROUTINE calculate_ecore_overlap
388
389! **************************************************************************************************
390!> \brief Calculate the self energy of the core charge distribution.
391!> \param qs_env ...
392!> \param E_self_core ...
393!> \param atecc ...
394!> \date 27.04.2001
395!> \author MK
396!> \version 1.0
397! **************************************************************************************************
398 SUBROUTINE calculate_ecore_self(qs_env, E_self_core, atecc)
399 TYPE(qs_environment_type), POINTER :: qs_env
400 REAL(kind=dp), INTENT(OUT), OPTIONAL :: e_self_core
401 REAL(kind=dp), DIMENSION(:), OPTIONAL :: atecc
402
403 CHARACTER(len=*), PARAMETER :: routinen = 'calculate_ecore_self'
404
405 INTEGER :: handle, iatom, ikind, iparticle_local, &
406 natom, nparticle_local
407 REAL(kind=dp) :: alpha_core_charge, ecore_self, es, zeff
408 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
409 TYPE(atprop_type), POINTER :: atprop
410 TYPE(cneo_potential_type), POINTER :: cneo_potential
411 TYPE(distribution_1d_type), POINTER :: local_particles
412 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
413 TYPE(qs_energy_type), POINTER :: energy
414 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
415
416! -------------------------------------------------------------------------
417
418 NULLIFY (atprop)
419 CALL timeset(routinen, handle)
420
421 CALL get_qs_env(qs_env=qs_env, atomic_kind_set=atomic_kind_set, &
422 qs_kind_set=qs_kind_set, energy=energy, atprop=atprop)
423
424 ecore_self = 0.0_dp
425
426 DO ikind = 1, SIZE(atomic_kind_set)
427 ! nuclear density self-interaction is already removed in CNEO
428 NULLIFY (cneo_potential)
429 CALL get_qs_kind(qs_kind_set(ikind), cneo_potential=cneo_potential)
430 IF (ASSOCIATED(cneo_potential)) cycle
431 CALL get_atomic_kind(atomic_kind_set(ikind), natom=natom)
432 CALL get_qs_kind(qs_kind_set(ikind), zeff=zeff, alpha_core_charge=alpha_core_charge)
433 ecore_self = ecore_self - real(natom, dp)*zeff**2*sqrt(alpha_core_charge)
434 END DO
435
436 energy%core_self = ecore_self/sqrt(twopi)
437 IF (PRESENT(e_self_core)) THEN
438 e_self_core = energy%core_self
439 END IF
440
441 IF (ASSOCIATED(atprop)) THEN
442 IF (atprop%energy) THEN
443 ! atomic energy
444 CALL get_qs_env(qs_env=qs_env, particle_set=particle_set, &
445 local_particles=local_particles)
446 natom = SIZE(particle_set)
447 CALL atprop_array_init(atprop%ateself, natom)
448
449 DO ikind = 1, SIZE(atomic_kind_set)
450 ! nuclear density self-interaction is already removed in CNEO
451 NULLIFY (cneo_potential)
452 CALL get_qs_kind(qs_kind_set(ikind), cneo_potential=cneo_potential)
453 IF (ASSOCIATED(cneo_potential)) cycle
454 nparticle_local = local_particles%n_el(ikind)
455 CALL get_qs_kind(qs_kind_set(ikind), zeff=zeff, alpha_core_charge=alpha_core_charge)
456 es = zeff**2*sqrt(alpha_core_charge)/sqrt(twopi)
457 DO iparticle_local = 1, nparticle_local
458 iatom = local_particles%list(ikind)%array(iparticle_local)
459 atprop%ateself(iatom) = atprop%ateself(iatom) - es
460 END DO
461 END DO
462 END IF
463 END IF
464 IF (PRESENT(atecc)) THEN
465 ! atomic energy
466 CALL get_qs_env(qs_env=qs_env, particle_set=particle_set, &
467 local_particles=local_particles)
468 natom = SIZE(particle_set)
469 DO ikind = 1, SIZE(atomic_kind_set)
470 nparticle_local = local_particles%n_el(ikind)
471 CALL get_qs_kind(qs_kind_set(ikind), zeff=zeff, alpha_core_charge=alpha_core_charge)
472 es = zeff**2*sqrt(alpha_core_charge)/sqrt(twopi)
473 DO iparticle_local = 1, nparticle_local
474 iatom = local_particles%list(ikind)%array(iparticle_local)
475 atecc(iatom) = atecc(iatom) - es
476 END DO
477 END DO
478 END IF
479
480 CALL timestop(handle)
481
482 END SUBROUTINE calculate_ecore_self
483
484! **************************************************************************************************
485!> \brief Calculate the overlap and self energy of the core charge distribution for a given alpha
486!> Use a minimum image convention and double loop over all atoms
487!> \param qs_env ...
488!> \param alpha ...
489!> \param atecc ...
490!> \author JGH
491!> \version 1.0
492! **************************************************************************************************
493 SUBROUTINE calculate_ecore_alpha(qs_env, alpha, atecc)
494 TYPE(qs_environment_type), POINTER :: qs_env
495 REAL(kind=dp), INTENT(IN) :: alpha
496 REAL(kind=dp), DIMENSION(:) :: atecc
497
498 CHARACTER(len=*), PARAMETER :: routinen = 'calculate_ecore_alpha'
499
500 INTEGER :: handle, iatom, ikind, jatom, jkind, &
501 natom, nkind
502 INTEGER, ALLOCATABLE, DIMENSION(:) :: kind_of
503 REAL(kind=dp) :: dab, eab, fab, rootaab, zab
504 REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: zeff
505 REAL(kind=dp), DIMENSION(3) :: rab
506 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
507 TYPE(cell_type), POINTER :: cell
508 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
509 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
510
511 CALL timeset(routinen, handle)
512
513 CALL get_qs_env(qs_env=qs_env, &
514 cell=cell, &
515 atomic_kind_set=atomic_kind_set, &
516 qs_kind_set=qs_kind_set, &
517 particle_set=particle_set)
518 CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set, kind_of=kind_of)
519 !
520 nkind = SIZE(atomic_kind_set)
521 natom = SIZE(particle_set)
522 ALLOCATE (zeff(nkind))
523 zeff(:) = 0.0_dp
524 DO ikind = 1, nkind
525 CALL get_qs_kind(qs_kind_set(ikind), zeff=zeff(ikind))
526 END DO
527
528 rootaab = sqrt(0.5_dp*alpha)
529 DO iatom = 1, natom
530 ikind = kind_of(iatom)
531 atecc(iatom) = atecc(iatom) - zeff(ikind)**2*sqrt(alpha/twopi)
532 DO jatom = iatom + 1, natom
533 jkind = kind_of(jatom)
534 zab = zeff(ikind)*zeff(jkind)
535 fab = 2.0_dp*oorootpi*zab*rootaab
536 rab = particle_set(iatom)%r - particle_set(jatom)%r
537 rab = pbc(rab, cell)
538 dab = sqrt(sum(rab(:)**2))
539 eab = zab*erfc(rootaab*dab)/dab
540 atecc(iatom) = atecc(iatom) + 0.5_dp*eab
541 atecc(jatom) = atecc(jatom) + 0.5_dp*eab
542 END DO
543 END DO
544
545 DEALLOCATE (zeff)
546
547 CALL timestop(handle)
548
549 END SUBROUTINE calculate_ecore_alpha
550
551END MODULE qs_core_energies
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)
...
Handles all functions related to the CELL.
Definition cell_types.F:15
subroutine, public dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, nfullrows_total, nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, my_prow, my_pcol, local_rows, local_cols, proc_row_dist, proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, matrix_type, group)
...
subroutine, public dbcsr_dot(matrix_a, matrix_b, trace)
Computes the dot product of two matrices, also known as the trace of their matrix product.
subroutine, public dbcsr_dot_batch(matrix_a, matrix_b, trace, comm)
Evaluate several dot products in one OpenMP region; MPI reductions remain outside it.
stores a lists of integer that are local to a processor. The idea is that these integers represent ob...
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Definition of mathematical constants and functions.
real(kind=dp), parameter, public oorootpi
real(kind=dp), parameter, public twopi
Interface to the message passing library MPI.
Define the data structure for the particle information.
Types used by CNEO-DFT (see J. Chem. Theory Comput. 2025, 21, 16, 7865–7877).
Calculation of the energies concerning the core charge distribution.
subroutine, public calculate_ecore_overlap(qs_env, para_env, calculate_forces, molecular, e_overlap_core, atecc)
Calculate the overlap energy of the core charge distribution.
subroutine, public calculate_ecore_self(qs_env, e_self_core, atecc)
Calculate the self energy of the core charge distribution.
subroutine, public calculate_ecore_alpha(qs_env, alpha, atecc)
Calculate the overlap and self energy of the core charge distribution for a given alpha Use a minimum...
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.
Define the neighbor list data types and the corresponding functionality.
subroutine, public neighbor_list_iterator_create(iterator_set, nl, search, nthread)
Neighbor list iterator functions.
subroutine, public neighbor_list_iterator_release(iterator_set)
...
integer function, public neighbor_list_iterate(iterator_set, mepos)
...
subroutine, public get_iterator_info(iterator_set, mepos, ikind, jkind, nkind, ilist, nlist, inode, nnode, iatom, jatom, r, cell)
...
pure subroutine, public virial_pair_force(pv_virial, f0, force, rab)
Computes the contribution to the stress tensor from two-body pair-wise forces.
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
structure to store local (to a processor) ordered lists of integers.
stores all the informations relevant to an mpi environment
Provides all information about a quickstep kind.