File TwoElectronIntegralIndexes.h

Copyright

This code is licensed under the 3-clause BSD license.

Copyright ETH Zurich, Laboratory for Physical Chemistry, Reiher Group.

See LICENSE.txt for details.

namespace Scine
namespace Sparrow
namespace nddo
class TwoElectronIntegralIndexes
#include <TwoElectronIntegralIndexes.h>

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 orb_index_t = int
using orbPair_index_t = int
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

Private Static Functions

static orbPair_index_t getIndex(orb_index_t i1, orb_index_t i2)
static Array createUniqueIndexes()

Private Static Attributes

constexpr orbPair_index_t invalidPair = 100