occ
Loading...
Searching...
No Matches
occ::xtb::SmdSolvationModel Class Referencefinal

SMD ("Solvation Model based on Density") for GFN-xTB. More...

#include <smd_xtb.h>

Inheritance diagram for occ::xtb::SmdSolvationModel:
[legend]
Collaboration diagram for occ::xtb::SmdSolvationModel:
[legend]

Public Member Functions

 SmdSolvationModel (std::string solvent="water")
 
void initialize (const Mat3N &positions_bohr, const IVec &atomic_numbers) override
 
void update (const Vec &atomic_charges) override
 
void update (const Vec &atomic_charges, const Mat3N &dipoles, const Mat &quadrupoles) override
 Update from the atomic charges together with the CAMM atomic dipoles (3 × N) and traceless quadrupoles (6 × N, CammMoments::qp layout), so the anisotropic part of the density polarises the continuum too.
 
void set_multipole_damping (const Vec &rco_bohr, double kdmp3, double kdmp5) override
 Hand the model the solute's own short-range damping radii for the atom→cavity dipole and quadrupole kernels, so a multipolar reaction field treats the CAMM moments the way the rest of the method does.
 
const Vec & atom_potential () const override
 
const Mat3N & dipole_potential () const override
 Conjugates of the atomic dipoles and quadrupoles at the last update: ∂E_solv/∂μ (3 × N) and ∂E_solv/∂Θ (6 × N, same layout as the input).
 
const Mat & quadrupole_potential () const override
 
const Vec & damping_radius_gradient () const override
 ∂E_solv/∂R_co per atom, for damping radii that depend on the geometry.
 
double energy () const override
 
std::string name () const override
 
std::optional< SolvationSurfaces > surfaces () const override
 Optional per-element decomposition of the latest solvation contribution.
 
Mat3N gradient () const override
 Analytical gradient of the solvation energy with respect to atomic positions (Hartree/Bohr, 3 × N_atoms).
 
const occ::solvent::SMDSolventParameters & parameters () const
 
double dielectric () const
 
const occ::solvent::surface::Surface & es_surface () const
 
size_t num_es_surface_points () const
 
const Vec & surface_charges () const
 Apparent surface charge σ at the latest update(q). Empty until then.
 
const occ::solvent::surface::Surface & cds_surface () const
 
size_t num_cds_surface_points () const
 
const Vec & cds_energy_elements () const
 Per-element CDS energy contribution (Hartree).
 
double e_es () const
 
double e_cds () const
 
const occ::scrf::ReactionFieldEngine & engine () const
 Access the underlying engine (for inspection / tests).
 
- Public Member Functions inherited from occ::xtb::XtbSolvationModel
virtual ~XtbSolvationModel ()=default
 

Detailed Description

SMD ("Solvation Model based on Density") for GFN-xTB.

Two cavities: • Electrostatic (ES) surface with SMD intrinsic Coulomb radii — feeds a classical-COSMO ASC solve (same machinery as CpcmXSolvationModel, just with different radii). • CDS surface with SMD CDS radii — used purely geometrically to evaluate the cavitation–dispersion–solvent rearrangement (CDS) energy E_cds = (Σ_a σ_a(geom)·A_a + γ·A_total) / (1000·E_h→kcal). The CDS piece does not depend on the SCC charges; it is fixed once the geometry is known and just rides along inside energy().

Phase 2: this class is a thin adapter over occ::scrf::ReactionFieldEngine configured with Radii::SmdIntrinsicCoulomb + include_cds = true. The xTB SCC consumes solvation via the XtbSolvationModel virtual contract — keeping the class makes that hookup transparent and gives callers an "SMD-shaped" handle for inspection.

Constructor & Destructor Documentation

◆ SmdSolvationModel()

occ::xtb::SmdSolvationModel::SmdSolvationModel ( std::string  solvent = "water")
explicit

Member Function Documentation

◆ atom_potential()

const Vec & occ::xtb::SmdSolvationModel::atom_potential ( ) const
inlineoverridevirtual

◆ cds_energy_elements()

const Vec & occ::xtb::SmdSolvationModel::cds_energy_elements ( ) const
inline

Per-element CDS energy contribution (Hartree).

Length = number of CDS surface points. Stable across update() calls (geometry only).

◆ cds_surface()

const occ::solvent::surface::Surface & occ::xtb::SmdSolvationModel::cds_surface ( ) const
inline

◆ damping_radius_gradient()

const Vec & occ::xtb::SmdSolvationModel::damping_radius_gradient ( ) const
inlineoverridevirtual

