56#include "./base/base_uses.f90" 
   62   CHARACTER(len=*), 
PARAMETER, 
PRIVATE :: moduleN = 
'xtb_ehess' 
   80      REAL(
dp), 
DIMENSION(:, :)                          :: charges1
 
   81      REAL(
dp), 
DIMENSION(:)                             :: mcharge1, mcharge
 
   83      CHARACTER(len=*), 
PARAMETER :: routinen = 
'xtb_coulomb_hessian' 
   85      INTEGER :: ewald_type, handle, i, ia, iatom, icol, ikind, irow, is, j, jatom, jkind, la, lb, &
 
   86         lmaxa, lmaxb, natom, natorb_a, natorb_b, ni, nj, nkind, nmat, za, zb
 
   87      INTEGER, 
ALLOCATABLE, 
DIMENSION(:)                 :: kind_of
 
   88      INTEGER, 
DIMENSION(25)                             :: laoa, laob
 
   89      INTEGER, 
DIMENSION(3)                              :: cellind, periodic
 
   90      LOGICAL                                            :: defined, do_ewald, found
 
   91      REAL(kind=
dp)                                      :: alpha, deth, dr, etaa, etab, gmij, kg, &
 
   93      REAL(kind=
dp), 
ALLOCATABLE, 
DIMENSION(:)           :: xgamma
 
   94      REAL(kind=
dp), 
ALLOCATABLE, 
DIMENSION(:, :)        :: gammab, gcij, gmcharge
 
   95      REAL(kind=
dp), 
ALLOCATABLE, 
DIMENSION(:, :, :)     :: gchrg
 
   96      REAL(kind=
dp), 
DIMENSION(3)                        :: rij
 
   97      REAL(kind=
dp), 
DIMENSION(5)                        :: kappaa, kappab
 
   98      REAL(kind=
dp), 
DIMENSION(:, :), 
POINTER            :: ksblock, sblock
 
  102      TYPE(
dbcsr_p_type), 
DIMENSION(:, :), 
POINTER       :: matrix_s
 
  109         DIMENSION(:), 
POINTER                           :: nl_iterator
 
  113      TYPE(
qs_kind_type), 
DIMENSION(:), 
POINTER          :: qs_kind_set
 
  115      TYPE(
xtb_atom_type), 
POINTER                       :: xtb_atom_a, xtb_atom_b, xtb_kind
 
  118      CALL timeset(routinen, handle)
 
  121                      matrix_s_kp=matrix_s, &
 
  122                      qs_kind_set=qs_kind_set, &
 
  123                      particle_set=particle_set, &
 
  125                      dft_control=dft_control)
 
  127      xtb_control => dft_control%qs_control%xtb_control
 
  129      IF (dft_control%nimages /= 1) 
THEN 
  130         cpabort(
"No kpoints allowed in xTB response calculation")
 
  133      CALL get_qs_env(qs_env, nkind=nkind, natom=natom)
 
  135      ALLOCATE (gchrg(natom, 5, nmat))
 
  137      ALLOCATE (gmcharge(natom, nmat))
 
  144      CALL get_qs_env(qs_env=qs_env, sab_xtbe=n_list)
 
  148                                iatom=iatom, jatom=jatom, r=rij, cell=cellind)
 
  149         CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_atom_a)
 
  151         IF (.NOT. defined .OR. natorb_a < 1) cycle
 
  152         CALL get_qs_kind(qs_kind_set(jkind), xtb_parameter=xtb_atom_b)
 
  154         IF (.NOT. defined .OR. natorb_b < 1) cycle
 
  161         ALLOCATE (gammab(ni, nj))
 
  163         dr = sqrt(sum(rij(:)**2))
 
  164         CALL gamma_rab_sr(gammab, dr, ni, kappaa, etaa, nj, kappab, etab, kg, rcut)
 
  165         gchrg(iatom, 1:ni, 1) = gchrg(iatom, 1:ni, 1) + matmul(gammab, charges1(jatom, 1:nj))
 
  166         IF (iatom /= jatom) 
THEN 
  167            gchrg(jatom, 1:nj, 1) = gchrg(jatom, 1:nj, 1) + matmul(charges1(iatom, 1:ni), gammab)
 
  175      IF (xtb_control%coulomb_lr) 
THEN 
  176         do_ewald = xtb_control%do_ewald
 
  179            NULLIFY (ewald_env, ewald_pw)
 
  182                            ewald_env=ewald_env, ewald_pw=ewald_pw)
 
  183            CALL get_cell(cell=cell, periodic=periodic, deth=deth)
 
  184            CALL ewald_env_get(ewald_env, alpha=alpha, ewald_type=ewald_type)
 
  185            CALL get_qs_env(qs_env=qs_env, sab_tbe=n_list)
 
  187            SELECT CASE (ewald_type)
 
  189               cpabort(
"Invalid Ewald type")
 
  191               cpabort(
"Not allowed with DFTB")
 
  193               cpabort(
"Standard Ewald not implemented in DFTB")
 
  195               cpabort(
"PME not implemented in DFTB")
 
  198                                     gmcharge, mcharge1, .false., virial, .false.)
 
  203                            local_particles=local_particles)
 
  204            DO ikind = 1, 
