(git:6344619)
Loading...
Searching...
No Matches
qs_energy_utils.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 Utility subroutine for qs energy calculation
10!> \par History
11!> none
12!> \author MK (29.10.2002)
13! **************************************************************************************************
22 USE cp_dbcsr_api, ONLY: dbcsr_copy,&
34 USE kinds, ONLY: dp
36 USE mulliken, ONLY: atom_trace
38 USE pw_env_types, ONLY: pw_env_get,&
40 USE pw_methods, ONLY: pw_axpy,&
43 USE pw_types, ONLY: pw_r3d_rs_type
49 USE qs_integrate_potential, ONLY: integrate_v_core_rspace,&
50 integrate_v_rspace
52 USE qs_ks_atom, ONLY: update_ks_atom
60 USE qs_rho_types, ONLY: qs_rho_get,&
62 USE qs_scf, ONLY: scf
63 USE qs_tddfpt2_methods, ONLY: tddfpt
64 USE qs_vxc, ONLY: qs_xc_density
66 USE rixs_methods, ONLY: rixs
68 USE xas_methods, ONLY: xas
69 USE xas_tdp_methods, ONLY: xas_tdp
72#include "./base/base_uses.f90"
73
74 IMPLICIT NONE
75
76 PRIVATE
77
78! *** Global parameters ***
79
80 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_energy_utils'
81
83
84CONTAINS
85
86! **************************************************************************************************
87!> \brief Refactoring of qs_energies_scf. Moves computation of properties
88!> into separate subroutine. Calculates energy and if calc_forces then the response vector
89!> and some contributions to the force
90!> \param qs_env ...
91!> \param calc_forces ...
92!> \par History
93!> 05.2013 created [Florian Schiffmann]
94! **************************************************************************************************
95
96 SUBROUTINE qs_energies_properties(qs_env, calc_forces)
97 TYPE(qs_environment_type), POINTER :: qs_env
98 LOGICAL, INTENT(IN) :: calc_forces
99
100 CHARACTER(len=*), PARAMETER :: routinen = 'qs_energies_properties'
101
102 INTEGER :: handle, natom
103 LOGICAL :: do_bse_props, do_et, do_et_proj, &
104 do_post_scf_bandstructure, do_tip_scan
105 REAL(kind=dp) :: ekts
106 TYPE(atprop_type), POINTER :: atprop
107 TYPE(dft_control_type), POINTER :: dft_control
108 TYPE(mp_para_env_type), POINTER :: para_env
109 TYPE(pw_env_type), POINTER :: pw_env
110 TYPE(pw_r3d_rs_type), POINTER :: v_hartree_rspace
111 TYPE(qs_energy_type), POINTER :: energy
112 TYPE(section_vals_type), POINTER :: bse_props_section, input, &
113 post_scf_bands_section, proj_section, &
114 rest_b_section, tip_scan_section
115
116 NULLIFY (atprop, energy, pw_env)
117 CALL timeset(routinen, handle)
118
119 ! atomic energies using Mulliken partition
120 CALL get_qs_env(qs_env, &
121 dft_control=dft_control, &
122 input=input, &
123 atprop=atprop, &
124 energy=energy, &
125 v_hartree_rspace=v_hartree_rspace, &
126 para_env=para_env, &
127 pw_env=pw_env)
128 IF (atprop%energy) THEN
129 CALL qs_energies_mulliken(qs_env)
130 CALL get_qs_env(qs_env, natom=natom)
131 IF (.NOT. dft_control%qs_control%semi_empirical .AND. &
132 .NOT. dft_control%qs_control%xtb .AND. &
133 .NOT. dft_control%qs_control%dftb) THEN
134 ! Nuclear charge correction
135 CALL integrate_v_core_rspace(v_hartree_rspace, qs_env)
136 IF (.NOT. ASSOCIATED(atprop%ateb)) THEN
137 CALL atprop_array_init(atprop%ateb, natom)
138 END IF
139 ! Kohn-Sham Functional corrections
140 CALL ks_xc_correction(qs_env)
141 END IF
142 CALL atprop_array_add(atprop%atener, atprop%ateb)
143 CALL atprop_array_add(atprop%atener, atprop%ateself)
144 CALL atprop_array_add(atprop%atener, atprop%atexc)
145 CALL atprop_array_add(atprop%atener, atprop%atecoul)
146 CALL atprop_array_add(atprop%atener, atprop%atevdw)
147 CALL atprop_array_add(atprop%atener, atprop%ategcp)
148 CALL atprop_array_add(atprop%atener, atprop%atecc)
149 CALL atprop_array_add(atprop%atener, atprop%ate1c)
150 ! entropic energy
151 ekts = energy%kts/real(natom, kind=dp)/real(para_env%num_pe, kind=dp)
152 atprop%atener(:) = atprop%atener(:) + ekts
153 END IF
154
155 ! ET coupling - projection-operator approach
156 NULLIFY (proj_section)
157 proj_section => &
158 section_vals_get_subs_vals(input, "PROPERTIES%ET_COUPLING%PROJECTION")
159 CALL section_vals_get(proj_section, explicit=do_et_proj)
160 IF (do_et_proj) THEN
161 CALL calc_et_coupling_proj(qs_env)
162 END IF
163
164 ! ********** Calculate the electron transfer coupling elements********
165 do_et = .false.
166 do_et = dft_control%qs_control%et_coupling_calc
167 IF (do_et) THEN
168 qs_env%et_coupling%energy = energy%total
169 qs_env%et_coupling%keep_matrix = .true.
170 qs_env%et_coupling%first_run = .true.
171 CALL qs_ks_update_qs_env(qs_env, calculate_forces=.false., just_energy=.true.)
172 qs_env%et_coupling%first_run = .false.
173 IF (dft_control%qs_control%ddapc_restraint) THEN
174 rest_b_section => section_vals_get_subs_vals(input, "PROPERTIES%ET_COUPLING%DDAPC_RESTRAINT_B")
175 CALL read_ddapc_section(qs_control=dft_control%qs_control, &
176 ddapc_restraint_section=rest_b_section)
177 END IF
178 CALL scf(qs_env=qs_env)
179 qs_env%et_coupling%keep_matrix = .true.
180
181 CALL qs_ks_update_qs_env(qs_env, calculate_forces=.false., just_energy=.true.)
182 CALL calc_et_coupling(qs_env)
183 END IF
184
185 !Properties
186
187 IF (dft_control%do_xas_calculation) THEN
188 CALL xas(qs_env, dft_control)
189 END IF
190
191 IF (dft_control%do_xas_tdp_calculation) THEN
192 CALL xas_tdp(qs_env)
193 END IF
194
195 ! Compute Linear Response properties as post-scf
196 ! Initialization of TDDFPT calculation
197 IF (.NOT. qs_env%linres_run) THEN
198 CALL linres_calculation_low(qs_env)
199 END IF
200
201 ! Calculates the energy, response vector and some contributions to the force
202 IF (dft_control%tddfpt2_control%enabled) THEN
203 CALL tddfpt(qs_env, calc_forces)
204 END IF
205
206 ! stand-alone RIXS, does not depend on previous xas_tdp and/or tddfpt2 calculations
207 IF (qs_env%do_rixs) CALL rixs(qs_env)
208
209 ! post-SCF bandstructure calculation from higher level methods
210 NULLIFY (post_scf_bands_section)
211 post_scf_bands_section => section_vals_get_subs_vals(qs_env%input, "PROPERTIES%BANDSTRUCTURE")
212 CALL section_vals_get(post_scf_bands_section, explicit=do_post_scf_bandstructure)
213 IF (do_post_scf_bandstructure) THEN
214 CALL post_scf_bandstructure(qs_env, post_scf_bands_section)
215 END IF
216
217 ! Linear-response Bethe-Salpeter on the GW of the bandstructure section
218 NULLIFY (bse_props_section)
219 bse_props_section => section_vals_get_subs_vals(qs_env%input, "PROPERTIES%BSE")
220 CALL section_vals_get(bse_props_section, explicit=do_bse_props)
221 IF (do_bse_props) CALL bse_from_bs_env(qs_env, bse_props_section)
222
223 ! tip scan
224 NULLIFY (tip_scan_section)
225 tip_scan_section => section_vals_get_subs_vals(input, "PROPERTIES%TIP_SCAN")
226 CALL section_vals_get(tip_scan_section, explicit=do_tip_scan)
227 IF (do_tip_scan) THEN
228 CALL tip_scanning(qs_env, tip_scan_section)
229 END IF
230
231 CALL timestop(handle)
232
233 END SUBROUTINE qs_energies_properties
234
235! **************************************************************************************************
236!> \brief Use a simple Mulliken-like energy decomposition
237!> \param qs_env ...
238!> \date 07.2011
239!> \author JHU
240!> \version 1.0
241! **************************************************************************************************
242 SUBROUTINE qs_energies_mulliken(qs_env)
243
244 TYPE(qs_environment_type), POINTER :: qs_env
245
246 INTEGER :: ispin, natom, nspin
247 REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: atcore
248 TYPE(atprop_type), POINTER :: atprop
249 TYPE(dbcsr_p_type), ALLOCATABLE, DIMENSION(:), &
250 TARGET :: core_mat
251 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_h, matrix_ks, rho_ao
252 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: math, matp
253 TYPE(dft_control_type), POINTER :: dft_control
254 TYPE(qs_rho_type), POINTER :: rho
255
256 CALL get_qs_env(qs_env=qs_env, atprop=atprop)
257 IF (atprop%energy) THEN
258 CALL get_qs_env(qs_env=qs_env, matrix_ks=matrix_ks, matrix_h=matrix_h, rho=rho)
259 CALL qs_rho_get(rho, rho_ao=rho_ao)
260 ! E = 0.5*Tr(H*P+F*P)
261 atprop%atener = 0._dp
262 nspin = SIZE(rho_ao)
263 DO ispin = 1, nspin
264 CALL atom_trace(matrix_h(1)%matrix, rho_ao(ispin)%matrix, &
265 0.5_dp, atprop%atener)
266 CALL atom_trace(matrix_ks(ispin)%matrix, rho_ao(ispin)%matrix, &
267 0.5_dp, atprop%atener)
268 END DO
269 !
270 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
271 IF (.NOT. dft_control%qs_control%semi_empirical .AND. &
272 .NOT. dft_control%qs_control%xtb .AND. &
273 .NOT. dft_control%qs_control%dftb) THEN
274 CALL get_qs_env(qs_env=qs_env, natom=natom)
275 ALLOCATE (atcore(natom))
276 atcore = 0.0_dp
277 ALLOCATE (core_mat(1))
278 ALLOCATE (core_mat(1)%matrix)
279 CALL dbcsr_create(core_mat(1)%matrix, template=matrix_h(1)%matrix)
280 CALL dbcsr_copy(core_mat(1)%matrix, matrix_h(1)%matrix)
281 CALL dbcsr_set(core_mat(1)%matrix, 0.0_dp)
282 math(1:1, 1:1) => core_mat(1:1)
283 matp(1:nspin, 1:1) => rho_ao(1:nspin)
284 CALL core_matrices(qs_env, math, matp, .false., 0, atcore=atcore)
285 atprop%atener = atprop%atener + 0.5_dp*atcore
286 DO ispin = 1, nspin
287 CALL atom_trace(core_mat(1)%matrix, rho_ao(ispin)%matrix, &
288 -0.5_dp, atprop%atener)
289 END DO
290 DEALLOCATE (atcore)
291 CALL dbcsr_release(core_mat(1)%matrix)
292 DEALLOCATE (core_mat(1)%matrix)
293 DEALLOCATE (core_mat)
294 END IF
295 END IF
296
297 END SUBROUTINE qs_energies_mulliken
298
299! **************************************************************************************************
300!> \brief ...
301!> \param qs_env ...
302! **************************************************************************************************
303 SUBROUTINE ks_xc_correction(qs_env)
304 TYPE(qs_environment_type), POINTER :: qs_env
305
306 CHARACTER(len=*), PARAMETER :: routinen = 'ks_xc_correction'
307
308 INTEGER :: handle, iatom, ispin, natom, nspins
309 LOGICAL :: gapw, gapw_xc
310 REAL(kind=dp) :: eh1, exc1
311 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
312 TYPE(atprop_type), POINTER :: atprop
313 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_s, rho_ao, xcmat
314 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_p
315 TYPE(dft_control_type), POINTER :: dft_control
316 TYPE(ecoul_1center_type), DIMENSION(:), POINTER :: ecoul_1c
317 TYPE(local_rho_type), POINTER :: local_rho_set
318 TYPE(mp_para_env_type), POINTER :: para_env
319 TYPE(pw_env_type), POINTER :: pw_env
320 TYPE(pw_pool_type), POINTER :: auxbas_pw_pool
321 TYPE(pw_r3d_rs_type) :: xc_den
322 TYPE(pw_r3d_rs_type), ALLOCATABLE, DIMENSION(:) :: vtau, vxc
323 TYPE(pw_r3d_rs_type), POINTER :: v_hartree_rspace
324 TYPE(qs_dispersion_type), POINTER :: dispersion_env
325 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
326 TYPE(qs_ks_env_type), POINTER :: ks_env
327 TYPE(qs_rho_type), POINTER :: rho_struct
328 TYPE(rho_atom_type), DIMENSION(:), POINTER :: rho_atom_set
329 TYPE(section_vals_type), POINTER :: xc_fun_section, xc_section
330 TYPE(xc_rho_cflags_type) :: needs
331
332 CALL timeset(routinen, handle)
333
334 CALL get_qs_env(qs_env, ks_env=ks_env, dft_control=dft_control, pw_env=pw_env, atprop=atprop)
335
336 IF (atprop%energy) THEN
337
338 nspins = dft_control%nspins
339 xc_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC")
340 xc_fun_section => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL")
341 needs = xc_functionals_get_needs(xc_fun_section, (nspins == 2), .true.)
342 gapw = dft_control%qs_control%gapw
343 gapw_xc = dft_control%qs_control%gapw_xc
344
345 ! Nuclear charge correction
346 CALL get_qs_env(qs_env, v_hartree_rspace=v_hartree_rspace)
347 IF (gapw .OR. gapw_xc) THEN
348 CALL get_qs_env(qs_env=qs_env, local_rho_set=local_rho_set, &
349 rho_atom_set=rho_atom_set, ecoul_1c=ecoul_1c, &
350 natom=natom, para_env=para_env)
351 CALL zero_rho_atom_integrals(rho_atom_set)
352 CALL calculate_vxc_atom(qs_env, .false., exc1)
353 IF (gapw) THEN
354 CALL vh_1c_gg_integrals(qs_env, eh1, ecoul_1c, local_rho_set, para_env, tddft=.false.)
355 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
356 CALL integrate_vhg0_rspace(qs_env, v_hartree_rspace, para_env, calculate_forces=.false., &
357 local_rho_set=local_rho_set, atener=atprop%ateb)
358 END IF
359 END IF
360
361 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
362 CALL auxbas_pw_pool%create_pw(xc_den)
363 ALLOCATE (vxc(nspins))
364 DO ispin = 1, nspins
365 CALL auxbas_pw_pool%create_pw(vxc(ispin))
366 END DO
367 IF (needs%tau .OR. needs%tau_spin) THEN
368 ALLOCATE (vtau(nspins))
369 DO ispin = 1, nspins
370 CALL auxbas_pw_pool%create_pw(vtau(ispin))
371 END DO
372 END IF
373
374 IF (gapw_xc) THEN
375 CALL get_qs_env(qs_env, rho_xc=rho_struct, dispersion_env=dispersion_env)
376 ELSE
377 CALL get_qs_env(qs_env, rho=rho_struct, dispersion_env=dispersion_env)
378 END IF
379 IF (needs%tau .OR. needs%tau_spin) THEN
380 CALL qs_xc_density(ks_env, rho_struct, xc_section, dispersion_env=dispersion_env, &
381 xc_den=xc_den, vxc=vxc, vtau=vtau)
382 ELSE
383 CALL qs_xc_density(ks_env, rho_struct, xc_section, dispersion_env=dispersion_env, &
384 xc_den=xc_den, vxc=vxc)
385 END IF
386 CALL get_qs_env(qs_env, rho=rho_struct)
387 CALL qs_rho_get(rho_struct, rho_ao=rho_ao)
388 CALL get_qs_env(qs_env, natom=natom, matrix_s=matrix_s)
389 CALL atprop_array_init(atprop%atexc, natom)
390 ALLOCATE (xcmat(nspins))
391 DO ispin = 1, nspins
392 ALLOCATE (xcmat(ispin)%matrix)
393 CALL dbcsr_create(xcmat(ispin)%matrix, template=matrix_s(1)%matrix)
394 CALL dbcsr_copy(xcmat(ispin)%matrix, matrix_s(1)%matrix)
395 CALL dbcsr_set(xcmat(ispin)%matrix, 0.0_dp)
396 CALL pw_scale(vxc(ispin), -0.5_dp)
397 CALL pw_axpy(xc_den, vxc(ispin))
398 CALL pw_scale(vxc(ispin), vxc(ispin)%pw_grid%dvol)
399 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=vxc(ispin), hmat=xcmat(ispin), &
400 calculate_forces=.false., gapw=(gapw .OR. gapw_xc))
401 IF (needs%tau .OR. needs%tau_spin) THEN
402 CALL pw_scale(vtau(ispin), -0.5_dp*vtau(ispin)%pw_grid%dvol)
403 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=vtau(ispin), &
404 hmat=xcmat(ispin), calculate_forces=.false., &
405 gapw=(gapw .OR. gapw_xc), compute_tau=.true.)
406 END IF
407 END DO
408 IF (gapw .OR. gapw_xc) THEN
409 ! remove one-center potential matrix part
410 CALL qs_rho_get(rho_struct, rho_ao_kp=matrix_p)
411 CALL update_ks_atom(qs_env, xcmat, matrix_p, forces=.false., kscale=-0.5_dp)
412 CALL get_qs_env(qs_env=qs_env, rho_atom_set=rho_atom_set)
413 CALL atprop_array_init(atprop%ate1c, natom)
414 atprop%ate1c = 0.0_dp
415 DO iatom = 1, natom
416 atprop%ate1c(iatom) = atprop%ate1c(iatom) + &
417 rho_atom_set(iatom)%exc_h - rho_atom_set(iatom)%exc_s
418 END DO
419 IF (gapw) THEN
420 CALL get_qs_env(qs_env=qs_env, ecoul_1c=ecoul_1c)
421 DO iatom = 1, natom
422 atprop%ate1c(iatom) = atprop%ate1c(iatom) + &
423 ecoul_1c(iatom)%ecoul_1_h - ecoul_1c(iatom)%ecoul_1_s + &
424 ecoul_1c(iatom)%ecoul_1_z - ecoul_1c(iatom)%ecoul_1_0
425 END DO
426 END IF
427 END IF
428 DO ispin = 1, nspins
429 CALL atom_trace(xcmat(ispin)%matrix, rho_ao(ispin)%matrix, 1.0_dp, atprop%atexc)
430 CALL dbcsr_release(xcmat(ispin)%matrix)
431 DEALLOCATE (xcmat(ispin)%matrix)
432 END DO
433 DEALLOCATE (xcmat)
434
435 CALL auxbas_pw_pool%give_back_pw(xc_den)
436 DO ispin = 1, nspins
437 CALL auxbas_pw_pool%give_back_pw(vxc(ispin))
438 END DO
439 IF (needs%tau .OR. needs%tau_spin) THEN
440 DO ispin = 1, nspins
441 CALL auxbas_pw_pool%give_back_pw(vtau(ispin))
442 END DO
443 END IF
444
445 END IF
446
447 CALL timestop(handle)
448
449 END SUBROUTINE ks_xc_correction
450
451END MODULE qs_energy_utils
Define the atomic kind types and their sub types.
Holds information on atomic properties.
subroutine, public atprop_array_add(array_a, array_b)
...
subroutine, public atprop_array_init(atarray, natom)
...
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
Utilities to set up the control types.
subroutine, public read_ddapc_section(qs_control, qs_section, ddapc_restraint_section)
reads the input parameters needed for ddapc.
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_set(matrix, alpha)
...
subroutine, public dbcsr_release(matrix)
...
calculates the electron transfer coupling elements by projection-operator approach Kondov et al....
subroutine, public calc_et_coupling_proj(qs_env)
calculates the electron transfer coupling elements by projection-operator approach Kondov et al....
calculates the electron transfer coupling elements Wu, Van Voorhis, JCP 125, 164105 (2006)
Definition et_coupling.F:13
subroutine, public calc_et_coupling(qs_env)
...
Definition et_coupling.F:63
subroutine, public vh_1c_gg_integrals(qs_env, energy_hartree_1c, ecoul_1c, local_rho_set, para_env, tddft, local_rho_set_2nd, core_2nd)
Calculates one center GAPW Hartree energies and matrix elements Hartree potentials are input Takes po...
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
Interface to the message passing library MPI.
compute mulliken charges we (currently) define them as c_i = 1/2 [ (PS)_{ii} + (SP)_{ii}...
Definition mulliken.F:13
subroutine, public atom_trace(amat, bmat, factor, atrace)
Compute partial trace of product of two matrices.
Definition mulliken.F:915
subroutine, public post_scf_bandstructure(qs_env, post_scf_bandstructure_section)
Perform post-SCF band structure calculations from higher level methods.
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 ...
Calculation of the core Hamiltonian integral matrix <a|H|b> over Cartesian Gaussian-type functions.
subroutine, public core_matrices(qs_env, matrix_h, matrix_p, calculate_forces, nder, ec_env, dcdr_env, ec_env_matrices, ext_kpoints, basis_type, debug_forces, debug_stress, atcore)
...
Definition of disperson types for DFT calculations.
Utility subroutine for qs energy calculation.
subroutine, public qs_energies_properties(qs_env, calc_forces)
Refactoring of qs_energies_scf. Moves computation of properties into separate subroutine....
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.
Integrate single or product functions over a potential on a RS grid.
Define the quickstep kind type and their sub types.
routines that build the Kohn-Sham matrix contributions coming from local atomic densities
Definition qs_ks_atom.F:12
subroutine, public update_ks_atom(qs_env, ksmat, pmat, forces, tddft, rho_atom_external, kind_set_external, oce_external, sab_external, kscale, kintegral, kforce, fscale)
The correction to the KS matrix due to the GAPW local terms to the hartree and XC contributions is he...
Definition qs_ks_atom.F:110
routines that build the Kohn-Sham matrix (i.e calculate the coulomb and xc parts
subroutine, public qs_ks_update_qs_env(qs_env, calculate_forces, just_energy, print_active)
updates the Kohn Sham matrix of the given qs_env (facility method)
Contains the setup for the calculation of properties by linear response by the application of second ...
subroutine, public linres_calculation_low(qs_env)
Linear response can be called as run type or as post scf calculation Initialize the perturbation envi...
subroutine, public integrate_vhg0_rspace(qs_env, v_rspace, para_env, calculate_forces, local_rho_set, local_rho_set_2nd, atener, kforce, my_pools, my_rs_descs)
...
subroutine, public zero_rho_atom_integrals(rho_atom_set)
...
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...
Routines for the Quickstep SCF run.
Definition qs_scf.F:47
subroutine, public scf(qs_env, has_converged, total_scf_steps)
perform an scf procedure in the given qs_env
Definition qs_scf.F:274
subroutine, public tddfpt(qs_env, calc_forces, rixs_env)
Perform TDDFPT calculation. If calc_forces then it also builds the response vector for the Z-vector m...
routines that build the integrals of the Vxc potential calculated for the atomic density in the basis...
Definition qs_vxc_atom.F:12
subroutine, public calculate_vxc_atom(qs_env, energy_only, exc1, adiabatic_rescale_factor, kind_set_external, rho_atom_set_external, xc_section_external, calculate_forces, composite_vxc_rho, composite_vxc_tau, composite_reference_active, direct_valence_atom_grid, atom_composite_grid)
...
subroutine, public qs_xc_density(ks_env, rho_struct, xc_section, dispersion_env, xc_ener, xc_den, exc, vxc, vtau)
calculates the XC density: E_xc(r) - V_xc(r)*rho(r) or E_xc(r)/rho(r)
Definition qs_vxc.F:1232
Methods for Resonant Inelastic XRAY Scattering (RIXS) calculations.
subroutine, public rixs(qs_env)
Driver for RIXS calculations.
subroutine, public tip_scanning(qs_env, input_section)
Perform tip scanning calculation.
driver for the xas calculation and xas_scf for the tp method
Definition xas_methods.F:15
subroutine, public xas(qs_env, dft_control)
Driver for xas calculations The initial mos are prepared A loop on the atoms to be excited is started...
Methods for X-Ray absorption spectroscopy (XAS) using TDDFPT.
subroutine, public xas_tdp(qs_env, rixs_env)
Driver for XAS TDDFT calculations.
type(xc_rho_cflags_type) function, public xc_functionals_get_needs(functionals, lsd, calc_potential)
...
contains the structure
Provides all information about an atomic kind.
type for the atomic properties
stores all the informations relevant to an mpi environment
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 ...
Provides all information about a quickstep kind.
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
keeps the density in various representations, keeping track of which ones are valid.
contains a flag for each component of xc_rho_set, so that you can use it to tell which components you...