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:
| Field | Type | Units |
|---|---|---|
energy | float | Hartree |
gsolv | float | Hartree |
gsolvis the solvation free energy: the difference between the solvated and gas-phase total energies.energyhas the same semantics as inSinglePointEnergy.- 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.
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.