File Local2c2eIntegralCalculator.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
namespace multipole
class Local2c2eIntegralCalculator
#include <Local2c2eIntegralCalculator.h>

This class is responsible for the calculation of the 2-center-2-electron integrals in the local coordinate system.

Public Types

using LocalTerms = std::list<LocalTerm>

Each charge distribution might be expanded in more than just one multipole (so, more than one LocalTerm possible).

using LocalTermArray = std::array<std::array<LocalTerms, 40>, 40>

There are 40 possible charge distributions.

Public Static Functions

template<Utils::derivOrder O>
static Utils::AutomaticDifferentiation::Value1DType<O> getIntegral(GeneralTypes::twoElIntegral_t t1, GeneralTypes::twoElIntegral_t t2, double R, const ChargeSeparationParameter &D1, const ChargeSeparationParameter &d2, const KlopmanParameter &rho1, const KlopmanParameter &rho2)

Wrapper around the next overload. It enables the reference of the twoElIntegral_t without the need to cast them.

template<Utils::derivOrder O>
static Utils::AutomaticDifferentiation::Value1DType<O> getIntegral(int t1, int t2, double R, const ChargeSeparationParameter &D1, const ChargeSeparationParameter &d2, const KlopmanParameter &rho1, const KlopmanParameter &rho2)

Calculates the integral value (up to the derivative order O) of the repulsion integral.

Return

The 2-center-2-electron value up to the O-th derivative in the local coordinates system.

Template Parameters
  • O: the derivative order, defines up to which derivative the value must be computed.

Parameters
  • t1: the index referring to the first GeneralTypes::twoElIntegral_t orbital pair.

  • t2: the index referring to the second GeneralTypes::twoElIntegral_t orbital pair.

  • R: the distance between the two centers at which the multipoles are located.

  • D1: the charge separation parameter belonging to the first multipole.

  • d2: the charge separation parameter belonging to the second multipole.

  • rho1: the Klopman parameter for the first center.

  • rho2: the Klopman parameter for the second center.

Private Static Functions

static LocalTermArray setUpTerms()

Generates the possible terms that define the multipole/multipole interactions.

static std::list<std::pair<double, multipole_t>> getMultipoles(GeneralTypes::twoElIntegral_t t, bool hasD)

Generates a multipole corresponding to the two electron integral type t.

hasD makes sure that charge configuration corresponding to different multipoles in presence or absence of d basis functions are correctly represented

struct LocalTerm
#include <Local2c2eIntegralCalculator.h>

Struct defining an interaction between two multipoles.

It consists of a prefactor, f, the charge distributions and the corresponding multipoles. It thus uniquely defines an interaction.