PAOFLOW.phonon.do_qha#

Quasi-harmonic approximation (QHA) driver for PAOFLOW (Stage 4).

For a set of isotropically strained volumes the static DFT energy E(V) is combined with the harmonic vibrational free energy F_vib(T, V) to obtain the temperature-dependent equilibrium volume V(T), volumetric thermal expansion alpha(T), isothermal bulk modulus B(T), Gibbs free energy G(T), constant-pressure heat capacity C_p(T) and the thermodynamic Gruneisen parameter gamma(T).

Two back-ends are used depending on how many volumes are sampled:

  • nvolumes = 5 (default): the full equation-of-state QHA implemented by phonopy.PhonopyQHA (Vinet EOS by default). A four-parameter EOS needs at least four volume points, so this is the accurate, recommended choice.

  • nvolumes = 3: a low-order (parabolic) fit of G(V) = E(V) + F_vib(T, V) at each temperature. A quadratic is exactly determined by three points and is valid for the small volume changes probed here; it produces the same set of output files as the EOS route.

The routine mirrors the two-phase generate / analyse pattern used by the rest of the phonon workflow: with forces=None it writes the Quantum ESPRESSO inputs (a static SCF for E(V) plus the displaced supercells for the phonons at every volume); with forces='qe' it harvests the results and runs the QHA.

Attributes#

Functions#

generate_qha_inputs(data_controller[, nvolumes, ...])

Write the QE inputs for every sampled volume (generation phase).

compute_gruneisen_band(data_controller, phonons[, ...])

Mode Grueneisen parameters along a q-path (dispersion-style output).

run_qha(data_controller[, nvolumes, strain, qha_dir, ...])

Harvest the volume scan and compute the QHA quantities (analysis phase).

Module Contents#

PAOFLOW.phonon.do_qha.RY_TO_EV = 13.605693122994[source]#
PAOFLOW.phonon.do_qha.BOHR_TO_ANG = 0.529177210903[source]#
PAOFLOW.phonon.do_qha.EV_ANG3_TO_GPA = 160.21766208[source]#
PAOFLOW.phonon.do_qha.KJMOL_TO_EV = 0.01036427230125167[source]#
PAOFLOW.phonon.do_qha.AVOGADRO = 6.02214076e+23[source]#
PAOFLOW.phonon.do_qha.generate_qha_inputs(data_controller, nvolumes=5, strain=0.02, qha_dir='qha', pp_dir=None, prefix=None, kgrid=None, hubbard_card=None)[source]#

Write the QE inputs for every sampled volume (generation phase).

For each isotropically strained cell this writes, under <outputdir>/<qha_dir>/vol-NN/:

  • scf.in – a static unit-cell SCF for the electronic energy E(V);

  • supercell-NNN.in – the phonopy displaced supercells for the phonons.

Run pw.x on every input, then re-call with forces='qe'.

Returns:

The sampled-volume directories that were populated.

Return type:

list[str]

PAOFLOW.phonon.do_qha.compute_gruneisen_band(data_controller, phonons, q_path=None, q_labels=None, npoints=101, units='THz', cutoff_frequency=None, fname='qha')[source]#

Mode Grueneisen parameters along a q-path (dispersion-style output).

Uses three bracketing volumes (V0-, V0, V0+) centred on the middle of the volume scan to finite-difference gamma_qv = -(V/omega) domega/dV via phonopy.PhonopyGruneisen. Writes <fname>_gruneisen_band.dat (distance, then the per-branch Grueneisen parameter and frequency) and, when tick labels are available, <fname>_gruneisen_band.labels.

The mode Grueneisen parameter carries a 1/omega**2 factor, so the acoustic branches diverge as omega -> 0 at Gamma and produce spurious spikes there. Modes whose frequency is below cutoff_frequency (in the output units) are therefore masked (written as nan, so a plot simply leaves a gap). cutoff_frequency=None uses 1% of the maximum frequency along the path; pass 0 to disable the masking.

Requires at least three volumes with force constants already built.

PAOFLOW.phonon.do_qha.run_qha(data_controller, nvolumes=5, strain=0.02, qha_dir='qha', mesh=None, t_min=0.0, t_max=1000.0, t_step=10.0, eos='vinet', pressure=0.0, ibrav=None, q_path=None, q_labels=None, q_npoints=101, gruneisen_band=True, gruneisen_cutoff=None, units='THz', fname='qha')[source]#

Harvest the volume scan and compute the QHA quantities (analysis phase).