(git:374b731)
Loading...
Searching...
No Matches
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,&
22 USE cp_fm_types, ONLY: cp_fm_get_info,&
24 USE dbcsr_api, ONLY: dbcsr_add,&
25 dbcsr_copy,&
26 dbcsr_create,&
27 dbcsr_p_type,&
28 dbcsr_release,&
29 dbcsr_set
38 USE kinds, ONLY: dp
39 USE pw_env_types, ONLY: pw_env_get,&
41 USE pw_methods, ONLY: pw_scale
43 USE pw_types, ONLY: pw_c1d_gs_type,&
47 USE qs_integrate_potential, ONLY: integrate_v_rspace
53 USE qs_rho_types, ONLY: qs_rho_get,&
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
72CONTAINS
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
370END 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
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
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
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
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...
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...
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
stores some data used in wavefunction fitting
Definition admm_types.F:120
represent a full matrix
contained for different pw related things
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
General settings for linear response calculations.
Represent a qs system that is perturbed. Can calculate the linear operator and the rhs of the system ...
keeps the density in various representations, keeping track of which ones are valid.