Quoll.Projections
Core-basis projection schemes (FC99V, LaikovCore) and the pipeline entry point perform_core_projection.
Quoll.Projections.FC99V — Type
FC99V <: AbstractBasisProjectionFrozen-core method with a valence correction [1]. Similar to LaikovCore but uses the raw core-valence overlap S₁₂ directly instead of the orthogonalised Ŝ₁₂ = S₁₁⁻¹ S₁₂:
Ō₂₂ = O₂₂ + A₂₂ + A₂₂'where A₂₂ = S₁₂' * (½ O₁₁ S₁₂ - O₁₂).
Requires exactly one Overlap operator among the input operators.
References
[1] doi.org/10.1063/5.0050296
Quoll.Projections.LaikovCore — Type
LaikovCore <: AbstractBasisProjectionCore-projection method from Ref [1]. An application of this method can be found in Ref [2]. Computes the valence-only operator block by subtracting core contributions using the inverse of the core-core overlap S₁₁⁻¹:
Ō₂₂ = O₂₂ + A₂₂ + A₂₂'where A₂₂ = Ŝ₁₂' * (½ O₁₁ Ŝ₁₂ - O₁₂) and Ŝ₁₂ = S₁₁⁻¹ S₁₂.
Requires exactly one Overlap operator among the input operators.
References
[1] doi.org/10.1002/qua.22767
[2] doi.org/10.1038/s41524-026-02020-1
Quoll.Projections.compute_valence_data — Method
compute_valence_data(operators, core_mask_list, valence_mask_list, method)Compute the projected valence-only data for each operator using the given projection method (<:AbstractBasisProjection). All operators must be hermitian and exactly one must be an Overlap. Returns a vector of wrapped DenseRecipData (one per input operator).
Quoll.Projections.core_valence_partition — Method
core_valence_partition(operator_or_data, core_mask, valence_mask)Split an operator (or its data) into core-core (O₁₁), core-valence (O₁₂), and valence-valence (O₂₂) blocks as views. Masks are BitVectors indexing into the full basis.
Quoll.Projections.perform_core_projection — Method
perform_core_projection(operators, projected_basis, kgrid, my_ikpoints, comm; kwargs...)Project out core basis functions from a set of real-space operators, returning valence-only operators. The projection is performed in reciprocal space: for each k-point assigned to this MPI rank, operators are Fourier-transformed, the core-valence projection is applied, and the result is inverse-Fourier-transformed back. Contributions are summed with k-point weights and synchronised across MPI ranks. The function also works with a single task without MPI by suppling all the k-points.
Arguments
operators— vector of real-space operators (Hamiltonian + Overlap).projected_basis— vector ofBasisMetadataidentifying the core basis functions to project out.kgrid— aKGrid(must not use crystal symmetry; currently not implemented).my_ikpoints— indices intokgridthat this MPI rank is responsible for (or all k-points is MPI not used).comm— MPI communicator for synchronisation (MPI.COMM_WORLD if parallelisation is not being performed)
Keyword arguments
method=LaikovCore()— projection method (<:AbstractBasisProjection).recip_operator_type=Operator— operator type for reciprocal-space intermediates.recip_format=CanonicalDenseNoSpinRecipMetadata— metadata type for reciprocal-space intermediates.