|
MADNESS 0.10.1
|
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 | |
| 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 | ||
| ) |
charges and spin populations from the populations of both spins (beta empty when nbeta is 0)
References a, alpha, madness::population::AtomicPopulations::alpha, madness::population::AtomicPopulations::basis, beta, madness::population::AtomicPopulations::beta, madness::population::AtomicPopulations::charge, madness::population::SpinPopulation::electrons, MADNESS_CHECK_THROW, madness::population::AtomicPopulations::nalpha, madness::population::AtomicPopulations::nbeta, madness::population::AtomicPopulations::nbf, madness::population::AtomicPopulations::scheme, madness::population::AtomicPopulations::spin, madness::population::AtomicPopulations::symbols, and Z.
Referenced by madness::population::PopulationAnalysis::run().
| 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().
| 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().
| 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.)
| [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().
| const std::vector< std::string > & madness::population::schemes | ( | ) |
the schemes this file implements
| 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().