occ
Loading...
Searching...
No Matches
occ::interaction::polarization_partitioning Namespace Reference

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< PairContributionpartition_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< CouplingTermcompute_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.
 

Typedef Documentation

◆ FieldMap

using occ::interaction::polarization_partitioning::FieldMap = typedef ankerl::unordered_dense::map<std::pair<size_t, size_t>, Mat3N>

Function Documentation

◆ compute_coupling_terms()

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.

Parameters
neighbor_fieldsVector of field contributions from each neighbor (Mat3N)
neighbor_indicesVector of unique dimer indices for each neighbor
polarizabilitiesAtomic polarizabilities for the central molecule
Returns
Vector of coupling terms for all neighbor pairs

◆ partition_all_pairs()

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.

◆ partition_crystal_polarization_energy()

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.

Parameters
dimerThe molecular dimer pair
total_field_aTotal crystal field on molecule A atoms
total_field_bTotal crystal field on molecule B atoms
pair_field_aField contribution from molecule B onto A
pair_field_bField contribution from molecule A onto B
polarizabilities_aAtomic polarizabilities for molecule A
polarizabilities_bAtomic polarizabilities for molecule B
Returns
PairContribution containing attributed energies