MADNESS 0.10.1
Classes | Functions
madness::population Namespace Reference

Classes

struct  AtomicPopulations
 one scheme's atomic charges and spin populations for a molecule More...
 
class  PopulationAnalysis
 the population analysis of the population keys, for orbitals given in real space More...
 
struct  SpinPopulation
 electrons per atom from one spin's occupied orbitals, with the scheme's diagnostics More...
 

Functions

AtomicPopulations atomic_populations (const std::string &scheme, const std::string &basis, long nbf, const std::vector< std::string > &symbols, const std::vector< double > &Z, long nalpha, long nbeta, const SpinPopulation &alpha, const SpinPopulation &beta)
 charges and spin populations from the populations of both spins (beta empty when nbeta is 0)
 
SpinPopulation iao_population (const Tensor< double > &S, const Tensor< double > &X, const Tensor< double > &occ, const std::vector< int > &atom_of_bf, long natom)
 populations of the intrinsic atomic orbitals (Knizia, J. Chem. Theory Comput. 9, 4834 (2013))
 
Tensor< double > matrix_power (const Tensor< double > &S, const double p, const double tol)
 
SpinPopulation projection_population (const std::string &scheme, const Tensor< double > &S, const Tensor< double > &X, const Tensor< double > &occ, const std::vector< int > &atom_of_bf, long natom)
 Mulliken or Loewdin populations of the occupied space projected onto the basis.
 
const std::vector< std::string > & schemes ()
 the schemes this file implements
 
SpinPopulation spin_population (const std::string &scheme, const Tensor< double > &S, const Tensor< double > &X, const Tensor< double > &occ, const std::vector< int > &atom_of_bf, long natom)
 dispatch: "mulliken" and "lowdin" to projection_population, "iao" to iao_population
 

Function Documentation

◆ atomic_populations()

AtomicPopulations madness::population::atomic_populations ( const std::string &  scheme,
const std::string &  basis,
const long  nbf,
const std::vector< std::string > &  symbols,
const std::vector< double > &  Z,
const long  nalpha,
const long  nbeta,
const SpinPopulation &  alpha,
const SpinPopulation &  beta 
)

◆ iao_population()

SpinPopulation madness::population::iao_population ( const Tensor< double > &  S,
const Tensor< double > &  X,
const Tensor< double > &  occ,
const std::vector< int > &  atom_of_bf,
long  natom 
)

populations of the intrinsic atomic orbitals (Knizia, J. Chem. Theory Comput. 9, 4834 (2013))

For a complete large basis (MRA) the IAOs follow from S and X of a minimal basis alone: W = X^T S^-1 X, D = S^-1 X W^-1/2 (the depolarized orbitals chi D) M = 1 - D D^T S, K = X^T (2 D D^T S - 1) A = chi M + phi K (the IAOs), <A|A> = M^T S M + M^T X K + K^T X^T M + K^T K, <A|phi> = M^T X + K^T Q = <A|A>^-1/2 <A|phi>, N_rho = sum_i n_i Q_rho,i^2 The orbitals lie in the IAO span, so every column of Q has unit norm and the electrons sum to sum_i n_i to the precision of the overlaps. Throws when W is singular: the minimal basis then misses an orbital's atomic character.

References std::abs(), madness::BaseTensor::dim(), madness::population::SpinPopulation::electrons, madness::inner(), L, MADNESS_CHECK_THROW, matrix_power(), madness::population::SpinPopulation::max_norm_error, madness::population::SpinPopulation::min_w_eigenvalue, mu, norm(), Q(), madness::syev(), madness::transpose(), and w().

Referenced by spin_population().

◆ matrix_power()

Tensor< double > madness::population::matrix_power ( const Tensor< double > &  S,
double  p,
double  tol = 1.e-12 
)

S^p of a symmetric positive semidefinite matrix; eigenvalues below tol * (largest) are dropped (for p < 0: the pseudo-inverse power on the retained space)

References madness::_(), madness::copy(), e(), madness::f, madness::inner(), k, MADNESS_CHECK_THROW, p(), madness::Tensor< T >::scale(), madness::syev(), and madness::transpose().

Referenced by iao_population(), and projection_population().

◆ projection_population()

SpinPopulation madness::population::projection_population ( const std::string &  scheme,
const Tensor< double > &  S,
const Tensor< double > &  X,
const Tensor< double > &  occ,
const std::vector< int > &  atom_of_bf,
long  natom 
)

Mulliken or Loewdin populations of the occupied space projected onto the basis.

The fit of phi_i onto the basis is C_i = S^-1 X_i; the fitted orbitals overlap as W = C^T S C = X^T S^-1 X, whose diagonal c_i <= 1 is each orbital's completeness. The fits are orthonormalized among themselves, Cbar = C W^-1/2 (the depolarized orbitals of the IAO construction), so the electrons sum to sum_i n_i and what the basis misses shows as the spilling instead: mulliken: N_mu = sum_i n_i (Cbar_i o S Cbar_i)_mu lowdin: N_mu = sum_i n_i ((S^1/2 Cbar_i)_mu)^2 Both are invariant under rotations among equally occupied orbitals. (Renormalizing each fit by its own c_i also gives the sum rule, but not that invariance.)

Parameters
[in]scheme"mulliken" or "lowdin"

References madness::population::SpinPopulation::completeness, madness::BaseTensor::dim(), madness::population::SpinPopulation::electrons, madness::inner(), L, MADNESS_CHECK_THROW, matrix_power(), madness::population::SpinPopulation::min_w_eigenvalue, mu, madness::population::SpinPopulation::spilling, madness::syev(), madness::transpose(), and w().

Referenced by spin_population().

◆ schemes()

const std::vector< std::string > & madness::population::schemes ( )

the schemes this file implements

◆ spin_population()

SpinPopulation madness::population::spin_population ( const std::string &  scheme,
const Tensor< double > &  S,
const Tensor< double > &  X,
const Tensor< double > &  occ,
const std::vector< int > &  atom_of_bf,
const long  natom 
)

dispatch: "mulliken" and "lowdin" to projection_population, "iao" to iao_population

References iao_population(), and projection_population().

Referenced by madness::population::PopulationAnalysis::run().