mirror of
https://github.com/triqs/dft_tools
synced 2024-12-22 20:34:38 +01:00
Update sumk_dft_transport.py
Raman conductivity in atomic units.
This commit is contained in:
parent
8bcda33018
commit
90c4dfc72b
@ -337,7 +337,6 @@ def recompute_w90_input_on_different_mesh(sum_k, seedname, nk_optics, pathname='
|
|||||||
|
|
||||||
if calc_inverse_mass:
|
if calc_inverse_mass:
|
||||||
# in the band basis
|
# in the band basis
|
||||||
# ToDo: change units of inverse_mass consistently
|
|
||||||
if oc_basis == 'h':
|
if oc_basis == 'h':
|
||||||
inverse_mass = dataK.Xbar('Ham', 2)
|
inverse_mass = dataK.Xbar('Ham', 2)
|
||||||
# in the orbital basis
|
# in the orbital basis
|
||||||
@ -348,6 +347,7 @@ def recompute_w90_input_on_different_mesh(sum_k, seedname, nk_optics, pathname='
|
|||||||
Hw_alphabeta_R = 1j * Hw_alphabeta_R.reshape((Hw_alphabeta_R.shape) + (1, )) * dataK.cRvec_wcc.reshape(
|
Hw_alphabeta_R = 1j * Hw_alphabeta_R.reshape((Hw_alphabeta_R.shape) + (1, )) * dataK.cRvec_wcc.reshape(
|
||||||
(shape_cR[0], shape_cR[1], dataK.system.nRvec) + (1, ) * len(Hw_alphabeta_R.shape[3:]) + (3, ))
|
(shape_cR[0], shape_cR[1], dataK.system.nRvec) + (1, ) * len(Hw_alphabeta_R.shape[3:]) + (3, ))
|
||||||
inverse_mass = dataK.fft_R_to_k(Hw_alphabeta_R, hermitean=False)[dataK.select_K]
|
inverse_mass = dataK.fft_R_to_k(Hw_alphabeta_R, hermitean=False)[dataK.select_K]
|
||||||
|
inverse_mass = inverse_mass / HARTREETOEV / BOHRTOANG**2
|
||||||
# read in rest from dataK
|
# read in rest from dataK
|
||||||
cell_volume = dataK.cell_volume / BOHRTOANG ** 3
|
cell_volume = dataK.cell_volume / BOHRTOANG ** 3
|
||||||
kpts = dataK.kpoints_all
|
kpts = dataK.kpoints_all
|
||||||
@ -427,7 +427,7 @@ def raman_vertex(sumk,ik,direction,code,isp, options=None):
|
|||||||
numpy array size [n_orb, n_orb] of complex type
|
numpy array size [n_orb, n_orb] of complex type
|
||||||
"""
|
"""
|
||||||
if code in ('wien2k'):
|
if code in ('wien2k'):
|
||||||
assert 0, 'Raman for wien2k not yet implemented' #ToDo
|
assert 0, 'Raman for wien2k not yet implemented'
|
||||||
dir_names=['xx','yy','zz','B2g','B1g','A1g','Eg']
|
dir_names=['xx','yy','zz','B2g','B1g','A1g','Eg']
|
||||||
dir_array=[ [[1.,0.,0.],[0.,0.,0.],[0.,0.,0.]],
|
dir_array=[ [[1.,0.,0.],[0.,0.,0.],[0.,0.,0.]],
|
||||||
[[0.,0.,0.],[0.,1.,0.],[0.,0.,0.]],
|
[[0.,0.,0.],[0.,1.,0.],[0.,0.,0.]],
|
||||||
@ -744,7 +744,7 @@ def transport_distribution(sum_k, beta, directions=['xx'], energy_window=None, O
|
|||||||
if code in ('wannier90'):
|
if code in ('wannier90'):
|
||||||
assert hasattr(sum_k,"inverse_mass"), 'inverse_mass not available in sum_k. Set calc_inverse_mass=True in w90_params.'
|
assert hasattr(sum_k,"inverse_mass"), 'inverse_mass not available in sum_k. Set calc_inverse_mass=True in w90_params.'
|
||||||
elif code in ('wien2k'):
|
elif code in ('wien2k'):
|
||||||
assert 0, 'Raman for wien2k not yet implemented' #ToDo
|
assert 0, 'Raman for wien2k not yet implemented'
|
||||||
# loop over all symmetries
|
# loop over all symmetries
|
||||||
for R in sum_k.rot_symmetries:
|
for R in sum_k.rot_symmetries:
|
||||||
for direction in directions:
|
for direction in directions:
|
||||||
@ -1001,15 +1001,15 @@ def conductivity_and_seebeck(Gamma_w, omega, Om_mesh, SP, directions, beta, meth
|
|||||||
else:
|
else:
|
||||||
return optic_cond, seebeck, kappa
|
return optic_cond, seebeck, kappa
|
||||||
elif mode in ('raman'):
|
elif mode in ('raman'):
|
||||||
# ToDo: correct units
|
# TODO: express in SI units
|
||||||
raman_cond = {direction: numpy.full((n_q,), numpy.nan) for direction in directions}
|
raman_cond = {direction: numpy.full((n_q,), numpy.nan) for direction in directions}
|
||||||
|
|
||||||
for direction in directions:
|
for direction in directions:
|
||||||
for iq in range(n_q):
|
for iq in range(n_q):
|
||||||
A0[direction][iq] = transport_coefficient(Gamma_w, omega, Om_mesh, SP, direction, iq=iq, n=0, beta=beta, method=method)
|
A0[direction][iq] = transport_coefficient(Gamma_w, omega, Om_mesh, SP, direction, iq=iq, n=0, beta=beta, method=method)
|
||||||
print("A_0 in direction %s for Omega = %.2f %e a.u." % (direction, Om_mesh[iq], A0[direction][iq]))
|
print("A_0 in direction %s for Omega = %.2f %e atomic units" % (direction, Om_mesh[iq], A0[direction][iq]))
|
||||||
raman_cond[direction] = beta * A0[direction] * 10700.0 / numpy.pi
|
raman_cond[direction] = beta * A0[direction]
|
||||||
for iq in range(n_q):
|
for iq in range(n_q):
|
||||||
print("Raman conductivity in direction %s for Omega = %.2f %f x 10^4 Ohm^-1 cm^-1" % (direction, Om_mesh[iq], raman_cond[direction][iq]))
|
print("Raman conductivity in direction %s for Omega = %.4f %f atomic units" % (direction, Om_mesh[iq], raman_cond[direction][iq]))
|
||||||
|
|
||||||
return raman_cond
|
return raman_cond
|
||||||
|
Loading…
Reference in New Issue
Block a user