Coverage for gpaw/test/lrtddft/test_placzek_profeta_albrecht.py: 100%
50 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-09 00:21 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-09 00:21 +0000
1import pytest
2from ase import Atom, Atoms
4from gpaw import GPAW
5from gpaw.analyse.overlap import Overlap
6from gpaw.lrtddft.kssingle import KSSingles
8txt = '-'
9txt = None
10load = True
11load = False
12xc = 'LDA'
14# run
16R = 0.7 # approx. experimental bond length
17a = 4.0
18c = 5.0
21@pytest.mark.lrtddft
22def test_lrtddft_placzek_profeta_albrecht(in_tmp_dir):
23 from ase.vibrations.albrecht import Albrecht
24 from ase.vibrations.placzek import Placzek, Profeta
25 from ase.vibrations.resonant_raman import ResonantRamanCalculator
27 H2 = Atoms([Atom('H', (a / 2, a / 2, (c - R) / 2)),
28 Atom('H', (a / 2, a / 2, (c + R) / 2))],
29 cell=(a, a, c))
31 name = exname = 'rraman'
32 exkwargs = {'restrict': {'eps': 0.0, 'jend': 3}}
34 calc = GPAW(
35 mode='fd',
36 xc=xc, nbands=7,
37 convergence={'bands': 3},
38 spinpol=False,
39 # eigensolver='rmm-diis',
40 symmetry={'point_group': False},
41 txt=txt)
42 H2.calc = calc
43 # H2.get_potential_energy()
45 rr = ResonantRamanCalculator(
46 H2, KSSingles, name=name, exname=exname,
47 exkwargs=exkwargs,
48 # XXX full does not work in parallel due to boxes
49 # on different nodes
50 # overlap=lambda x, y: Overlap(x).full(y)[0],
51 overlap=lambda x, y: Overlap(x).pseudo(y)[0],
52 txt=txt)
53 rr.run()
55 # check
57 # Different Placzeck implementations should agree
59 om = 5
60 pz = Placzek(H2, KSSingles, name=name, exname=exname, txt=txt)
61 pzi = pz.get_absolute_intensities(omega=om)[-1]
63 pr = Profeta(H2, KSSingles, name=name, exname=exname,
64 approximation='Placzek', txt=txt)
65 pri = pr.get_absolute_intensities(omega=om)[-1]
66 assert pzi == pytest.approx(pri, abs=0.1)
68 pr = Profeta(H2, KSSingles, name=name, exname=exname,
69 overlap=True,
70 approximation='Placzek', txt=txt)
71 pri = pr.get_absolute_intensities(omega=om)[-1]
72 assert pzi == pytest.approx(pri, abs=0.1)
74 """Albrecht and Placzek are approximately equal"""
76 al = Albrecht(H2, KSSingles, name=name, exname=exname,
77 overlap=True,
78 approximation='Albrecht', txt=txt)
79 ali = al.get_absolute_intensities(omega=om)[-1]
80 assert pzi == pytest.approx(ali, abs=1.5)
82 """Albrecht A and P-P are approximately equal"""
84 pr = Profeta(H2, KSSingles, name=name, exname=exname,
85 overlap=True,
86 approximation='P-P', txt=txt)
87 pri = pr.get_absolute_intensities(omega=om)[-1]
89 al = Albrecht(H2, KSSingles, name=name, exname=exname,
90 overlap=True,
91 approximation='Albrecht A', txt=txt)
92 ali = al.get_absolute_intensities(omega=om)[-1]
93 assert pri == pytest.approx(ali, abs=3)
95 """Albrecht B+C and Profeta are approximately equal"""
97 pr = Profeta(H2, KSSingles, name=name, exname=exname,
98 overlap=True,
99 approximation='Profeta', txt=txt)
100 pri = pr.get_absolute_intensities(omega=om)[-1]
102 al = Albrecht(H2, KSSingles, name=name, exname=exname,
103 overlap=True,
104 approximation='Albrecht BC', txt=txt)
105 ali = al.get_absolute_intensities(omega=om)[-1]
106 assert pri == pytest.approx(ali, abs=3)