mirror of
https://github.com/triqs/dft_tools
synced 2024-09-12 05:38:31 +02:00
81 lines
3.2 KiB
Python
81 lines
3.2 KiB
Python
#!/bin/python3
|
|
import numpy as np
|
|
|
|
import triqs.utility.mpi as mpi
|
|
from h5 import HDFArchive
|
|
from triqs.gf import MeshReFreq
|
|
from triqs.utility import h5diff
|
|
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.converters.wannier90 import Wannier90Converter
|
|
|
|
kx = 5
|
|
seedname = 'sro'
|
|
w90_params = {'seedname': 'w90_optics/'+seedname, 'nk_optics': [kx, kx, kx]}
|
|
n_wf = 3
|
|
|
|
# ----------------- set-up sum_k -----------------------
|
|
|
|
Converter = Wannier90Converter(seedname=w90_params['seedname'], rot_mat_type='wannier', bloch_basis=False)
|
|
Converter.convert_dft_input()
|
|
|
|
# add group 'dft_transp_input' and some other stuff in 'dft_misc_input' needed for transport
|
|
h5_archive = ''.join([w90_params['seedname'], '.h5'])
|
|
if mpi.is_master_node():
|
|
with HDFArchive(h5_archive, 'a') as ar:
|
|
band_window = np.array([(1, n_wf) for k in range(ar['dft_input']['kpts'].shape[0])])
|
|
band_window_optics = np.array([(1, n_wf) for k in range(ar['dft_input']['kpts'].shape[0])])
|
|
for group_name, group_prop in [('band_window', [band_window]), ('rot_symmetries', [np.eye(3)]), ('n_symmetries', 1)]:
|
|
ar['dft_misc_input'].create_group(group_name)
|
|
ar['dft_misc_input'][group_name] = group_prop
|
|
# dft_transp_input
|
|
ar.create_group('dft_transp_input')
|
|
ar['dft_transp_input'].create_group('band_window_optics')
|
|
ar['dft_transp_input']['band_window_optics'] = [band_window_optics]
|
|
|
|
# create SumK object
|
|
window = (-4., 4.)
|
|
n_w = 1001
|
|
beta = 40
|
|
mu = 11.369
|
|
w_mesh = MeshReFreq(window=window, n_w=n_w)
|
|
sum_k = SumkDFT(h5_archive, use_dft_blocks=False, mesh=w_mesh)
|
|
|
|
# ----------------- create Sigma / set into sum_k -----------------------
|
|
|
|
sigma_freq = [sum_k.block_structure.create_gf(ish=iineq, mesh=w_mesh) for iineq in range(sum_k.n_inequiv_shells)]
|
|
|
|
# Sigma const
|
|
eta_sigma = 0.01
|
|
for block, gf in sigma_freq[0]:
|
|
gf << - eta_sigma * 1j
|
|
|
|
sum_k.set_mu(mu)
|
|
sum_k.set_Sigma(sigma_freq)
|
|
|
|
# ----------------- compute optical properties -----------------------
|
|
|
|
Om_mesh = [0.0, 0.2]
|
|
eta_lattice = 0.001
|
|
directions = ['xx']
|
|
|
|
sum_k = init_spectroscopy(sum_k, code='wannier90', w90_params=w90_params)
|
|
|
|
Gamma_w, omega, Om_mesh = transport_distribution(sum_k, directions=directions,
|
|
Om_mesh=Om_mesh, energy_window=window,
|
|
with_Sigma=True, broadening=eta_lattice,
|
|
beta=beta, code='wannier90')
|
|
|
|
if mpi.is_master_node():
|
|
optic_cond, seebeck, kappa = conductivity_and_seebeck(Gamma_w, omega, Om_mesh, sum_k.SP, directions, beta=beta, method=None)
|
|
|
|
output_dict = {'Gamma_w': Gamma_w, 'Om_mesh': Om_mesh, 'omega': omega, 'directions': directions,
|
|
'seebeck': seebeck, 'optic_cond': optic_cond, 'kappa': kappa}
|
|
write_output_to_hdf(sum_k, output_dict, 'transp_output')
|
|
|
|
# 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)
|