occ
|
Classes | |
struct | AtomContribution |
Represents the contribution of a single atom to polarization energy attribution. More... | |
struct | CouplingTerm |
Represents a pairwise coupling term between two neighbor interactions. More... | |
struct | MoleculeCouplingResults |
Results from coupling term calculation for a central molecule. More... | |
struct | PairContribution |
Represents the partitioned polarization energy contribution from a dimer pair. More... | |
Typedefs | |
using | FieldMap = ankerl::unordered_dense::map< std::pair< size_t, size_t >, Mat3N > |
Functions | |
PairContribution | partition_crystal_polarization_energy (const core::Dimer &dimer, const Mat3N &total_field_a, const Mat3N &total_field_b, const Mat3N &pair_field_a, const Mat3N &pair_field_b, const Vec &polarizabilities_a, const Vec &polarizabilities_b) |
Partitions crystal field polarization energy back to individual dimer pairs. | |
std::vector< PairContribution > | partition_all_pairs (const std::vector< core::Dimer > &dimers, const FieldMap &total_fields, const FieldMap &pair_fields, const std::vector< Vec > &polarizabilities) |
Partition multiple dimer pairs simultaneously. | |
std::vector< CouplingTerm > | compute_coupling_terms (const std::vector< Mat3N > &neighbor_fields, const std::vector< size_t > &neighbor_indices, const Vec &polarizabilities) |
Compute coupling terms between all pairs of neighbors for a molecule. | |
using occ::interaction::polarization_partitioning::FieldMap = typedef ankerl::unordered_dense::map<std::pair<size_t, size_t>, Mat3N> |
std::vector< CouplingTerm > occ::interaction::polarization_partitioning::compute_coupling_terms | ( | const std::vector< Mat3N > & | neighbor_fields, |
const std::vector< size_t > & | neighbor_indices, | ||
const Vec & | polarizabilities | ||
) |
Compute coupling terms between all pairs of neighbors for a molecule.
For each pair of neighbors (B,C) of a central molecule, computes: C_BC = -Σ_i α_i (F_B,i · F_C,i)
where i runs over atoms in the central molecule, F_B,i is the field at atom i from neighbor B, and α_i is the atomic polarizability.
neighbor_fields | Vector of field contributions from each neighbor (Mat3N) |
neighbor_indices | Vector of unique dimer indices for each neighbor |
polarizabilities | Atomic polarizabilities for the central molecule |
std::vector< PairContribution > occ::interaction::polarization_partitioning::partition_all_pairs | ( | const std::vector< core::Dimer > & | dimers, |
const FieldMap & | total_fields, | ||
const FieldMap & | pair_fields, | ||
const std::vector< Vec > & | polarizabilities | ||
) |
Partition multiple dimer pairs simultaneously.
PairContribution occ::interaction::polarization_partitioning::partition_crystal_polarization_energy | ( | const core::Dimer & | dimer, |
const Mat3N & | total_field_a, | ||
const Mat3N & | total_field_b, | ||
const Mat3N & | pair_field_a, | ||
const Mat3N & | pair_field_b, | ||
const Vec & | polarizabilities_a, | ||
const Vec & | polarizabilities_b | ||
) |
Partitions crystal field polarization energy back to individual dimer pairs.
Uses gradient-based energy attribution following the approach from the reference Python implementation. The total crystal field polarization energy is smaller than the sum of individual pair polarizations due to field cancellation effects.
dimer | The molecular dimer pair |
total_field_a | Total crystal field on molecule A atoms |
total_field_b | Total crystal field on molecule B atoms |
pair_field_a | Field contribution from molecule B onto A |
pair_field_b | Field contribution from molecule A onto B |
polarizabilities_a | Atomic polarizabilities for molecule A |
polarizabilities_b | Atomic polarizabilities for molecule B |