Skip to content

Commit d23ec4d

Browse files
authored
Merge pull request #139 from theochem/fix_slater
Fix slater ked
2 parents 89b38d4 + 5c38edc commit d23ec4d

File tree

1 file changed

+6
-50
lines changed

1 file changed

+6
-50
lines changed

atomdb/datasets/slater/run.py

Lines changed: 6 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -522,32 +522,12 @@ def eval_orbs_ked_positive_definite(self, points):
522522
orb_ked : np.ndarray(K_orb, N)
523523
orbitals kinetic energy density values at a set of grid points (N).
524524
"""
525-
phi_matrix = np.zeros((len(points), len(self.orbitals)))
526-
for index, orbital in enumerate(self.orbitals):
527-
exps, number = self.orbitals_exp[orbital[1]], self.basis_numbers[orbital[1]]
528-
slater = AtomicDensity.slater_orbital(exps, number, points)
529-
# derivative
530-
deriv_pref = (number.T - 1.0) - exps.T * np.reshape(points, (points.shape[0], 1))
531-
deriv = deriv_pref * slater
532-
phi_matrix[:, index] = np.dot(deriv, self.orbitals_coeff[orbital]).ravel()
533-
534-
angular = [] # Angular numbers are l(l + 1)
535-
for index, orbital in enumerate(self.orbitals):
536-
if "S" in orbital:
537-
angular.append(0.0)
538-
elif "P" in orbital:
539-
angular.append(2.0)
540-
elif "D" in orbital:
541-
angular.append(6.0)
542-
elif "F" in orbital:
543-
angular.append(12.0)
544525

545526
orb_occs = self.orbitals_occupation
546-
orbs_ked = phi_matrix**2.0 * orb_occs.ravel() / 2.0
547-
# Add other term
548-
molecular = self.phi_matrix(points) ** 2.0 * np.array(angular)
549-
orbs_ked += molecular * orb_occs.ravel() / 2.0
550-
return orbs_ked.T
527+
# 1/2 factor by normalization factor 1/4pi
528+
ked_factor = 0.5 / (4 * np.pi)
529+
ked_orbs = self.phi_matrix(points, deriv=1) ** 2 * self.orbitals_occupation.ravel()
530+
return ked_factor * ked_orbs
551531

552532
def eval_ked_positive_definite(self, points):
553533
r"""
@@ -570,32 +550,8 @@ def eval_ked_positive_definite(self, points):
570550
571551
"""
572552

573-
phi_matrix = np.zeros((len(points), len(self.orbitals)))
574-
for index, orbital in enumerate(self.orbitals):
575-
exps, number = self.orbitals_exp[orbital[1]], self.basis_numbers[orbital[1]]
576-
slater = AtomicDensity.slater_orbital(exps, number, points)
577-
# derivative
578-
deriv_pref = (number.T - 1.0) - exps.T * np.reshape(points, (points.shape[0], 1))
579-
deriv = deriv_pref * slater
580-
phi_matrix[:, index] = np.dot(deriv, self.orbitals_coeff[orbital]).ravel()
581-
582-
angular = [] # Angular numbers are l(l + 1)
583-
for index, orbital in enumerate(self.orbitals):
584-
if "S" in orbital:
585-
angular.append(0.0)
586-
elif "P" in orbital:
587-
angular.append(2.0)
588-
elif "D" in orbital:
589-
angular.append(6.0)
590-
elif "F" in orbital:
591-
angular.append(12.0)
592-
593-
orb_occs = self.orbitals_occupation
594-
energy = np.dot(phi_matrix**2.0, orb_occs).ravel() / 2.0
595-
# Add other term
596-
molecular = self.phi_matrix(points) ** 2.0 * np.array(angular)
597-
energy += np.dot(molecular, orb_occs).ravel() / 2.0
598-
return energy
553+
orbs_ked = self.eval_orbs_ked_positive_definite(points)
554+
return np.sum(orbs_ked, axis=0)
599555

600556
def eval_radial_d_density(self, points):
601557
r"""

0 commit comments

Comments
 (0)