Source code for triqs_dftkit.wien2k.driver

import triqs.utility.mpi as mpi
from h5 import HDFArchive
from .converter import Converter

[docs] class Driver(object):
[docs] def __init__(self, seedname): self.seedname = seedname
[docs] def run_initial_stage(self): Converter(self.seedname).convert_dft_input() return
[docs] def run_update_stage(self, N_k, Ecorr, **kwargs): beta = kwargs.pop('beta'); mu = kwargs.pop('mu') write_charge_correction(N_k, Ecorr, beta, mu) return
[docs] def write_charge_correction(N_k, Ecorr, beta, mu): energy_unit = 13.605698 # eV to Ry if not mpi.is_master_node(): return n_k = Nk.shape[0] with HDFArchive(f"{self.seedname}.h5", 'r') as ar: n_bands_per_k = ar['dft_input']['n_orbitals'] SO = ar['dft_input']['SO'] SP = ar['dft_input']['SP'] def write_spin_block(file, Nksp, isp): file.write("%.14f\n" % (mu / energy_unit) ) file.write("%.14f\n" % (beta * energy_unit) ) for ik in range(n_k): file.write("%s\n" % n_bands_per_k[ik,isp]) mat = Nksp[ik] for inu in range(n_bands_per_k[ik,isp]): for imu in range(n_bands_per_k[ik,isp]): file.write(f"{mat[inu,imu].real:.14f} {mat[inu,imu].imag:.14f} ") file.write("\n") file.write("\n") file.write("%.16f\n" % Ecorr.real) if SP == 0: Nk_avg = 0.5 * (N_k[:, 0] + N_k[:, 1]) with open(f"{self.seedname}.qdmft", "w") as f: write_spin_block(f, Nk_avg, 0) else: spin_to_data_idx = [0,1] if SO == 0 else [0,0] with open(f"{self.seedname}.qdmftup", "w") as fup, open(f"{self.seedname}.qdmftdn", "w") as fdn: for f, isp in zip([fup, fdn], spin_to_data_idx): write_spin_block(f, N_k[:, isp], isp) return