mod_1e_primitives Module

@brief Helper functions and data blocks needed to compute one-electron integrals and their derivatives @author Vladimir Mironov

Todo

  • Unify interfaces
  • Cleanup redundant subroutines @date Sep, 2018 Initial release

Uses

  • module~~mod_1e_primitives~~UsesGraph module~mod_1e_primitives mod_1e_primitives iso_fortran_env iso_fortran_env module~mod_1e_primitives->iso_fortran_env module~constants constants module~mod_1e_primitives->module~constants module~mod_gauss_hermite mod_gauss_hermite module~mod_1e_primitives->module~mod_gauss_hermite module~mod_shell_tools mod_shell_tools module~mod_1e_primitives->module~mod_shell_tools module~rys rys module~mod_1e_primitives->module~rys module~xyz_order xyz_order module~mod_1e_primitives->module~xyz_order module~precision precision module~constants->module~precision module~mod_gauss_hermite->module~precision module~basis_tools basis_tools module~mod_shell_tools->module~basis_tools module~mod_shell_tools->module~precision module~rys->module~constants module~rys->module~precision module~rys_lut rys_lut module~rys->module~rys_lut module~basis_tools->iso_fortran_env module~basis_tools->module~constants module~basis_tools->module~precision module~atomic_structure_m atomic_structure_m module~basis_tools->module~atomic_structure_m module~io_constants io_constants module~basis_tools->module~io_constants module~parallel parallel module~basis_tools->module~parallel module~precision->iso_fortran_env iso_c_binding iso_c_binding module~atomic_structure_m->iso_c_binding module~parallel->iso_fortran_env module~parallel->module~precision module~parallel->iso_c_binding mpi mpi module~parallel->mpi

Used by

  • module~~mod_1e_primitives~~UsedByGraph module~mod_1e_primitives mod_1e_primitives module~grd1 grd1 module~grd1->module~mod_1e_primitives module~int1 int1 module~int1->module~mod_1e_primitives proc~electric_moments electric_moments proc~electric_moments->module~int1 proc~get_structures_ao_overlap get_structures_ao_overlap proc~get_structures_ao_overlap->module~int1 proc~get_td_transition_dipole get_td_transition_dipole proc~get_td_transition_dipole->module~int1 proc~get_transition_dipole get_transition_dipole proc~get_transition_dipole->module~int1 proc~hf_gradient hf_gradient proc~hf_gradient->module~grd1 proc~huckel_guess huckel_guess proc~huckel_guess->module~int1 proc~int1e int1e proc~int1e->module~int1 proc~oqp_resp_charges oqp_resp_charges proc~oqp_resp_charges->module~int1 proc~tdhf_1e_grad tdhf_1e_grad proc~tdhf_1e_grad->module~grd1 proc~tdhf_gradient tdhf_gradient proc~tdhf_gradient->module~grd1

Variables

Type Visibility Attributes Name Initial
integer, public :: iii
integer, public, parameter :: MAX_ANG_PAD = 7
integer, public, parameter :: MAX_NROOTS = (2*MAX_ANG+1)/2+1
integer, public, parameter :: MAX_EL_MOM = 3
character(len=1), public, parameter :: MAX_EL_MOM_S = '3'
real(kind=REAL64), public, parameter :: TWOPI = pi*2.0_real64

Subroutines

public subroutine comp_kin_ovl_int1_prim(cp, id, dokinetic, sblk, tblk)

@brief Compute primitive block of overlap and kinetic energy 1e integrals @param[in] cp shell pair data @param[in] id current pair of primitives @param[in] dokinetic if .FALSE. compute only overlap integrals @param[inout] sblk block of 1e overlap integrals @param[inout] tblk block of 1e kinetic energy integrals @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
integer, intent(in) :: id
logical, intent(in) :: dokinetic
real(kind=REAL64), intent(inout), CONTIGUOUS :: sblk(:)
real(kind=REAL64), intent(inout), CONTIGUOUS :: tblk(:)

public subroutine comp_coulomb_int1_prim(cp, id, c, znuc, vblk)

@brief Compute primitive block of 1e Coulomb atraction integrals @param[in] cp shell pair data @param[in] id current pair of primitives @param[in] c coordinates of the charged particle @param[in] znuc particle charge @param[inout] vblk block of 1e Coulomb integrals @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
integer, intent(in) :: id
real(kind=REAL64), intent(in) :: c(3)
real(kind=REAL64), intent(in) :: znuc
real(kind=REAL64), intent(inout), CONTIGUOUS :: vblk(:)

public subroutine comp_ewaldlr_int1_prim(cp, id, c, znuc, omega, vblk)

