Coverage for gpaw/test/ri/test_c.py: 100%

40 statements  

« prev     ^ index     » next       coverage.py v7.7.1, created at 2025-07-19 00:19 +0000

1import pytest 

2import numpy as np 

3from gpaw.mpi import world 

4from gpaw.atom.generator2 import generate 

5 

6 

7@pytest.mark.hybrids 

8@pytest.mark.skipif(world.size > 1, reason='Not parallelized') 

9def test_diamond(in_tmp_dir, add_cwd_to_setup_paths): 

10 

11 from gpaw.atom.generator import Generator 

12 from gpaw.atom.configurations import parameters 

13 from gpaw.atom.basis import BasisMaker 

14 

15 args = parameters['C'] 

16 generator = Generator('C', 'PBE', configuration='1s2', 

17 gpernode=2 * Generator.default_gpernode) 

18 setup = generator.run(write_xml=True, exx=True, **args) 

19 bm = BasisMaker.from_setup_and_generator(setup, generator) 

20 basis = bm.generate(zetacount=4, polarizationcount=2, 

21 energysplit=0.0001, rcutmax=12.0) 

22 basis.write_xml() 

23 

24 parameters = {'symbol': 'C', 'Z': 6, 'xc': 'PBE', 

25 'projectors': '2s,s,2p,p,d', 'radii': [1.2], 

26 'scalar_relativistic': False, 'r0': 1.2, 

27 'v0': None, 

28 'nderiv0': 2, 'pseudize': ('poly', 4), 

29 'omega': 0.11} 

30 

31 gen = generate(**parameters) 

32 setup = gen.make_paw_setup() 

33 setup.write_xml() 

34 

35 from gpaw import GPAW 

36 from ase import Atoms 

37 from ase.build import bulk 

38 from ase.units import Hartree 

39 

40 atoms = Atoms('C') 

41 atoms.center(vacuum=3) 

42 # calc = GPAW(mode=PW(700), xc='HSE06', charge=4) 

43 # atoms.calc = calc 

44 # atoms.get_potential_energy() 

45 

46 calc = GPAW(h=0.12, mode='lcao', basis='qzdp', 

47 xc='HSE06WIP:backend=ri', charge=4) 

48 atoms.calc = calc 

49 atoms.get_potential_energy() 

50 

51 # TURBOMOLE C^4+ calculation aug-cc-pV5Z 

52 tm_eigs = [-68.5345, -61.6901] 

53 tm_e = -32.35980873243 * Hartree 

54 

55 assert np.allclose(tm_eigs, calc.get_eigenvalues()[:2], atol=0.1) 

56 assert np.allclose(tm_e, calc.hamiltonian.setups.Eref * Hartree + 

57 atoms.get_potential_energy(), atol=0.1) 

58 

59 atoms = bulk('C', 'diamond') 

60 atoms.calc = GPAW(kpts={'size': (2, 2, 2), 'gamma': True}, 

61 mode='lcao', basis='dzp', 

62 xc='HSE06WIP:backend=ri') 

63 

64 # NOTE: HSE06 does not yet work. This is just a placeholder for 

65 # integration test. 

66 assert np.allclose(atoms.get_potential_energy(), 3.291175, atol=4e-5) 

67 

68 calc = atoms.calc 

69 

70 setup = calc.density.setups[0] 

71 # With w=0 the values should agree exactly. For small systems 

72 # with small paw-cutoffs, the values are very close nevertheless 

73 # Thus assert with a moderate tolerance. 

74 assert np.allclose(setup.M_pp, 

75 setup.M_wpp[0.11], 

76 rtol=1e-2, atol=1e-4) 

77 

78 assert np.allclose(setup.X_p, setup.X_wp[0.11], atol=1e-5)