Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,3 @@ __marimo__/

# Streamlit
.streamlit/secrets.toml

# Quarantined local research-code snapshots
.codex_trash/
58 changes: 0 additions & 58 deletions examples/grad/02_dz0scf_grad.py

This file was deleted.

71 changes: 0 additions & 71 deletions examples/nttda/02_nttda_dz0scf_grad.py

This file was deleted.

56 changes: 3 additions & 53 deletions src/nest/dz0scf/dz0scf.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,54 +55,7 @@ def evaluate_high_spin_energy(mf):
)

class _DZ0VeffMixin:
reference_energy_semantics = 'high_spin_roks_energy_on_dz0_orbitals'
reference_energy_stationary = False
is_average_occupation_reference = True

def _charge_rks(self):
"""Return a fresh RKS view used for the spin-unpolarized charge response.

The view is rebuilt on every call so that a reused mean-field object
(``reset(new_mol)``, ``xc`` change, new geometry) never feeds a stale
molecule or functional into the response.
"""
charge = dft.rks.RKS(self.mol)
for name in (
'xc', 'nlc', 'grids', 'nlcgrids', '_numint',
'max_memory', 'small_rho_cutoff'):
if hasattr(self, name):
setattr(charge, name, getattr(self, name))
charge.mo_coeff = np.asarray(self.mo_coeff)
charge.mo_occ = np.asarray(self.mo_occ)
charge.mo_energy = np.asarray(self.mo_energy)
charge.verbose = 0
return charge

def make_rdm1s(self, mo_coeff=None, mo_occ=None):
"""Return equal spin densities ``D/2`` for the spin-unpolarized reference."""
if mo_coeff is None:
mo_coeff = self.mo_coeff
if mo_occ is None:
mo_occ = self.mo_occ
mo_coeff = np.asarray(mo_coeff)
occupation = np.asarray(mo_occ)
dm0 = (mo_coeff * occupation) @ mo_coeff.conj().T
return 0.5 * dm0, 0.5 * dm0

def gen_response(self, mo_coeff=None, mo_occ=None, hermi=1, max_memory=None):
"""Charge-only (spin-unpolarized) linear response of the reference."""
if mo_coeff is None:
mo_coeff = self.mo_coeff
if mo_occ is None:
mo_occ = self.mo_occ
return self._charge_rks().gen_response(
mo_coeff=mo_coeff,
mo_occ=mo_occ,
hermi=hermi,
max_memory=max_memory,
)

def get_veff(
def get_veff(
self,
mol=None,
dm=None,
Expand All @@ -128,11 +81,8 @@ def get_veff(
vhf_last,
hermi,
)
def high_spin_energy(self):
return evaluate_high_spin_energy(self)

def reference_energy(self):
return self.high_spin_energy()
def high_spin_energy(self):
return evaluate_high_spin_energy(self)

def nuc_grad_method(self):
"""Return the Dz0SCF analytic nuclear-gradient driver."""
Expand Down
20 changes: 7 additions & 13 deletions src/nest/dz0scf/tests/test_dz0scf.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,18 +79,12 @@ def test_svwn_dz0scf(self):
])

self.assertTrue(np.all(np.asarray(td_s.converged)))
np.testing.assert_allclose(
np.asarray(omega_s),
omega_s_ref,
rtol=0.0,
atol=1e-6,
)
np.testing.assert_allclose(
td_s.total_energies(),
mf.high_spin_energy() + omega_s,
rtol=0.0,
atol=1e-12,
)
np.testing.assert_allclose(
np.asarray(omega_s),
omega_s_ref,
rtol=0.0,
atol=1e-6,
)

td_t = NTTDA(mf)
td_t.deltaS = 0
Expand Down Expand Up @@ -182,4 +176,4 @@ def test_b3lyp_dz0scf(self):
omega_t_ref,
rtol=0.0,
atol=1e-6,
)
)
Loading
Loading