57#include "./base/base_uses.f90"
63 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'xtb_ehess'
82 REAL(
dp),
DIMENSION(:, :) :: charges1
83 REAL(
dp),
DIMENSION(:) :: mcharge1, mcharge
86 CHARACTER(len=*),
PARAMETER :: routinen =
'xtb_coulomb_hessian'
88 INTEGER :: ewald_type, handle, i, ia, iatom, icol, ikind, irow, is, j, jatom, jkind, la, lb, &
89 lmaxa, lmaxb, natom, natorb_a, natorb_b, ni, nj, nkind, nmat, za, zb
90 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: kind_of
91 INTEGER,
DIMENSION(25) :: laoa, laob
92 INTEGER,
DIMENSION(3) :: cellind, periodic
93 LOGICAL :: defined, do_ewald, found
94 REAL(kind=
dp) :: alpha, deth, dr, etaa, etab, gmij, kg, &
96 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: xgamma
97 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: gammab, gcij, gmcharge
98 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: gchrg
99 REAL(kind=
dp),
DIMENSION(3) :: rij
100 REAL(kind=
dp),
DIMENSION(5) :: kappaa, kappab
101 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: ksblock, sblock
105 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s
112 DIMENSION(:),
POINTER :: nl_iterator
116 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
118 TYPE(
xtb_atom_type),
POINTER :: xtb_atom_a, xtb_atom_b, xtb_kind
121 CALL timeset(routinen, handle)
124 matrix_s_kp=matrix_s, &
125 qs_kind_set=qs_kind_set, &
126 particle_set=particle_set, &
128 dft_control=dft_control)
130 xtb_control => dft_control%qs_control%xtb_control
132 IF (dft_control%nimages /= 1)
THEN
133 cpabort(
"No kpoints allowed in xTB response calculation")
136 CALL get_qs_env(qs_env, nkind=nkind, natom=natom)
138 ALLOCATE (gchrg(natom, 5, nmat))
140 ALLOCATE (gmcharge(natom, nmat))
147 CALL get_qs_env(qs_env=qs_env, sab_xtbe=n_list)
151 iatom=iatom, jatom=jatom, r=rij, cell=cellind)
152 CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_atom_a)
154 IF (.NOT. defined .OR. natorb_a < 1) cycle
155 CALL get_qs_kind(qs_kind_set(jkind), xtb_parameter=xtb_atom_b)
157 IF (.NOT. defined .OR. natorb_b < 1) cycle
164 ALLOCATE (gammab(ni, nj))
166 dr = sqrt(sum(rij(:)**2))
167 CALL gamma_rab_sr(gammab, dr, ni, kappaa, etaa, nj, kappab, etab, kg, rcut)
168 gchrg(iatom, 1:ni, 1) = gchrg(iatom, 1:ni, 1) + matmul(gammab, charges1(jatom, 1:nj))
169 IF (iatom /= jatom)
THEN
170 gchrg(jatom, 1:nj, 1) = gchrg(jatom, 1:nj, 1) + matmul(charges1(iatom, 1:ni), gammab)
178 IF (xtb_control%coulomb_lr)
THEN
179 do_ewald = xtb_control%do_ewald
182 NULLIFY (ewald_env, ewald_pw)
185 ewald_env=ewald_env, ewald_pw=ewald_pw)
186 CALL get_cell(cell=cell, periodic=periodic, deth=deth)
187 CALL ewald_env_get(ewald_env, alpha=alpha, ewald_type=ewald_type)
188 CALL get_qs_env(qs_env=qs_env, sab_tbe=n_list)
190 SELECT CASE (ewald_type)
192 cpabort(
"Invalid Ewald type")
194 cpabort(
"Not allowed with DFTB")
196 cpabort(
"Standard Ewald not implemented in DFTB")
198 cpabort(
"PME not implemented in DFTB")
201 gmcharge, mcharge1, .false., virial, .false.)
206 local_particles=local_particles)
207 DO ikind = 1,
SIZE(local_particles%n_el)
208 DO ia = 1, local_particles%n_el(ikind)
209 iatom = local_particles%list(ikind)%array(ia)
210 DO jatom = 1, iatom - 1
211 rij = particle_set(iatom)%r - particle_set(jatom)%r
213 dr = sqrt(sum(rij(:)**2))
214 IF (dr > 1.e-6_dp)
THEN
215 gmcharge(iatom, 1) = gmcharge(iatom, 1) + mcharge1(jatom)/dr
216 gmcharge(jatom, 1) = gmcharge(jatom, 1) + mcharge1(iatom)/dr
225 CALL get_qs_env(qs_env=qs_env, para_env=para_env)
226 CALL para_env%sum(gmcharge(:, 1))
227 CALL para_env%sum(gchrg(:, :, 1))
229 IF (xtb_control%coulomb_lr)
THEN
232 gmcharge(:, 1) = gmcharge(:, 1) - 2._dp*alpha*
oorootpi*mcharge1(:)
233 IF (any(periodic(:) == 1))
THEN
234 gmcharge(:, 1) = gmcharge(:, 1) -
pi/alpha**2/deth
239 CALL get_qs_env(qs_env=qs_env, atomic_kind_set=atomic_kind_set)
246 ikind = kind_of(irow)
247 jkind = kind_of(icol)
250 CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_atom_a)
251 CALL get_qs_kind(qs_kind_set(jkind), xtb_parameter=xtb_atom_b)
257 ALLOCATE (gcij(ni, nj))
262 gcij(i, j) = gchrg(irow, la, 1) + gchrg(icol, lb, 1)
265 gmij = gmcharge(irow, 1) + gmcharge(icol, 1)
266 DO is = 1,
SIZE(ks_matrix)
269 row=irow, col=icol, block=ksblock, found=found)
271 ksblock = ksblock - gcij*sblock
272 ksblock = ksblock - gmij*sblock
278 IF (xtb_control%tb3_interaction)
THEN
280 ALLOCATE (xgamma(nkind))
282 CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_kind)
286 CALL dftb3_diagonal_hessian(qs_env, ks_matrix, mcharge, mcharge1, xgamma)
290 IF (xtb_control%do_spinpol)
THEN
294 IF (qs_env%qmmm .AND. qs_env%qmmm_periodic)
THEN
295 cpabort(
"QMMM not available in xTB response calculations")
298 DEALLOCATE (gmcharge, gchrg)
300 CALL timestop(handle)
312 SUBROUTINE dftb3_diagonal_hessian(qs_env, ks_matrix, mcharge, mcharge1, xgamma)
316 REAL(
dp),
DIMENSION(:) :: mcharge, mcharge1, xgamma
318 CHARACTER(len=*),
PARAMETER :: routinen =
'dftb3_diagonal_hessian'
320 INTEGER :: handle, icol, ikind, irow, is, jkind
321 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: kind_of
323 REAL(kind=
dp) :: gmij, ui, uj
324 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: ksblock, sblock
327 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s
328 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
330 CALL timeset(routinen, handle)
332 CALL get_qs_env(qs_env=qs_env, matrix_s_kp=matrix_s)
333 CALL get_qs_env(qs_env=qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
339 ikind = kind_of(irow)
341 jkind = kind_of(icol)
343 gmij = ui*mcharge(irow)*mcharge1(irow) + uj*mcharge(icol)*mcharge1(icol)
344 DO is = 1,
SIZE(ks_matrix)
347 row=irow, col=icol, block=ksblock, found=found)
349 ksblock = ksblock + gmij*sblock
354 CALL timestop(handle)
356 END SUBROUTINE dftb3_diagonal_hessian
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind_set(atomic_kind_set, atom_of_kind, kind_of, natom_of_kind, maxatom, natom, nshell, fist_potential_present, shell_present, shell_adiabatic, shell_check_distance, damping_present)
Get attributes of an atomic kind set.
Handles all functions related to the CELL.
subroutine, public get_cell(cell, alpha, beta, gamma, deth, orthorhombic, abc, periodic, h, h_inv, symmetry_id, tag)
Get informations about a simulation cell.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
logical function, public dbcsr_iterator_blocks_left(iterator)
...
subroutine, public dbcsr_iterator_stop(iterator)
...
subroutine, public dbcsr_get_block_p(matrix, row, col, block, found, row_size, col_size)
...
subroutine, public dbcsr_iterator_next_block(iterator, row, column, block, block_number_argument_has_been_removed, row_size, col_size, row_offset, col_offset, transposed)
...
subroutine, public dbcsr_iterator_start(iterator, matrix, shared, dynamic, dynamic_byrows)
...
stores a lists of integer that are local to a processor. The idea is that these integers represent ob...
subroutine, public ewald_env_get(ewald_env, ewald_type, alpha, eps_pol, epsilon, gmax, ns_max, o_spline, group, para_env, poisson_section, precs, rcut, do_multipoles, max_multipole, do_ipol, max_ipol_iter, interaction_cutoffs, cell_hmat)
Purpose: Get the EWALD environment.
Calculation of Ewald contributions in DFTB.
subroutine, public tb_ewald_overlap(gmcharge, mcharge, alpha, n_list, virial, use_virial)
...
subroutine, public tb_spme_evaluate(ewald_env, ewald_pw, particle_set, box, gmcharge, mcharge, calculate_forces, virial, use_virial)
...
Defines the basic variable types.
integer, parameter, public dp
Definition of mathematical constants and functions.
real(kind=dp), parameter, public oorootpi
real(kind=dp), parameter, public pi
Interface to the message passing library MPI.
Define the data structure for the particle information.
functions related to the poisson solver on regular grids
integer, parameter, public do_ewald_pme
integer, parameter, public do_ewald_ewald
integer, parameter, public do_ewald_none
integer, parameter, public do_ewald_spme
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, mimic, 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, sab_cneo, 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, xcint_weights, 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, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_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.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, cneo_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, monovalent, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
Define the neighbor list data types and the corresponding functionality.
subroutine, public neighbor_list_iterator_create(iterator_set, nl, search, nthread)
Neighbor list iterator functions.
subroutine, public neighbor_list_iterator_release(iterator_set)
...
integer function, public neighbor_list_iterate(iterator_set, mepos)
...
subroutine, public get_iterator_info(iterator_set, mepos, ikind, jkind, nkind, ilist, nlist, inode, nnode, iatom, jatom, r, cell)
...
Calculation of Coulomb contributions in xTB.
subroutine, public gamma_rab_sr(gmat, rab, nla, kappaa, etaa, nlb, kappab, etab, kg, rcut)
Computes the short-range gamma parameter from Nataga-Mishimoto-Ohno-Klopman formula for xTB WARNING: ...
Calculation of Coulomb Hessian contributions in xTB.
subroutine, public xtb_coulomb_hessian(qs_env, ks_matrix, charges1, mcharge1, mcharge, matrix_p1)
...
Calculation of Spin Polarisation contributions in xTB.
subroutine, public xtb_spinpol_hessian(qs_env, ks_matrix, matrix_p1)
...
Definition of the xTB parameter types.
subroutine, public get_xtb_atom_param(xtb_parameter, symbol, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, wall, hen, zeta, xi, kappa0, alpg, occupation, electronegativity, chmax, en, kqat2, kcn, kq)
...
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
structure to store local (to a processor) ordered lists of integers.
to build arrays of pointers
stores all the informations relevant to an mpi environment
Provides all information about a quickstep kind.