occ
Loading...
Searching...
No Matches
occ::qm::cphf Namespace Reference

Coupled-perturbed SCF (CPHF / CPKS). More...

Classes

struct  SpinChannel
 The occupied and virtual orbitals of one spin channel. More...
struct  Settings
struct  Result
 Vectors in the virtual-occupied space (U, B, residuals) are single matrices: nvirt x nocc for a restricted reference; for unrestricted the alpha (nvirt_a x n_alpha) and beta blocks one after the other, column-major, as one column. More...
class  Solver

Typedefs

using ResponseFunction
 The response for a batch of perturbed occupied coefficients Cx (in the layout of occupied_orbitals): per channel G^s[D1] C_o^s with D1^s = Cx^s C_o^s^T + C_o^s Cx^s^T, the first-order per-spin density (restricted, G = 2J[D1] - K[D1]) or spin density (unrestricted, G^s = J[D1^a + D1^b] - K[D1^s]).

Functions

std::vector< SpinChannel > spin_channels (const MolecularOrbitals &mo)
 The spin channels of an SCF reference: one for restricted (two electrons per orbital), alpha then beta for unrestricted.
Mat occupied_orbitals (const MolecularOrbitals &mo)
 The occupied coefficients of every channel side by side, nbf x (n_alpha [+ n_beta]): the layout of perturbed occupied coefficients Cx and of the responses G[D1] C_o.
Mat contract_occupied (const Mat &F, const MolecularOrbitals &mo)
 F^s C_o^s for every channel, side by side in that layout.

Detailed Description

Coupled-perturbed SCF (CPHF / CPKS).

The solver is method-agnostic: a procedure supplies one operation, the response Fock matrices G[D1] for a batch of symmetric first-order AO densities D1, and everything else here is linear algebra in the virtual-occupied space. For Hartree-Fock G = 2J[D1] - K[D1] (occ's restricted D is the per-spin density); a hybrid scales K and adds the XC kernel; solvent adds the reaction-field response.

Real, static perturbations, restricted or unrestricted: per spin channel s

(e_a - e_i) U^s_ai + [C_v^s^T G^s[D(U)] C_o^s]_ai = B^s_ai

with D^s(U) = C_v^s U^s C_o^s^T + C_o^s U^s^T C_v^s^T, i.e. the orbital Hessian (A + B) applied to U. The channels couple only through G (the Coulomb and, for DFT, the XC kernel). All right-hand sides share each batched G evaluation; converged ones drop out of the batch.

Typedef Documentation

◆ ResponseFunction

Initial value:
std::function<std::vector<Mat>(const std::vector<Mat> &)>

The response for a batch of perturbed occupied coefficients Cx (in the layout of occupied_orbitals): per channel G^s[D1] C_o^s with D1^s = Cx^s C_o^s^T + C_o^s Cx^s^T, the first-order per-spin density (restricted, G = 2J[D1] - K[D1]) or spin density (unrestricted, G^s = J[D1^a + D1^b] - K[D1^s]).

A CPHF rotation U gives Cx^s = C_v^s U^s; an occupied-occupied perturbation M gives Cx^s = C_o^s M^s / 2. The response contracted with C_o is all CPHF and the Hessian ever use (its vo and oo blocks), and lets a method avoid nbf x nbf matrices.

Function Documentation

◆ contract_occupied()

Mat occ::qm::cphf::contract_occupied ( const Mat & F,
const MolecularOrbitals & mo )

F^s C_o^s for every channel, side by side in that layout.

F is nbf x nbf (one operator for both spins) or, unrestricted, alpha rows over beta rows.

◆ occupied_orbitals()

Mat occ::qm::cphf::occupied_orbitals ( const MolecularOrbitals & mo)

The occupied coefficients of every channel side by side, nbf x (n_alpha [+ n_beta]): the layout of perturbed occupied coefficients Cx and of the responses G[D1] C_o.

◆ spin_channels()

std::vector< SpinChannel > occ::qm::cphf::spin_channels ( const MolecularOrbitals & mo)

The spin channels of an SCF reference: one for restricted (two electrons per orbital), alpha then beta for unrestricted.