w90_gyrotropic Module

This module computes various "gyrotropic" effects as described in : TAS17 = arXiv:1710.03204 (2017) Gyrotropic effects in trigonal tellurium studied from first principles S.S.Tsirkin, P. Aguado Puente, I. Souza


Uses

  • module~~w90_gyrotropic~~UsesGraph module~w90_gyrotropic w90_gyrotropic module~w90_berry w90_berry module~w90_gyrotropic->module~w90_berry module~w90_constants w90_constants module~w90_gyrotropic->module~w90_constants module~w90_error w90_error module~w90_gyrotropic->module~w90_error module~w90_berry->module~w90_constants module~w90_berry->module~w90_error module~w90_comms w90_comms module~w90_error->module~w90_comms module~w90_error_base w90_error_base module~w90_error->module~w90_error_base module~w90_comms->module~w90_constants module~w90_comms->module~w90_error_base

Used by

  • module~~w90_gyrotropic~~UsedByGraph module~w90_gyrotropic w90_gyrotropic program~postw90 postw90 program~postw90->module~w90_gyrotropic

Variables

Type Visibility Attributes Name Initial
integer, private, parameter, dimension(3) :: alpha_A = (/2, 3, 1/)
integer, private, parameter, dimension(3) :: beta_A = (/3, 1, 2/)

Subroutines

public subroutine gyrotropic_main(pw90_berry, dis_manifold, fermi_energy_list, pw90_gyrotropic, kmesh_info, kpt_latt, physics, pw90_oper_read, pw90_band_deriv_degen, ws_region, w90_system, print_output, wannier_data, wigner_seitz, ws_distance, AA_R, BB_R, CC_R, HH_R, SS_R, u_matrix, v_matrix, eigval, real_lattice, scissors_shift, mp_grid, num_bands, num_kpts, num_wann, effective_model, have_disentangled, seedname, stdout, timer, error, comm)

Computes the following quantities: (i) D tensor (ii) K tensor (iii) C tensor (iv) current-induced optical activity (v) natural optical activity

Arguments

Type IntentOptional Attributes Name
type(pw90_berry_mod_type), intent(in) :: pw90_berry
type(dis_manifold_type), intent(in) :: dis_manifold
real(kind=dp), intent(in), allocatable :: fermi_energy_list(:)
type(pw90_gyrotropic_type), intent(in) :: pw90_gyrotropic
type(kmesh_info_type), intent(in) :: kmesh_info
real(kind=dp), intent(in) :: kpt_latt(:,:)
type(pw90_physical_constants_type), intent(in) :: physics
type(pw90_oper_read_type), intent(in) :: pw90_oper_read
type(pw90_band_deriv_degen_type), intent(in) :: pw90_band_deriv_degen
type(ws_region_type), intent(in) :: ws_region
type(w90_system_type), intent(in) :: w90_system
type(print_output_type), intent(in) :: print_output
type(wannier_data_type), intent(in) :: wannier_data
type(wigner_seitz_type), intent(inout) :: wigner_seitz
type(ws_distance_type), intent(inout) :: ws_distance
complex(kind=dp), intent(inout), allocatable :: AA_R(:,:,:,:)
complex(kind=dp), intent(inout), allocatable :: BB_R(:,:,:,:)
complex(kind=dp), intent(inout), allocatable :: CC_R(:,:,:,:,:)
complex(kind=dp), intent(inout), allocatable :: HH_R(:,:,:)
complex(kind=dp), intent(inout), allocatable :: SS_R(:,:,:,:)
complex(kind=dp), intent(in) :: u_matrix(:,:,:)
complex(kind=dp), intent(in) :: v_matrix(:,:,:)
real(kind=dp), intent(in) :: eigval(:,:)
real(kind=dp), intent(in) :: real_lattice(3,3)
real(kind=dp), intent(in) :: scissors_shift
integer, intent(in) :: mp_grid(3)
integer, intent(in) :: num_bands
integer, intent(in) :: num_kpts
integer, intent(in) :: num_wann
logical, intent(in) :: effective_model
logical, intent(in) :: have_disentangled
character(len=50), intent(in) :: seedname
integer, intent(in) :: stdout
type(timer_list_type), intent(inout) :: timer
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm

