Skip to main content

Solvation Free Energy (Gsolv)

A Gsolv single point energy calculation evaluates a molecule at its current geometry using a solvated level of theory and returns the total energy and the solvation free energy (gsolv). Two solvation models are supported:

  • SMD (WB97M-V) — accurate but more expensive. Ideal for high-quality benchmarks.
  • CPCM (GFN2-xTB / CPCM-X) — fast, semi-empirical. Ideal for screening and quick estimates.
import atomiverse
from atomiverse import Atoms, GsolvSMDSinglePointEnergy
from atomiverse.levels import WB97M_V_DEF2_SVP_SMD_WATER

atomiverse.configure(api_key="your-api-key")

water = Atoms.from_smiles("O")

job = GsolvSMDSinglePointEnergy(
atoms=water,
level_of_theory=WB97M_V_DEF2_SVP_SMD_WATER,
)

job.submit()

result = job.require_result()
print(f"Energy: {result.energy:.6f} Hartree")
print(f"Gsolv: {result.gsolv:.6f} Hartree")

Result

job.require_result() returns a GsolvSMDSinglePointEnergyResult:

FieldTypeUnits
energyfloatHartree
gsolvfloatHartree
  • gsolv is the solvation free energy: the difference between the solvated and gas-phase total energies.
  • energy has the same semantics as in SinglePointEnergy.
  • Forces are not computed — this job type is always energy-only.

Fast Path: xTB CPCM-X

For rapid screening, use GFN2-xTB with CPCM-X solvation. This runs two quick xTB single points (gas + CPCM) and returns the difference as gsolv:

from atomiverse import (
GsolvSMDSinglePointEnergy,
ImplicitSolvation,
LevelOfTheory,
SolvationMethod,
)

lot = LevelOfTheory(
method="gfn2-xtb",
solvation=ImplicitSolvation(
method=SolvationMethod.CPCM,
solvent="water",
),
)

job = GsolvSMDSinglePointEnergy(
atoms=water,
level_of_theory=lot,
)
job.submit()

result = job.require_result()
print(f"Energy (CPCM): {result.energy:.6f} Hartree")
print(f"Gsolv (CPCM): {result.gsolv:.6f} Hartree")

xTB CPCM-X supports a broad range of solvents. Check the supported list via the CPCM-X project or use validate_lot() to verify your combination.

Accurate Path: SMD / WB97M-V

For high-quality solvation free energies, use WB97M-V with SMD solvation:

from atomiverse.levels import (
WB97M_V_DEF2_SVP_SMD_WATER,
WB97M_V_DEF2_TZVPPD_SMD_ACETONE,
WB97M_V_DEF2_QZVPD_SMD_WATER,
)

job = GsolvSMDSinglePointEnergy(
atoms=water,
level_of_theory=WB97M_V_DEF2_TZVPPD_SMD_WATER,
)
job.submit()

result = job.require_result()
print(f"Energy: {result.energy:.6f} Hartree")
print(f"Gsolv: {result.gsolv:.6f} Hartree")

Supported Levels of Theory

GsolvSMDSinglePointEnergy accepts levels of theory with SMD or CPCM implicit solvation:

SMD-solvated (WB97M-V)

Use the predefined constants:

from atomiverse.levels import (
WB97M_V_DEF2_SVP_SMD_WATER,
WB97M_V_DEF2_SVP_SMD_DIMETHYLSULFOXIDE,
WB97M_V_DEF2_TZVPPD_SMD_WATER,
WB97M_V_DEF2_TZVPPD_SMD_ACETONE,
WB97M_V_DEF2_QZVPD_SMD_WATER,
# ... and more
)

See Levels of Theory for all available SMD-solvated constants.

CPCM-solvated (GFN2-xTB / CPCM-X)

Construct CPCM-xTB levels manually with LevelOfTheory:

from atomiverse import ImplicitSolvation, LevelOfTheory, SolvationMethod

lot = LevelOfTheory(
method="gfn2-xtb",
solvation=ImplicitSolvation(
method=SolvationMethod.CPCM,
solvent="water", # lowercase, as required by xTB
),
)

Attempting to use a non-SMD, non-CPCM level of theory (e.g. GFN2_XTB alone) raises a ValueError at submission time.

Energy-only

Forces are never computed for GsolvSMDSinglePointEnergy — the job always runs as an energy-only calculation, independent of the compute_forces flag (inherited from SinglePointEnergy and locked to False).

Charged Molecules and Open Shells

Pass charge and multiplicity as with any single point energy:

hydroxide = Atoms.from_smiles("[OH-]")

job = GsolvSMDSinglePointEnergy(
atoms=hydroxide,
charge=-1,
multiplicity=1,
level_of_theory=WB97M_V_DEF2_SVP_SMD_WATER,
)

Caching

The total energy is cached in the same table as regular SinglePointEnergy jobs. Gsolv is cached separately. Subsequent jobs with identical geometry, charge, multiplicity, and level of theory return a cached result regardless of whether the previous job was a GsolvSMDSinglePointEnergy or a regular SinglePointEnergy.

Renaming, Cancelling, and Deleting

All standard Job Management operations (rename, cancel, delete) apply.