bragg_slater.F90 Source File


Source Code

!> @brief Bragg-Slater radii for determining the relative size of the
!>        polyhedra in the polyatomic integration scheme
module bragg_slater_radii
  use precision, only: dp

  private
  public BRSL_NUM_ELEMENTS
  public BRSL_TYPE_GAMESS
  public BRSL_TYPE_GILL
  public BRSL_TYPE_TA
  public BRSL_TYPE_BECKE
  public set_bragg_slater

  integer, parameter :: BRSL_NUM_ELEMENTS  = 137
  integer, parameter :: BRSL_TYPE_GAMESS = 0
  integer, parameter :: BRSL_TYPE_GILL = 1
  integer, parameter :: BRSL_TYPE_TA = 2
  integer, parameter :: BRSL_TYPE_BECKE = 3

! J.C.Slater, Quantum Theory of Molecules and Solids, Volume 2, Chapter 3
! Except that hydrogen is changed from 0.25 -> bohr radius,
! and missing values such as inert gasses are filled in with
! reasonable looking data (source unknown). Slater's table
! stops at the element americium, the extension is probably
! reasonable for actinides but not all the way to z=137!
  real(kind=dp), parameter :: brsl_values_gamess(BRSL_NUM_ELEMENTS) = [&
    0.52917D+00, 0.31D+00, 1.45D+00, 1.05D+00, 0.85D+00, &
    0.70D+00, 0.65D+00, 0.60D+00, 0.50D+00, 0.38D+00, 1.80D+00, &
    1.50D+00, 1.25D+00, 1.10D+00, 1.00D+00, 1.00D+00, 1.00D+00, &
    0.71D+00, 2.20D+00, 1.80D+00, 1.60D+00, 1.40D+00, 1.35D+00, &
    1.40D+00, 1.40D+00, 1.40D+00, 1.35D+00, 1.35D+00, 1.35D+00, &
    1.35D+00, 1.30D+00, 1.25D+00, 1.15D+00, 1.15D+00, 1.15D+00, &
    0.88D+00, 2.35D+00, 2.00D+00, 1.80D+00, 1.55D+00, 1.45D+00, &
    1.45D+00, 1.35D+00, 1.30D+00, 1.35D+00, 1.40D+00, 1.60D+00, &
    1.55D+00, 1.55D+00, 1.45D+00, 1.45D+00, 1.40D+00, 1.40D+00, &
    1.08D+00, 2.60D+00, 2.15D+00, 1.95D+00, 1.85D+00, 1.85D+00, &
    1.85D+00, 1.85D+00, 1.85D+00, 1.85D+00, 1.80D+00, 1.75D+00, &
    1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
    1.55D+00, 1.45D+00, 1.35D+00, 1.35D+00, 1.30D+00, 1.35D+00, &
    1.35D+00, 1.35D+00, 1.50D+00, 1.90D+00, 1.80D+00, 1.60D+00, &
    1.90D+00, 1.27D+00, 1.20D+00, 2.60D+00, 2.15D+00, 1.95D+00, &
    1.80D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75d0, &
    1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, &
    1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, &
    1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, &
    1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, &
    1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, 1.75d0, &
    1.75d0, 1.75d0]

! Gill et al., CPL,209, 506 (1993).
  real(kind=dp), parameter :: brsl_values_gill(BRSL_NUM_ELEMENTS) = [ &
     0.52918D+00, 0.31126D+00, 1.62822D+00, 1.08550D+00, &
     0.81414D+00, 0.65131D+00, 0.54272D+00, 0.46520D+00, &
     0.40704D+00, 0.36185D+00, 2.16481D+00, 1.67109D+00, &
     1.36073D+00, 1.14763D+00, 0.99221D+00, 0.87388D+00, &
     0.78075D+00, 0.70555D+00, 2.20D+00,    1.80D+00, &
     1.60D+00, 1.40D+00, 1.35D+00, 1.40D+00, 1.40D+00, &
     1.40D+00, 1.35D+00, 1.35D+00, 1.35D+00, 1.35D+00, &
     1.30D+00, 1.25D+00, 1.15D+00, 1.15D+00, 1.15D+00, &
     0.88D+00, 2.35D+00, 2.00D+00, 1.80D+00, 1.55D+00, &
     1.45D+00, 1.45D+00, 1.35D+00, 1.30D+00, 1.35D+00, &
     1.40D+00, 1.60D+00, 1.55D+00, 1.55D+00, 1.45D+00, &
     1.45D+00, 1.40D+00, 1.40D+00, 1.08D+00, 2.60D+00, &
     2.15D+00, 1.95D+00, 1.85D+00, 1.85D+00, 1.85D+00, &
     1.85D+00, 1.85D+00, 1.85D+00, 1.80D+00, 1.75D+00, &
     1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
     1.75D+00, 1.55D+00, 1.45D+00, 1.35D+00, 1.35D+00, &
     1.30D+00, 1.35D+00, 1.35D+00, 1.35D+00, 1.50D+00, &
     1.90D+00, 1.80D+00, 1.60D+00, 1.90D+00, 1.27D+00, &
     1.20D+00, 2.60D+00, 2.15D+00, 1.95D+00, 1.80D+00, &
     1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
     1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
     1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
     1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
     1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
     1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
     1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
     1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
     1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
     1.75D+00, 1.75D+00]