∂E_solv/∂R_co per atom, for damping radii that depend on the geometry.

The caller closes the chain through its own ∂R_co/∂CN and ∂CN/∂R. Empty when the model applies no damping.

Reimplemented from occ::xtb::XtbSolvationModel.

◆ dielectric()

double occ::xtb::SmdSolvationModel::dielectric ( ) const
inline

◆ dipole_potential()

const Mat3N & occ::xtb::SmdSolvationModel::dipole_potential ( ) const
inlineoverridevirtual

Conjugates of the atomic dipoles and quadrupoles at the last update: ∂E_solv/∂μ (3 × N) and ∂E_solv/∂Θ (6 × N, same layout as the input).

The SCC folds these into its anisotropic potentials so the reaction field reaches the Fock matrix through the multipole channels as well as the charge one. Both are empty unless the model took the multipole update.

Reimplemented from occ::xtb::XtbSolvationModel.

◆ e_cds()

double occ::xtb::SmdSolvationModel::e_cds ( ) const
inline

◆ e_es()

double occ::xtb::SmdSolvationModel::e_es ( ) const
inline

◆ energy()

double occ::xtb::SmdSolvationModel::energy ( ) const
inlineoverridevirtual

◆ engine()

const occ::scrf::ReactionFieldEngine & occ::xtb::SmdSolvationModel::engine ( ) const
inline

Access the underlying engine (for inspection / tests).

◆ es_surface()

const occ::solvent::surface::Surface & occ::xtb::SmdSolvationModel::es_surface ( ) const
inline

◆ gradient()

Mat3N occ::xtb::SmdSolvationModel::gradient ( ) const
inlineoverridevirtual

Analytical gradient of the solvation energy with respect to atomic positions (Hartree/Bohr, 3 × N_atoms).

Frozen-cavity convention — the cavity points move rigidly with their parent atoms and per-element areas are constant. Concrete models override; the default returns an empty matrix so callers can detect "no gradient available" without surprise.

Reimplemented from occ::xtb::XtbSolvationModel.

◆ initialize()

void occ::xtb::SmdSolvationModel::initialize ( const Mat3N &  positions_bohr,
const IVec &  atomic_numbers 
)
overridevirtual

◆ name()

std::string occ::xtb::SmdSolvationModel::name ( ) const
overridevirtual

◆ num_cds_surface_points()

size_t occ::xtb::SmdSolvationModel::num_cds_surface_points ( ) const
inline

◆ num_es_surface_points()

size_t occ::xtb::SmdSolvationModel::num_es_surface_points ( ) const
inline

◆ parameters()

const occ::solvent::SMDSolventParameters & occ::xtb::SmdSolvationModel::parameters ( ) const
inline

◆ quadrupole_potential()

const Mat & occ::xtb::SmdSolvationModel::quadrupole_potential ( ) const
inlineoverridevirtual

Reimplemented from occ::xtb::XtbSolvationModel.

◆ set_multipole_damping()

void occ::xtb::SmdSolvationModel::set_multipole_damping ( const Vec &  ,
double  ,
double   
)
inlineoverridevirtual

Hand the model the solute's own short-range damping radii for the atom→cavity dipole and quadrupole kernels, so a multipolar reaction field treats the CAMM moments the way the rest of the method does.

Called once per geometry, before the first update. The default ignores them.

Reimplemented from occ::xtb::XtbSolvationModel.

◆ surface_charges()

const Vec & occ::xtb::SmdSolvationModel::surface_charges ( ) const
inline

Apparent surface charge σ at the latest update(q). Empty until then.

◆ surfaces()

std::optional< SolvationSurfaces > occ::xtb::SmdSolvationModel::surfaces ( ) const
overridevirtual

Optional per-element decomposition of the latest solvation contribution.

Concrete models (CPCM-X, SMD) override; the default returns std::nullopt. Reflects the state at the most recent update(q).

Reimplemented from occ::xtb::XtbSolvationModel.

◆ update() [1/2]

void occ::xtb::SmdSolvationModel::update ( const Vec &  atomic_charges)
overridevirtual

◆ update() [2/2]

void occ::xtb::SmdSolvationModel::update ( const Vec &  atomic_charges,
const Mat3N &  ,
const Mat &   
)
overridevirtual

Update from the atomic charges together with the CAMM atomic dipoles (3 × N) and traceless quadrupoles (6 × N, CammMoments::qp layout), so the anisotropic part of the density polarises the continuum too.

The default drops them, which leaves charge-only models unchanged.

Reimplemented from occ::xtb::XtbSolvationModel.


The documentation for this class was generated from the following file: