72#include "./base/base_uses.f90"
80 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_energy_utils'
98 LOGICAL,
INTENT(IN) :: calc_forces
100 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_energies_properties'
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
113 post_scf_bands_section, proj_section, &
114 rest_b_section, tip_scan_section
116 NULLIFY (atprop, energy, pw_env)
117 CALL timeset(routinen, handle)
121 dft_control=dft_control, &
125 v_hartree_rspace=v_hartree_rspace, &
128 IF (atprop%energy)
THEN
129 CALL qs_energies_mulliken(qs_env)
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
135 CALL integrate_v_core_rspace(v_hartree_rspace, qs_env)
136 IF (.NOT.
ASSOCIATED(atprop%ateb))
THEN
140 CALL ks_xc_correction(qs_env)
151 ekts = energy%kts/real(natom, kind=
dp)/real(para_env%num_pe, kind=
dp)
152 atprop%atener(:) = atprop%atener(:) + ekts
156 NULLIFY (proj_section)
166 do_et = dft_control%qs_control%et_coupling_calc
168 qs_env%et_coupling%energy = energy%total
169 qs_env%et_coupling%keep_matrix = .true.
170 qs_env%et_coupling%first_run = .true.
172 qs_env%et_coupling%first_run = .false.
173 IF (dft_control%qs_control%ddapc_restraint)
THEN
176 ddapc_restraint_section=rest_b_section)
178 CALL scf(qs_env=qs_env)
179 qs_env%et_coupling%keep_matrix = .true.
187 IF (dft_control%do_xas_calculation)
THEN
188 CALL xas(qs_env, dft_control)
191 IF (dft_control%do_xas_tdp_calculation)
THEN
197 IF (.NOT. qs_env%linres_run)
THEN
202 IF (dft_control%tddfpt2_control%enabled)
THEN
203 CALL tddfpt(qs_env, calc_forces)
207 IF (qs_env%do_rixs)
CALL rixs(qs_env)
210 NULLIFY (post_scf_bands_section)
212 CALL section_vals_get(post_scf_bands_section, explicit=do_post_scf_bandstructure)
213 IF (do_post_scf_bandstructure)
THEN
218 NULLIFY (bse_props_section)
224 NULLIFY (tip_scan_section)
227 IF (do_tip_scan)
THEN
231 CALL timestop(handle)
242 SUBROUTINE qs_energies_mulliken(qs_env)
246 INTEGER :: ispin, natom, nspin
247 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: atcore
251 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_h, matrix_ks, rho_ao
252 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: math, matp
257 IF (atprop%energy)
THEN
258 CALL get_qs_env(qs_env=qs_env, matrix_ks=matrix_ks, matrix_h=matrix_h, rho=rho)
261 atprop%atener = 0._dp
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)
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
275 ALLOCATE (atcore(natom))
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
287 CALL atom_trace(core_mat(1)%matrix, rho_ao(ispin)%matrix, &
288 -0.5_dp, atprop%atener)
292 DEALLOCATE (core_mat(1)%matrix)
293 DEALLOCATE (core_mat)
297 END SUBROUTINE qs_energies_mulliken
303 SUBROUTINE ks_xc_correction(qs_env)
306 CHARACTER(len=*),
PARAMETER :: routinen =
'ks_xc_correction'
308 INTEGER :: handle, iatom, ispin, natom, nspins
309 LOGICAL :: gapw, gapw_xc
310 REAL(kind=
dp) :: eh1, exc1
313 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s, rho_ao, xcmat
314 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_p
325 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
332 CALL timeset(routinen, handle)
334 CALL get_qs_env(qs_env, ks_env=ks_env, dft_control=dft_control, pw_env=pw_env, atprop=atprop)
336 IF (atprop%energy)
THEN
338 nspins = dft_control%nspins
342 gapw = dft_control%qs_control%gapw
343 gapw_xc = dft_control%qs_control%gapw_xc
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)
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)
357 local_rho_set=local_rho_set, atener=atprop%ateb)
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))
365 CALL auxbas_pw_pool%create_pw(vxc(ispin))
367 IF (needs%tau .OR. needs%tau_spin)
THEN
368 ALLOCATE (vtau(nspins))
370 CALL auxbas_pw_pool%create_pw(vtau(ispin))
375 CALL get_qs_env(qs_env, rho_xc=rho_struct, dispersion_env=dispersion_env)
377 CALL get_qs_env(qs_env, rho=rho_struct, dispersion_env=dispersion_env)
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)
383 CALL qs_xc_density(ks_env, rho_struct, xc_section, dispersion_env=dispersion_env, &
384 xc_den=xc_den, vxc=vxc)
388 CALL get_qs_env(qs_env, natom=natom, matrix_s=matrix_s)
390 ALLOCATE (xcmat(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)
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.)
408 IF (gapw .OR. gapw_xc)
THEN
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)
414 atprop%ate1c = 0.0_dp
416 atprop%ate1c(iatom) = atprop%ate1c(iatom) + &
417 rho_atom_set(iatom)%exc_h - rho_atom_set(iatom)%exc_s
420 CALL get_qs_env(qs_env=qs_env, ecoul_1c=ecoul_1c)
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
429 CALL atom_trace(xcmat(ispin)%matrix, rho_ao(ispin)%matrix, 1.0_dp, atprop%atexc)
431 DEALLOCATE (xcmat(ispin)%matrix)
435 CALL auxbas_pw_pool%give_back_pw(xc_den)
437 CALL auxbas_pw_pool%give_back_pw(vxc(ispin))
439 IF (needs%tau .OR. needs%tau_spin)
THEN
441 CALL auxbas_pw_pool%give_back_pw(vtau(ispin))
447 CALL timestop(handle)
449 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)
...
Bethe-Salpeter equation on the RI-AO GW, the GW of PROPERTIESBANDSTRUCTUREGW with explicit three-cent...
subroutine, public bse_from_bs_env(qs_env, bse_section)
Entry from the properties driver after the bandstructure block. Hands the solver core what its kernel...
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, 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
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, 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)
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...