mirror of
https://github.com/triqs/dft_tools
synced 2024-12-23 04:43:42 +01:00
Fix for wannier converter: reordering of orbital/spin order only necessary for vasp 5
This commit is contained in:
parent
335dd89738
commit
8de30d67fe
@ -62,7 +62,7 @@ class Wannier90Converter(ConverterTools):
|
|||||||
def __init__(self, seedname, hdf_filename=None, dft_subgrp='dft_input',
|
def __init__(self, seedname, hdf_filename=None, dft_subgrp='dft_input',
|
||||||
symmcorr_subgrp='dft_symmcorr_input', misc_subgrp='dft_misc_input',
|
symmcorr_subgrp='dft_symmcorr_input', misc_subgrp='dft_misc_input',
|
||||||
repacking=False, rot_mat_type='hloc_diag', bloch_basis=False, add_lambda=None,
|
repacking=False, rot_mat_type='hloc_diag', bloch_basis=False, add_lambda=None,
|
||||||
w90zero=2e-6):
|
w90zero=2e-6, reorder_orbital_and_spin_vasp5=False):
|
||||||
"""
|
"""
|
||||||
Initialise the class.
|
Initialise the class.
|
||||||
|
|
||||||
@ -86,9 +86,15 @@ class Wannier90Converter(ConverterTools):
|
|||||||
bloch_basis : boolean, optional
|
bloch_basis : boolean, optional
|
||||||
Should the Hamiltonian be written in Bloch rather than Wannier basis?
|
Should the Hamiltonian be written in Bloch rather than Wannier basis?
|
||||||
add_lambda : list of floats, optional
|
add_lambda : list of floats, optional
|
||||||
add local spin-orbit term
|
Add local spin-orbit term
|
||||||
w90zero : float, optional
|
w90zero : float, optional
|
||||||
threshold on symmetry checks of Hamiltonian and rot_mat
|
Threshold on symmetry checks of Hamiltonian and rot_mat
|
||||||
|
reorder_orbital_and_spin_vasp5 : bool, optional
|
||||||
|
Is false for output from VASP 6 and Quantum Espresso
|
||||||
|
Reorder orbitals and spins from the VASP 5 convention of first all
|
||||||
|
orbitals with up and then all orbitals with down to the "usual"
|
||||||
|
convention of every up orbital immediately being followed by its
|
||||||
|
corresponding down orbital
|
||||||
"""
|
"""
|
||||||
self._name = 'Wannier90Converter'
|
self._name = 'Wannier90Converter'
|
||||||
assert isinstance(seedname, str), self._name + \
|
assert isinstance(seedname, str), self._name + \
|
||||||
@ -110,6 +116,7 @@ class Wannier90Converter(ConverterTools):
|
|||||||
self.rot_mat_type = rot_mat_type
|
self.rot_mat_type = rot_mat_type
|
||||||
self.bloch_basis = bloch_basis
|
self.bloch_basis = bloch_basis
|
||||||
self.add_lambda = add_lambda
|
self.add_lambda = add_lambda
|
||||||
|
self.reorder_orbital_and_spin_vasp5 = reorder_orbital_and_spin_vasp5
|
||||||
if self.add_lambda is not None and len(self.add_lambda) != 3:
|
if self.add_lambda is not None and len(self.add_lambda) != 3:
|
||||||
raise ValueError('If specifying add_lambda, give three values.')
|
raise ValueError('If specifying add_lambda, give three values.')
|
||||||
if self.rot_mat_type not in ('hloc_diag', 'wannier', 'none'):
|
if self.rot_mat_type not in ('hloc_diag', 'wannier', 'none'):
|
||||||
@ -191,8 +198,8 @@ class Wannier90Converter(ConverterTools):
|
|||||||
mpi.report('Overwriting required density with DFT result {:.5f}'.format(density_required))
|
mpi.report('Overwriting required density with DFT result {:.5f}'.format(density_required))
|
||||||
mpi.report('and using the DFT Fermi energy {:.5f} eV\n'.format(fermi_energy))
|
mpi.report('and using the DFT Fermi energy {:.5f} eV\n'.format(fermi_energy))
|
||||||
|
|
||||||
# Switches from wannier90 order to triqs order
|
# Switches from Vasp 5 + wannier90 order to triqs order
|
||||||
if SO and not self.add_lambda:
|
if SO and not self.add_lambda and self.reorder_orbital_and_spin_vasp5:
|
||||||
wannier_hr, u_total = reorder_orbital_and_spin(n_wannier, wannier_hr, u_total)
|
wannier_hr, u_total = reorder_orbital_and_spin(n_wannier, wannier_hr, u_total)
|
||||||
|
|
||||||
# Finds R=0 index
|
# Finds R=0 index
|
||||||
@ -933,10 +940,10 @@ def read_misc_input(w90_seed, n_spin_blocks, n_k):
|
|||||||
|
|
||||||
def reorder_orbital_and_spin(nwfs, wannier_hr, u_total):
|
def reorder_orbital_and_spin(nwfs, wannier_hr, u_total):
|
||||||
"""
|
"""
|
||||||
Changes order from wannier90 (first all up spin wannier orbitals, then all
|
Changes order from VASP5 + wannier90 (first all up spin wannier orbitals,
|
||||||
down spin) to triqs order (every up orbital is followed directly by the
|
then all down spin) to usual order (every up orbital is followed directly
|
||||||
corresponding down orbital). The order between orbital degrees of freedom
|
by the corresponding down orbital). The order between orbital degrees of
|
||||||
is not changed.
|
freedom is not changed.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
@ -958,8 +965,8 @@ def reorder_orbital_and_spin(nwfs, wannier_hr, u_total):
|
|||||||
def generate_local_so_matrix_t2g(add_lambda, n_corr_shells, nwfs):
|
def generate_local_so_matrix_t2g(add_lambda, n_corr_shells, nwfs):
|
||||||
"""
|
"""
|
||||||
Adds local spin-orbit interaction term to the t2g subspace. Orbital order
|
Adds local spin-orbit interaction term to the t2g subspace. Orbital order
|
||||||
is assumed to be the triqs order xz_up, xz_dn, yz_up, yz_dn, xy_up, xy_dn
|
is assumed to be the wannier90/triqs order xz_up, xz_dn, yz_up, yz_dn,
|
||||||
as given after reordering the Wannier input.
|
xy_up, xy_dn.
|
||||||
Parameters are defined as add_lambda = [lambda_x, lambda_y, lambda_z],
|
Parameters are defined as add_lambda = [lambda_x, lambda_y, lambda_z],
|
||||||
representative of the orbital coupling terms perpendicular to [x, y, z],
|
representative of the orbital coupling terms perpendicular to [x, y, z],
|
||||||
i.e., [d_yz, d_xz, d_xy], respectively.
|
i.e., [d_yz, d_xz, d_xy], respectively.
|
||||||
|
@ -33,7 +33,8 @@ subfolder = 'w90_convert/'
|
|||||||
# bloch_basis False
|
# bloch_basis False
|
||||||
seedname = subfolder+'SrVO3_soc'
|
seedname = subfolder+'SrVO3_soc'
|
||||||
converter = Wannier90Converter(seedname=seedname, hdf_filename=seedname+'.out.h5',
|
converter = Wannier90Converter(seedname=seedname, hdf_filename=seedname+'.out.h5',
|
||||||
rot_mat_type='wannier', bloch_basis=False)
|
rot_mat_type='wannier', bloch_basis=False,
|
||||||
|
reorder_orbital_and_spin_vasp5=True)
|
||||||
converter.convert_dft_input()
|
converter.convert_dft_input()
|
||||||
|
|
||||||
if mpi.is_master_node():
|
if mpi.is_master_node():
|
||||||
|
Loading…
Reference in New Issue
Block a user