57#include "./base/base_uses.f90"
63 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_local_properties'
83 CHARACTER(LEN=*),
PARAMETER :: routinen =
'qs_local_energy'
85 INTEGER :: handle, img, iounit, ispin, nimages, &
87 LOGICAL :: gapw, gapw_xc
88 REAL(kind=
dp) :: eban, eband, eh, exc, ovol
91 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_ks, matrix_s, matrix_w, rho_ao_kp
107 CALL timeset(routinen, handle)
111 cpassert(
ASSOCIATED(qs_env))
116 CALL get_qs_env(qs_env, nkind=nkind, dft_control=dft_control)
117 gapw = dft_control%qs_control%gapw
118 gapw_xc = dft_control%qs_control%gapw_xc
120 nimages = dft_control%nimages
121 nspins = dft_control%nspins
125 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
126 CALL auxbas_pw_pool%create_pw(band_density)
127 CALL auxbas_pw_pool%create_pw(hartree_density)
128 CALL auxbas_pw_pool%create_pw(xc_density)
132 IF (.NOT.
ASSOCIATED(matrix_w))
THEN
135 matrix_s_kp=matrix_s)
136 matrix => matrix_s(1, 1)%matrix
140 ALLOCATE (matrix_w(ispin, img)%matrix)
141 CALL dbcsr_copy(matrix_w(ispin, img)%matrix, matrix, name=
"W MATRIX")
142 CALL dbcsr_set(matrix_w(ispin, img)%matrix, 0.0_dp)
149 CALL get_qs_env(qs_env, ks_env=ks_env, matrix_w_kp=matrix_w)
150 CALL auxbas_pw_pool%create_pw(edens_r)
151 CALL auxbas_pw_pool%create_pw(edens_g)
154 rho_ao => matrix_w(ispin, :)
157 rho_gspace=edens_g, &
158 ks_env=ks_env, soft_valid=(gapw .OR. gapw_xc))
159 CALL pw_axpy(edens_r, band_density)
161 CALL auxbas_pw_pool%give_back_pw(edens_r)
162 CALL auxbas_pw_pool%give_back_pw(edens_g)
165 ALLOCATE (rho_tot_gspace, rho_tot_rspace)
166 CALL auxbas_pw_pool%create_pw(rho_tot_gspace)
167 CALL auxbas_pw_pool%create_pw(rho_tot_rspace)
170 v_hartree_rspace=v_hartree_rspace, &
171 rho_core=rho_core, rho=rho)
173 IF (
ASSOCIATED(rho_core))
THEN
180 CALL pw_axpy(rho_r(ispin), rho_tot_rspace, alpha=-1.0_dp)
183 ovol = 0.5_dp/hartree_density%pw_grid%dvol
184 CALL pw_multiply(hartree_density, v_hartree_rspace, rho_tot_rspace, alpha=ovol)
185 CALL auxbas_pw_pool%give_back_pw(rho_tot_gspace)
186 CALL auxbas_pw_pool%give_back_pw(rho_tot_rspace)
187 DEALLOCATE (rho_tot_gspace, rho_tot_rspace)
189 IF (dft_control%do_admm)
THEN
190 CALL cp_warn(__location__,
"ADMM not supported for local energy calculation")
192 IF (gapw_xc .OR. gapw)
THEN
193 CALL cp_warn(__location__,
"GAPW/GAPW_XC not supported for local energy calculation")
198 CALL get_qs_env(qs_env=qs_env, rho=rho_struct)
200 CALL qs_xc_density(ks_env, rho_struct, xc_section, xc_ener=xc_density)
209 CALL get_qs_env(qs_env, matrix_ks_kp=matrix_ks)
214 CALL pw_copy(band_density, energy_density)
215 CALL pw_axpy(hartree_density, energy_density)
216 CALL pw_axpy(xc_density, energy_density)
219 WRITE (unit=iounit, fmt=
"(/,T3,A)") repeat(
"=", 78)
220 WRITE (unit=iounit, fmt=
"(T4,A,T52,A,T75,A)")
"Local Energy Calculation",
"GPW/GAPW",
"Local"
221 WRITE (unit=iounit, fmt=
"(T4,A,T45,F15.8,T65,F15.8)")
"Band Energy", eband, eban
222 WRITE (unit=iounit, fmt=
"(T4,A,T65,F15.8)")
"Hartree Energy Correction", eh
223 WRITE (unit=iounit, fmt=
"(T4,A,T65,F15.8)")
"XC Energy Correction", exc
224 WRITE (unit=iounit, fmt=
"(T4,A,T45,F15.8,T65,F15.8)")
"Total Energy", &
225 energy%total, eban + eh + exc + energy%core_overlap + energy%core_self + energy%dispersion
226 WRITE (unit=iounit, fmt=
"(T3,A)") repeat(
"=", 78)
230 CALL auxbas_pw_pool%give_back_pw(band_density)
231 CALL auxbas_pw_pool%give_back_pw(hartree_density)
232 CALL auxbas_pw_pool%give_back_pw(xc_density)
234 CALL timestop(handle)
250 INTENT(INOUT),
OPTIONAL :: stress_tensor
251 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: beta
253 CHARACTER(LEN=*),
PARAMETER :: routinen =
'qs_local_stress'
255 INTEGER :: handle, i, iounit, j, nimages, nkind, &
257 LOGICAL :: do_stress, gapw, gapw_xc, use_virial
258 REAL(kind=
dp) :: my_beta
259 REAL(kind=
dp),
DIMENSION(3, 3) :: pv_loc
273 CALL cp_warn(__location__,
"Local Stress Tensor code is not working, skipping")
276 CALL timeset(routinen, handle)
281 cpassert(
ASSOCIATED(qs_env))
283 IF (
PRESENT(stress_tensor))
THEN
288 IF (
PRESENT(beta))
THEN
298 CALL cp_warn(__location__,
"Local Stress Tensor code is not tested")
302 CALL get_qs_env(qs_env, nkind=nkind, dft_control=dft_control)
303 gapw = dft_control%qs_control%gapw
304 gapw_xc = dft_control%qs_control%gapw_xc
306 nimages = dft_control%nimages
307 nspins = dft_control%nspins
311 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
312 CALL auxbas_pw_pool%create_pw(xc_density)
318 CALL pw_zero(stress_tensor(i, j))
323 IF (dft_control%do_admm)
THEN
324 CALL cp_warn(__location__,
"ADMM not supported for local energy calculation")
326 IF (gapw_xc .OR. gapw)
THEN
327 CALL cp_warn(__location__,
"GAPW/GAPW_XC not supported for local energy calculation")
330 CALL get_qs_env(qs_env, ks_env=ks_env, input=input, rho=rho_struct)
333 CALL qs_xc_density(ks_env, rho_struct, xc_section, xc_ener=xc_density)
336 CALL get_qs_env(qs_env, v_hartree_rspace=v_hartree_rspace)
337 CALL auxbas_pw_pool%create_pw(v_hartree_gspace)
338 CALL pw_transfer(v_hartree_rspace, v_hartree_gspace)
340 CALL auxbas_pw_pool%create_pw(efield(i))
341 CALL pw_copy(v_hartree_gspace, efield(i))
346 CALL auxbas_pw_pool%give_back_pw(v_hartree_gspace)
348 CALL auxbas_pw_pool%give_back_pw(efield(i))
354 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
355 IF (.NOT. use_virial)
THEN
356 CALL cp_warn(__location__,
"Local stress should be used with standard stress calculation.")
358 IF (iounit > 0 .AND. use_virial)
THEN
359 WRITE (unit=iounit, fmt=
"(/,T3,A)") repeat(
"=", 78)
360 WRITE (unit=iounit, fmt=
"(T4,A)")
"Local Stress Calculation"
361 WRITE (unit=iounit, fmt=
"(T42,A,T64,A)")
" 1/3 Trace",
" Determinant"
362 WRITE (unit=iounit, fmt=
"(T4,A,T42,F16.8,T64,F16.8)")
"Total Stress", &
363 (pv_loc(1, 1) + pv_loc(2, 2) + pv_loc(3, 3))/3.0_dp,
det_3x3(pv_loc)
364 WRITE (unit=iounit, fmt=
"(T3,A)") repeat(
"=", 78)
367 CALL timestop(handle)
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public filippetti2000
integer, save, public cohen2000
integer, save, public rogers2002
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_set(matrix, alpha)
...
DBCSR operations in CP2K.
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
Defines the basic variable types.
integer, parameter, public dp
Collection of simple mathematical functions and subroutines.
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
subroutine, public pw_derive(pw, n)
Calculate the derivative of a plane wave vector.
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
Calculate the plane wave density by collocating the primitive Gaussian functions (pgf).
subroutine, public calculate_rho_elec(matrix_p, matrix_p_kp, rho, rho_gspace, total_rho, ks_env, soft_valid, compute_tau, compute_grad, basis_type, der_type, idir, task_list_external, pw_env_external)
computes the density corresponding to a given density matrix on the grid
Calculation of the energies concerning the core charge distribution.
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.
routines that build the Kohn-Sham matrix (i.e calculate the coulomb and xc parts
subroutine, public calc_rho_tot_gspace(rho_tot_gspace, qs_env, rho, skip_nuclear_density)
...
subroutine, public set_ks_env(ks_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, complex_ks, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, kinetic, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_ks_im_kp, vppl, rho_core, rho_nlcc, rho_nlcc_g, vee, neighbor_list_id, kpoints, sab_orb, sab_all, sac_ae, sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, task_list, task_list_soft, subsys, dft_control, dbcsr_dist, distribution_2d, pw_env, para_env, blacs_env)
...
Routines for calculating local energy and stress tensor.
subroutine, public qs_local_stress(qs_env, stress_tensor, beta)
Routine to calculate the local stress.
subroutine, public qs_local_energy(qs_env, energy_density)
Routine to calculate the local energy.
Utility subroutine for qs energy calculation.
subroutine, public compute_matrix_w(qs_env, calc_forces)
Refactoring of qs_energies_scf. Moves computation of matrix_w into separate subroutine.
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...
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)
type of a logger, at the moment it contains just a print level starting at which level it should be l...
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 ...
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.