71#include "./base/base_uses.f90"
79 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_energy_utils'
97 LOGICAL,
INTENT(IN) :: calc_forces
99 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_energies_properties'
101 INTEGER :: handle, natom
102 LOGICAL :: do_et, do_et_proj, &
103 do_post_scf_bandstructure, do_tip_scan
104 REAL(kind=
dp) :: ekts
112 proj_section, rest_b_section, &
115 NULLIFY (atprop, energy, pw_env)
116 CALL timeset(routinen, handle)
120 dft_control=dft_control, &
124 v_hartree_rspace=v_hartree_rspace, &
127 IF (atprop%energy)
THEN
128 CALL qs_energies_mulliken(qs_env)
130 IF (.NOT. dft_control%qs_control%semi_empirical .AND. &
131 .NOT. dft_control%qs_control%xtb .AND. &
132 .NOT. dft_control%qs_control%dftb)
THEN
134 CALL integrate_v_core_rspace(v_hartree_rspace, qs_env)
135 IF (.NOT.
ASSOCIATED(atprop%ateb))
THEN
139 CALL ks_xc_correction(qs_env)
150 ekts = energy%kts/real(natom, kind=
dp)/real(para_env%num_pe, kind=
dp)
151 atprop%atener(:) = atprop%atener(:) + ekts
155 NULLIFY (proj_section)
165 do_et = dft_control%qs_control%et_coupling_calc
167 qs_env%et_coupling%energy = energy%total
168 qs_env%et_coupling%keep_matrix = .true.
169 qs_env%et_coupling%first_run = .true.
171 qs_env%et_coupling%first_run = .false.
172 IF (dft_control%qs_control%ddapc_restraint)
THEN
175 ddapc_restraint_section=rest_b_section)
177 CALL scf(qs_env=qs_env)
178 qs_env%et_coupling%keep_matrix = .true.
186 IF (dft_control%do_xas_calculation)
THEN
187 CALL xas(qs_env, dft_control)
190 IF (dft_control%do_xas_tdp_calculation)
THEN
196 IF (.NOT. qs_env%linres_run)
THEN
201 IF (dft_control%tddfpt2_control%enabled)
THEN
202 CALL tddfpt(qs_env, calc_forces)
206 IF (qs_env%do_rixs)
CALL rixs(qs_env)
209 NULLIFY (post_scf_bands_section)
211 CALL section_vals_get(post_scf_bands_section, explicit=do_post_scf_bandstructure)
212 IF (do_post_scf_bandstructure)
THEN
217 NULLIFY (tip_scan_section)
220 IF (do_tip_scan)
THEN
224 CALL timestop(handle)
235 SUBROUTINE qs_energies_mulliken(qs_env)
239 INTEGER :: ispin, natom, nspin
240 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: atcore
244 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_h, matrix_ks, rho_ao
245 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: math, matp
250 IF (atprop%energy)
THEN
251 CALL get_qs_env(qs_env=qs_env, matrix_ks=matrix_ks, matrix_h=matrix_h, rho=rho)
254 atprop%atener = 0._dp
257 CALL atom_trace(matrix_h(1)%matrix, rho_ao(ispin)%matrix, &
258 0.5_dp, atprop%atener)
259 CALL atom_trace(matrix_ks(ispin)%matrix, rho_ao(ispin)%matrix, &
260 0.5_dp, atprop%atener)
263 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
264 IF (.NOT. dft_control%qs_control%semi_empirical .AND. &
265 .NOT. dft_control%qs_control%xtb .AND. &
266 .NOT. dft_control%qs_control%dftb)
THEN
268 ALLOCATE (atcore(natom))
270 ALLOCATE (core_mat(1))
271 ALLOCATE (core_mat(1)%matrix)
272 CALL dbcsr_create(core_mat(1)%matrix, template=matrix_h(1)%matrix)
273 CALL dbcsr_copy(core_mat(1)%matrix, matrix_h(1)%matrix)
274 CALL dbcsr_set(core_mat(1)%matrix, 0.0_dp)
275 math(1:1, 1:1) => core_mat(1:1)
276 matp(1:nspin, 1:1) => rho_ao(1:nspin)
277 CALL core_matrices(qs_env, math, matp, .false., 0, atcore=atcore)
278 atprop%atener = atprop%atener + 0.5_dp*atcore
280 CALL atom_trace(core_mat(1)%matrix, rho_ao(ispin)%matrix, &
281 -0.5_dp, atprop%atener)
285 DEALLOCATE (core_mat(1)%matrix)
286 DEALLOCATE (core_mat)
290 END SUBROUTINE qs_energies_mulliken
296 SUBROUTINE ks_xc_correction(qs_env)
299 CHARACTER(len=*),
PARAMETER :: routinen =
'ks_xc_correction'
301 INTEGER :: handle, iatom, ispin, natom, nspins
302 LOGICAL :: gapw, gapw_xc
303 REAL(kind=
dp) :: eh1, exc1
306 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s, rho_ao, xcmat
307 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_p
318 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
325 CALL timeset(routinen, handle)
327 CALL get_qs_env(qs_env, ks_env=ks_env, dft_control=dft_control, pw_env=pw_env, atprop=atprop)
329 IF (atprop%energy)
THEN
331 nspins = dft_control%nspins
335 gapw = dft_control%qs_control%gapw
336 gapw_xc = dft_control%qs_control%gapw_xc
339 CALL get_qs_env(qs_env, v_hartree_rspace=v_hartree_rspace)
340 IF (gapw .OR. gapw_xc)
THEN
341 CALL get_qs_env(qs_env=qs_env, local_rho_set=local_rho_set, &
342 rho_atom_set=rho_atom_set, ecoul_1c=ecoul_1c, &
343 natom=natom, para_env=para_env)
347 CALL vh_1c_gg_integrals(qs_env, eh1, ecoul_1c, local_rho_set, para_env, tddft=.false.)
348 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
350 local_rho_set=local_rho_set, atener=atprop%ateb)
354 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
355 CALL auxbas_pw_pool%create_pw(xc_den)
356 ALLOCATE (vxc(nspins))
358 CALL auxbas_pw_pool%create_pw(vxc(ispin))
360 IF (needs%tau .OR. needs%tau_spin)
THEN
361 ALLOCATE (vtau(nspins))
363 CALL auxbas_pw_pool%create_pw(vtau(ispin))
368 CALL get_qs_env(qs_env, rho_xc=rho_struct, dispersion_env=dispersion_env)
370 CALL get_qs_env(qs_env, rho=rho_struct, dispersion_env=dispersion_env)
372 IF (needs%tau .OR. needs%tau_spin)
THEN
373 CALL qs_xc_density(ks_env, rho_struct, xc_section, dispersion_env=dispersion_env, &
374 xc_den=xc_den, vxc=vxc, vtau=vtau)
376 CALL qs_xc_density(ks_env, rho_struct, xc_section, dispersion_env=dispersion_env, &
377 xc_den=xc_den, vxc=vxc)
381 CALL get_qs_env(qs_env, natom=natom, matrix_s=matrix_s)
383 ALLOCATE (xcmat(nspins))
385 ALLOCATE (xcmat(ispin)%matrix)
386 CALL dbcsr_create(xcmat(ispin)%matrix, template=matrix_s(1)%matrix)
387 CALL dbcsr_copy(xcmat(ispin)%matrix, matrix_s(1)%matrix)
388 CALL dbcsr_set(xcmat(ispin)%matrix, 0.0_dp)
390 CALL pw_axpy(xc_den, vxc(ispin))
391 CALL pw_scale(vxc(ispin), vxc(ispin)%pw_grid%dvol)
392 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=vxc(ispin), hmat=xcmat(ispin), &
393 calculate_forces=.false., gapw=(gapw .OR. gapw_xc))
394 IF (needs%tau .OR. needs%tau_spin)
THEN
395 CALL pw_scale(vtau(ispin), -0.5_dp*vtau(ispin)%pw_grid%dvol)
396 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=vtau(ispin), &
397 hmat=xcmat(ispin), calculate_forces=.false., &
398 gapw=(gapw .OR. gapw_xc), compute_tau=.true.)
401 IF (gapw .OR. gapw_xc)
THEN
403 CALL qs_rho_get(rho_struct, rho_ao_kp=matrix_p)
404 CALL update_ks_atom(qs_env, xcmat, matrix_p, forces=.false., kscale=-0.5_dp)
405 CALL get_qs_env(qs_env=qs_env, rho_atom_set=rho_atom_set)
407 atprop%ate1c = 0.0_dp
409 atprop%ate1c(iatom) = atprop%ate1c(iatom) + &
410 rho_atom_set(iatom)%exc_h - rho_atom_set(iatom)%exc_s
413 CALL get_qs_env(qs_env=qs_env, ecoul_1c=ecoul_1c)
415 atprop%ate1c(iatom) = atprop%ate1c(iatom) + &
416 ecoul_1c(iatom)%ecoul_1_h - ecoul_1c(iatom)%ecoul_1_s + &
417 ecoul_1c(iatom)%ecoul_1_z - ecoul_1c(iatom)%ecoul_1_0
422 CALL atom_trace(xcmat(ispin)%matrix, rho_ao(ispin)%matrix, 1.0_dp, atprop%atexc)
424 DEALLOCATE (xcmat(ispin)%matrix)
428 CALL auxbas_pw_pool%give_back_pw(xc_den)
430 CALL auxbas_pw_pool%give_back_pw(vxc(ispin))
432 IF (needs%tau .OR. needs%tau_spin)
THEN
434 CALL auxbas_pw_pool%give_back_pw(vtau(ispin))
440 CALL timestop(handle)
442 END SUBROUTINE ks_xc_correction
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)
subroutine, public calc_et_coupling(qs_env)
...
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...
Defines the basic variable types.
integer, parameter, public dp
Interface to the message passing library MPI.
compute mulliken charges we (currently) define them as c_i = 1/2 [ (PS)_{ii} + (SP)_{ii} ]
subroutine, public atom_trace(amat, bmat, factor, atrace)
Compute partial trace of product of two matrices.
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, 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, 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, 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, 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
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...
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.
subroutine, public scf(qs_env, has_converged, total_scf_steps)
perform an scf procedure in the given qs_env
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...
subroutine, public calculate_vxc_atom(qs_env, energy_only, exc1, adiabatic_rescale_factor, kind_set_external, rho_atom_set_external, xc_section_external)
...
subroutine, public qs_xc_density(ks_env, rho_struct, xc_section, dispersion_env, xc_ener, xc_den, vxc, vtau)
calculates the XC density: E_xc(r) - V_xc(r)*rho(r) or E_xc(r)/rho(r)
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
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)
...
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...