Generalized Quadratic Model for Charge Transfer
This library is based on the work published in Phys. Chem. Chem. Phys 27, 11318 (2025).
Currently we only include a parser for NWChem outputs. But please reach out to us if you are interested in other electronic structure codes, we are happy to help you.
To read NWChem outputs, we can use the read module from the package. We need to provide the path to the output files for the chemical species.
from cdft import read
cation = read.nwchem( "path/to/cation/output.out" )
neutral = read.nwchem( "path/to/neutral/output.out" )
anion = read.nwchem( "path/to/anion/output.out" )Please note that we can use whatever extension we wish for our outputs for as long as we include the complete file name. The read module will go through the information in the file and extract the total energy and orbital energies. These attributes are readily accesible from the returned objects.
# Getting the attributes from the 'neutral' parsed output
total_energy = neutral.energy
homo_energy = neutral.homo
lumo_energy = neutral.lumoWe include three different models, namely, the One-Parabola Model by Parr and Pearson, the Two-Parabola Model by Gazquez, Cedillo and Vela, and the Generalized Quadratic Model by Albavera-Mata, Gazquez and Vela.
The One-Parabola Model is based on the assumption that the energy of a system as a function of the number of electrons can be approximated by a single parabola based on the chemical potential
where
from cdft import model
mu, eta = model.one_parabola( cation=cation, neutral=neutral, anion=anion )The Two-Parabola Model considers two separate parabolas to describe the energy changes associated with electron addition (
where
from cdft import model
mu_minus, mu_plus, eta = model.two_parabola( cation=cation, neutral=neutral, anion=anion )The Generalized Quadratic Model further refines the previous models by incorporating information from the highest-occupied and lowest-unnocupied frontier molecular orbitals, HOMO and LUMO, respectively, to better capture the nuances of charge transfer processes. This model is versatile and can be adapted to a wide range of chemical systems.
where
from cdft import model
mu_minus, mu_plus, eta_minus_eta_plus = model.generalized( cation=cation, neutral=neutral, anion=anion )For the sake of consistency and comparison, we include the same three quadratic interpolations. These commonly are used to discern charge trasnfer trends for donor-acceptor reactions, granted that a reactant A is donating charge while reactant B accepts it. For illustrative purposes, here we will assume that species B is our target reagent, where
The charge transfer channels for the One-Parabola Model are given by
where
from cdft import charge
delta_N_minus, delta_N_plus = charge.one_parabola( cation=cation_A, neutral=neutral_A, anion=anion_A,
ref_cation=cation_B, ref_neutral=neutral_B, ref_anion=anion_B )The charge transfer channels for the Two-Parabola Model are given by
where
from cdft import charge
delta_N_minus, delta_N_plus = charge.one_parabola( cation=cation_A, neutral=neutral_A, anion=anion_A,
ref_cation=cation_B, ref_neutral=neutral_B, ref_anion=anion_B )The charge transfer channels for the Generalized Quadratic Model are given by
where
from cdft import charge
delta_N_minus, delta_N_plus = charge.generalized( cation=cation_A, neutral=neutral_A, anion=anion_A,
ref_cation=cation_B, ref_neutral=neutral_B, ref_anion=anion_B )