70#include "./base/base_uses.f90"
78 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_energy_utils'
95 LOGICAL,
INTENT(IN) :: calc_forces
97 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_energies_properties'
99 INTEGER :: handle, natom
100 LOGICAL :: do_et, do_et_proj, &
101 do_post_scf_bandstructure, do_tip_scan
102 REAL(kind=
dp) :: ekts
110 proj_section, rest_b_section, &
113 NULLIFY (atprop, energy, pw_env)
114 CALL timeset(routinen, handle)
118 dft_control=dft_control, &
122 v_hartree_rspace=v_hartree_rspace, &
125 IF (atprop%energy)
THEN
126 CALL qs_energies_mulliken(qs_env)
128 IF (.NOT. dft_control%qs_control%semi_empirical .AND. &
129 .NOT. dft_control%qs_control%xtb .AND. &
130 .NOT. dft_control%qs_control%dftb)
THEN
132 CALL integrate_v_core_rspace(v_hartree_rspace, qs_env)
133 IF (.NOT.
ASSOCIATED(atprop%ateb))
THEN
137 CALL ks_xc_correction(qs_env)
148 ekts = energy%kts/real(natom, kind=
dp)/real(para_env%num_pe, kind=
dp)
149 atprop%atener(:) = atprop%atener(:) + ekts
153 NULLIFY (proj_section)
163 do_et = dft_control%qs_control%et_coupling_calc
165 qs_env%et_coupling%energy = energy%total
166 qs_env%et_coupling%keep_matrix = .true.
167 qs_env%et_coupling%first_run = .true.
169 qs_env%et_coupling%first_run = .false.
170 IF (dft_control%qs_control%ddapc_restraint)
THEN
173 ddapc_restraint_section=rest_b_section)
175 CALL scf(qs_env=qs_env)
176 qs_env%et_coupling%keep_matrix = .true.
183 IF (dft_control%do_xas_calculation)
THEN
184 CALL xas(qs_env, dft_control)
187 IF (dft_control%do_xas_tdp_calculation)
THEN
192 IF (.NOT. qs_env%linres_run)
THEN
196 IF (dft_control%tddfpt2_control%enabled)
THEN
197 CALL tddfpt(qs_env, calc_forces)
201 NULLIFY (post_scf_bands_section)
203 CALL section_vals_get(post_scf_bands_section, explicit=do_post_scf_bandstructure)
204 IF (do_post_scf_bandstructure)
THEN
209 NULLIFY (tip_scan_section)
212 IF (do_tip_scan)
THEN
216 CALL timestop(handle)
227 SUBROUTINE qs_energies_mulliken(qs_env)
231 INTEGER :: ispin, natom, nspin
232 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: atcore
236 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_h, matrix_ks, rho_ao
237 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: math, matp
242 IF (atprop%energy)
THEN
243 CALL get_qs_env(qs_env=qs_env, matrix_ks=matrix_ks, matrix_h=matrix_h, rho=rho)
246 atprop%atener = 0._dp
249 CALL atom_trace(matrix_h(1)%matrix, rho_ao(ispin)%matrix, &
250 0.5_dp, atprop%atener)
251 CALL atom_trace(matrix_ks(ispin)%matrix, rho_ao(ispin)%matrix, &
252 0.5_dp, atprop%atener)
255 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
256 IF (.NOT. dft_control%qs_control%semi_empirical .AND. &
257 .NOT. dft_control%qs_control%xtb .AND. &
258 .NOT. dft_control%qs_control%dftb)
THEN
260 ALLOCATE (atcore(natom))
262 ALLOCATE (core_mat(1))
263 ALLOCATE (core_mat(1)%matrix)
264 CALL dbcsr_create(core_mat(1)%matrix, template=matrix_h(1)%matrix)
265 CALL dbcsr_copy(core_mat(1)%matrix, matrix_h(1)%matrix)
266 CALL dbcsr_set(core_mat(1)%matrix, 0.0_dp)
267 math(1:1, 1:1) => core_mat(1:1)
268 matp(1:nspin, 1:1) => rho_ao(1:nspin)
269 CALL core_matrices(qs_env, math, matp, .false., 0, atcore=atcore)
270 atprop%atener = atprop%atener + 0.5_dp*atcore
272 CALL atom_trace(core_mat(1)%matrix, rho_ao(ispin)%matrix, &
273 -0.5_dp, atprop%atener)
277 DEALLOCATE (core_mat(1)%matrix)
278 DEALLOCATE (core_mat)
282 END SUBROUTINE qs_energies_mulliken
288 SUBROUTINE ks_xc_correction(qs_env)
291 CHARACTER(len=*),
PARAMETER :: routinen =
'ks_xc_correction'
293 INTEGER :: handle, iatom, ispin, natom, nspins
294 LOGICAL :: gapw, gapw_xc
295 REAL(kind=
dp) :: eh1, exc1
298 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s, rho_ao, xcmat
299 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_p
310 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
317 CALL timeset(routinen, handle)
319 CALL get_qs_env(qs_env, ks_env=ks_env, dft_control=dft_control, pw_env=pw_env, atprop=atprop)
321 IF (atprop%energy)
THEN
323 nspins = dft_control%nspins
327 gapw = dft_control%qs_control%gapw
328 gapw_xc = dft_control%qs_control%gapw_xc
331 CALL get_qs_env(qs_env, v_hartree_rspace=v_hartree_rspace)
332 IF (gapw .OR. gapw_xc)
THEN
333 CALL get_qs_env(qs_env=qs_env, local_rho_set=local_rho_set, &
334 rho_atom_set=rho_atom_set, ecoul_1c=ecoul_1c, &
335 natom=natom, para_env=para_env)
339 CALL vh_1c_gg_integrals(qs_env, eh1, ecoul_1c, local_rho_set, para_env, tddft=.false.)
340 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
342 local_rho_set=local_rho_set, atener=atprop%ateb)
346 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
347 CALL auxbas_pw_pool%create_pw(xc_den)
348 ALLOCATE (vxc(nspins))
350 CALL auxbas_pw_pool%create_pw(vxc(ispin))
352 IF (needs%tau .OR. needs%tau_spin)
THEN
353 ALLOCATE (vtau(nspins))
355 CALL auxbas_pw_pool%create_pw(vtau(ispin))
360 CALL get_qs_env(qs_env, rho_xc=rho_struct, dispersion_env=dispersion_env)
362 CALL get_qs_env(qs_env, rho=rho_struct, dispersion_env=dispersion_env)
364 IF (needs%tau .OR. needs%tau_spin)
THEN
365 CALL qs_xc_density(ks_env, rho_struct, xc_section, dispersion_env=dispersion_env, &
366 xc_den=xc_den, vxc=vxc, vtau=vtau)
368 CALL qs_xc_density(ks_env, rho_struct, xc_section, dispersion_env=dispersion_env, &
369 xc_den=xc_den, vxc=vxc)
373 CALL get_qs_env(qs_env, natom=natom, matrix_s=matrix_s)
375 ALLOCATE (xcmat(nspins))
377 ALLOCATE (xcmat(ispin)%matrix)
378 CALL dbcsr_create(xcmat(ispin)%matrix, template=matrix_s(1)%matrix)
379 CALL dbcsr_copy(xcmat(ispin)%matrix, matrix_s(1)%matrix)
380 CALL dbcsr_set(xcmat(ispin)%matrix, 0.0_dp)
382 CALL pw_axpy(xc_den, vxc(ispin))
383 CALL pw_scale(vxc(ispin), vxc(ispin)%pw_grid%dvol)
384 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=vxc(ispin), hmat=xcmat(ispin), &
385 calculate_forces=.false., gapw=(gapw .OR. gapw_xc))
386 IF (needs%tau .OR. needs%tau_spin)
THEN
387 CALL pw_scale(vtau(ispin), -0.5_dp*vtau(ispin)%pw_grid%dvol)
388 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=vtau(ispin), &
389 hmat=xcmat(ispin), calculate_forces=.false., &
390 gapw=(gapw .OR. gapw_xc), compute_tau=.true.)
393 IF (gapw .OR. gapw_xc)
THEN
395 CALL qs_rho_get(rho_struct, rho_ao_kp=matrix_p)
396 CALL update_ks_atom(qs_env, xcmat, matrix_p, forces=.false., kscale=-0.5_dp)
397 CALL get_qs_env(qs_env=qs_env, rho_atom_set=rho_atom_set)
399 atprop%ate1c = 0.0_dp
401 atprop%ate1c(iatom) = atprop%ate1c(iatom) + &
402 rho_atom_set(iatom)%exc_h - rho_atom_set(iatom)%exc_s
405 CALL get_qs_env(qs_env=qs_env, ecoul_1c=ecoul_1c)
407 atprop%ate1c(iatom) = atprop%ate1c(iatom) + &
408 ecoul_1c(iatom)%ecoul_1_h - ecoul_1c(iatom)%ecoul_1_s + &
409 ecoul_1c(iatom)%ecoul_1_z - ecoul_1c(iatom)%ecoul_1_0
414 CALL atom_trace(xcmat(ispin)%matrix, rho_ao(ispin)%matrix, 1.0_dp, atprop%atexc)
416 DEALLOCATE (xcmat(ispin)%matrix)
420 CALL auxbas_pw_pool%give_back_pw(xc_den)
422 CALL auxbas_pw_pool%give_back_pw(vxc(ispin))
424 IF (needs%tau .OR. needs%tau_spin)
THEN
426 CALL auxbas_pw_pool%give_back_pw(vtau(ispin))
432 CALL timestop(handle)
434 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, 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)
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)
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)
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)
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...