(git:34ef472)
qs_core_hamiltonian.F
Go to the documentation of this file.
1 !--------------------------------------------------------------------------------------------------!
2 ! CP2K: A general program to perform molecular dynamics simulations !
3 ! Copyright 2000-2024 CP2K developers group <https://cp2k.org> !
4 ! !
5 ! SPDX-License-Identifier: GPL-2.0-or-later !
6 !--------------------------------------------------------------------------------------------------!
7 
8 ! **************************************************************************************************
9 !> \brief Calculation of the core Hamiltonian integral matrix <a|H|b> over
10 !> Cartesian Gaussian-type functions.
11 !>
12 !> <a|H|b> = <a|T|b> + <a|V|b>
13 !>
14 !> Kinetic energy:
15 !>
16 !> <a|T|b> = <a|-nabla**2/2|b>
17 !> \_______________/
18 !> |
19 !> kinetic
20 !>
21 !> Nuclear potential energy:
22 !>
23 !> a) Allelectron calculation:
24 !>
25 !> erfc(r)
26 !> <a|V|b> = -Z*<a|---------|b>
27 !> r
28 !>
29 !> 1 - erf(r)
30 !> = -Z*<a|------------|b>
31 !> r
32 !>
33 !> 1 erf(r)
34 !> = -Z*(<a|---|b> - <a|--------|b>)
35 !> r r
36 !>
37 !> 1
38 !> = -Z*(<a|---|b> - N*<ab||c>)
39 !> r
40 !>
41 !> -Z
42 !> = <a|---|b> + Z*N*<ab||c>
43 !> r
44 !> \_______/ \_____/
45 !> | |
46 !> nuclear coulomb
47 !>
48 !> b) Pseudopotential calculation (Goedecker, Teter and Hutter; GTH):
49 !>
50 !> <a|V|b> = <a|(V(local) + V(non-local))|b>
51 !>
52 !> = <a|(V(local)|b> + <a|V(non-local))|b>
53 !>
54 !> <a|V(local)|b> = <a|-Z(eff)*erf(SQRT(2)*alpha*r)/r +
55 !> (C1 + C2*(alpha*r)**2 + C3*(alpha*r)**4 +
56 !> C4*(alpha*r)**6)*exp(-(alpha*r)**2/2))|b>
57 !>
58 !> <a|V(non-local)|b> = <a|p(l,i)>*h(i,j)*<p(l,j)|b>
59 !> \par Literature
60 !> S. Goedecker, M. Teter and J. Hutter, Phys. Rev. B 54, 1703 (1996)
61 !> C. Hartwigsen, S. Goedecker and J. Hutter, Phys. Rev. B 58, 3641 (1998)
62 !> M. Krack and M. Parrinello, Phys. Chem. Chem. Phys. 2, 2105 (2000)
63 !> S. Obara and A. Saika, J. Chem. Phys. 84, 3963 (1986)
64 !> \par History
65 !> - Joost VandeVondele (April 2003) : added LSD forces
66 !> - Non-redundant calculation of the non-local part of the GTH PP
67 !> (22.05.2003,MK)
68 !> - New parallelization scheme (27.06.2003,MK)
69 !> - OpenMP version (07.12.2003,JGH)
70 !> - Binary search loop for VPPNL operators (09.01.2004,JGH,MK)
71 !> - Refactoring of pseudopotential and nuclear attraction integrals (25.02.2009,JGH)
72 !> - General refactoring (01.10.2010,JGH)
73 !> - Refactoring related to the new kinetic energy and overlap routines (07.2014,JGH)
74 !> - k-point functionality (07.2015,JGH)
75 !> \author Matthias Krack (14.09.2000,21.03.02)
76 ! **************************************************************************************************
78  USE atomic_kind_types, ONLY: atomic_kind_type,&
80  USE core_ae, ONLY: build_core_ae
81  USE core_ppl, ONLY: build_core_ppl
82  USE core_ppnl, ONLY: build_core_ppnl
83  USE cp_blacs_env, ONLY: cp_blacs_env_type
84  USE cp_control_types, ONLY: dft_control_type
91  cp_logger_type
92  USE cp_output_handling, ONLY: cp_p_file,&
96  USE dbcsr_api, ONLY: &
97  dbcsr_add, dbcsr_copy, dbcsr_create, dbcsr_distribution_type, dbcsr_iterator_blocks_left, &
98  dbcsr_iterator_next_block, dbcsr_iterator_start, dbcsr_iterator_stop, dbcsr_iterator_type, &
99  dbcsr_p_type, dbcsr_set, dbcsr_type, dbcsr_type_antisymmetric
103  rel_none,&
106  USE kg_environment_types, ONLY: kg_environment_type
107  USE kg_tnadd_mat, ONLY: build_tnadd_mat
108  USE kinds, ONLY: default_string_length,&
109  dp
110  USE kpoint_types, ONLY: get_kpoint_info,&
111  kpoint_type
112  USE lri_environment_types, ONLY: lri_environment_type
113  USE message_passing, ONLY: mp_para_env_type
114  USE particle_types, ONLY: particle_type
115  USE qs_condnum, ONLY: overlap_condnum
116  USE qs_environment_types, ONLY: get_qs_env,&
117  qs_environment_type,&
118  set_qs_env
119  USE qs_force_types, ONLY: qs_force_type
120  USE qs_kind_types, ONLY: get_qs_kind,&
121  qs_kind_type
123  USE qs_ks_types, ONLY: get_ks_env,&
124  qs_ks_env_type,&
125  set_ks_env
126  USE qs_neighbor_list_types, ONLY: neighbor_list_set_p_type
128  USE qs_oce_types, ONLY: allocate_oce_set,&
130  oce_matrix_type
132  USE qs_rho_types, ONLY: qs_rho_get,&
133  qs_rho_type
134  USE virial_types, ONLY: virial_type
135 #include "./base/base_uses.f90"
136 
137  IMPLICIT NONE
138 
139  PRIVATE
140 
141  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_core_hamiltonian'
142 
145 
146 CONTAINS
147 
148 ! **************************************************************************************************
149 !> \brief Cosntruction of the QS Core Hamiltonian Matrix
150 !> \param qs_env ...
151 !> \param calculate_forces ...
152 !> \author Creation (11.03.2002,MK)
153 !> Non-redundant calculation of the non-local part of the GTH PP (22.05.2003,MK)
154 !> New parallelization scheme (27.06.2003,MK)
155 ! **************************************************************************************************
156  SUBROUTINE build_core_hamiltonian_matrix(qs_env, calculate_forces)
157 
158  TYPE(qs_environment_type), POINTER :: qs_env
159  LOGICAL, INTENT(IN) :: calculate_forces
160 
161  CHARACTER(LEN=*), PARAMETER :: routinen = 'build_core_hamiltonian_matrix'
162 
163  INTEGER :: handle, ic, img, iw, nder, nders, &
164  nimages, nkind
165  INTEGER, DIMENSION(:, :, :), POINTER :: cell_to_index
166  LOGICAL :: h_is_complex, norml1, norml2, ofdft, &
167  use_arnoldi, use_virial
168  REAL(kind=dp) :: eps_filter, eps_fit
169  REAL(kind=dp), DIMENSION(2) :: condnum
170  TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
171  TYPE(cp_blacs_env_type), POINTER :: blacs_env
172  TYPE(cp_logger_type), POINTER :: logger
173  TYPE(dbcsr_distribution_type), POINTER :: dbcsr_dist
174  TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_h, matrix_p, matrix_s, matrix_t, &
175  matrix_w
176  TYPE(dft_control_type), POINTER :: dft_control
177  TYPE(kg_environment_type), POINTER :: kg_env
178  TYPE(kpoint_type), POINTER :: kpoints
179  TYPE(neighbor_list_set_p_type), DIMENSION(:), &
180  POINTER :: sab_orb, sap_oce
181  TYPE(oce_matrix_type), POINTER :: oce
182  TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
183  TYPE(qs_force_type), DIMENSION(:), POINTER :: force
184  TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
185  TYPE(qs_ks_env_type), POINTER :: ks_env
186  TYPE(qs_rho_type), POINTER :: rho
187  TYPE(virial_type), POINTER :: virial
188 
189  IF (calculate_forces) THEN
190  CALL timeset(routinen//"_forces", handle)
191  ELSE
192  CALL timeset(routinen, handle)
193  END IF
194 
195  NULLIFY (logger)
196  logger => cp_get_default_logger()
197 
198  NULLIFY (dft_control)
199  CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
200 
201  ! is this a orbital-free method calculation
202  ofdft = dft_control%qs_control%ofgpw
203 
204  nimages = dft_control%nimages
205  IF (ofdft) THEN
206  cpassert(nimages == 1)
207  END IF
208 
209  nders = 0
210  IF (calculate_forces) THEN
211  nder = 1
212  ELSE
213  IF (cp_print_key_should_output(logger%iter_info, qs_env%input, &
214  "DFT%PRINT%AO_MATRICES/DERIVATIVES") /= 0) THEN
215  nder = 1
216  ELSE
217  nder = 0
218  END IF
219  END IF
220 
221  IF ((cp_print_key_should_output(logger%iter_info, qs_env%input, &
222  "DFT%PRINT%AO_MATRICES/OVERLAP") /= 0 .AND. &
223  btest(cp_print_key_should_output(logger%iter_info, qs_env%input, &
224  "DFT%PRINT%AO_MATRICES/DERIVATIVES"), cp_p_file))) THEN
225  nders = 1
226  END IF
227 
228  ! the delta pulse in the periodic case needs the momentum operator,
229  ! which is equivalent to the derivative of the overlap matrix
230  IF (ASSOCIATED(dft_control%rtp_control)) THEN
231  IF (dft_control%rtp_control%apply_delta_pulse .AND. &
232  dft_control%rtp_control%periodic) THEN
233  nders = 1
234  END IF
235  END IF
236 
237  IF (dft_control%tddfpt2_control%enabled) THEN
238  nders = 1
239  IF (dft_control%do_admm) THEN
240  IF (dft_control%admm_control%purification_method /= do_admm_purify_none) &
241  CALL cp_abort(__location__, &
242  "Only purification method NONE is possible with TDDFT at the moment")
243  END IF
244  END IF
245 
246  ! filter for new matrices
247  eps_filter = dft_control%qs_control%eps_filter_matrix
248  !
249  NULLIFY (ks_env)
250  CALL get_qs_env(qs_env=qs_env, ks_env=ks_env)
251  NULLIFY (matrix_s, matrix_t)
252  CALL get_qs_env(qs_env=qs_env, kinetic_kp=matrix_t, matrix_s_kp=matrix_s)
253  NULLIFY (sab_orb)
254  CALL get_qs_env(qs_env=qs_env, sab_orb=sab_orb)
255  NULLIFY (rho, force, matrix_p, matrix_w)
256  IF (calculate_forces) THEN
257  CALL get_qs_env(qs_env=qs_env, force=force, matrix_w_kp=matrix_w)
258  CALL get_qs_env(qs_env=qs_env, rho=rho)
259  CALL qs_rho_get(rho, rho_ao_kp=matrix_p)
260  ! *** If LSD, then combine alpha density and beta density to
261  ! *** total density: alpha <- alpha + beta and
262  ! *** spin density: beta <- alpha - beta
263  ! (since all things can be computed based on the sum of these matrices anyway)
264  ! (matrix_p is restored at the end of the run, matrix_w is left in its modified state
265  ! (as it should not be needed afterwards)
266  IF (SIZE(matrix_p, 1) == 2) THEN
267  DO img = 1, nimages
268  CALL dbcsr_add(matrix_p(1, img)%matrix, matrix_p(2, img)%matrix, &
269  alpha_scalar=1.0_dp, beta_scalar=1.0_dp)
270  CALL dbcsr_add(matrix_p(2, img)%matrix, matrix_p(1, img)%matrix, &
271  alpha_scalar=-2.0_dp, beta_scalar=1.0_dp)
272  CALL dbcsr_add(matrix_w(1, img)%matrix, matrix_w(2, img)%matrix, &
273  alpha_scalar=1.0_dp, beta_scalar=1.0_dp)
274  END DO
275  END IF
276  ! S matrix
277  CALL build_overlap_matrix(ks_env, nderivative=nders, matrixkp_s=matrix_s, &
278  matrix_name="OVERLAP MATRIX", &
279  basis_type_a="ORB", &
280  basis_type_b="ORB", &
281  sab_nl=sab_orb, calculate_forces=.true., &
282  matrixkp_p=matrix_w)
283  ! T matrix
284  IF (.NOT. ofdft) &
285  CALL build_kinetic_matrix(ks_env, matrixkp_t=matrix_t, &
286  matrix_name="KINETIC ENERGY MATRIX", &
287  basis_type="ORB", &
288  sab_nl=sab_orb, calculate_forces=.true., &
289  matrixkp_p=matrix_p, &
290  eps_filter=eps_filter)
291  ! *** If LSD, then recover alpha density and beta density ***
292  ! *** from the total density (1) and the spin density (2) ***
293  ! *** The W matrix is neglected, since it will be destroyed ***
294  ! *** in the calling force routine after leaving this routine ***
295  IF (SIZE(matrix_p, 1) == 2) THEN
296  DO img = 1, nimages
297  CALL dbcsr_add(matrix_p(1, img)%matrix, matrix_p(2, img)%matrix, &
298  alpha_scalar=0.5_dp, beta_scalar=0.5_dp)
299  CALL dbcsr_add(matrix_p(2, img)%matrix, matrix_p(1, img)%matrix, &
300  alpha_scalar=-1.0_dp, beta_scalar=1.0_dp)
301  END DO
302  END IF
303  ELSE
304  ! S matrix
305  CALL build_overlap_matrix(ks_env, nderivative=nders, matrixkp_s=matrix_s, &
306  matrix_name="OVERLAP MATRIX", &
307  basis_type_a="ORB", &
308  basis_type_b="ORB", &
309  sab_nl=sab_orb)
310  ! T matrix
311  IF (.NOT. ofdft) &
312  CALL build_kinetic_matrix(ks_env, matrixkp_t=matrix_t, &
313  matrix_name="KINETIC ENERGY MATRIX", &
314  basis_type="ORB", &
315  sab_nl=sab_orb, &
316  eps_filter=eps_filter)
317  END IF
318 
319  ! (Re-)allocate H matrix based on overlap matrix
320  CALL get_ks_env(ks_env, complex_ks=h_is_complex)
321  CALL qs_matrix_h_allocate(qs_env, matrix_s(1, 1)%matrix, is_complex=h_is_complex)
322 
323  NULLIFY (matrix_h)
324  CALL get_qs_env(qs_env, matrix_h_kp=matrix_h)
325 
326  IF (.NOT. ofdft) THEN
327  DO img = 1, nimages
328  CALL dbcsr_copy(matrix_h(1, img)%matrix, matrix_t(1, img)%matrix, &
329  keep_sparsity=.true., name="CORE HAMILTONIAN MATRIX")
330  END DO
331  END IF
332 
333  NULLIFY (qs_kind_set, atomic_kind_set, particle_set)
334  CALL get_qs_env(qs_env=qs_env, qs_kind_set=qs_kind_set, atomic_kind_set=atomic_kind_set, &
335  particle_set=particle_set)
336 
337  IF (.NOT. ofdft) THEN
338  ! relativistic atomic correction to kinetic energy
339  IF (qs_env%rel_control%rel_method /= rel_none) THEN
340  IF (qs_env%rel_control%rel_transformation == rel_trans_atom) THEN
341  IF (nimages == 1) THEN
342  ic = 1
343  ELSE
344  CALL get_ks_env(ks_env=ks_env, kpoints=kpoints)
345  CALL get_kpoint_info(kpoint=kpoints, cell_to_index=cell_to_index)
346  ic = cell_to_index(0, 0, 0)
347  END IF
348  CALL build_atomic_relmat(matrix_h(1, 1)%matrix, atomic_kind_set, qs_kind_set)
349  ELSE
350  cpabort("Relativistic corrections of this type are currently not implemented")
351  END IF
352  END IF
353  END IF
354 
355  ! *** core and pseudopotentials
356  CALL core_matrices(qs_env, matrix_h, matrix_p, calculate_forces, nder)
357 
358  ! *** GAPW one-center-expansion (oce) matrices
359  NULLIFY (sap_oce)
360  CALL get_qs_env(qs_env=qs_env, sap_oce=sap_oce)
361  NULLIFY (oce)
362  IF (dft_control%qs_control%gapw .OR. dft_control%qs_control%gapw_xc) THEN
363  CALL get_qs_env(qs_env=qs_env, oce=oce)
364  CALL create_oce_set(oce)
365  nkind = SIZE(atomic_kind_set)
366  CALL allocate_oce_set(oce, nkind)
367  eps_fit = dft_control%qs_control%gapw_control%eps_fit
368  IF (ASSOCIATED(sap_oce)) &
369  CALL build_oce_matrices(oce%intac, calculate_forces, nder, qs_kind_set, particle_set, &
370  sap_oce, eps_fit)
371  END IF
372 
373  ! *** KG atomic potentials for nonadditive kinetic energy
374  IF (dft_control%qs_control%do_kg) THEN
375  IF (qs_env%kg_env%tnadd_method == kg_tnadd_atomic) THEN
376  CALL get_qs_env(qs_env=qs_env, kg_env=kg_env, virial=virial, dbcsr_dist=dbcsr_dist)
377  use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
378  CALL build_tnadd_mat(kg_env, matrix_p, force, virial, calculate_forces, use_virial, &
379  qs_kind_set, atomic_kind_set, particle_set, sab_orb, dbcsr_dist)
380  END IF
381  END IF
382 
383  ! *** Put the core Hamiltonian matrix in the QS environment ***
384  CALL set_qs_env(qs_env, oce=oce)
385  CALL set_ks_env(ks_env, matrix_s_kp=matrix_s, kinetic_kp=matrix_t, matrix_h_kp=matrix_h)
386 
387  ! *** Print matrices if requested
388  CALL dump_info_core_hamiltonian(qs_env, calculate_forces)
389 
390  ! *** Overlap condition number
391  IF (.NOT. calculate_forces) THEN
392  IF (cp_print_key_should_output(logger%iter_info, qs_env%input, &
393  "DFT%PRINT%OVERLAP_CONDITION") .NE. 0) THEN
394  iw = cp_print_key_unit_nr(logger, qs_env%input, "DFT%PRINT%OVERLAP_CONDITION", &
395  extension=".Log")
396  CALL section_vals_val_get(qs_env%input, "DFT%PRINT%OVERLAP_CONDITION%1-NORM", l_val=norml1)
397  CALL section_vals_val_get(qs_env%input, "DFT%PRINT%OVERLAP_CONDITION%DIAGONALIZATION", l_val=norml2)
398  CALL section_vals_val_get(qs_env%input, "DFT%PRINT%OVERLAP_CONDITION%ARNOLDI", l_val=use_arnoldi)
399  CALL get_qs_env(qs_env=qs_env, blacs_env=blacs_env)
400  CALL overlap_condnum(matrix_s, condnum, iw, norml1, norml2, use_arnoldi, blacs_env)
401  END IF
402  END IF
403 
404  CALL timestop(handle)
405 
406  END SUBROUTINE build_core_hamiltonian_matrix
407 
408 ! **************************************************************************************************
409 !> \brief ...
410 !> \param qs_env ...
411 !> \param matrix_h ...
412 !> \param matrix_p ...
413 !> \param calculate_forces ...
414 !> \param nder ...
415 ! **************************************************************************************************
416  SUBROUTINE core_matrices(qs_env, matrix_h, matrix_p, calculate_forces, nder)
417 
418  TYPE(qs_environment_type), POINTER :: qs_env
419  TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_h, matrix_p
420  LOGICAL, INTENT(IN) :: calculate_forces
421  INTEGER, INTENT(IN) :: nder
422 
423  INTEGER :: nimages
424  INTEGER, DIMENSION(:, :, :), POINTER :: cell_to_index
425  LOGICAL :: all_present, my_gt_nl, ppl_present, &
426  ppnl_present, use_virial
427  REAL(kind=dp) :: eps_ppnl
428  TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
429  TYPE(dft_control_type), POINTER :: dft_control
430  TYPE(kpoint_type), POINTER :: kpoints
431  TYPE(lri_environment_type), POINTER :: lri_env
432  TYPE(neighbor_list_set_p_type), DIMENSION(:), &
433  POINTER :: sab_orb, sac_ae, sac_ppl, sap_ppnl
434  TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
435  TYPE(qs_force_type), DIMENSION(:), POINTER :: force
436  TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
437  TYPE(qs_ks_env_type), POINTER :: ks_env
438  TYPE(virial_type), POINTER :: virial
439 
440  NULLIFY (dft_control)
441  CALL get_qs_env(qs_env=qs_env, ks_env=ks_env, dft_control=dft_control)
442  nimages = dft_control%nimages
443 
444  ! check whether a gauge transformed version of the non-local potential part has to be used
445  my_gt_nl = .false.
446  IF (qs_env%run_rtp) THEN
447  cpassert(ASSOCIATED(dft_control%rtp_control))
448  IF (dft_control%rtp_control%velocity_gauge) THEN
449  my_gt_nl = dft_control%rtp_control%nl_gauge_transform
450  END IF
451  END IF
452 
453  ! prepare for k-points
454  NULLIFY (cell_to_index)
455  IF (nimages > 1) THEN
456  CALL get_ks_env(ks_env=ks_env, kpoints=kpoints)
457  CALL get_kpoint_info(kpoint=kpoints, cell_to_index=cell_to_index)
458  dft_control%qs_control%do_ppl_method = do_ppl_analytic
459  END IF
460  ! force analytic ppl calculation for GAPW methods
461  IF (dft_control%qs_control%gapw .OR. dft_control%qs_control%gapw_xc) THEN
462  dft_control%qs_control%do_ppl_method = do_ppl_analytic
463  END IF
464 
465  ! force
466  NULLIFY (force)
467  IF (calculate_forces) CALL get_qs_env(qs_env=qs_env, force=force)
468  ! virial
469  CALL get_qs_env(qs_env=qs_env, virial=virial)
470  use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
471 
472  NULLIFY (qs_kind_set, atomic_kind_set, particle_set)
473  CALL get_qs_env(qs_env=qs_env, qs_kind_set=qs_kind_set, atomic_kind_set=atomic_kind_set, &
474  particle_set=particle_set)
475 
476  NULLIFY (sab_orb, sac_ae, sac_ppl, sap_ppnl)
477  CALL get_qs_env(qs_env=qs_env, &
478  sab_orb=sab_orb, &
479  sac_ae=sac_ae, &
480  sac_ppl=sac_ppl, &
481  sap_ppnl=sap_ppnl)
482 
483  ! *** compute the nuclear attraction contribution to the core hamiltonian ***
484  all_present = ASSOCIATED(sac_ae)
485  IF (all_present) THEN
486  CALL build_core_ae(matrix_h, matrix_p, force, virial, calculate_forces, use_virial, nder, &
487  qs_kind_set, atomic_kind_set, particle_set, sab_orb, sac_ae, nimages, cell_to_index)
488  END IF
489 
490  ! *** compute the ppl contribution to the core hamiltonian ***
491  ppl_present = ASSOCIATED(sac_ppl)
492  IF (ppl_present) THEN
493  IF (dft_control%qs_control%do_ppl_method == do_ppl_analytic) THEN
494  IF (dft_control%qs_control%lrigpw) THEN
495  CALL get_qs_env(qs_env, lri_env=lri_env)
496  IF (lri_env%ppl_ri) THEN
497  IF (lri_env%exact_1c_terms) THEN
498  cpabort("not implemented")
499  END IF
500  ELSE
501  CALL build_core_ppl(matrix_h, matrix_p, force, virial, calculate_forces, use_virial, nder, &
502  qs_kind_set, atomic_kind_set, particle_set, sab_orb, sac_ppl, &
503  nimages, cell_to_index, "ORB")
504  END IF
505  ELSE
506  CALL build_core_ppl(matrix_h, matrix_p, force, virial, calculate_forces, use_virial, nder, &
507  qs_kind_set, atomic_kind_set, particle_set, sab_orb, sac_ppl, &
508  nimages, cell_to_index, "ORB")
509  END IF
510  END IF
511  END IF
512 
513  ! *** compute the ppnl contribution to the core hamiltonian ***
514  eps_ppnl = dft_control%qs_control%eps_ppnl
515  ppnl_present = ASSOCIATED(sap_ppnl)
516  IF (ppnl_present) THEN
517  IF (.NOT. my_gt_nl) THEN
518  CALL build_core_ppnl(matrix_h, matrix_p, force, virial, calculate_forces, use_virial, nder, &
519  qs_kind_set, atomic_kind_set, particle_set, sab_orb, sap_ppnl, eps_ppnl, &
520  nimages, cell_to_index, "ORB")
521  END IF
522  END IF
523 
524  END SUBROUTINE core_matrices
525 
526 ! **************************************************************************************************
527 !> \brief Adds atomic blocks of relativistic correction for the kinetic energy
528 !> \param matrix_h ...
529 !> \param atomic_kind_set ...
530 !> \param qs_kind_set ...
531 ! **************************************************************************************************
532  SUBROUTINE build_atomic_relmat(matrix_h, atomic_kind_set, qs_kind_set)
533  TYPE(dbcsr_type), POINTER :: matrix_h
534  TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
535  TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
536 
537  INTEGER :: blk, iatom, ikind, jatom
538  INTEGER, ALLOCATABLE, DIMENSION(:) :: kind_of
539  REAL(kind=dp), DIMENSION(:, :), POINTER :: hblock, reltmat
540  TYPE(dbcsr_iterator_type) :: iter
541 
542  CALL get_atomic_kind_set(atomic_kind_set, kind_of=kind_of)
543 
544  CALL dbcsr_iterator_start(iter, matrix_h)
545  DO WHILE (dbcsr_iterator_blocks_left(iter))
546  CALL dbcsr_iterator_next_block(iter, iatom, jatom, hblock, blk)
547  IF (iatom == jatom) THEN
548  ikind = kind_of(iatom)
549  CALL get_qs_kind(qs_kind_set(ikind), reltmat=reltmat)
550  IF (ASSOCIATED(reltmat)) hblock = hblock + reltmat
551  END IF
552  END DO
553  CALL dbcsr_iterator_stop(iter)
554 
555  END SUBROUTINE build_atomic_relmat
556 
557 ! **************************************************************************************************
558 !> \brief Possibly prints matrices after the construction of the Core
559 !> Hamiltonian Matrix
560 !> \param qs_env ...
561 !> \param calculate_forces ...
562 ! **************************************************************************************************
563  SUBROUTINE dump_info_core_hamiltonian(qs_env, calculate_forces)
564  TYPE(qs_environment_type), POINTER :: qs_env
565  LOGICAL, INTENT(IN) :: calculate_forces
566 
567  CHARACTER(LEN=*), PARAMETER :: routinen = 'dump_info_core_hamiltonian'
568 
569  INTEGER :: after, handle, i, ic, iw, output_unit
570  LOGICAL :: omit_headers
571  TYPE(cp_logger_type), POINTER :: logger
572  TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_v
573  TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrixkp_h, matrixkp_s, matrixkp_t
574  TYPE(mp_para_env_type), POINTER :: para_env
575 
576  CALL timeset(routinen, handle)
577 
578  NULLIFY (logger, matrix_v, para_env)
579  logger => cp_get_default_logger()
580  CALL get_qs_env(qs_env, para_env=para_env)
581 
582  ! Print the distribution of the overlap matrix blocks
583  ! this duplicates causes duplicate printing at the force calc
584  IF (.NOT. calculate_forces) THEN
585  IF (btest(cp_print_key_should_output(logger%iter_info, &
586  qs_env%input, "PRINT%DISTRIBUTION"), cp_p_file)) THEN
587  output_unit = cp_print_key_unit_nr(logger, qs_env%input, "PRINT%DISTRIBUTION", &
588  extension=".distribution")
589  CALL get_qs_env(qs_env, matrix_s_kp=matrixkp_s)
590  CALL cp_dbcsr_write_matrix_dist(matrixkp_s(1, 1)%matrix, output_unit, para_env)
591  CALL cp_print_key_finished_output(output_unit, logger, qs_env%input, "PRINT%DISTRIBUTION")
592  END IF
593  END IF
594 
595  CALL section_vals_val_get(qs_env%input, "DFT%PRINT%AO_MATRICES%OMIT_HEADERS", l_val=omit_headers)
596  ! Print the overlap integral matrix, if requested
597  IF (btest(cp_print_key_should_output(logger%iter_info, &
598  qs_env%input, "DFT%PRINT%AO_MATRICES/OVERLAP"), cp_p_file)) THEN
599  iw = cp_print_key_unit_nr(logger, qs_env%input, "DFT%PRINT%AO_MATRICES/OVERLAP", &
600  extension=".Log")
601  CALL section_vals_val_get(qs_env%input, "DFT%PRINT%AO_MATRICES%NDIGITS", i_val=after)
602  after = min(max(after, 1), 16)
603  CALL get_qs_env(qs_env, matrix_s_kp=matrixkp_s)
604  IF (ASSOCIATED(matrixkp_s)) THEN
605  DO ic = 1, SIZE(matrixkp_s, 2)
606  CALL cp_dbcsr_write_sparse_matrix(matrixkp_s(1, ic)%matrix, 4, after, qs_env, para_env, &
607  output_unit=iw, omit_headers=omit_headers)
608  END DO
609  IF (btest(cp_print_key_should_output(logger%iter_info, qs_env%input, &
610  "DFT%PRINT%AO_MATRICES/DERIVATIVES"), cp_p_file)) THEN
611  DO ic = 1, SIZE(matrixkp_s, 2)
612  DO i = 2, SIZE(matrixkp_s, 1)
613  CALL cp_dbcsr_write_sparse_matrix(matrixkp_s(i, ic)%matrix, 4, after, qs_env, para_env, &
614  output_unit=iw, omit_headers=omit_headers)
615  END DO
616  END DO
617  END IF
618  END IF
619  CALL cp_print_key_finished_output(iw, logger, qs_env%input, &
620  "DFT%PRINT%AO_MATRICES/OVERLAP")
621  END IF
622 
623  ! Print the kinetic energy integral matrix, if requested
624  IF (btest(cp_print_key_should_output(logger%iter_info, &
625  qs_env%input, "DFT%PRINT%AO_MATRICES/KINETIC_ENERGY"), cp_p_file)) THEN
626  iw = cp_print_key_unit_nr(logger, qs_env%input, "DFT%PRINT%AO_MATRICES/KINETIC_ENERGY", &
627  extension=".Log")
628  CALL section_vals_val_get(qs_env%input, "DFT%PRINT%AO_MATRICES%NDIGITS", i_val=after)
629  after = min(max(after, 1), 16)
630  CALL get_qs_env(qs_env, kinetic_kp=matrixkp_t)
631  IF (ASSOCIATED(matrixkp_t)) THEN
632  DO ic = 1, SIZE(matrixkp_t, 2)
633  CALL cp_dbcsr_write_sparse_matrix(matrixkp_t(1, ic)%matrix, 4, after, qs_env, para_env, &
634  output_unit=iw, omit_headers=omit_headers)
635  END DO
636  END IF
637  CALL cp_print_key_finished_output(iw, logger, qs_env%input, &
638  "DFT%PRINT%AO_MATRICES/KINETIC_ENERGY")
639  END IF
640 
641  ! Print the potential energy matrix, if requested
642  IF (btest(cp_print_key_should_output(logger%iter_info, &
643  qs_env%input, "DFT%PRINT%AO_MATRICES/POTENTIAL_ENERGY"), cp_p_file)) THEN
644  iw = cp_print_key_unit_nr(logger, qs_env%input, "DFT%PRINT%AO_MATRICES/POTENTIAL_ENERGY", &
645  extension=".Log")
646  CALL section_vals_val_get(qs_env%input, "DFT%PRINT%AO_MATRICES%NDIGITS", i_val=after)
647  after = min(max(after, 1), 16)
648  CALL get_qs_env(qs_env, matrix_h_kp=matrixkp_h, kinetic_kp=matrixkp_t)
649  IF (ASSOCIATED(matrixkp_h)) THEN
650  IF (SIZE(matrixkp_h, 2) == 1) THEN
651  CALL dbcsr_allocate_matrix_set(matrix_v, 1)
652  ALLOCATE (matrix_v(1)%matrix)
653  CALL dbcsr_copy(matrix_v(1)%matrix, matrixkp_h(1, 1)%matrix, name="POTENTIAL ENERGY MATRIX")
654  CALL dbcsr_add(matrix_v(1)%matrix, matrixkp_t(1, 1)%matrix, &
655  alpha_scalar=1.0_dp, beta_scalar=-1.0_dp)
656  CALL cp_dbcsr_write_sparse_matrix(matrix_v(1)%matrix, 4, after, qs_env, &
657  para_env, output_unit=iw, omit_headers=omit_headers)
658  CALL dbcsr_deallocate_matrix_set(matrix_v)
659  ELSE
660  cpwarn("Printing of potential energy matrix not implemented for k-points")
661  END IF
662  END IF
663  CALL cp_print_key_finished_output(iw, logger, qs_env%input, &
664  "DFT%PRINT%AO_MATRICES/POTENTIAL_ENERGY")
665  END IF
666 
667  ! Print the core Hamiltonian matrix, if requested
668  IF (btest(cp_print_key_should_output(logger%iter_info, &
669  qs_env%input, "DFT%PRINT%AO_MATRICES/CORE_HAMILTONIAN"), cp_p_file)) THEN
670  iw = cp_print_key_unit_nr(logger, qs_env%input, "DFT%PRINT%AO_MATRICES/CORE_HAMILTONIAN", &
671  extension=".Log")
672  CALL section_vals_val_get(qs_env%input, "DFT%PRINT%AO_MATRICES%NDIGITS", i_val=after)
673  after = min(max(after, 1), 16)
674  CALL get_qs_env(qs_env, matrix_h_kp=matrixkp_h)
675  IF (ASSOCIATED(matrixkp_h)) THEN
676  DO ic = 1, SIZE(matrixkp_h, 2)
677  CALL cp_dbcsr_write_sparse_matrix(matrixkp_h(1, ic)%matrix, 4, after, qs_env, para_env, &
678  output_unit=iw, omit_headers=omit_headers)
679  END DO
680  END IF
681  CALL cp_print_key_finished_output(iw, logger, qs_env%input, &
682  "DFT%PRINT%AO_MATRICES/CORE_HAMILTONIAN")
683  END IF
684 
685  CALL timestop(handle)
686 
687  END SUBROUTINE dump_info_core_hamiltonian
688 
689 ! **************************************************************************************************
690 !> \brief (Re-)allocate matrix_h based on the template (typically the overlap matrix)
691 !> \param qs_env ...
692 !> \param template ...
693 !> \param is_complex ...
694 ! **************************************************************************************************
695  SUBROUTINE qs_matrix_h_allocate(qs_env, template, is_complex)
696  TYPE(qs_environment_type) :: qs_env
697  TYPE(dbcsr_type), INTENT(in) :: template
698  LOGICAL, INTENT(in) :: is_complex
699 
700  CHARACTER(LEN=default_string_length) :: headline
701  INTEGER :: img, nimages
702  TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_h, matrix_h_im
703  TYPE(dft_control_type), POINTER :: dft_control
704  TYPE(neighbor_list_set_p_type), DIMENSION(:), &
705  POINTER :: sab_orb
706  TYPE(qs_ks_env_type), POINTER :: ks_env
707 
708  NULLIFY (matrix_h, matrix_h_im, sab_orb, dft_control, ks_env)
709  CALL get_qs_env(qs_env=qs_env, &
710  matrix_h_kp=matrix_h, &
711  matrix_h_im_kp=matrix_h_im, &
712  sab_orb=sab_orb, &
713  dft_control=dft_control, &
714  ks_env=ks_env)
715 
716  nimages = dft_control%nimages
717  CALL dbcsr_allocate_matrix_set(matrix_h, 1, nimages)
718  headline = "CORE HAMILTONIAN MATRIX"
719  DO img = 1, nimages
720  ALLOCATE (matrix_h(1, img)%matrix)
721  CALL dbcsr_create(matrix_h(1, img)%matrix, name=trim(headline), template=template)
722  CALL cp_dbcsr_alloc_block_from_nbl(matrix_h(1, img)%matrix, sab_orb)
723  CALL dbcsr_set(matrix_h(1, img)%matrix, 0.0_dp)
724  END DO
725  CALL set_ks_env(ks_env, matrix_h_kp=matrix_h)
726 
727  IF (is_complex) THEN
728  headline = "IMAGINARY PART OF CORE HAMILTONIAN MATRIX"
729  CALL dbcsr_allocate_matrix_set(matrix_h_im, 1, nimages)
730  DO img = 1, nimages
731  ALLOCATE (matrix_h_im(1, img)%matrix)
732  CALL dbcsr_create(matrix_h_im(1, img)%matrix, name=trim(headline), template=template, &
733  matrix_type=dbcsr_type_antisymmetric)
734  CALL cp_dbcsr_alloc_block_from_nbl(matrix_h_im(1, img)%matrix, sab_orb)
735  CALL dbcsr_set(matrix_h_im(1, img)%matrix, 0.0_dp)
736  END DO
737  CALL set_ks_env(ks_env, matrix_h_im_kp=matrix_h_im)
738  END IF
739 
740  END SUBROUTINE qs_matrix_h_allocate
741 
742 ! **************************************************************************************************
743 !> \brief (Re-)allocates matrix_h_im from matrix_h
744 !> \param qs_env ...
745 ! **************************************************************************************************
747  TYPE(qs_environment_type) :: qs_env
748 
749  CHARACTER(LEN=default_string_length) :: headline
750  INTEGER :: image, nimages
751  TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_h, matrix_h_im
752  TYPE(dbcsr_type), POINTER :: template
753  TYPE(dft_control_type), POINTER :: dft_control
754  TYPE(neighbor_list_set_p_type), DIMENSION(:), &
755  POINTER :: sab_orb
756  TYPE(qs_ks_env_type), POINTER :: ks_env
757 
758  NULLIFY (matrix_h_im, matrix_h, dft_control, template, sab_orb, ks_env)
759 
760  CALL get_qs_env(qs_env, &
761  matrix_h_im_kp=matrix_h_im, &
762  matrix_h_kp=matrix_h, &
763  dft_control=dft_control, &
764  sab_orb=sab_orb, &
765  ks_env=ks_env)
766 
767  nimages = dft_control%nimages
768 
769  cpassert(nimages .EQ. SIZE(matrix_h, 2))
770 
771  CALL dbcsr_allocate_matrix_set(matrix_h_im, 1, nimages)
772 
773  DO image = 1, nimages
774  headline = "IMAGINARY CORE HAMILTONIAN MATRIX"
775  ALLOCATE (matrix_h_im(1, image)%matrix)
776  template => matrix_h(1, image)%matrix ! base on real part, but anti-symmetric
777  CALL dbcsr_create(matrix=matrix_h_im(1, image)%matrix, template=template, &
778  name=trim(headline), matrix_type=dbcsr_type_antisymmetric, nze=0)
779  CALL cp_dbcsr_alloc_block_from_nbl(matrix_h_im(1, image)%matrix, sab_orb)
780  CALL dbcsr_set(matrix_h_im(1, image)%matrix, 0.0_dp)
781  END DO
782  CALL set_ks_env(ks_env, matrix_h_im_kp=matrix_h_im)
783 
785 
786 END MODULE qs_core_hamiltonian
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.
Calculation of the nuclear attraction contribution to the core Hamiltonian <a|erfc|b> :we only calcul...
Definition: core_ae.F:14
subroutine, public build_core_ae(matrix_h, matrix_p, force, virial, calculate_forces, use_virial, nder, qs_kind_set, atomic_kind_set, particle_set, sab_orb, sac_ae, nimages, cell_to_index)
...
Definition: core_ae.F:84
Calculation of the local pseudopotential contribution to the core Hamiltonian <a|V(local)|b> = <a|Sum...
Definition: core_ppl.F:18
subroutine, public build_core_ppl(matrix_h, matrix_p, force, virial, calculate_forces, use_virial, nder, qs_kind_set, atomic_kind_set, particle_set, sab_orb, sac_ppl, nimages, cell_to_index, basis_type, deltaR)
...
Definition: core_ppl.F:95
Calculation of the non-local pseudopotential contribution to the core Hamiltonian <a|V(non-local)|b> ...
Definition: core_ppnl.F:15
subroutine, public build_core_ppnl(matrix_h, matrix_p, force, virial, calculate_forces, use_virial, nder, qs_kind_set, atomic_kind_set, particle_set, sab_orb, sap_ppnl, eps_ppnl, nimages, cell_to_index, basis_type, deltaR, matrix_l)
...
Definition: core_ppnl.F:89
methods related to the blacs parallel environment
Definition: cp_blacs_env.F:15
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
DBCSR operations in CP2K.
DBCSR output in CP2K.
subroutine, public cp_dbcsr_write_matrix_dist(matrix, output_unit, para_env)
Print the distribution of a sparse matrix.
subroutine, public cp_dbcsr_write_sparse_matrix(sparse_matrix, before, after, qs_env, para_env, first_row, last_row, first_col, last_col, scale, output_unit, omit_headers)
...
various routines to log and control the output. The idea is that decisions about where to log should ...
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,...
integer, parameter, public cp_p_file
integer function, public cp_print_key_should_output(iteration_info, basis_section, print_key_path, used_print_key, first_time)
returns what should be done with the given property if btest(res,cp_p_store) then the property should...
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public do_admm_purify_none
integer, parameter, public kg_tnadd_atomic
integer, parameter, public rel_trans_atom
integer, parameter, public rel_none
integer, parameter, public do_ppl_analytic
objects that represent the structure of input sections and the data contained in an input section
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
Types needed for a Kim-Gordon-like partitioning into molecular subunits.
Calculation of the local potential contribution of the nonadditive kinetic energy <a|V(local)|b> = <a...
Definition: kg_tnadd_mat.F:13
subroutine, public build_tnadd_mat(kg_env, matrix_p, force, virial, calculate_forces, use_virial, qs_kind_set, atomic_kind_set, particle_set, sab_orb, dbcsr_dist)
...
Definition: kg_tnadd_mat.F:85
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
Types and basic routines needed for a kpoint calculation.
Definition: kpoint_types.F:15
subroutine, public get_kpoint_info(kpoint, kp_scheme, nkp_grid, kp_shift, symmetry, verbose, full_grid, use_real_wfn, eps_geo, parallel_group_size, kp_range, nkp, xkp, wkp, para_env, blacs_env_all, para_env_kp, para_env_inter_kp, blacs_env, kp_env, kp_aux_env, mpools, iogrp, nkp_groups, kp_dist, cell_to_index, index_to_cell, sab_nl, sab_nl_nosym)
Retrieve information from a kpoint environment.
Definition: kpoint_types.F:333
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...
Interface to the message passing library MPI.
Define the data structure for the particle information.
Calculation of overlap matrix condition numbers.
Definition: qs_condnum.F:13
subroutine, public overlap_condnum(matrixkp_s, condnum, iunit, norml1, norml2, use_arnoldi, blacs_env)
Calculation of the overlap matrix Condition Number.
Definition: qs_condnum.F:64
Calculation of the core Hamiltonian integral matrix <a|H|b> over Cartesian Gaussian-type functions.
subroutine, public build_core_hamiltonian_matrix(qs_env, calculate_forces)
Cosntruction of the QS Core Hamiltonian Matrix.
subroutine, public dump_info_core_hamiltonian(qs_env, calculate_forces)
Possibly prints matrices after the construction of the Core Hamiltonian Matrix.
subroutine, public qs_matrix_h_allocate_imag_from_real(qs_env)
(Re-)allocates matrix_h_im from matrix_h
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_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, 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, rhs)
Get the QUICKSTEP environment.
subroutine, public set_qs_env(qs_env, super_cell, mos, qmmm, qmmm_periodic, ewald_env, ewald_pw, mpools, rho_external, external_vxc, mask, scf_control, rel_control, qs_charges, ks_env, ks_qmmm_env, wf_history, scf_env, active_space, input, oce, rho_atom_set, rho0_atom_set, rho0_mpole, run_rtp, rtp, rhoz_set, rhoz_tot, ecoul_1c, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, efield, linres_control, xas_env, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, ls_scf_env, do_transport, transport_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, gcp_env, mp2_env, bs_env, kg_env, force, kpoints, WannierCentres, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, rhs)
Set the QUICKSTEP environment.
Define the quickstep kind type and their sub types.
Definition: qs_kind_types.F:23
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, 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_r3d_rs_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_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
Calculation of kinetic energy matrix and forces.
Definition: qs_kinetic.F:15
subroutine, public build_kinetic_matrix(ks_env, matrix_t, matrixkp_t, matrix_name, basis_type, sab_nl, calculate_forces, matrix_p, matrixkp_p, eps_filter, nderivative)
Calculation of the kinetic energy matrix over Cartesian Gaussian functions.
Definition: qs_kinetic.F:101
subroutine, public get_ks_env(ks_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, complex_ks, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, kinetic, matrix_s, matrix_s_RI_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_RI_aux_kp, matrix_ks_im_kp, rho, rho_xc, vppl, rho_core, rho_nlcc, rho_nlcc_g, vee, neighbor_list_id, sab_orb, sab_all, sac_ae, sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, task_list, task_list_soft, kpoints, do_kpoints, atomic_kind_set, qs_kind_set, cell, cell_ref, use_ref_cell, particle_set, energy, force, local_particles, local_molecules, molecule_kind_set, molecule_set, subsys, cp_subsys, virial, results, atprop, nkind, natom, dft_control, dbcsr_dist, distribution_2d, pw_env, para_env, blacs_env, nelectron_total, nelectron_spin)
...
Definition: qs_ks_types.F:330
subroutine, public set_ks_env(ks_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, complex_ks, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, kinetic, matrix_s, matrix_s_RI_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_RI_aux_kp, matrix_ks_im_kp, vppl, rho_core, rho_nlcc, rho_nlcc_g, vee, neighbor_list_id, kpoints, sab_orb, sab_all, sac_ae, sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, task_list, task_list_soft, subsys, dft_control, dbcsr_dist, distribution_2d, pw_env, para_env, blacs_env)
...
Definition: qs_ks_types.F:567
Define the neighbor list data types and the corresponding functionality.
Routines for the construction of the coefficients for the expansion of the atomic densities rho1_hard...
subroutine, public build_oce_matrices(intac, calculate_forces, nder, qs_kind_set, particle_set, sap_oce, eps_fit)
Set up the sparse matrix for the coefficients of one center expansions This routine uses the same log...
subroutine, public allocate_oce_set(oce_set, nkind)
Allocate and initialize the matrix set of oce coefficients.
Definition: qs_oce_types.F:60
subroutine, public create_oce_set(oce_set)
...
Definition: qs_oce_types.F:79
Calculation of overlap matrix, its derivatives and forces.
Definition: qs_overlap.F:19
subroutine, public build_overlap_matrix(ks_env, matrix_s, matrixkp_s, matrix_name, nderivative, basis_type_a, basis_type_b, sab_nl, calculate_forces, matrix_p, matrixkp_p)
Calculation of the overlap matrix over Cartesian Gaussian functions.
Definition: qs_overlap.F:120
superstucture that hold various representations of the density and keeps track of which ones are vali...
Definition: qs_rho_types.F:18
subroutine, public qs_rho_get(rho_struct, rho_ao, rho_ao_im, rho_ao_kp, rho_ao_im_kp, rho_r, drho_r, rho_g, drho_g, tau_r, tau_g, rho_r_valid, drho_r_valid, rho_g_valid, drho_g_valid, tau_r_valid, tau_g_valid, tot_rho_r, tot_rho_g, rho_r_sccs, soft_valid, complex_rho_ao)
returns info about the density described by this object. If some representation is not available an e...
Definition: qs_rho_types.F:229