67#include "./base/base_uses.f90"
75 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_energy_init'
92 LOGICAL,
INTENT(IN) :: calc_forces
94 INTEGER :: img, ispin, nimg, nspin
95 LOGICAL :: has_unit_metric, ks_is_complex, &
97 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s, matrix_w
102 NULLIFY (ks_env, matrix_w, matrix_s, dft_control)
104 CALL get_qs_env(qs_env, dft_control=dft_control, ks_env=ks_env)
105 IF (dft_control%qs_control%do_kg)
THEN
106 molecule_only = .true.
107 CALL qs_energies_init_kg(qs_env)
109 molecule_only = .false.
111 CALL qs_energies_init_hamiltonians(qs_env, calc_forces, molecule_only)
112 CALL get_ks_env(ks_env, complex_ks=ks_is_complex)
116 CALL get_qs_env(qs_env, has_unit_metric=has_unit_metric)
117 IF (calc_forces .AND. .NOT. has_unit_metric)
THEN
120 matrix_s_kp=matrix_s)
121 nspin = dft_control%nspins
122 nimg = dft_control%nimages
123 matrix => matrix_s(1, 1)%matrix
127 ALLOCATE (matrix_w(ispin, img)%matrix)
128 CALL dbcsr_copy(matrix_w(ispin, img)%matrix, matrix, name=
"W MATRIX")
129 CALL dbcsr_set(matrix_w(ispin, img)%matrix, 0.0_dp)
145 SUBROUTINE qs_energies_init_kg(qs_env)
148 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_energies_init_kg'
150 INTEGER :: handle, isubset, natom
156 POINTER :: soo_list, soo_list1
158 CALL timeset(routinen, handle)
160 CALL get_qs_env(qs_env, dft_control=dft_control, para_env=para_env)
161 cpassert(dft_control%qs_control%do_kg)
163 kg_env => qs_env%kg_env
166 CALL get_qs_env(qs_env=qs_env, molecule_set=molecule_set, natom=natom)
169 kg_env%molecule_set => molecule_set
173 IF (.NOT.
ALLOCATED(kg_env%atom_to_molecule))
THEN
174 ALLOCATE (kg_env%atom_to_molecule(natom))
179 SELECT CASE (kg_env%tnadd_method)
182 IF (.NOT.
ASSOCIATED(kg_env%subset_of_mol))
THEN
183 ALLOCATE (kg_env%subset_of_mol(
SIZE(molecule_set)))
188 DO isubset = 1, kg_env%nsubsets
191 subset_of_mol=kg_env%subset_of_mol, current_subset=isubset)
196 IF (.NOT.
ASSOCIATED(kg_env%subset_of_mol))
THEN
197 ALLOCATE (kg_env%subset_of_mol(
SIZE(molecule_set)))
202 DO isubset = 1, kg_env%nsubsets
205 subset_of_mol=kg_env%subset_of_mol, current_subset=isubset)
211 kg_env%lri_env%soo_list => soo_list
213 IF (qs_env%energy_correction)
THEN
216 kg_env%lri_env1%soo_list => soo_list1
227 cpabort(
"KG:TNADD METHOD")
230 CALL timestop(handle)
232 END SUBROUTINE qs_energies_init_kg
245 SUBROUTINE qs_energies_init_hamiltonians(qs_env, calc_forces, molecule_only)
247 LOGICAL,
INTENT(IN) :: calc_forces
248 LOGICAL :: molecule_only
250 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_energies_init_hamiltonians'
253 LOGICAL :: do_kpoints
259 POINTER :: sab_nl, sab_nl_nosym
265 CALL timeset(routinen, handle)
269 dft_control=dft_control, &
272 do_kpoints=do_kpoints)
276 force_env_section=input)
280 CALL get_qs_env(qs_env, sab_kp=sab_nl, sab_kp_nosym=sab_nl_nosym)
284 IF (dft_control%qs_control%cdft)
THEN
285 IF (.NOT. (dft_control%qs_control%cdft_control%external_control)) &
286 dft_control%qs_control%cdft_control%need_pot = .true.
287 IF (
ASSOCIATED(dft_control%qs_control%cdft_control%group))
THEN
289 IF (
ASSOCIATED(dft_control%qs_control%cdft_control%group(1)%weight)) &
290 dft_control%qs_control%cdft_control%need_pot = .false.
295 IF (dft_control%qs_control%semi_empirical)
THEN
297 calculate_forces=.false.)
300 CALL get_qs_env(qs_env=qs_env, dispersion_env=dispersion_env, energy=energy)
302 ELSEIF (dft_control%qs_control%dftb)
THEN
304 calculate_forces=.false.)
306 calculate_forces=.false.)
308 ELSEIF (dft_control%qs_control%xtb)
THEN
320 IF (.NOT. dft_control%qs_control%gapw)
THEN
324 IF (dft_control%qs_control%lrigpw)
THEN
325 CALL get_qs_env(qs_env=qs_env, lri_env=lri_env)
327 ELSE IF (dft_control%qs_control%rigpw)
THEN
328 CALL get_qs_env(qs_env=qs_env, lri_env=lri_env)
337 CALL get_qs_env(qs_env=qs_env, dispersion_env=dispersion_env, energy=energy)
341 CALL get_qs_env(qs_env=qs_env, gcp_env=gcp_env, energy=energy)
342 IF (
ASSOCIATED(gcp_env))
THEN
348 IF (dft_control%qs_control%dfet_embedded)
THEN
349 dft_control%apply_embed_pot = .true.
353 IF (dft_control%qs_control%dmfet_embedded)
THEN
354 dft_control%apply_dmfet_pot = .true.
357 CALL timestop(handle)
359 END SUBROUTINE qs_energies_init_hamiltonians
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.
all routins needed for a nonperiodic electric field
subroutine, public calculate_ecore_efield(qs_env, calculate_forces)
Computes the force and the energy due to a efield on the cores Note: In the velocity gauge,...
Types needed for a Kim-Gordon-like partitioning into molecular subunits.
Routines for a Kim-Gordon-like partitioning into molecular subunits.
subroutine, public kg_build_neighborlist(qs_env, sab_orb, sac_kin, molecular, subset_of_mol, current_subset)
builds either the full neighborlist or neighborlists of molecular
subroutine, public kg_build_subsets(kg_env, para_env)
...
Defines the basic variable types.
integer, parameter, public dp
Routines needed for kpoint calculation.
subroutine, public kpoint_init_cell_index(kpoint, sab_nl, para_env, dft_control)
Generates the mapping of cell indices and linear RS index CELL (0,0,0) is always mapped to index 1.
Types and basic routines needed for a kpoint calculation.
subroutine, public set_kpoint_info(kpoint, kp_scheme, nkp_grid, kp_shift, symmetry, verbose, full_grid, use_real_wfn, eps_geo, parallel_group_size, kp_range, nkp, xkp, wkp, para_env, blacs_env_all, para_env_kp, para_env_inter_kp, blacs_env, kp_env, kp_aux_env, mpools, iogrp, nkp_groups, kp_dist, cell_to_index, index_to_cell, sab_nl, sab_nl_nosym)
Set information in a kpoint environment.
Calculates integral matrices for LRIGPW method lri : local resolution of the identity.
subroutine, public calculate_lri_integrals(lri_env, qs_env)
calculates integrals needed for the LRI density fitting, integrals are calculated once,...
subroutine, public build_lri_matrices(lri_env, qs_env)
creates and initializes an lri_env
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...
Interface to the message passing library MPI.
Define the data structure for the molecule information.
subroutine, public molecule_of_atom(molecule_set, atom_to_mol)
finds for each atom the molecule it belongs to
subroutine, public given_embed_pot(qs_env)
Read the external embedding potential, not to be optimized.
Calculation of the energies concerning the core charge distribution.
subroutine, public calculate_ecore_overlap(qs_env, para_env, calculate_forces, molecular, e_overlap_core, atecc)
Calculate the overlap energy of the core charge distribution.
subroutine, public calculate_ecore_self(qs_env, e_self_core, atecc)
Calculate the self energy of the core charge distribution.
Calculation of the core Hamiltonian integral matrix <a|H|b> over Cartesian Gaussian-type functions.
subroutine, public build_core_hamiltonian_matrix(qs_env, calculate_forces)
Cosntruction of the QS Core Hamiltonian Matrix.
Calculation of dispersion in DFTB.
subroutine, public calculate_dftb_dispersion(qs_env, para_env, calculate_forces)
...
Calculation of Overlap and Hamiltonian matrices in DFTB.
subroutine, public build_dftb_matrices(qs_env, para_env, calculate_forces)
...
Calculation of dispersion using pair potentials.
subroutine, public calculate_dispersion_pairpot(qs_env, dispersion_env, energy, calculate_forces, atevdw)
...
Definition of disperson types for DFT calculations.
Utility subroutine for qs energy calculation.
subroutine, public qs_energies_init(qs_env, calc_forces)
Refactoring of qs_energies_scf. Driver routine for the initial setup and calculations for a qs energy...
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 to handle an external density The external density can be generic and is provided by user in...
subroutine, public external_read_density(qs_env)
Computes the external density on the grid.
Routines to handle an external electrostatic field The external field can be generic and is provided ...
subroutine, public external_c_potential(qs_env, calculate_forces)
Computes the force and the energy due to the external potential on the cores.
subroutine, public external_e_potential(qs_env)
Computes the external potential on the grid.
Calculation of gCP pair potentials.
subroutine, public calculate_gcp_pairpot(qs_env, gcp_env, energy, calculate_forces, ategcp)
...
Definition of gCP types for DFT calculations.
routines that build the Kohn-Sham matrix (i.e calculate the coulomb and xc parts
subroutine, public qs_ks_allocate_basics(qs_env, is_complex)
Allocate ks_matrix if necessary, take current overlap matrix as template.
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)
...
subroutine, public get_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, rho, rho_xc, vppl, rho_core, rho_nlcc, rho_nlcc_g, vee, neighbor_list_id, 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, kpoints, do_kpoints, atomic_kind_set, qs_kind_set, cell, cell_ref, use_ref_cell, particle_set, energy, force, local_particles, local_molecules, molecule_kind_set, molecule_set, subsys, cp_subsys, virial, results, atprop, nkind, natom, dft_control, dbcsr_dist, distribution_2d, pw_env, para_env, blacs_env, nelectron_total, nelectron_spin)
...
Define the neighbor list data types and the corresponding functionality.
Generate the atomic neighbor lists.
subroutine, public build_qs_neighbor_lists(qs_env, para_env, molecular, force_env_section)
Build all the required neighbor lists for Quickstep.
qs_environment methods that use many other modules
subroutine, public qs_env_update_s_mstruct(qs_env)
updates the s_mstruct to reflect the new overlap structure, and also updates rho_core distribution....
Calculates integral matrices for RIGPW method.
subroutine, public build_ri_matrices(lri_env, qs_env, calculate_forces)
creates and initializes an lri_env
Split and build its own idependent core_core SE interaction module.
subroutine, public se_core_core_interaction(qs_env, para_env, calculate_forces)
Evaluates the core-core interactions for NDDO methods.
Calculation of the Hamiltonian integral matrix <a|H|b> for semi-empirical methods.
subroutine, public build_se_core_matrix(qs_env, para_env, calculate_forces)
...
Calculation of Overlap and Hamiltonian matrices in xTB Reference: Stefan Grimme, Christoph Bannwarth,...
subroutine, public build_xtb_matrices(qs_env, calculate_forces)
...
Contains all the info needed for KG runs...
Contains information about kpoints.
stores all the informations relevant to an mpi environment
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...