Coverage for gpaw/test/cdft/test_cdft.py: 100%
25 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-14 00:18 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-14 00:18 +0000
1import numpy as np
2import pytest
3from ase import Atoms
5from gpaw import GPAW, Davidson, FermiDirac, Mixer
6from gpaw.cdft.cdft import CDFT
7from gpaw.cdft.cdft_coupling import CouplingParameters
8from gpaw.mpi import size
11@pytest.mark.old_gpaw_only
12def test_cdft(in_tmp_dir):
13 distance = 2.5
14 sys = Atoms('He2', positions=([0., 0., 0.], [0., 0., distance]))
15 sys.center(3)
16 sys.set_pbc(False)
17 sys.set_initial_magnetic_moments([0.5, 0.5])
19 calc_b = GPAW(h=0.2,
20 mode='fd',
21 basis='dzp',
22 charge=1,
23 xc='PBE', symmetry='off',
24 occupations=FermiDirac(0., fixmagmom=True),
25 eigensolver=Davidson(3),
26 spinpol=True,
27 nbands=4,
28 mixer=Mixer(beta=0.25, nmaxold=3, weight=100.0),
29 txt='He2+_final_%3.2f.txt' % distance,
30 convergence={'eigenstates': 1.0e-4, 'density': 1.0e-1,
31 'energy': 1e-1, 'bands': 4})
33 cdft_b = CDFT(calc=calc_b,
34 atoms=sys,
35 charge_regions=[[1]],
36 charges=[1],
37 charge_coefs=[2.7],
38 method='L-BFGS-B',
39 txt='He2+_final_%3.2f.cdft' % distance,
40 minimizer_options={'gtol': 0.01})
41 sys.calc = cdft_b
42 sys.get_potential_energy()
43 sys.get_forces()
45 if size == 1:
46 coupling = CouplingParameters(cdft_b, cdft_b, AE=False)
47 overlaps = coupling.get_pair_density_matrix(
48 cdft_b.calc, cdft_b.calc)[0]
49 print(overlaps)
51 for i in [0, 1, 2]:
52 assert (np.isclose(np.real(overlaps[0, i, i]), 1.))