@brief Compute primitive block of 1e Coulomb atraction integrals for Ewald summation, long-range part @details 1e integrals using modified Coulomb potential: \f$ \frac{Erf(\omega^{1/2}|r-r_C|)}{|r-r_C|} \f$ @param[in] cp shell pair data @param[in] id current pair of primitives @param[in] c coordinates of the charged particle @param[in] znuc particle charge @param[in] omega Ewald splitting parameter @param[inout] vblk block of 1e Coulomb integrals @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
integer, intent(in) :: id
real(kind=REAL64), intent(in) :: c(3)
real(kind=REAL64), intent(in) :: znuc
real(kind=REAL64), intent(in) :: omega
real(kind=REAL64), intent(inout), CONTIGUOUS :: vblk(:)

public subroutine comp_coulomb_dampch_int1_prim(cp, id, alpha, beta, c, znuc, vblk)

@brief Subtract damping function term from ESP block @details Compute one-electron Coulomb integrals with the damping function: \f$ |r-r_C|^{-1} (1 - \beta e^{-\alpha(r-r_C)^2}) \f$ Only the part \f$ - |r-r_C|^{-1} \beta e^{-\alpha(r-r_C)^2}) \f$ is computed here; the other part is regular Coulomb potential computed elsewhere @param[in] cp shell pair data @param[in] id current pair of primitives @param[in] alpha dumping exponent @param[in] beta dumping function scaling factor @param[in] c coordinates of the charged particle @param[in] znuc particle charge @param[inout] vblk block of 1e Coulomb integrals @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
integer, intent(in) :: id
real(kind=REAL64), intent(in) :: alpha
real(kind=REAL64), intent(in) :: beta
real(kind=REAL64), intent(in) :: c(3)
real(kind=REAL64), intent(in) :: znuc
real(kind=REAL64), intent(inout), CONTIGUOUS :: vblk(:)

public subroutine comp_coulpot_prim(cp, id, c, den, vsum)

@brief Compute sum of 1e Coulomb integrals over primitive shell pair @param[in] cp shell pair data @param[in] id current pair of primitives @param[in] c coordinates of the charged particle @param[in] den normalized density matrix block @param[inout] vsum sum of Coulomb integrals over pair of primitives @author Vladimir Mironov @date Oct, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
integer, intent(in) :: id
real(kind=REAL64), intent(in) :: c(3)
real(kind=REAL64), intent(in) :: den(:)
real(kind=REAL64), intent(inout) :: vsum

public subroutine comp_lz_int1_prim(cp, id, zblk)

@brief Compute primitive block of 1e Coulomb ESP integrals in FMO method @param[in] cp shell pair data @param[in] id current pair of primitives @param[inout] zblk block of 1e Lz-integrals @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
integer, intent(in) :: id
real(kind=REAL64), intent(inout), CONTIGUOUS :: zblk(:)

public subroutine comp_mult_int1_prim(cp, id, r, mom, blk)

@brief Compute primitive block of multipole integrals of order MOM @param[in] cp shell pair data @param[in] id current pair of primitives @param[in] r point in space to compute integrals @param[in] mom multiplole moment order (1-dipole, 2-quadrupole, 3-octopole) @param[inout] blk block of 1e multipole moment integrals @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
integer, intent(in) :: id
real(kind=real64), intent(in), contiguous :: r(:)
integer, intent(in) :: mom
real(kind=real64), intent(inout), contiguous :: blk(:,:)

public subroutine comp_allmult_int1_prim(cp, id, r, mxmom, blk)

@brief Compute primitive block of multipole integrals up to an order MXMOM @param[in] cp shell pair data @param[in] id current pair of primitives @param[in] r point in space to compute integrals @param[in] mxmom multiplole moment order (1-dipole, 2-quadrupole, 3-octopole) @param[inout] blk block of 1e multipole moment integrals @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
integer, intent(in) :: id
real(kind=real64), intent(in), contiguous :: r(:)
integer, intent(in) :: mxmom
real(kind=real64), intent(inout), contiguous :: blk(:,:)

public subroutine comp_overlap_der1(cp, dij, de)

@brief Compute 1e overlap contribution to the gradient @param[in] cp shell pair data @param[in] dij density matrix block @param[inout] de dimension(3), contribution to gradient @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
real(kind=REAL64), intent(in) :: dij(:,:)
real(kind=REAL64), intent(inout), CONTIGUOUS :: de(:)

public subroutine comp_kinetic_der1(cp, dij, de)

@brief Compute 1e kinetic contribution to the gradient @param[in] cp shell pair data @param[in] dij density matrix block @param[inout] de dimension(3), contribution to gradient @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
real(kind=REAL64), intent(in) :: dij(:,:)
real(kind=REAL64), intent(inout), CONTIGUOUS :: de(:)

public subroutine comp_coulomb_der1(cp, c, znuc, dij, dernuc)