private subroutine gyrotropic_get_k_list(ws_region, num_valence_bands, have_disentangled, kpt, kweight, gyro_K_spn, gyro_K_orb, gyro_D, gyro_Dw, gyro_C, gyro_DOS, gyro_NOA_orb, gyro_NOA_spn, eval_K, eval_D, eval_Dw, eval_NOA, eval_spn, eval_C, eval_dos, num_wann, print_output, fermi_energy_list, wannier_data, eigval, real_lattice, mp_grid, num_bands, num_kpts, u_matrix, v_matrix, dis_manifold, kpt_latt, pw90_gyrotropic, scissors_shift, effective_model, pw90_band_deriv_degen, ws_distance, wigner_seitz, stdout, seedname, timer, error, comm, HH_R, AA_R, BB_R, CC_R, SS_R)

Arguments

Type IntentOptional Attributes Name
type(ws_region_type), intent(in) :: ws_region
integer, intent(in) :: num_valence_bands
logical, intent(in) :: have_disentangled
real(kind=dp), intent(in) :: kpt(3)
real(kind=dp), intent(in) :: kweight
real(kind=dp), intent(inout), allocatable :: gyro_K_spn(:,:,:)
real(kind=dp), intent(inout), allocatable :: gyro_K_orb(:,:,:)
real(kind=dp), intent(inout), allocatable :: gyro_D(:,:,:)
real(kind=dp), intent(inout), allocatable :: gyro_Dw(:,:,:,:)
real(kind=dp), intent(inout), allocatable :: gyro_C(:,:,:)
real(kind=dp), intent(inout), allocatable :: gyro_DOS(:)
real(kind=dp), intent(inout), allocatable :: gyro_NOA_orb(:,:,:,:)
real(kind=dp), intent(inout), allocatable :: gyro_NOA_spn(:,:,:,:)
logical, intent(in) :: eval_K
logical, intent(in) :: eval_D
logical, intent(in) :: eval_Dw
logical, intent(in) :: eval_NOA
logical, intent(in) :: eval_spn
logical, intent(in) :: eval_C
logical, intent(in) :: eval_dos
integer, intent(in) :: num_wann
type(print_output_type), intent(in) :: print_output
real(kind=dp), intent(in), allocatable :: fermi_energy_list(:)
type(wannier_data_type), intent(in) :: wannier_data
real(kind=dp), intent(in) :: eigval(:,:)
real(kind=dp), intent(in) :: real_lattice(3,3)
integer, intent(in) :: mp_grid(3)
integer, intent(in) :: num_bands
integer, intent(in) :: num_kpts
complex(kind=dp), intent(in) :: u_matrix(:,:,:)
complex(kind=dp), intent(in) :: v_matrix(:,:,:)
type(dis_manifold_type), intent(in) :: dis_manifold
real(kind=dp), intent(in) :: kpt_latt(:,:)
type(pw90_gyrotropic_type), intent(in) :: pw90_gyrotropic
real(kind=dp), intent(in) :: scissors_shift
logical, intent(in) :: effective_model
type(pw90_band_deriv_degen_type), intent(in) :: pw90_band_deriv_degen
type(ws_distance_type), intent(inout) :: ws_distance
type(wigner_seitz_type), intent(inout) :: wigner_seitz
integer, intent(in) :: stdout
character(len=50), intent(in) :: seedname
type(timer_list_type), intent(inout) :: timer
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm
complex(kind=dp), intent(inout), allocatable :: HH_R(:,:,:)
complex(kind=dp), intent(inout), allocatable :: AA_R(:,:,:,:)
complex(kind=dp), intent(inout), allocatable :: BB_R(:,:,:,:)
complex(kind=dp), intent(inout), allocatable :: CC_R(:,:,:,:,:)
complex(kind=dp), intent(inout), allocatable :: SS_R(:,:,:,:)

private subroutine gyrotropic_get_curv_w_k(eig, AA, curv_w_k, pw90_gyrotropic)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: eig(:)
complex(kind=dp), intent(in) :: AA(:,:,:)
real(kind=dp), intent(out) :: curv_w_k(:,:,:)
type(pw90_gyrotropic_type), intent(in) :: pw90_gyrotropic

