Class Scine::Sparrow::nddo::TwoElectronIntegralIndexes

class TwoElectronIntegralIndexes

This class initializes and stores as a static array the indices of the charge distributions on one center playing a role in the multipole expansion.

The generation of the indices array happens only one time being it declared static. The generated charge distributions are located on one single center, as in the NDDO approximation charge distributions centered on two centers are neglected: \( \langle \phi_\mu\phi_\nu | \phi_\\lambda\phi_\sigma \rangle = \vardelta_{IJ}\vardelta_{KL}\langle \chi_\mu^I\chi_\nu^J | \chi_\\lambda^K\chi_\sigma^L\rangle \) In total, 40 possible charge distributions are possible: out of a symmetric 9x9 matrix, the diagonal and the terms that give rise to a charge distribution are retained. In the end 40 indices are stored. 5 charge distributions do not give rise to a multipole:

  • \( p_x d_{yz} \)

  • \( p_y d_{xz} \)

  • \( p_z d_{xy} \)

  • \( p_z d_{x^2 - y^2} \)

  • \( p_xy d_{x^2 - y^2} \)

Public Types

using Array = std::array<std::array<orbPair_index_t, 9>, 9>

9x9 matrix with all the possible orbital combinations

Public Static Functions

static orbPair_index_t getPairIndex(orb_index_t i1, orb_index_t i2)

Convert two orbitals into an orbital pair.

Return

The corresponding element in the array, casted as an integer. The integer 100 corresponds to an invalid pair (i.e. a pair with no interaction)

Parameters
  • i1: An element of the enum orb_t, describing a single orbital, casted to an integer

  • i2: An element of the enum orb_t, describing a single orbital, casted to an integer

static bool pairIsInvalid(orb_index_t i1, orb_index_t i2)

Checks if two orbitals form a valid charge distribution.

Return

A boolean indicating if the given pair forms a valid charge distribution

Parameters
  • i1: An element of the enum orb_t, describing a single orbital, casted to an integer

  • i2: An element of the enum orb_t, describing a single orbital, casted to an integer