71#include "./base/base_uses.f90"
79 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_energy_utils'
96 LOGICAL,
INTENT(IN) :: calc_forces
98 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_energies_properties'
100 INTEGER :: handle, natom
101 LOGICAL :: do_et, do_et_proj, &
102 do_post_scf_bandstructure, do_tip_scan
103 REAL(kind=
dp) :: ekts
111 proj_section, rest_b_section, &
114 NULLIFY (atprop, energy, pw_env)
115 CALL timeset(routinen, handle)
119 dft_control=dft_control, &
123 v_hartree_rspace=v_hartree_rspace, &
126 IF (atprop%energy)
THEN
127 CALL qs_energies_mulliken(qs_env)
129 IF (.NOT. dft_control%qs_control%semi_empirical .AND. &
130 .NOT. dft_control%qs_control%xtb .AND. &
131 .NOT. dft_control%qs_control%dftb)
THEN
133 CALL integrate_v_core_rspace(v_hartree_rspace, qs_env)
134 IF (.NOT.
ASSOCIATED(atprop%ateb))
THEN
138 CALL ks_xc_correction(qs_env)
149 ekts = energy%kts/real(natom, kind=
dp)/real(para_env%num_pe, kind=
dp)
150 atprop%atener(:) = atprop%atener(:) + ekts
154 NULLIFY (proj_section)
164 do_et = dft_control%qs_control%et_coupling_calc
166 qs_env%et_coupling%energy = energy%total
167 qs_env%et_coupling%keep_matrix = .true.
168 qs_env%et_coupling%first_run = .true.
170 qs_env%et_coupling%first_run = .false.
171 IF (dft_control%qs_control%ddapc_restraint)
THEN
174 ddapc_restraint_section=rest_b_section)
176 CALL scf(qs_env=qs_env)
177 qs_env%et_coupling%keep_matrix = .true.
185 IF (dft_control%do_xas_calculation)
THEN
186 CALL xas(qs_env, dft_control)
189 IF (dft_control%do_xas_tdp_calculation)
THEN
194 IF (.NOT. qs_env%linres_run)
THEN
198 IF (dft_control%tddfpt2_control%enabled)
THEN
199 CALL tddfpt(qs_env, calc_forces)
203 IF (qs_env%do_rixs)
CALL rixs(qs_env)
206 NULLIFY (post_scf_bands_section)
208 CALL section_vals_get(post_scf_bands_section, explicit=do_post_scf_bandstructure)
209 IF (do_post_scf_bandstructure)
THEN
214 NULLIFY (tip_scan_section)
217 IF (do_tip_scan)
THEN
221 CALL timestop(handle)
232 SUBROUTINE qs_energies_mulliken(qs_env)
236 INTEGER :: ispin, natom, nspin
237 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: atcore
241 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_h, matrix_ks, rho_ao
242 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: math, matp
247 IF (atprop%energy)
THEN
248 CALL get_qs_env(qs_env=qs_env, matrix_ks=matrix_ks, matrix_h=matrix_h, rho=rho)
251 atprop%atener = 0._dp
254 CALL atom_trace(matrix_h(1)%matrix, rho_ao(ispin)%matrix, &
255 0.5_dp, atprop%atener)
256 CALL atom_trace(matrix_ks(ispin)%matrix, rho_ao(ispin)%matrix, &
257 0.5_dp, atprop%atener)
260 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
261 IF (.NOT. dft_control%qs_control%semi_empirical .AND. &
262 .NOT. dft_control%qs_control%xtb .AND. &
263 .NOT. dft_control%qs_control%dftb)
THEN
265 ALLOCATE (atcore(natom))
267 ALLOCATE (core_mat(1))
268 ALLOCATE (core_mat(1)%matrix)
269 CALL dbcsr_create(core_mat(1)%matrix, template=matrix_h(1)%matrix)
270 CALL dbcsr_copy(core_mat(1)%matrix, matrix_h(1)%matrix)
271 CALL dbcsr_set(core_mat(1)%matrix, 0.0_dp)
272 math(1:1, 1:1) => core_mat(1:1)
273 matp(1:nspin, 1:1) => rho_ao(1:nspin)
274 CALL core_matrices(qs_env, math, matp, .false., 0, atcore=atcore)
275 atprop%atener = atprop%atener + 0.5_dp*atcore
277 CALL atom_trace(core_mat(1)%matrix, rho_ao(ispin)%matrix, &
278 -0.5_dp, atprop%atener)
282 DEALLOCATE (core_mat(1)%matrix)
283 DEALLOCATE (core_mat)
287 END SUBROUTINE qs_energies_mulliken
293 SUBROUTINE ks_xc_correction(qs_env)
296 CHARACTER(len=*),
PARAMETER :: routinen =
'ks_xc_correction'
298 INTEGER :: handle, iatom, ispin, natom, nspins
299 LOGICAL :: gapw, gapw_xc
300 REAL(kind=
dp) :: eh1, exc1
303 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s, rho_ao, xcmat
304 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_p
315 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
322 CALL timeset(routinen, handle)
324 CALL get_qs_env(qs_env, ks_env=ks_env, dft_control=dft_control, pw_env=pw_env, atprop=atprop)
326 IF (atprop%energy)
THEN
328 nspins = dft_control%nspins
332 gapw = dft_control%qs_control%gapw
333 gapw_xc = dft_control%qs_control%gapw_xc
336 CALL get_qs_env(qs_env, v_hartree_rspace=v_hartree_rspace)
337 IF (gapw .OR. gapw_xc)
THEN
338 CALL get_qs_env(qs_env=qs_env, local_rho_set=local_rho_set, &
339 rho_atom_set=rho_atom_set, ecoul_1c=ecoul_1c, &
340 natom=natom, para_env=para_env)
344 CALL vh_1c_gg_integrals(qs_env, eh1, ecoul_1c, local_rho_set, para_env, tddft=.false.)
345 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
347 local_rho_set=local_rho_set, atener=atprop%ateb)
351 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
352 CALL auxbas_pw_pool%create_pw(xc_den)
353 ALLOCATE (vxc(nspins))
355 CALL auxbas_pw_pool%create_pw(vxc(ispin))
357 IF (needs%tau .OR. needs%tau_spin)
THEN
358 ALLOCATE (vtau(nspins))
360 CALL auxbas_pw_pool%create_pw(vtau(ispin))
365 CALL get_qs_env(qs_env, rho_xc=rho_struct, dispersion_env=dispersion_env)
367 CALL get_qs_env(qs_env, rho=rho_struct, dispersion_env=dispersion_env)
369 IF (needs%tau .OR. needs%tau_spin)
THEN
370 CALL qs_xc_density(ks_env, rho_struct, xc_section, dispersion_env=dispersion_env, &
371 xc_den=xc_den, vxc=vxc, vtau=vtau)
373 CALL qs_xc_density(ks_env, rho_struct, xc_section, dispersion_env=dispersion_env, &
374 xc_den=xc_den, vxc=vxc)
378 CALL get_qs_env(qs_env, natom=natom, matrix_s=matrix_s)
380 ALLOCATE (xcmat(nspins))
382 ALLOCATE (xcmat(ispin)%matrix)
383 CALL dbcsr_create(xcmat(ispin)%matrix, template=matrix_s(1)%matrix)
384 CALL dbcsr_copy(xcmat(ispin)%matrix, matrix_s(1)%matrix)
385 CALL dbcsr_set(xcmat(ispin)%matrix, 0.0_dp)
387 CALL pw_axpy(xc_den, vxc(ispin))
388 CALL pw_scale(vxc(ispin), vxc(ispin)%pw_grid%dvol)
389 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=vxc(ispin), hmat=xcmat(ispin), &
390 calculate_forces=.false., gapw=(gapw .OR. gapw_xc))
391 IF (needs%tau .OR. needs%tau_spin)
THEN
392 CALL pw_scale(vtau(ispin), -0.5_dp*vtau(ispin)%pw_grid%dvol)
393 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=vtau(ispin), &
394 hmat=xcmat(ispin), calculate_forces=.false., &
395 gapw=(gapw .OR. gapw_xc), compute_tau=.true.)
398 IF (gapw .OR. gapw_xc)
THEN
400 CALL qs_rho_get(rho_struct, rho_ao_kp=matrix_p)
401 CALL update_ks_atom(qs_env, xcmat, matrix_p, forces=.false., kscale=-0.5_dp)
402 CALL get_qs_env(qs_env=qs_env, rho_atom_set=rho_atom_set)
404 atprop%ate1c = 0.0_dp
406 atprop%ate1c(iatom) = atprop%ate1c(iatom) + &
407 rho_atom_set(iatom)%exc_h - rho_atom_set(iatom)%exc_s
410 CALL get_qs_env(qs_env=qs_env, ecoul_1c=ecoul_1c)
412 atprop%ate1c(iatom) = atprop%ate1c(iatom) + &
413 ecoul_1c(iatom)%ecoul_1_h - ecoul_1c(iatom)%ecoul_1_s + &
414 ecoul_1c(iatom)%ecoul_1_z - ecoul_1c(iatom)%ecoul_1_0
419 CALL atom_trace(xcmat(ispin)%matrix, rho_ao(ispin)%matrix, 1.0_dp, atprop%atexc)
421 DEALLOCATE (xcmat(ispin)%matrix)
425 CALL auxbas_pw_pool%give_back_pw(xc_den)
427 CALL auxbas_pw_pool%give_back_pw(vxc(ispin))
429 IF (needs%tau .OR. needs%tau_spin)
THEN
431 CALL auxbas_pw_pool%give_back_pw(vtau(ispin))
437 CALL timestop(handle)
439 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, 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, 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.
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, gradient_atom_set, 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...