17 USE dbcsr_api,
ONLY: dbcsr_copy,&
67 #include "./base/base_uses.f90"
75 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_energy_init'
91 TYPE(qs_environment_type),
POINTER :: qs_env
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
98 TYPE(dbcsr_type),
POINTER :: matrix
99 TYPE(dft_control_type),
POINTER :: dft_control
100 TYPE(qs_ks_env_type),
POINTER :: ks_env
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)
146 TYPE(qs_environment_type),
POINTER :: qs_env
148 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_energies_init_kg'
150 INTEGER :: handle, isubset, natom
151 TYPE(dft_control_type),
POINTER :: dft_control
152 TYPE(kg_environment_type),
POINTER :: kg_env
153 TYPE(molecule_type),
DIMENSION(:),
POINTER :: molecule_set
154 TYPE(mp_para_env_type),
POINTER :: para_env
155 TYPE(neighbor_list_set_p_type),
DIMENSION(:), &
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)
246 TYPE(qs_environment_type),
POINTER :: qs_env
247 LOGICAL,
INTENT(IN) :: calc_forces
248 LOGICAL :: molecule_only
250 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_energies_init_hamiltonians'
253 LOGICAL :: do_kpoints
254 TYPE(dft_control_type),
POINTER :: dft_control
255 TYPE(kpoint_type),
POINTER :: kpoints
256 TYPE(lri_environment_type),
POINTER :: lri_env
257 TYPE(mp_para_env_type),
POINTER :: para_env
258 TYPE(neighbor_list_set_p_type),
DIMENSION(:), &
259 POINTER :: sab_nl, sab_nl_nosym
260 TYPE(qs_dispersion_type),
POINTER :: dispersion_env
261 TYPE(qs_energy_type),
POINTER :: energy
262 TYPE(qs_gcp_type),
POINTER :: gcp_env
263 TYPE(section_vals_type),
POINTER :: input
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
310 calculate_forces=.false.)
311 CALL get_qs_env(qs_env=qs_env, dispersion_env=dispersion_env, energy=energy)
323 IF (.NOT. dft_control%qs_control%gapw)
THEN
327 IF (dft_control%qs_control%lrigpw)
THEN
328 CALL get_qs_env(qs_env=qs_env, lri_env=lri_env)
330 ELSE IF (dft_control%qs_control%rigpw)
THEN
331 CALL get_qs_env(qs_env=qs_env, lri_env=lri_env)
340 CALL get_qs_env(qs_env=qs_env, dispersion_env=dispersion_env, energy=energy)
344 CALL get_qs_env(qs_env=qs_env, gcp_env=gcp_env, energy=energy)
345 IF (
ASSOCIATED(gcp_env))
THEN
351 IF (dft_control%qs_control%dfet_embedded)
THEN
352 dft_control%apply_embed_pot = .true.
356 IF (dft_control%qs_control%dmfet_embedded)
THEN
357 dft_control%apply_dmfet_pot = .true.
360 CALL timestop(handle)
362 END SUBROUTINE qs_energies_init_hamiltonians
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
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_self(qs_env, E_self_core, atecc)
Calculate the self energy of 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.
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_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, 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, 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 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_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)
...
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_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)
...
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, para_env, calculate_forces)
...