mirror of
https://github.com/triqs/dft_tools
synced 2024-08-30 15:53:41 +02:00
Merge pull request #88 from TRIQS/thermal_conductivity
thermal cond. added to conductivity_and_seebeck
This commit is contained in:
commit
3a5848efb4
@ -5,11 +5,19 @@ Transport calculations
|
||||
|
||||
Formalism
|
||||
---------
|
||||
The conductivity and the Seebeck coefficient in direction :math:`\alpha\beta` are defined as [#transp]_:
|
||||
The conductivity, the Seebeck coefficient and the electronic contribution to the thermal conductivity in direction :math:`\alpha\beta` are defined as [#transp1]_ [#transp2]_:
|
||||
|
||||
.. math::
|
||||
|
||||
\sigma_{\alpha\beta} = \beta e^{2} A_{0,\alpha\beta} \ \ \ \text{and} \ \ \ S_{\alpha\beta} = -\frac{k_B}{|e|}\frac{A_{1,\alpha\beta}}{A_{0,\alpha\beta}},
|
||||
\sigma_{\alpha\beta} = \beta e^{2} A_{0,\alpha\beta}
|
||||
|
||||
.. math::
|
||||
|
||||
S_{\alpha\beta} = -\frac{k_B}{|e|}\frac{A_{1,\alpha\beta}}{A_{0,\alpha\beta}},
|
||||
|
||||
.. math::
|
||||
|
||||
\kappa^{\text{el}}_{\alpha\beta} = k_B \left(A_{2,\alpha\beta} - \frac{A_{1,\alpha\beta}^2}{A_{0,\alpha\beta}}\right),
|
||||
|
||||
in which the kinetic coefficients :math:`A_{n,\alpha\beta}` are given by
|
||||
|
||||
@ -102,7 +110,7 @@ As next step we can calculate the transport distribution :math:`\Gamma_{\alpha\b
|
||||
|
||||
Here the transport distribution is calculated in :math:`xx` direction for the frequencies :math:`\Omega=0.0` and :math:`0.1`.
|
||||
To use the previously obtained self energy we set with_Sigma to True and the broadening to :math:`0.0`.
|
||||
As we also want to calculate the Seebeck coefficient we have to include :math:`\Omega=0.0` in the mesh.
|
||||
As we also want to calculate the Seebeck coefficient and the thermal conductivity we have to include :math:`\Omega=0.0` in the mesh.
|
||||
Note that the current version of the code repines the :math:`\Omega` values to the closest values on the self energy mesh.
|
||||
For complete description of the input parameters see the :meth:`transport_distribution reference <dft.sumk_dft_tools.SumkDFTTools.transport_distribution>`.
|
||||
|
||||
@ -114,10 +122,10 @@ You can retrieve it from the archive by::
|
||||
|
||||
SK.Gamma_w, SK.Om_meshr, SK.omega, SK.directions = SK.load(['Gamma_w','Om_meshr','omega','directions'])
|
||||
|
||||
Finally the optical conductivity :math:`\sigma(\Omega)` and the Seebeck coefficient :math:`S` can be obtained with::
|
||||
Finally the optical conductivity :math:`\sigma(\Omega)`, the Seebeck coefficient :math:`S` and the thermal conductivity :math:`\kappa^{\text{el}}` can be obtained with::
|
||||
|
||||
SK.conductivity_and_seebeck(beta=40)
|
||||
SK.save(['seebeck','optic_cond'])
|
||||
SK.save(['seebeck','optic_cond','kappa'])
|
||||
|
||||
It is strongly advised to check convergence in the number of k-points!
|
||||
|
||||
@ -125,5 +133,6 @@ It is strongly advised to check convergence in the number of k-points!
|
||||
References
|
||||
----------
|
||||
|
||||
.. [#transp] `V. S. Oudovenko, G. Palsson, K. Haule, G. Kotliar, S. Y. Savrasov, Phys. Rev. B 73, 035120 (2006) <http://link.aps.org/doi/10.1103/PhysRevB.73.0351>`_
|
||||
.. [#transp1] `V. S. Oudovenko, G. Palsson, K. Haule, G. Kotliar, S. Y. Savrasov, Phys. Rev. B 73, 035120 (2006) <http://link.aps.org/doi/10.1103/PhysRevB.73.0351>`_
|
||||
.. [#transp2] `J. M. Tomczak, K. Haule, T. Miyake, A. Georges, G. Kotliar, Phys. Rev. B 82, 085104 (2010) <https://link.aps.org/doi/10.1103/PhysRevB.82.085104>`_
|
||||
.. [#userguide] `P. Blaha, K. Schwarz, G. K. H. Madsen, D. Kvasnicka, J. Luitz, ISBN 3-9501031-1-2 <http://www.wien2k.at/reg_user/textbooks/usersguide.pdf>`_
|
||||
|
@ -934,6 +934,9 @@ class SumkDFTTools(SumkDFT):
|
||||
|
||||
seebeck : dictionary of double
|
||||
Seebeck coefficient in each direction. If zero is not present in Om_mesh the Seebeck coefficient is set to NaN.
|
||||
|
||||
kappa : dictionary of double.
|
||||
thermal conductivity in each direction. If zero is not present in Om_mesh the thermal conductivity is set to NaN
|
||||
"""
|
||||
|
||||
if not (mpi.is_master_node()):
|
||||
@ -947,7 +950,10 @@ class SumkDFTTools(SumkDFT):
|
||||
for direction in self.directions}
|
||||
A1 = {direction: numpy.full((n_q,), numpy.nan)
|
||||
for direction in self.directions}
|
||||
A2 = {direction: numpy.full((n_q,), numpy.nan)
|
||||
for direction in self.directions}
|
||||
self.seebeck = {direction: numpy.nan for direction in self.directions}
|
||||
self.kappa = {direction: numpy.nan for direction in self.directions}
|
||||
self.optic_cond = {direction: numpy.full(
|
||||
(n_q,), numpy.nan) for direction in self.directions}
|
||||
|
||||
@ -957,21 +963,28 @@ class SumkDFTTools(SumkDFT):
|
||||
direction, iq=iq, n=0, beta=beta, method=method)
|
||||
A1[direction][iq] = self.transport_coefficient(
|
||||
direction, iq=iq, n=1, beta=beta, method=method)
|
||||
A2[direction][iq] = self.transport_coefficient(
|
||||
direction, iq=iq, n=2, beta=beta, method=method)
|
||||
print "A_0 in direction %s for Omega = %.2f %e a.u." % (direction, self.Om_mesh[iq], A0[direction][iq])
|
||||
print "A_1 in direction %s for Omega = %.2f %e a.u." % (direction, self.Om_mesh[iq], A1[direction][iq])
|
||||
print "A_2 in direction %s for Omega = %.2f %e a.u." % (direction, self.Om_mesh[iq], A2[direction][iq])
|
||||
if ~numpy.isnan(A1[direction][iq]):
|
||||
# Seebeck is overwritten if there is more than one Omega =
|
||||
# Seebeck and kappa are overwritten if there is more than one Omega =
|
||||
# 0 in Om_mesh
|
||||
self.seebeck[direction] = - \
|
||||
A1[direction][iq] / A0[direction][iq] * 86.17
|
||||
self.kappa[direction] = A2[direction][iq] - A1[direction][iq]*A1[direction][iq]/A0[direction][iq]
|
||||
self.kappa[direction] *= 293178.0
|
||||
self.optic_cond[direction] = beta * \
|
||||
A0[direction] * 10700.0 / numpy.pi
|
||||
for iq in xrange(n_q):
|
||||
print "Conductivity in direction %s for Omega = %.2f %f x 10^4 Ohm^-1 cm^-1" % (direction, self.Om_mesh[iq], self.optic_cond[direction][iq])
|
||||
if not (numpy.isnan(A1[direction][iq])):
|
||||
print "Seebeck in direction %s for Omega = 0.00 %f x 10^(-6) V/K" % (direction, self.seebeck[direction])
|
||||
print "kappa in direction %s for Omega = 0.00 %f W/(m * K)" % (direction, self.kappa[direction])
|
||||
|
||||
return self.optic_cond, self.seebeck, self.kappa
|
||||
|
||||
return self.optic_cond, self.seebeck
|
||||
|
||||
def fermi_dis(self, w, beta):
|
||||
r"""
|
||||
|
@ -46,7 +46,7 @@ SK.transport_distribution(directions=['xx'], broadening=0.0, energy_window=[-0.3
|
||||
#SK.load(['Gamma_w','Om_meshr','omega','directions'])
|
||||
SK.conductivity_and_seebeck(beta=beta)
|
||||
SK.hdf_file = 'srvo3_transp.out.h5'
|
||||
SK.save(['seebeck','optic_cond'])
|
||||
SK.save(['seebeck','optic_cond','kappa'])
|
||||
|
||||
if mpi.is_master_node():
|
||||
h5diff("srvo3_transp.out.h5","srvo3_transp.ref.h5")
|
||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user