File DensityMatrixBuilder.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

This header file contains functions that allow for common notation for common things that can be done at a different degree of derivatives.

This header contains alias definitions defining which classes to use for the different degrees of derivatives.

namespace Utils
namespace LcaoUtils
class DensityMatrixBuilder
#include <DensityMatrixBuilder.h>

Class to generate density matrices from coefficient matrices. Different possibilities to do so:

  • Specify the number of electrons

  • Specify which orbitals to consider

  • Specify the number of electrons and some number of swaps TODO: Use the class MolecularOrbitalsManipulation instead of reimplementing the mixes and swaps

Public Types

using PartlyOccupiedOrbital = std::pair<int, double>

Alias for partly occupied orbital, given by orbital index and its occupation [0-1] (UHF) vs [0-2] (RHF).

Public Functions

DensityMatrixBuilder(const MolecularOrbitals &coefficientMatrix)
DensityMatrix generateRestrictedForNumberElectrons(int nElectrons) const

Generates a restricted density matrix for the given number of electrons.

DensityMatrix generateUnrestrictedForNumberElectronsAndMultiplicity(int nElectrons, int spinMultiplicity) const

Generates an unrestricted density matrix for the given number of electrons and corresponding spin multiplicity.

DensityMatrix generateUnrestrictedForNumberAlphaAndBetaElectrons(int nAlpha, int nBeta) const

Generates an unrestricted density matrix for the given number of alpha and beta electrons.

DensityMatrix generateRestrictedForSpecifiedOrbitals(const std::vector<int> &doublyOccupiedOrbitals) const

Generates a restricted density matrix from specified molecular orbitals (eigenvectors), which will be doubly filled.

DensityMatrix generateUnrestrictedForSpecifiedOrbitals(const std::vector<int> &alphaOrbitals, const std::vector<int> &betaOrbitals) const

Generates an unrestricted density matrix from specified molecular orbitals (eigenvectors).

DensityMatrix generateRestrictedWithSwaps(const std::vector<MolecularOrbitalsManipulation::DeprecatedSwap> &swaps, int nElectrons) const

Generates a restricted density matrix with given Swaps.

Pre

nElectrons is even.

DensityMatrix generateUnrestrictedWithSwaps(const std::vector<MolecularOrbitalsManipulation::DeprecatedSwap> &alphaSwaps, const std::vector<MolecularOrbitalsManipulation::DeprecatedSwap> &betaSwaps, int nAlpha, int nBeta) const

Generates an unrestricted density matrix with given Swaps.

DensityMatrix generateRestrictedForSpecifiedPartlyOccupiedOrbitals(const std::vector<PartlyOccupiedOrbital> &orbitals)

Generates a restricted density matrix from specified molecular orbitals (eigenvectors) and their occupation [0-2].

DensityMatrix generateUnrestrictedForSpecifiedPartlyOccupiedOrbitals(const std::vector<PartlyOccupiedOrbital> &alphaOrbitals, const std::vector<PartlyOccupiedOrbital> &betaOrbitals)

Generates an unrestricted density matrix from specified molecular orbitals (eigenvectors) and their occupation [0-1].

DensityMatrix generateRestrictedWithMixing(const std::vector<MolecularOrbitalsManipulation::DeprecatedMix> &mix, int nElectrons) const

Generates a restricted density matrix with given Mixing.

Pre

nElectrons is even.

DensityMatrix generateUnrestrictedWithMixing(const std::vector<MolecularOrbitalsManipulation::DeprecatedMix> &alphaMix, const std::vector<MolecularOrbitalsManipulation::DeprecatedMix> &betaMix, int nAlpha, int nBeta) const

Generates an unrestricted density matrix with given Mixing.

Private Functions

Eigen::MatrixXd calculateSingleOrbitalDensity(const Eigen::VectorXd &eigenvector) const
Eigen::MatrixXd calculateBlockOrbitalDensity(const Eigen::MatrixXd &eigenvectors) const
Eigen::MatrixXd calculateDensityMatrix(const Eigen::MatrixXd &coefficientMatrix, int nOccupiedLevels) const
Eigen::MatrixXd calculateDifferenceSwapDensity(const Eigen::MatrixXd &coefficientMatrix, const std::vector<MolecularOrbitalsManipulation::DeprecatedSwap> &swaps, int homoIndex) const
Eigen::MatrixXd calculateDifferenceMixDensity(const Eigen::MatrixXd &coefficientMatrix, const std::vector<MolecularOrbitalsManipulation::DeprecatedMix> &mix, int homoIndex) const

Private Members

const MolecularOrbitals &coefficientMatrix_