private subroutine gyrotropic_get_NOA_k(ws_region, kpt, kweight, eig, del_eig, AA, UU, gyro_NOA_orb, num_wann, print_output, fermi_energy_list, wannier_data, real_lattice, mp_grid, pw90_gyrotropic, ws_distance, wigner_seitz, stdout, error, comm, SS_R, gyro_NOA_spn)

Arguments

Type IntentOptional Attributes Name
type(ws_region_type), intent(in) :: ws_region
real(kind=dp), intent(in) :: kpt(3)
real(kind=dp), intent(in) :: kweight
real(kind=dp), intent(in) :: eig(:)
real(kind=dp), intent(in) :: del_eig(:,:)
complex(kind=dp), intent(in) :: AA(:,:,:)
complex(kind=dp), intent(in) :: UU(:,:)
real(kind=dp), intent(inout) :: gyro_NOA_orb(:,:,:,:)
integer, intent(in) :: num_wann
type(print_output_type), intent(in) :: print_output
real(kind=dp), intent(in), allocatable :: fermi_energy_list(:)
type(wannier_data_type), intent(in) :: wannier_data
real(kind=dp), intent(in) :: real_lattice(3,3)
integer, intent(in) :: mp_grid(3)
type(pw90_gyrotropic_type), intent(in) :: pw90_gyrotropic
type(ws_distance_type), intent(inout) :: ws_distance
type(wigner_seitz_type), intent(inout) :: wigner_seitz
integer, intent(in) :: stdout
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm
complex(kind=dp), intent(inout), allocatable :: SS_R(:,:,:,:)
real(kind=dp), intent(inout), optional :: gyro_NOA_spn(:,:,:,:)

private subroutine gyrotropic_get_NOA_Bnl_orb(eig, del_eig, AA, num_occ, occ_list, num_unocc, unocc_list, Bnl, pw90_gyrotropic)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: eig(:)
real(kind=dp), intent(in) :: del_eig(:,:)
complex(kind=dp), intent(in) :: AA(:,:,:)
integer, intent(in) :: num_occ
integer, intent(in) :: occ_list(:)
integer, intent(in) :: num_unocc
integer, intent(in) :: unocc_list(:)
complex(kind=dp), intent(out) :: Bnl(:,:,:,:)
type(pw90_gyrotropic_type), intent(in) :: pw90_gyrotropic

private subroutine gyrotropic_get_NOA_Bnl_spin(S_h, num_occ, occ_list, num_unocc, unocc_list, Bnl)

Arguments

Type IntentOptional Attributes Name
complex(kind=dp), intent(in) :: S_h(:,:,:)
integer, intent(in) :: num_occ
integer, intent(in) :: occ_list(:)
integer, intent(in) :: num_unocc
integer, intent(in) :: unocc_list(:)
complex(kind=dp), intent(out) :: Bnl(:,:,:,:)

private subroutine gyrotropic_outprint_tensor(stdout, seedname, pw90_gyrotropic, fermi_energy_list, f_out_name, arrEf, arrEf1D, arrEfW, units, comment, symmetrize)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: stdout
character(len=50), intent(in) :: seedname
type(pw90_gyrotropic_type), intent(in) :: pw90_gyrotropic
real(kind=dp), intent(in), allocatable :: fermi_energy_list(:)
character(len=30), intent(in) :: f_out_name
real(kind=dp), intent(in), optional :: arrEf(:,:,:)
real(kind=dp), intent(in), optional :: arrEf1D(:)
real(kind=dp), intent(in), optional :: arrEfW(:,:,:,:)
character(len=30), intent(in), optional :: units
character(len=120), intent(in), optional :: comment
logical, intent(in), optional :: symmetrize

private subroutine gyrotropic_outprint_tensor_w(fermi_energy_list, fermi_n, file_unit, omega, arr33N, arrN, symmetrize)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in), allocatable :: fermi_energy_list(:)
integer, intent(in) :: fermi_n
integer, intent(in) :: file_unit
real(kind=dp), intent(in) :: omega
real(kind=dp), intent(in), optional :: arr33N(:,:,:)
real(kind=dp), intent(in), optional :: arrN(:)
logical, intent(in), optional :: symmetrize