Coverage for gpaw/test/mgga/test_nsc_MGGA.py: 100%
56 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-20 00:19 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-20 00:19 +0000
1import pytest
2from ase import Atoms
3from gpaw import GPAW, Mixer, Davidson
5# ??? g = Generator('H', 'TPSS', scalarrel=True, nofiles=True)
8@pytest.mark.mgga
9def test_mgga_nsc_MGGA(in_tmp_dir):
10 def xc(name):
11 return dict(name=name, stencil=1)
13 atoms = Atoms('H', magmoms=[1], pbc=True)
14 atoms.center(vacuum=3)
16 def getkwargs():
17 return dict(mode='fd',
18 eigensolver=Davidson(3),
19 mixer=Mixer(0.7, 5, 50.0),
20 parallel=dict(augment_grids=True),
21 gpts=(32, 32, 32), nbands=1, xc=xc('oldPBE'))
23 calc = GPAW(txt='Hnsc.txt', **getkwargs())
24 atoms.calc = calc
25 e1 = atoms.get_potential_energy()
26 _ = calc.get_reference_energy()
27 de12t = calc.get_xc_difference(xc('TPSS'))
28 de12m = calc.get_xc_difference(xc('M06-L'))
29 de12m2 = calc.get_xc_difference(xc('M06-L'))
30 de12r = calc.get_xc_difference(xc('revTPSS'))
32 print('================')
33 print('e1 = ', e1)
34 print('de12t = ', de12t)
35 print('de12m = ', de12m)
36 print('de12r = ', de12r)
37 print('tpss = ', e1 + de12t)
38 print('m06l = ', e1 + de12m)
39 print('m06l = ', e1 + de12m2)
40 print('revtpss = ', e1 + de12r)
41 print('================')
43 assert e1 + de12t == pytest.approx(-1.11723235592, abs=0.005)
44 assert e1 + de12m == pytest.approx(-1.18207312133, abs=0.005)
45 assert e1 + de12r == pytest.approx(-1.10093196353, abs=0.005)
47 # ??? g = Generator('He', 'TPSS', scalarrel=True, nofiles=True)
49 atomsHe = Atoms('He', pbc=True)
50 atomsHe.center(vacuum=3)
51 calc = GPAW(txt='Hensc.txt', **getkwargs())
52 atomsHe.calc = calc
53 e1He = atomsHe.get_potential_energy()
54 _ = calc.get_reference_energy()
55 de12tHe = calc.get_xc_difference(xc('TPSS'))
56 de12mHe = calc.get_xc_difference(xc('M06-L'))
57 de12rHe = calc.get_xc_difference(xc('revTPSS'))
59 print('================')
60 print('e1He = ', e1He)
61 print('de12tHe = ', de12tHe)
62 print('de12mHe = ', de12mHe)
63 print('de12rHe = ', de12rHe)
64 print('tpss = ', e1He + de12tHe)
65 print('m06l = ', e1He + de12mHe)
66 print('revtpss = ', e1He + de12rHe)
67 print('================')
69 assert e1He + de12tHe == pytest.approx(-0.409972893501, abs=0.005)
70 assert e1He + de12mHe == pytest.approx(-0.487249688866, abs=0.005)
71 assert e1He + de12rHe == pytest.approx(-0.447232286813, abs=0.005)
73 energy_tolerance = 0.001
74 assert e1 == pytest.approx(-1.124, abs=energy_tolerance)
75 assert e1He == pytest.approx(0.0100192, abs=energy_tolerance)