3
0
mirror of https://github.com/triqs/dft_tools synced 2024-12-22 20:34:38 +01:00

[vasp] read fermi from vasp h5 archive and write deltaN to vasp h5 archive

This commit is contained in:
Alexander Hampel 2024-04-19 12:02:08 -04:00 committed by the-hampel
parent d810576024
commit f57080a6af
2 changed files with 27 additions and 25 deletions

View File

@ -40,6 +40,7 @@ r"""
import logging import logging
import numpy as np import numpy as np
import re import re
from h5 import HDFArchive
log = logging.getLogger('plovasp.vaspio') log = logging.getLogger('plovasp.vaspio')
@ -87,20 +88,17 @@ class VaspData:
self.eigenval.ferw = None self.eigenval.ferw = None
log.warning("Error reading from EIGENVAL, trying LOCPROJ...") log.warning("Error reading from EIGENVAL, trying LOCPROJ...")
try: if efermi_required:
self.doscar.from_file(vasp_dir) try:
except (IOError, StopIteration): with HDFArchive(vasp_dir + "vasptriqs.h5", 'r') as ar:
if efermi_required: self.doscar.efermi = ar['triqs/efermi']
log.warning("Error reading Efermi from DOSCAR, trying LOCPROJ...") print(f'Fermi energy read from vasptriqs.h5: {self.doscar.efermi:.4f} eV')
try: except NameError:
self.plocar.efermi raise Exception("Efermi cannot be read from vasptriqs.h5 file")
self.doscar.efermi = self.plocar.efermi else:
except NameError:
raise Exception("Efermi cannot be read from DOSCAR or LOCPROJ")
else:
# TODO: This a hack. Find out a way to determine ncdij without DOSCAR # TODO: This a hack. Find out a way to determine ncdij without DOSCAR
log.warning("Error reading Efermi from DOSCAR, taking from config") log.warning("Error reading Efermi from DOSCAR, taking from config")
self.doscar.ncdij = self.plocar.nspin self.doscar.ncdij = self.plocar.nspin
################################################################################ ################################################################################
################################################################################ ################################################################################
@ -175,11 +173,6 @@ class Plocar:
self.nspin_band = 2 if self.ncdij == 2 else 1 self.nspin_band = 2 if self.ncdij == 2 else 1
try:
self.efermi = float(sline[4])
except:
log.warning("Error reading Efermi from LOCPROJ, trying DOSCAR...")
plo = np.zeros((nproj, self.nspin, nk, self.nband), dtype=complex) plo = np.zeros((nproj, self.nspin, nk, self.nband), dtype=complex)
proj_params = [{} for i in range(nproj)] proj_params = [{} for i in range(nproj)]

View File

@ -24,6 +24,7 @@
General SumK class and helper functions for combining ab-initio code and triqs General SumK class and helper functions for combining ab-initio code and triqs
""" """
import os
from types import * from types import *
import numpy as np import numpy as np
import triqs.utility.dichotomy as dichotomy import triqs.utility.dichotomy as dichotomy
@ -2332,6 +2333,14 @@ class SumkDFT(object):
f.write(" %.14f %.14f"%(valre, valim)) f.write(" %.14f %.14f"%(valre, valim))
f.write("\n") f.write("\n")
if os.path.isfile('vasptriqs.h5'):
with HDFArchive('vasptriqs.h5', 'a') as vasp_h5:
if 'triqs' not in vasp_h5:
vasp_h5.create_group('triqs')
vasp_h5['triqs']['band_window'] = band_window
vasp_h5['triqs']['deltaN'] = deltaN
elif dm_type == 'elk': elif dm_type == 'elk':
# output each k-point density matrix for Elk # output each k-point density matrix for Elk
if mpi.is_master_node(): if mpi.is_master_node():