Flow for QHA calculations with two DOFs

Warning: This code is still under development. This example shows to run calculations with the ZSISA quasi-harmonic approximation and two degrees of freedom.

run qha 2d
Downloading repository from: https://github.com/PseudoDojo/ONCVPSP-PBEsol-PDv0.4/archive/refs/heads/master.zip ...
Installing ONCVPSP-PBEsol-SR-PDv0.4 in: /home/runner/.abinit/pseudos/ONCVPSP-PBEsol-SR-PDv0.4

0.00iB [00:00, ?iB/s]
66.4kiB [00:00, 588kiB/s]
191kiB [00:00, 856kiB/s]
787kiB [00:00, 2.81MiB/s]
3.14MiB [00:00, 9.72MiB/s]
4.15MiB [00:00, 9.49MiB/s]
5.15MiB [00:00, 8.49MiB/s]
6.08MiB [00:00, 7.74MiB/s]
6.87MiB [00:00, 7.44MiB/s]
7.65MiB [00:01, 7.28MiB/s]
8.42MiB [00:01, 7.02MiB/s]
9.23MiB [00:01, 6.87MiB/s]
10.2MiB [00:01, 6.94MiB/s]
11.0MiB [00:01, 6.95MiB/s]
11.8MiB [00:01, 7.04MiB/s]
12.6MiB [00:01, 7.35MiB/s]
13.4MiB [00:01, 7.27MiB/s]
14.2MiB [00:02, 7.12MiB/s]
14.9MiB [00:02, 6.76MiB/s]
15.8MiB [00:02, 6.71MiB/s]
16.6MiB [00:02, 6.88MiB/s]
17.4MiB [00:02, 6.95MiB/s]
18.3MiB [00:02, 7.16MiB/s]
19.0MiB [00:02, 7.06MiB/s]
19.7MiB [00:02, 6.39MiB/s]
20.5MiB [00:02, 6.76MiB/s]
21.2MiB [00:03, 6.54MiB/s]
22.1MiB [00:03, 6.64MiB/s]
23.1MiB [00:03, 7.31MiB/s]
23.8MiB [00:03, 6.99MiB/s]
24.6MiB [00:03, 6.98MiB/s]
25.4MiB [00:03, 6.99MiB/s]
26.2MiB [00:03, 6.97MiB/s]
27.1MiB [00:03, 6.90MiB/s]
27.9MiB [00:04, 6.91MiB/s]
28.7MiB [00:04, 6.99MiB/s]
29.5MiB [00:04, 7.05MiB/s]
30.3MiB [00:04, 7.16MiB/s]
31.2MiB [00:04, 7.21MiB/s]
31.9MiB [00:04, 7.24MiB/s]
32.7MiB [00:04, 6.91MiB/s]
33.6MiB [00:04, 7.00MiB/s]
34.4MiB [00:04, 6.95MiB/s]
35.3MiB [00:05, 7.48MiB/s]
36.1MiB [00:05, 7.40MiB/s]
36.8MiB [00:05, 7.28MiB/s]
37.6MiB [00:05, 7.05MiB/s]
38.4MiB [00:05, 6.77MiB/s]
39.2MiB [00:05, 6.81MiB/s]
40.0MiB [00:05, 6.82MiB/s]
40.9MiB [00:05, 7.11MiB/s]
41.6MiB [00:05, 7.01MiB/s]

Validating md5 checksums of ONCVPSP-PBEsol-SR-PDv0.4...
Checksum test: OK
Installation completed successfully in 7.30 [s]

import sys
import os
import numpy as np
import abipy.abilab as abilab

from abipy import flowtk
from abipy.flowtk.qha_2d import Qha2dFlow


def build_flow(options):
    """
    Create a `Qha2dFlow` for quasi-harmonic calculations with two DOFs
    """
    # Working directory (default is the name of the script with '.py' removed and "run_" replaced by "flow_")
    if not options.workdir:
        __file__ = os.path.join(os.getcwd(), "run_qha_2d.py")
        options.workdir = os.path.basename(__file__).replace(".py", "").replace("run_", "flow_")

    # Initialize structure and pseudos for ZnO.
    structure = abilab.Structure.from_abistring("""
natom 4
ntypat 2
typat
1 1 2
2
znucl 30 8
xred
   0.0000000000    0.0000000000   -0.0025137620
   0.3333333333    0.6666666667    0.4974862380
   0.0000000000    0.0000000000    0.3835201241
   0.3333333333    0.6666666667    0.8835201241
acell    1.0    1.0    1.0
rprim
   6.3016720624    0.0000000000    0.0000000000
  -3.1508360312    5.4574080923    0.0000000000
   0.0000000000    0.0000000000    9.7234377918
""")

    # Use NC PBEsol pseudos from pseudodojo v0.4
    from abipy.flowtk.psrepos import get_oncvpsp_pseudos
    pseudos = get_oncvpsp_pseudos(xc_name="PBEsol", version="0.4")

    scf_input = abilab.AbinitInput(structure, pseudos)

    # Set other important variables
    scf_input.set_vars(
        nband=scf_input.num_valence_electrons // 2,
        #nline=10,
        nbdbuf=0,
        nstep=100,
        ecutsm=1.0,
        #tolvrs=1.0e-18,    # SCF stopping criterion.
        tolvrs=1.0e-6,      # SCF stopping criterion.
        paral_kgb=0,
    )

    # Select k-mesh for electrons and q-mesh for phonons.
    #ngkpt = [6, 6, 4]; ngqpt = [1, 1, 1]
    ngkpt = [2, 2, 2]; ngqpt = [1, 1, 1]

    #scf_input.set_scf_nband_semicond()
    scf_input.set_kmesh(ngkpt=ngkpt, shiftk=[0, 0, 0])

    bo_strains_a = [-5, 0, 5, 10, 15]
    bo_strains_c = [-5, 0, 5, 10, 15]
    #bo_strains_a = [0, 5, 10, 15, 20]
    #bo_strains_c = [0, 5, 10, 15, 20]
    # This is just for testing purposes
    #bo_strains_a = [0, 5]
    #bo_strains_c = [0, 5]
    bo_strains_a = [0, ]
    bo_strains_c = [0, 5]
    bo_strains_a = np.array(bo_strains_a) / 100
    bo_strains_c = np.array(bo_strains_c) / 100

    bo_strains_ac = [bo_strains_a, bo_strains_c]
    phdos_strains_ac = bo_strains_ac

    with_becs = True
    with_quad = False
    #with_quad = not structure.has_zero_dynamical_quadrupoles

    return Qha2dFlow.from_scf_input(options.workdir, scf_input, bo_strains_ac, phdos_strains_ac, ngqpt,
                                    with_becs, with_quad, edos_ngkpt=None)


# This block generates the thumbnails in the Abipy gallery.
# You can safely REMOVE this part if you are using this script for production runs.
if os.getenv("READTHEDOCS", False):
    __name__ = None
    import tempfile
    options = flowtk.build_flow_main_parser().parse_args(["-w", tempfile.mkdtemp()])
    build_flow(options).graphviz_imshow()


@flowtk.flow_main
def main(options):
    """
    This is our main function that will be invoked by the script.
    flow_main is a decorator implementing the command line interface.
    Command line args are stored in `options`.
    """
    return build_flow(options)


if __name__ == "__main__":
    sys.exit(main())

Total running time of the script: (0 minutes 7.511 seconds)

Gallery generated by Sphinx-Gallery