File RandomOrbitalMixer.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 MultipleScfSolutions
class RandomOrbitalMixer
#include <RandomOrbitalMixer.h>

Class to randomly mix randomly chosen molecular orbitals. In the restricted case, the alphaHomo_ and betaHomo_ are both holding the value for restrictedHomo_.

Public Functions

RandomOrbitalMixer(MolecularOrbitals &orbitals, int nRestrictedElectrons)

Constructor for the restricted case.

RandomOrbitalMixer(MolecularOrbitals &orbitals, int nAlphaElectrons, int nBetaElectrons)

Constructor for the unrestricted case.

void mix()
void setNumberMixes(int numberMixes)
void setMaximalMixAngle(double maxAngle)
void setMinimalMixAngle(double minAngle)
void considerOnlyOrbitalsCloseToFrontierOrbitals(int numberToConsider)

numberToConsider Will be the same both for occupied and virtual orbitals.

void considerAllOrbitals()

Public Static Functions

static std::mt19937 &getRandomNumberGenerator()

Private Functions

void checkValidNumberOfMixes()
std::vector<LcaoUtil::MolecularOrbitalsManipulation::Mix> calculateMixes(int homoIndex) const
std::vector<int> getRandomOccupiedOrbitals(int homoIndex) const
std::vector<int> getRandomVirtualOrbitals(int homoIndex) const
std::vector<int> selectUniqueRandomNumbers(int min, int max) const
std::vector<LcaoUtil::MolecularOrbitalsManipulation::Mix> createMixes(const std::vector<int> &occ, const std::vector<int> &virt) const
int calculateMaximalVirtualIndex(int homoIndex) const
int calculateMinimalOccupiedIndex(int homoIndex) const
bool invalidMolecularOrbitals(const MolecularOrbitals &mo) const

Private Members

MolecularOrbitals &orbitals_
const int alphaHomo_
const int betaHomo_
const int nOrbitals_
double minAngle_ = 0
double maxAngle_ = 0.02
int numberMixes_ = 10
bool considerAllOrbitals_ = true
int numberOrbitalsToConsider_ = 0