@brief Compute 1e Coulomb contribution to the gradient (v.r.t. shifts of shell's centers) @param[in] nroots roots for GaussRys @param[in] cp shell pair data @param[in] c coordinates of the charged particle @param[in] znuc particle charge @param[in] dij density matrix block @param[inout] dernuc dimension(3), contribution to gradient @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
real(kind=REAL64), intent(in) :: c(3)
real(kind=REAL64), intent(in) :: znuc
real(kind=REAL64), intent(in) :: dij(:,:)
real(kind=REAL64), intent(out) :: dernuc(3)

public subroutine comp_coulomb_helfeyder1(cp, c, znuc, dij, derhf)

@brief Compute 1e Hellmann-Feynman contribution to the gradient @param[in] nroots roots for GaussRys @param[in] cp shell pair data @param[in] c coordinates of the charged particle @param[in] znuc particle charge @param[in] dij density matrix block @param[inout] derhf dimension(3), contribution to gradient @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
real(kind=REAL64), intent(in) :: c(3)
real(kind=REAL64), intent(in) :: znuc
real(kind=REAL64), intent(in) :: dij(:,:)
real(kind=REAL64), intent(out), CONTIGUOUS :: derhf(:)

public subroutine comp_ewaldlr_der1(cp, c, znuc, dij, omega, dernuc)

@brief Compute 1e Ewald long-range contribution to the gradient (v.r.t. shifts of shell's centers) @param[in] nroots roots for GaussRys @param[in] cp shell pair data @param[in] c coordinates of the charged particle @param[in] znuc particle charge @param[in] dij density matrix block @param[in] omega Ewald splitting parameter @param[inout] dernuc dimension(3), contribution to gradient @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
real(kind=REAL64), intent(in) :: c(3)
real(kind=REAL64), intent(in) :: znuc
real(kind=REAL64), intent(in) :: dij(:,:)
real(kind=REAL64), intent(in) :: omega
real(kind=REAL64), intent(out) :: dernuc(3)

public subroutine comp_ewaldlr_helfeyder1(cp, c, znuc, dij, omega, derhf)

@brief Compute Ewald long-range 1e Hellmann-Feynman contribution to the gradient @param[in] nroots roots for GaussRys @param[in] cp shell pair data @param[in] c coordinates of the charged particle @param[in] znuc particle charge @param[in] dij density matrix block @param[in] omega Ewald splitting parameter @param[inout] derhf dimension(3), contribution to gradient @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shpair_t), intent(in) :: cp
real(kind=REAL64), intent(in) :: c(3)
real(kind=REAL64), intent(in) :: znuc
real(kind=REAL64), intent(in) :: dij(:,:)
real(kind=REAL64), intent(in) :: omega
real(kind=REAL64), intent(out), CONTIGUOUS :: derhf(:)

public subroutine update_triang_matrix(shi, shj, mblk, m)

@brief Add contribution of the 1e-integral block to the triangular matrix @param[in] shi first shell data @param[in] shj second shell data @param[in] mblk square block of 1e integrals passed as 1D array @param[inout] m packed triangular matrix of 1e integral contribution @author Vladimir Mironov @date Sep, 2018 Initial release

Arguments

Type IntentOptional Attributes Name
type(shell_t), intent(in) :: shi
type(shell_t), intent(in) :: shj
real(kind=REAL64), intent(in), CONTIGUOUS :: mblk(:)
real(kind=REAL64), intent(inout), CONTIGUOUS :: m(:)

public subroutine update_rectangular_matrix(shi, shj, mblk, m)

@brief Add contribution of the 1e-integral block to the rectangular matrix @param[in] shi first shell data @param[in] shj second shell data @param[in] mblk square block of 1e integrals passed as 1D array @param[inout] m rectangular matrix of 1-e integral contribution @author Igor S. Gerasimov @date Oct, 2022 Initial release

Arguments

Type IntentOptional Attributes Name
type(shell_t), intent(in) :: shi
type(shell_t), intent(in) :: shj
real(kind=REAL64), intent(in), CONTIGUOUS :: mblk(:)
real(kind=REAL64), intent(inout), CONTIGUOUS :: m(:,:)

public subroutine density_unordered(shi, shj, dij, denab)

@brief Copy density block from the triangular density matrix @details This subroutine assumes arbitrary order of shell IDs @param[in] shi first shell data @param[in] shj second shell data @param[in] dij density matrix in packed triangular form @param[out] denab density matrix block for shells shi and shj

Read more…

Arguments

Type IntentOptional Attributes Name
type(shell_t), intent(in) :: shi
type(shell_t), intent(in) :: shj
real(kind=REAL64), intent(out), CONTIGUOUS :: dij(:)
real(kind=REAL64), intent(in), CONTIGUOUS :: denab(:)

public subroutine density_ordered(shi, shj, dij, denab)

@brief Copy density block from the triangular density matrix @details This subroutine assumes shi%shid>=shj%shid @param[in] shi first shell data @param[in] shj second shell data @param[in] dij density matrix in packed triangular form @param[out] denab density matrix block for shells shi and shj

Read more…

Arguments

Type IntentOptional Attributes Name
type(shell_t), intent(in) :: shi
type(shell_t), intent(in) :: shj
real(kind=REAL64), intent(out), CONTIGUOUS :: dij(:)
real(kind=REAL64), intent(in), CONTIGUOUS :: denab(:)