Note
Go to the end to download the full example code.
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.

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]
833kiB [00:00, 7.66MiB/s]
1.64MiB [00:00, 7.20MiB/s]
2.39MiB [00:00, 6.73MiB/s]
3.13MiB [00:00, 6.91MiB/s]
3.87MiB [00:00, 6.71MiB/s]
4.55MiB [00:00, 6.47MiB/s]
5.27MiB [00:00, 6.51MiB/s]
5.98MiB [00:00, 6.22MiB/s]
6.82MiB [00:01, 6.41MiB/s]
7.58MiB [00:01, 6.45MiB/s]
8.40MiB [00:01, 6.70MiB/s]
9.12MiB [00:01, 6.53MiB/s]
9.82MiB [00:01, 6.12MiB/s]
10.4MiB [00:01, 5.93MiB/s]
11.1MiB [00:01, 5.39MiB/s]
11.6MiB [00:01, 5.19MiB/s]
12.1MiB [00:02, 4.33MiB/s]
12.6MiB [00:02, 3.51MiB/s]
13.2MiB [00:02, 3.93MiB/s]
14.0MiB [00:02, 4.60MiB/s]
14.9MiB [00:02, 5.22MiB/s]
15.8MiB [00:02, 5.65MiB/s]
16.7MiB [00:02, 6.03MiB/s]
17.4MiB [00:03, 6.17MiB/s]
18.2MiB [00:03, 6.23MiB/s]
19.0MiB [00:03, 6.68MiB/s]
19.7MiB [00:03, 6.22MiB/s]
20.4MiB [00:03, 5.84MiB/s]
21.0MiB [00:03, 5.70MiB/s]
21.8MiB [00:03, 6.11MiB/s]
22.4MiB [00:03, 6.20MiB/s]
23.1MiB [00:03, 5.76MiB/s]
23.8MiB [00:04, 6.02MiB/s]
24.5MiB [00:04, 6.18MiB/s]
25.1MiB [00:04, 6.13MiB/s]
25.9MiB [00:04, 6.49MiB/s]
26.6MiB [00:04, 6.25MiB/s]
27.3MiB [00:04, 6.27MiB/s]
27.9MiB [00:04, 5.46MiB/s]
28.7MiB [00:04, 5.99MiB/s]
29.3MiB [00:04, 5.79MiB/s]
30.1MiB [00:05, 5.89MiB/s]
30.9MiB [00:05, 5.95MiB/s]
31.5MiB [00:05, 6.09MiB/s]
32.2MiB [00:05, 5.61MiB/s]
32.8MiB [00:05, 5.65MiB/s]
33.5MiB [00:05, 5.88MiB/s]
34.1MiB [00:05, 5.16MiB/s]
35.0MiB [00:05, 5.95MiB/s]
35.6MiB [00:06, 5.50MiB/s]
36.2MiB [00:06, 5.60MiB/s]
36.8MiB [00:06, 5.61MiB/s]
37.4MiB [00:06, 5.66MiB/s]
38.0MiB [00:06, 5.34MiB/s]
38.7MiB [00:06, 4.95MiB/s]
39.8MiB [00:06, 6.29MiB/s]
40.5MiB [00:06, 6.41MiB/s]
41.3MiB [00:07, 6.64MiB/s]
41.6MiB [00:07, 5.90MiB/s]
Validating md5 checksums of ONCVPSP-PBEsol-SR-PDv0.4...
Checksum test: OK
Installation completed successfully in 8.20 [s]
import os
import sys
import numpy as np
from abipy import abilab, 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 8.441 seconds)