Different choices of grid points in the Merz–Kollman (MK) scheme can be made. CHELPG charges are obtained with grid points chosen on a dense cubic grid with exclusion made of grid points inside the van der Waals molecular volume Breneman & Wiberg (1990).
In contrast to the original MK scheme, the calculation of CHELPG charges involve grid points directly outside the van der Waals molecular volume, and since the electrostatic potential is here large, these points will be important for the minimization of the Lagrangian. We note that there is no universal grid-point choice that can be considered best for all situations.
Let us determine the CHELPG charges of methanol at the Hartree–Fock/6-31G(d) level of theory.
Source
methanol_xyz = """6
H 1.2001 0.0363 0.8431
C 0.7031 0.0083 -0.1305
H 0.9877 0.8943 -0.7114
H 1.0155 -0.8918 -0.6742
O -0.6582 -0.0067 0.1730
H -1.1326 -0.0311 -0.6482
"""import veloxchem as vlxFirst, we determine the reference state of the system.
molecule = vlx.Molecule.read_xyz_string(methanol_xyz)
basis = vlx.MolecularBasis.read(molecule, "6-31G*", ostream=None)
scf_drv = vlx.ScfRestrictedDriver()
scf_drv.ostream.mute()
scf_results = scf_drv.compute(molecule, basis)Second, we calculate CHELPG charges with the compute method of the EspChargesDriver class.
esp_drv = vlx.EspChargesDriver()
esp_drv.grid_type = "chelpg"
esp_drv.equal_charges = "1=3, 1=4"
chelpg_charges = esp_drv.compute(molecule, basis, scf_results)Output
ESP Charges Driver Setup
==========================
Number of Conformers : 1
Grid Spacing in Angstrom : 0.3
Grid Margin in Angstrom : 2.8
Total Number of Grid Points : 5890
CHELPG ESP Charges
--------------------------
No. Atom Charge (a.u.)
-------------------------------
1 H 0.003200
2 C 0.225480
3 H 0.003200
4 H 0.003200
5 O -0.611345
6 H 0.376265
-------------------------------
Total Charge : 0.000000
Fit Quality
-------------
Relative Root-Mean-Square Error : 0.186800
Reference:
J. Comput. Chem. 1990, 11, 361-373.
Third, we print out the results.
print("Atom CHELPG charge")
print(20 * "-")
for label, chelpg_charge in zip(molecule.get_labels(), chelpg_charges):
print(f"{label :s} {chelpg_charge : 18.6f}")
print(20 * "-")
print(f"Total: {chelpg_charges.sum() : 13.6f}")Atom CHELPG charge
--------------------
H 0.003200
C 0.225480
H 0.003200
H 0.003200
O -0.611345
H 0.376265
--------------------
Total: 0.000000
Compared to the ESP results, the positive charge of the methyl group is here found to be more localized to the carbon atom.
- Breneman, C. M., & Wiberg, K. B. (1990). Determining atom-centered monopoles from molecular electrostatic potentials. The need for high sampling density in formamide conformational analysis. J. Comput. Chem., 11, 361–373. 10.1002/jcc.540110311