3
0
mirror of https://github.com/triqs/dft_tools synced 2024-12-21 11:53:41 +01:00

Modified import of ATM to make it optional

Now, if the PLOVasp cannot import `atm.so` it will issue a warning
and only fail when `density_of_states()` routine is invoked.
This commit is contained in:
Oleg E. Peil 2016-03-10 16:53:17 +01:00
parent fd793cfb40
commit 3ce88a9457

View File

@ -29,12 +29,6 @@ r"""
Storage and manipulation on projector shells.
"""
import itertools as it
import numpy as np
import plovasp.atm.c_atm_dos as c_atm_dos
np.set_printoptions(suppress=True)
def issue_warning(message):
"""
Issues a warning.
@ -43,6 +37,17 @@ def issue_warning(message):
print " !!! WARNING !!!: " + message
print
import itertools as it
import numpy as np
try:
import atm
atmlib_presnet = True
except ImportError:
issue_warning("Error importing ATM libray, DOS calculation will fail!")
atmlib_present = False
np.set_printoptions(suppress=True)
################################################################################
################################################################################
#
@ -352,6 +357,7 @@ class ProjectorShell:
"""
nion, ns, nk, nlm, nbtot = self.proj_win.shape
assert atmlib_present, "ATM library was not imported; cannot calculate DOS"
# There is a problem with data storage structure of projectors that will
# make life more complicated. The problem is that band-indices of projectors
# for different k-points do not match because we store 'nb_max' values starting
@ -385,7 +391,7 @@ class ProjectorShell:
for ib, eigk in enumerate(el_struct.eigvals[:, self.ib_min:self.ib_max+1, isp].T):
for ie, e in enumerate(emesh):
eigk_ef = eigk - el_struct.efermi
cti = c_atm_dos.dos_weights_3d(eigk_ef, e, itt)
cti = atm.dos_weights_3d(eigk_ef, e, itt)
for im in xrange(nlm):
for io in xrange(nion):
dos[ie, isp, io, im] += np.sum((cti * w_k[itt[1:, :], ib, isp, io, im].real).sum(0) * itt[0, :])