mirror of
https://github.com/triqs/dft_tools
synced 2024-12-22 20:34:38 +01:00
refactor & fix: merge the two read functions and small fixes
fix: add asserts for spin calculations and disent
This commit is contained in:
parent
ee10eaea50
commit
c6e755ef07
@ -4,6 +4,7 @@
|
|||||||
# TRIQS: a Toolbox for Research in Interacting Quantum Systems
|
# TRIQS: a Toolbox for Research in Interacting Quantum Systems
|
||||||
#
|
#
|
||||||
# Copyright (C) 2011 by M. Aichhorn, L. Pourovskii, V. Vildosola
|
# Copyright (C) 2011 by M. Aichhorn, L. Pourovskii, V. Vildosola
|
||||||
|
# Copyright (c) 2022-2023 Simons Foundation
|
||||||
#
|
#
|
||||||
# TRIQS is free software: you can redistribute it and/or modify it under the
|
# TRIQS is free software: you can redistribute it and/or modify it under the
|
||||||
# terms of the GNU General Public License as published by the Free Software
|
# terms of the GNU General Public License as published by the Free Software
|
||||||
@ -18,6 +19,8 @@
|
|||||||
# You should have received a copy of the GNU General Public License along with
|
# You should have received a copy of the GNU General Public License along with
|
||||||
# TRIQS. If not, see <http://www.gnu.org/licenses/>.
|
# TRIQS. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
# Authors: M. Aichhorn, S. Beck, A. Hampel, L. Pourovskii, V. Vildosola
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
import sys
|
import sys
|
||||||
import numpy
|
import numpy
|
||||||
@ -25,7 +28,6 @@ from warnings import warn
|
|||||||
from triqs.gf import *
|
from triqs.gf import *
|
||||||
import triqs.utility.mpi as mpi
|
import triqs.utility.mpi as mpi
|
||||||
from .symmetry import *
|
from .symmetry import *
|
||||||
from .sumk_dft import SumkDFT
|
|
||||||
import scipy.constants as cst
|
import scipy.constants as cst
|
||||||
import os.path
|
import os.path
|
||||||
|
|
||||||
@ -38,12 +40,10 @@ __all__ = ['transport_distribution', 'conductivity_and_seebeck', 'write_output_t
|
|||||||
def read_transport_input_from_hdf(sum_k):
|
def read_transport_input_from_hdf(sum_k):
|
||||||
r"""
|
r"""
|
||||||
Reads the data for transport calculations from the hdf5 archive.
|
Reads the data for transport calculations from the hdf5 archive.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
sum_k : sum_k object
|
sum_k : sum_k object
|
||||||
triqs SumkDFT object
|
triqs SumkDFT object
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
sum_k : sum_k object
|
sum_k : sum_k object
|
||||||
@ -214,7 +214,7 @@ def recompute_w90_input_on_different_mesh(sum_k, seedname, nk_optics, pathname='
|
|||||||
|
|
||||||
# set-up k mesh depending on input shape
|
# set-up k mesh depending on input shape
|
||||||
# read in transport input and some checks
|
# read in transport input and some checks
|
||||||
read_transport_input_from_hdf_wannier90(sum_k)
|
read_transport_input_from_hdf(sum_k)
|
||||||
|
|
||||||
# first check for right formatting of sum_k.nk_optics
|
# first check for right formatting of sum_k.nk_optics
|
||||||
assert len(nk_optics) in [1, 3], '"nk_optics" must be given as three integers or one float'
|
assert len(nk_optics) in [1, 3], '"nk_optics" must be given as three integers or one float'
|
||||||
@ -230,6 +230,9 @@ def recompute_w90_input_on_different_mesh(sum_k, seedname, nk_optics, pathname='
|
|||||||
else:
|
else:
|
||||||
nk_x, nk_y, nk_z = nk_optics
|
nk_x, nk_y, nk_z = nk_optics
|
||||||
|
|
||||||
|
# check for spin calculation (not supported)
|
||||||
|
assert sum_k.SP == 0, 'spin dependent transport calculations are not supported.'
|
||||||
|
|
||||||
n_orb = numpy.max([sum_k.n_orbitals[ik][0] for ik in range(sum_k.n_k)])
|
n_orb = numpy.max([sum_k.n_orbitals[ik][0] for ik in range(sum_k.n_k)])
|
||||||
|
|
||||||
# temporarily recompute the following quantities on a different mesh
|
# temporarily recompute the following quantities on a different mesh
|
||||||
@ -268,6 +271,8 @@ def recompute_w90_input_on_different_mesh(sum_k, seedname, nk_optics, pathname='
|
|||||||
grid = wb.Grid(wberri, NKdiv=1, NKFFT=[nk_x, nk_y, nk_z])
|
grid = wb.Grid(wberri, NKdiv=1, NKFFT=[nk_x, nk_y, nk_z])
|
||||||
dataK = wb.data_K.Data_K(wberri, dK=shift_gamma, grid=grid, fftlib='numpy')
|
dataK = wb.data_K.Data_K(wberri, dK=shift_gamma, grid=grid, fftlib='numpy')
|
||||||
|
|
||||||
|
assert dataK.HH_K.shape == hopping[:, 0, :, :].shape, 'wberri / wannier Hamiltonian has different number of orbitals than SumK object. Disentanglement is not supported as of now.'
|
||||||
|
|
||||||
# read in hoppings and proj_mat
|
# read in hoppings and proj_mat
|
||||||
if oc_basis == 'h':
|
if oc_basis == 'h':
|
||||||
hopping[:, 0, range(hopping.shape[2]), range(hopping.shape[3])] = dataK.E_K
|
hopping[:, 0, range(hopping.shape[2]), range(hopping.shape[3])] = dataK.E_K
|
||||||
@ -769,6 +774,9 @@ def transport_coefficient(Gamma_w, omega, Om_mesh, spin_polarization, direction,
|
|||||||
Transport coefficient.
|
Transport coefficient.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from scipy.interpolate import interp1d
|
||||||
|
from scipy.integrate import simpson, quad
|
||||||
|
|
||||||
if not (mpi.is_master_node()):
|
if not (mpi.is_master_node()):
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -791,7 +799,7 @@ def transport_coefficient(Gamma_w, omega, Om_mesh, spin_polarization, direction,
|
|||||||
A = A[0]
|
A = A[0]
|
||||||
elif method == 'simps':
|
elif method == 'simps':
|
||||||
# simpson rule for w-grid
|
# simpson rule for w-grid
|
||||||
A = simps(A_int, omega)
|
A = simpson(A_int, omega)
|
||||||
elif method == 'trapz':
|
elif method == 'trapz':
|
||||||
# trapezoidal rule for w-grid
|
# trapezoidal rule for w-grid
|
||||||
A = numpy.trapz(A_int, omega)
|
A = numpy.trapz(A_int, omega)
|
||||||
|
@ -4,8 +4,7 @@ import numpy as np
|
|||||||
import triqs.utility.mpi as mpi
|
import triqs.utility.mpi as mpi
|
||||||
from h5 import HDFArchive
|
from h5 import HDFArchive
|
||||||
from triqs.gf import MeshReFreq
|
from triqs.gf import MeshReFreq
|
||||||
from triqs.utility.h5diff import h5diff
|
from triqs.utility import h5diff
|
||||||
|
|
||||||
from triqs_dft_tools.sumk_dft import SumkDFT
|
from triqs_dft_tools.sumk_dft import SumkDFT
|
||||||
from triqs_dft_tools.sumk_dft_transport import transport_distribution, init_spectroscopy, conductivity_and_seebeck, write_output_to_hdf
|
from triqs_dft_tools.sumk_dft_transport import transport_distribution, init_spectroscopy, conductivity_and_seebeck, write_output_to_hdf
|
||||||
from triqs_dft_tools.converters.wannier90 import Wannier90Converter
|
from triqs_dft_tools.converters.wannier90 import Wannier90Converter
|
||||||
@ -74,4 +73,8 @@ if mpi.is_master_node():
|
|||||||
'seebeck': seebeck, 'optic_cond': optic_cond, 'kappa': kappa}
|
'seebeck': seebeck, 'optic_cond': optic_cond, 'kappa': kappa}
|
||||||
write_output_to_hdf(sum_k, output_dict, 'transp_output')
|
write_output_to_hdf(sum_k, output_dict, 'transp_output')
|
||||||
|
|
||||||
h5diff(h5_archive, "sr2ruo4_transp.ref.h5")
|
# comparison of the output transport data
|
||||||
|
# velocities can differ depending on LAPACK diagonalization
|
||||||
|
out = HDFArchive(h5_archive,'r')
|
||||||
|
ref = HDFArchive('sr2ruo4_transp.ref.h5', 'r')
|
||||||
|
h5diff.compare('', out['transp_output'], ref['transp_output'], 0, 1e-8)
|
||||||
|
Loading…
Reference in New Issue
Block a user