Effective Hamiltonian construction
The EffectiveHamiltonianConstructor algorithm in QDK/Chemistry defines a common interface for downfolding a Hamiltonian from a larger orbital window into a smaller target space.
Following QDK/Chemistry’s algorithm design principles, it takes a reference Wavefunction, an input Hamiltonian, and target-space orbital indices as input and produces an effective Hamiltonian as output.
The interface leaves the downfolding approximation and method-specific diagnostics to the concrete implementation.
Overview
Let the orbital window \(W\) be partitioned into a target space \(P\) and an external space \(Q\):
Using \(\hat P\) and \(\hat Q\) for the corresponding projectors, the full-window Hamiltonian has the block structure
An implementation accounts for the influence of \(Q\) while constructing an effective Hamiltonian that acts only in \(P\):
where \(\mathcal{D}\) denotes the selected downfolding implementation. The interface does not prescribe how the coupling blocks \(H_{PQ}\) and \(H_{QP}\) or the external block \(H_{QQ}\) contribute to \(H_{\mathrm{eff}}^{P}\).
Using the EffectiveHamiltonianConstructor
The run method takes a reference wavefunction, a full-window Hamiltonian, and the target-space indices and returns the effective Hamiltonian acting in \(P\).
Input requirements
The EffectiveHamiltonianConstructor requires the following inputs:
- Reference wavefunction
A
Wavefunctionthat defines the reference state used by the downfolding method.- Input Hamiltonian
A
Hamiltonianexpressed over the complete orbital window \(W\).- Target-space indices
A
SymmetryBlockedIndexSetcontaining the indices of \(P\). These are absolute molecular-orbital indices, drawn from the same index universe asOrbitals.active_indices(), and must lie within the active space of \(W\).
Output contract
The returned Hamiltonian is expressed over \(P\) and satisfies:
its orbitals have
active_indices()equal to the requested target-space indices;its orbitals classify fully occupied orbitals of \(Q = W \setminus P\) as inactive and unoccupied orbitals of \(Q\) as virtual, while preserving the input Hamiltonian’s inactive orbitals;
its inactive Fock matrix, when present, is consistent with the output inactive orbitals and may therefore differ from the input Hamiltonian’s inactive Fock matrix;
the scalar shift from folding in \(Q\) is added to the constant (zero-body) energy term, and the remaining \(Q\) contribution is folded into the integrals.
The occupied/virtual partition of \(Q\) is method dependent and is determined by the concrete implementation from its reference state. Classifying an orbital of \(Q\) as virtual describes its occupation in the output orbital metadata; it does not place that orbital in the effective active space. Consumers of an effective Hamiltonian should not attempt to re-correlate \(Q\), since its contribution is already folded in.
Input validation is opt-in.
The run method does not validate its arguments; each concrete implementation decides whether to check the nested-space contract \(P \subseteq W_{\mathrm{ref}} \subseteq W_H\) before computing.
The base interface defines no common settings.
Concrete implementations can expose method-specific configuration through the settings() object.
See Settings for a general treatment of algorithm settings in QDK/Chemistry.
Available implementations
QDK/Chemistry currently provides the EffectiveHamiltonianConstructor interface but no concrete implementation or default factory choice.
Creation, configuration, and execution examples will be added with the first concrete implementation.
Further reading
ActiveSpaceSelector: Identifies orbital subspaces for correlated calculations
Settings: Configures algorithm implementations
Factory Pattern: Discovers, registers, and creates algorithm implementations