(git:0de0cc2)
qs_2nd_kernel_ao.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 Routines to calculate 2nd order kernels from a given response density in ao basis
10 !> linear response scf
11 !> \par History
12 !> created 08-2020 [Frederick Stein], Code by M. Iannuzzi
13 !> \author Frederick Stein
14 ! **************************************************************************************************
16  USE admm_types, ONLY: admm_type,&
18  USE cp_control_types, ONLY: dft_control_type
22  USE cp_fm_types, ONLY: cp_fm_get_info,&
23  cp_fm_type
24  USE dbcsr_api, ONLY: dbcsr_add,&
25  dbcsr_copy,&
26  dbcsr_create,&
27  dbcsr_p_type,&
28  dbcsr_release,&
29  dbcsr_set
37  section_vals_type
38  USE kinds, ONLY: dp
39  USE pw_env_types, ONLY: pw_env_get,&
40  pw_env_type
41  USE pw_methods, ONLY: pw_scale
42  USE pw_pool_types, ONLY: pw_pool_type
43  USE pw_types, ONLY: pw_c1d_gs_type,&
44  pw_r3d_rs_type
45  USE qs_environment_types, ONLY: get_qs_env,&
46  qs_environment_type
47  USE qs_integrate_potential, ONLY: integrate_v_rspace
49  USE qs_ks_types, ONLY: qs_ks_env_type
50  USE qs_linres_types, ONLY: linres_control_type
52  USE qs_p_env_types, ONLY: qs_p_env_type
53  USE qs_rho_types, ONLY: qs_rho_get,&
54  qs_rho_type
55  USE task_list_types, ONLY: task_list_type
56  USE xc, ONLY: xc_calc_2nd_deriv
57 #include "./base/base_uses.f90"
58 
59  IMPLICIT NONE
60 
61  PRIVATE
62 
63  ! *** Public subroutines ***
65  PUBLIC :: apply_hfx_ao
66  PUBLIC :: apply_xc_admm_ao
67 
68  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_2nd_kernel_ao'
69 
70 ! **************************************************************************************************
71 
72 CONTAINS
73 
74 ! **************************************************************************************************
75 !> \brief This routine builds response density in dbcsr format
76 !> \param c0 coefficients of unperturbed system (not changed)
77 !> \param c1 coefficients of response (not changed)
78 !> \param dm response density matrix
79 ! **************************************************************************************************
80  SUBROUTINE build_dm_response(c0, c1, dm)
81  !
82  TYPE(cp_fm_type), DIMENSION(:), INTENT(IN) :: c0, c1
83  TYPE(dbcsr_p_type), DIMENSION(:), INTENT(INOUT) :: dm
84 
85  INTEGER :: ispin, ncol, nspins
86 
87  nspins = SIZE(dm, 1)
88 
89  DO ispin = 1, nspins
90  CALL dbcsr_set(dm(ispin)%matrix, 0.0_dp)
91  CALL cp_fm_get_info(c0(ispin), ncol_global=ncol)
92  CALL cp_dbcsr_plus_fm_fm_t(dm(ispin)%matrix, &
93  matrix_v=c0(ispin), &
94  matrix_g=c1(ispin), &
95  ncol=ncol, alpha=2.0_dp, &
96  keep_sparsity=.true., &
97  symmetry_mode=1)
98  END DO
99 
100  END SUBROUTINE build_dm_response
101 
102 ! **************************************************************************************************
103 !> \brief Calculate a second order kernel (DFT, HF, ADMM correction) for a given density
104 !> \param qs_env ...
105 !> \param p_env perturbation environment containing the correct density matrices p_env%p1, p_env%p1_admm,
106 !> the kernel will be saved in p_env%kpp1, p_env%kpp1_admm
107 !> \param recalc_hfx_integrals whether to recalculate the HFX integrals
108 !> \param calc_forces whether to calculate forces
109 !> \param calc_virial whether to calculate virials
110 !> \param virial collect the virial terms from the XC + ADMM parts (terms from integration will be added to pv_virial)
111 ! **************************************************************************************************
112  SUBROUTINE apply_2nd_order_kernel(qs_env, p_env, recalc_hfx_integrals, calc_forces, calc_virial, virial)
113  TYPE(qs_environment_type), INTENT(IN), POINTER :: qs_env
114  TYPE(qs_p_env_type) :: p_env
115  LOGICAL, INTENT(IN), OPTIONAL :: recalc_hfx_integrals, calc_forces, &
116  calc_virial
117  REAL(kind=dp), DIMENSION(3, 3), INTENT(INOUT), &
118  OPTIONAL :: virial
119 
120  CHARACTER(LEN=*), PARAMETER :: routinen = 'apply_2nd_order_kernel'
121 
122  INTEGER :: handle, ispin
123  LOGICAL :: do_hfx, my_calc_forces, my_calc_virial, &
124  my_recalc_hfx_integrals
125  TYPE(admm_type), POINTER :: admm_env
126  TYPE(dft_control_type), POINTER :: dft_control
127  TYPE(linres_control_type), POINTER :: linres_control
128  TYPE(section_vals_type), POINTER :: hfx_sections, input, xc_section
129 
130  CALL timeset(routinen, handle)
131 
132  my_recalc_hfx_integrals = .false.
133  IF (PRESENT(recalc_hfx_integrals)) my_recalc_hfx_integrals = recalc_hfx_integrals
134 
135  my_calc_forces = .false.
136  IF (PRESENT(calc_forces)) my_calc_forces = calc_forces
137 
138  my_calc_virial = .false.
139  IF (PRESENT(calc_virial)) my_calc_virial = calc_virial
140 
141  CALL get_qs_env(qs_env, dft_control=dft_control)
142 
143  DO ispin = 1, SIZE(p_env%kpp1)
144  CALL dbcsr_set(p_env%kpp1(ispin)%matrix, 0.0_dp)
145  IF (dft_control%do_admm) CALL dbcsr_set(p_env%kpp1_admm(ispin)%matrix, 0.0_dp)
146  END DO
147 
148  CALL get_qs_env(qs_env=qs_env, &
149  input=input, &
150  linres_control=linres_control)
151 
152  IF (dft_control%do_admm) THEN
153  CALL get_qs_env(qs_env, admm_env=admm_env)
154  xc_section => admm_env%xc_section_primary
155  ELSE
156  xc_section => section_vals_get_subs_vals(input, "DFT%XC")
157  END IF
158 
159  CALL calc_kpp1(p_env%rho1_xc, p_env%rho1, xc_section, .false., &
160  .false., dft_control%qs_control%lrigpw, .true., linres_control%lr_triplet, &
161  qs_env, p_env, calc_forces=my_calc_forces, calc_virial=my_calc_virial, virial=virial)
162 
163  ! hfx section
164  NULLIFY (hfx_sections)
165  hfx_sections => section_vals_get_subs_vals(input, "DFT%XC%HF")
166  CALL section_vals_get(hfx_sections, explicit=do_hfx)
167  IF (do_hfx) THEN
168  CALL apply_hfx_ao(qs_env, p_env, my_recalc_hfx_integrals)
169 
170  IF (dft_control%do_admm) THEN
171  CALL apply_xc_admm_ao(qs_env, p_env, my_calc_forces, my_calc_virial, virial)
172  CALL p_env_finish_kpp1(qs_env, p_env)
173  END IF
174  END IF
175 
176  CALL timestop(handle)
177 
178  END SUBROUTINE apply_2nd_order_kernel
179 
180 ! **************************************************************************************************
181 !> \brief This routine applies the Hartree-Fock Exchange kernel to a perturbation density matrix considering ADMM
182 !> \param qs_env the Quickstep environment
183 !> \param p_env perturbation environment from which p1/p1_admm and kpp1/kpp1_admm are taken
184 !> \param recalc_integrals whether the integrals are to be recalculated (default: no)
185 ! **************************************************************************************************
186  SUBROUTINE apply_hfx_ao(qs_env, p_env, recalc_integrals)
187  TYPE(qs_environment_type), INTENT(IN), POINTER :: qs_env
188  TYPE(qs_p_env_type), INTENT(IN) :: p_env
189  LOGICAL, INTENT(IN), OPTIONAL :: recalc_integrals
190 
191  CHARACTER(LEN=*), PARAMETER :: routinen = 'apply_hfx_ao'
192 
193  INTEGER :: handle, ispin, nspins
194  LOGICAL :: my_recalc_integrals
195  REAL(kind=dp) :: alpha
196  TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: h1_mat, rho1, work_hmat
197  TYPE(dft_control_type), POINTER :: dft_control
198 
199  CALL timeset(routinen, handle)
200 
201  my_recalc_integrals = .false.
202  IF (PRESENT(recalc_integrals)) my_recalc_integrals = recalc_integrals
203 
204  CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
205 
206  IF (dft_control%do_admm) THEN
207  IF (dft_control%admm_control%purification_method /= do_admm_purify_none) THEN
208  cpabort("ADMM: Linear Response needs purification_method=none")
209  END IF
210  IF (dft_control%admm_control%scaling_model /= do_admm_exch_scaling_none) THEN
211  cpabort("ADMM: Linear Response needs scaling_model=none")
212  END IF
213  IF (dft_control%admm_control%method /= do_admm_basis_projection) THEN
214  cpabort("ADMM: Linear Response needs admm_method=basis_projection")
215  END IF
216  !
217  END IF
218 
219  nspins = dft_control%nspins
220 
221  IF (dft_control%do_admm) THEN
222  rho1 => p_env%p1_admm
223  h1_mat => p_env%kpp1_admm
224  ELSE
225  rho1 => p_env%p1
226  h1_mat => p_env%kpp1
227  END IF
228 
229  DO ispin = 1, nspins
230  cpassert(ASSOCIATED(rho1(ispin)%matrix))
231  cpassert(ASSOCIATED(h1_mat(ispin)%matrix))
232  END DO
233 
234  NULLIFY (work_hmat)
235  CALL dbcsr_allocate_matrix_set(work_hmat, nspins)
236  DO ispin = 1, nspins
237  ALLOCATE (work_hmat(ispin)%matrix)
238  CALL dbcsr_create(work_hmat(ispin)%matrix, template=rho1(ispin)%matrix)
239  CALL dbcsr_copy(work_hmat(ispin)%matrix, rho1(ispin)%matrix)
240  CALL dbcsr_set(work_hmat(ispin)%matrix, 0.0_dp)
241  END DO
242 
243  ! Calculate kernel
244  CALL tddft_hfx_matrix(work_hmat, rho1, qs_env, .false., my_recalc_integrals)
245 
246  alpha = 2.0_dp
247  IF (nspins == 2) alpha = 1.0_dp
248 
249  DO ispin = 1, nspins
250  CALL dbcsr_add(h1_mat(ispin)%matrix, work_hmat(ispin)%matrix, 1.0_dp, alpha)
251  END DO
252 
253  CALL dbcsr_deallocate_matrix_set(work_hmat)
254 
255  CALL timestop(handle)
256 
257  END SUBROUTINE apply_hfx_ao
258 
259 ! **************************************************************************************************
260 !> \brief apply the kernel from the ADMM exchange correction
261 !> \param qs_env ...
262 !> \param p_env perturbation environment
263 !> \param calc_forces whether to calculate forces
264 !> \param calc_virial whether to calculate gradients
265 !> \param virial collects the virial terms from the XC functional (virial terms from integration are collected in pv_virial)
266 ! **************************************************************************************************
267  SUBROUTINE apply_xc_admm_ao(qs_env, p_env, calc_forces, calc_virial, virial)
268  TYPE(qs_environment_type), INTENT(IN), POINTER :: qs_env
269  TYPE(qs_p_env_type) :: p_env
270  LOGICAL, INTENT(IN), OPTIONAL :: calc_forces, calc_virial
271  REAL(kind=dp), DIMENSION(3, 3), INTENT(INOUT), &
272  OPTIONAL :: virial
273 
274  CHARACTER(len=*), PARAMETER :: routinen = 'apply_xc_admm_ao'
275 
276  INTEGER :: handle, ispin, nao, nao_aux, nspins
277  LOGICAL :: lsd, my_calc_forces
278  REAL(kind=dp) :: alpha
279  TYPE(admm_type), POINTER :: admm_env
280  TYPE(dbcsr_p_type) :: work_hmat
281  TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: rho_ao_aux
282  TYPE(dft_control_type), POINTER :: dft_control
283  TYPE(linres_control_type), POINTER :: linres_control
284  TYPE(pw_c1d_gs_type), DIMENSION(:), POINTER :: rho1_aux_g
285  TYPE(pw_env_type), POINTER :: pw_env
286  TYPE(pw_pool_type), POINTER :: auxbas_pw_pool
287  TYPE(pw_r3d_rs_type), DIMENSION(:), POINTER :: rho1_aux_r, tau1_aux_r, v_xc, v_xc_tau
288  TYPE(qs_ks_env_type), POINTER :: ks_env
289  TYPE(qs_rho_type), POINTER :: rho_aux
290  TYPE(section_vals_type), POINTER :: xc_section
291  TYPE(task_list_type), POINTER :: task_list_aux_fit
292 
293  CALL timeset(routinen, handle)
294 
295  CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
296 
297  IF (qs_env%admm_env%aux_exch_func /= do_admm_aux_exch_func_none) THEN
298  CALL get_qs_env(qs_env=qs_env, linres_control=linres_control)
299  cpassert(.NOT. dft_control%qs_control%gapw)
300  cpassert(.NOT. dft_control%qs_control%gapw_xc)
301  cpassert(.NOT. dft_control%qs_control%lrigpw)
302  cpassert(.NOT. linres_control%lr_triplet)
303  IF (.NOT. ASSOCIATED(p_env%kpp1_admm)) &
304  cpabort("kpp1_admm has to be associated if ADMM kernel calculations are requested")
305 
306  nspins = dft_control%nspins
307 
308  my_calc_forces = .false.
309  IF (PRESENT(calc_forces)) my_calc_forces = calc_forces
310 
311  ! AUX basis contribution
312  CALL get_qs_env(qs_env=qs_env, pw_env=pw_env)
313  cpassert(ASSOCIATED(pw_env))
314  CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
315  NULLIFY (v_xc)
316  ! calculate the xc potential
317  lsd = (nspins == 2)
318  CALL get_qs_env(qs_env=qs_env, ks_env=ks_env, admm_env=admm_env)
319  CALL get_admm_env(admm_env, task_list_aux_fit=task_list_aux_fit)
320 
321  CALL qs_rho_get(p_env%rho1_admm, rho_r=rho1_aux_r, rho_g=rho1_aux_g, tau_r=tau1_aux_r)
322  xc_section => admm_env%xc_section_aux
323 
324  CALL xc_calc_2nd_deriv(v_xc, v_xc_tau, p_env%kpp1_env%deriv_set_admm, &
325  p_env%kpp1_env%rho_set_admm, &
326  rho1_aux_r, rho1_aux_g, tau1_aux_r, auxbas_pw_pool, xc_section=xc_section, gapw=.false., &
327  compute_virial=calc_virial, virial_xc=virial)
328 
329  NULLIFY (work_hmat%matrix)
330  ALLOCATE (work_hmat%matrix)
331  CALL dbcsr_copy(work_hmat%matrix, p_env%kpp1_admm(1)%matrix)
332 
333  alpha = 1.0_dp
334  IF (nspins == 1) alpha = 2.0_dp
335 
336  CALL get_admm_env(qs_env%admm_env, rho_aux_fit=rho_aux)
337  CALL qs_rho_get(rho_aux, rho_ao=rho_ao_aux)
338 
339  CALL cp_fm_get_info(admm_env%A, nrow_global=nao_aux, ncol_global=nao)
340  DO ispin = 1, nspins
341  CALL pw_scale(v_xc(ispin), v_xc(ispin)%pw_grid%dvol)
342  CALL dbcsr_set(work_hmat%matrix, 0.0_dp)
343  CALL integrate_v_rspace(v_rspace=v_xc(ispin), hmat=work_hmat, qs_env=qs_env, &
344  calculate_forces=my_calc_forces, basis_type="AUX_FIT", &
345  task_list_external=task_list_aux_fit, pmat=rho_ao_aux(ispin))
346  IF (ASSOCIATED(v_xc_tau)) THEN
347  CALL pw_scale(v_xc_tau(ispin), v_xc_tau(ispin)%pw_grid%dvol)
348  CALL integrate_v_rspace(v_rspace=v_xc_tau(ispin), hmat=work_hmat, qs_env=qs_env, &
349  compute_tau=.true., &
350  calculate_forces=my_calc_forces, basis_type="AUX_FIT", &
351  task_list_external=task_list_aux_fit, pmat=rho_ao_aux(ispin))
352  END IF
353  CALL dbcsr_add(p_env%kpp1_admm(ispin)%matrix, work_hmat%matrix, 1.0_dp, alpha)
354 
355  END DO
356 
357  CALL dbcsr_release(work_hmat%matrix)
358  DEALLOCATE (work_hmat%matrix)
359 
360  DO ispin = 1, nspins
361  CALL auxbas_pw_pool%give_back_pw(v_xc(ispin))
362  END DO
363  DEALLOCATE (v_xc)
364 
365  END IF
366 
367  CALL timestop(handle)
368 
369  END SUBROUTINE apply_xc_admm_ao
370 END MODULE qs_2nd_kernel_ao
Types and set/get functions for auxiliary density matrix methods.
Definition: admm_types.F:15
subroutine, public get_admm_env(admm_env, mo_derivs_aux_fit, mos_aux_fit, sab_aux_fit, sab_aux_fit_asymm, sab_aux_fit_vs_orb, matrix_s_aux_fit, matrix_s_aux_fit_kp, matrix_s_aux_fit_vs_orb, matrix_s_aux_fit_vs_orb_kp, task_list_aux_fit, matrix_ks_aux_fit, matrix_ks_aux_fit_kp, matrix_ks_aux_fit_im, matrix_ks_aux_fit_dft, matrix_ks_aux_fit_hfx, matrix_ks_aux_fit_dft_kp, matrix_ks_aux_fit_hfx_kp, rho_aux_fit, rho_aux_fit_buffer, admm_dm)
Get routine for the ADMM env.
Definition: admm_types.F:593
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
DBCSR operations in CP2K.
subroutine, public cp_dbcsr_plus_fm_fm_t(sparse_matrix, matrix_v, matrix_g, ncol, alpha, keep_sparsity, symmetry_mode)
performs the multiplication sparse_matrix+dense_mat*dens_mat^T if matrix_g is not explicitly given,...
represent a full matrix distributed on many processors
Definition: cp_fm_types.F:15
subroutine, public cp_fm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, nrow_locals, ncol_locals, matrix_struct, para_env)
returns all kind of information about the full matrix
Definition: cp_fm_types.F:1016
Utilities for hfx and admm methods.
subroutine, public tddft_hfx_matrix(matrix_ks, rho_ao, qs_env, update_energy, recalc_integrals, external_hfx_sections, external_x_data)
Add the hfx contributions to the Hamiltonian.
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 do_admm_basis_projection
integer, parameter, public do_admm_aux_exch_func_none
integer, parameter, public do_admm_exch_scaling_none
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_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
Defines the basic variable types.
Definition: kinds.F:23
integer, parameter, public dp
Definition: kinds.F:34
container for various plainwaves related things
Definition: pw_env_types.F:14
subroutine, public pw_env_get(pw_env, pw_pools, cube_info, gridlevel_info, auxbas_pw_pool, auxbas_grid, auxbas_rs_desc, auxbas_rs_grid, rs_descs, rs_grids, xc_pw_pool, vdw_pw_pool, poisson_env, interp_section)
returns the various attributes of the pw env
Definition: pw_env_types.F:113
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
Definition: pw_pool_types.F:24
Routines to calculate 2nd order kernels from a given response density in ao basis linear response scf...
subroutine, public apply_2nd_order_kernel(qs_env, p_env, recalc_hfx_integrals, calc_forces, calc_virial, virial)
Calculate a second order kernel (DFT, HF, ADMM correction) for a given density.
subroutine, public build_dm_response(c0, c1, dm)
This routine builds response density in dbcsr format.
subroutine, public apply_xc_admm_ao(qs_env, p_env, calc_forces, calc_virial, virial)
apply the kernel from the ADMM exchange correction
subroutine, public apply_hfx_ao(qs_env, p_env, recalc_integrals)
This routine applies the Hartree-Fock Exchange kernel to a perturbation density matrix considering AD...
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.
Integrate single or product functions over a potential on a RS grid.
module that builds the second order perturbation kernel kpp1 = delta_rho|_P delta_rho|_P E drho(P1) d...
subroutine, public calc_kpp1(rho1_xc, rho1, xc_section, do_tddft, lsd_singlets, lrigpw, do_excitations, do_triplet, qs_env, p_env, calc_forces, calc_virial, virial)
...
Type definitiona for linear response calculations.
Utility functions for the perturbation calculations.
subroutine, public p_env_finish_kpp1(qs_env, p_env)
...
basis types for the calculation of the perturbation of density theory.
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
types for task lists
Exchange and Correlation functional calculations.
Definition: xc.F:17
subroutine, public xc_calc_2nd_deriv(v_xc, v_xc_tau, deriv_set, rho_set, rho1_r, rho1_g, tau1_r, pw_pool, xc_section, gapw, vxg, lsd_singlets, do_excitations, do_triplet, do_tddft, compute_virial, virial_xc)
Caller routine to calculate the second order potential in the direction of rho1_r.
Definition: xc.F:1523