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

1import numpy as np 

2import pytest 

3from ase import Atoms 

4 

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 

9 

10 

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]) 

18 

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}) 

32 

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() 

44 

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) 

50 

51 for i in [0, 1, 2]: 

52 assert (np.isclose(np.real(overlaps[0, i, i]), 1.))