SIZE(local_particles%n_el)
 
  205               DO ia = 1, local_particles%n_el(ikind)
 
  206                  iatom = local_particles%list(ikind)%array(ia)
 
  207                  DO jatom = 1, iatom - 1
 
  208                     rij = particle_set(iatom)%r - particle_set(jatom)%r
 
  210                     dr = sqrt(sum(rij(:)**2))
 
  211                     IF (dr > 1.e-6_dp) 
THEN 
  212                        gmcharge(iatom, 1) = gmcharge(iatom, 1) + mcharge1(jatom)/dr
 
  213                        gmcharge(jatom, 1) = gmcharge(jatom, 1) + mcharge1(iatom)/dr
 
  222      CALL get_qs_env(qs_env=qs_env, para_env=para_env)
 
  223      CALL para_env%sum(gmcharge(:, 1))
 
  224      CALL para_env%sum(gchrg(:, :, 1))
 
  226      IF (xtb_control%coulomb_lr) 
THEN 
  229            gmcharge(:, 1) = gmcharge(:, 1) - 2._dp*alpha*
oorootpi*mcharge1(:)
 
  230            IF (any(periodic(:) == 1)) 
THEN 
  231               gmcharge(:, 1) = gmcharge(:, 1) - 
pi/alpha**2/deth
 
  236      CALL get_qs_env(qs_env=qs_env, atomic_kind_set=atomic_kind_set)
 
  243         ikind = kind_of(irow)
 
  244         jkind = kind_of(icol)
 
  247         CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_atom_a)
 
  248         CALL get_qs_kind(qs_kind_set(jkind), xtb_parameter=xtb_atom_b)
 
  254         ALLOCATE (gcij(ni, nj))
 
  259               gcij(i, j) = gchrg(irow, la, 1) + gchrg(icol, lb, 1)
 
  262         gmij = gmcharge(irow, 1) + gmcharge(icol, 1)
 
  263         DO is = 1, 
SIZE(ks_matrix)
 
  266                                   row=irow, col=icol, block=ksblock, found=found)
 
  268            ksblock = ksblock - gcij*sblock
 
  269            ksblock = ksblock - gmij*sblock
 
  275      IF (xtb_control%tb3_interaction) 
THEN 
  277         ALLOCATE (xgamma(nkind))
 
  279            CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_kind)
 
  283         CALL dftb3_diagonal_hessian(qs_env, ks_matrix, mcharge, mcharge1, xgamma)
 
  287      IF (qs_env%qmmm .AND. qs_env%qmmm_periodic) 
THEN 
  288         cpabort(
"QMMM not available in xTB response calculations")
 
  291      DEALLOCATE (gmcharge, gchrg)
 
  293      CALL timestop(handle)
 
 
  305   SUBROUTINE dftb3_diagonal_hessian(qs_env, ks_matrix, mcharge, mcharge1, xgamma)
 
  309      REAL(
dp), 
DIMENSION(:)                             :: mcharge, mcharge1, xgamma
 
  311      CHARACTER(len=*), 
PARAMETER :: routinen = 
'dftb3_diagonal_hessian' 
  313      INTEGER                                            :: handle, icol, ikind, irow, is, jkind
 
  314      INTEGER, 
ALLOCATABLE, 
DIMENSION(:)                 :: kind_of
 
  316      REAL(kind=
dp)                                      :: gmij, ui, uj
 
  317      REAL(kind=
dp), 
DIMENSION(:, :), 
POINTER            :: ksblock, sblock
 
  320      TYPE(
dbcsr_p_type), 
DIMENSION(:, :), 
POINTER       :: matrix_s
 
  321      TYPE(
qs_kind_type), 
DIMENSION(:), 
POINTER          :: qs_kind_set
 
  323      CALL timeset(routinen, handle)
 
  325      CALL get_qs_env(qs_env=qs_env, matrix_s_kp=matrix_s)
 
  326      CALL get_qs_env(qs_env=qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
 
  332         ikind = kind_of(irow)
 
  334         jkind = kind_of(icol)
 
  336         gmij = ui*mcharge(irow)*mcharge1(irow) + uj*mcharge(icol)*mcharge1(icol)
 
  337         DO is = 1, 
SIZE(ks_matrix)
 
  340                                   row=irow, col=icol, block=ksblock, found=found)
 
  342            ksblock = ksblock + gmij*sblock
 
  347      CALL timestop(handle)
 
  349   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...
subroutine, public dbcsr_iterator_next_block(iterator, row, column, block, block_number_argument_has_been_removed, row_size, col_size, row_offset, col_offset)
...
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_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, 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, 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, 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)
...
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, 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.