! O.Treutler, R.Ahlrichs, JCP,102(1), 346 (1995).
  real(kind=dp), parameter :: brsl_values_treutler(BRSL_NUM_ELEMENTS) = [&
     0.8D+00, 0.9D+00, &
     1.8D+00, 1.4D+00, 1.3D+00, 1.1D+00, &
     0.9D+00, 0.9D+00, 0.9D+00, 0.9D+00, &
     1.4D+00, 1.3D+00, 1.3D+00, 1.2D+00, &
     1.1D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.5D+00, 1.4D+00, &
     1.3D+00, 1.2D+00, 1.2D+00, 1.2D+00, 1.2D+00, &
     1.2D+00, 1.2D+00, 1.1D+00, 1.1D+00, 1.1D+00, &
     1.1D+00, 1.0D+00, 0.9D+00, 0.9D+00, 0.9D+00, &
     0.9D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, 1.0D+00, &
     1.0D+00]

! J.C.Slater, JCP 41, 3199 (1964), with Becke's hydrogen value of 0.35 A
! (A.D.Becke, JCP 88, 2547 (1988)) and noble gases / super-heavy elements
! filled with the same conventional values used by the Becke-partition
! reference implementations (e.g. the libdft table behind PySCF's
! dft.radi.BRAGG_RADII).  This is the radii table that defines the
! Becke--Treutler "atomic size adjustment" of the reference ddCOSMO/ddPCM
! density-partition (solvent_pcm), NOT a radial-grid scaling table.
  real(kind=dp), parameter :: brsl_values_becke(BRSL_NUM_ELEMENTS) = [&
    0.35D+00, 1.40D+00, 1.45D+00, 1.05D+00, 0.85D+00, &
    0.70D+00, 0.65D+00, 0.60D+00, 0.50D+00, 1.50D+00, &
    1.80D+00, 1.50D+00, 1.25D+00, 1.10D+00, 1.00D+00, &
    1.00D+00, 1.00D+00, 1.80D+00, 2.20D+00, 1.80D+00, &
    1.60D+00, 1.40D+00, 1.35D+00, 1.40D+00, 1.40D+00, &
    1.40D+00, 1.35D+00, 1.35D+00, 1.35D+00, 1.35D+00, &
    1.30D+00, 1.25D+00, 1.15D+00, 1.15D+00, 1.15D+00, &
    1.90D+00, 2.35D+00, 2.00D+00, 1.80D+00, 1.55D+00, &
    1.45D+00, 1.45D+00, 1.35D+00, 1.30D+00, 1.35D+00, &
    1.40D+00, 1.60D+00, 1.55D+00, 1.55D+00, 1.45D+00, &
    1.45D+00, 1.40D+00, 1.40D+00, 2.10D+00, 2.60D+00, &
    2.15D+00, 1.95D+00, 1.85D+00, 1.85D+00, 1.85D+00, &
    1.85D+00, 1.85D+00, 1.85D+00, 1.80D+00, 1.75D+00, &
    1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
    1.75D+00, 1.55D+00, 1.45D+00, 1.35D+00, 1.35D+00, &
    1.30D+00, 1.35D+00, 1.35D+00, 1.35D+00, 1.50D+00, &
    1.90D+00, 1.80D+00, 1.60D+00, 1.90D+00, 1.45D+00, &
    2.10D+00, 1.80D+00, 2.15D+00, 1.95D+00, 1.80D+00, &
    1.80D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
    1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
    1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
    1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
    1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
    1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
    1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
    1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
    1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, 1.75D+00, &
    1.75D+00, 1.75D+00]

contains

  subroutine set_bragg_slater(array, bstype)
    real(kind=dp), intent(out) :: array(:)
    integer, intent(in) :: bstype

    select case (bstype)
    case (BRSL_TYPE_GAMESS)
      array = brsl_values_gamess

    case (BRSL_TYPE_TA)
      array = brsl_values_treutler

    case (BRSL_TYPE_GILL)
      array = brsl_values_gill

    case (BRSL_TYPE_BECKE)
      array = brsl_values_becke

    case default
      array = brsl_values_gill

    end select
  end subroutine

end module