w90_transport_mod Module

Module to handle ballistic transport. Based on < dosqc_1.0 > Density Of States and Quantum Conductance - Version 1.0 Marco Buongiorno Nardelli, January 2000. Reference: - M. Buongiorno Nardelli, "Electronic transport in extended systems: application to carbon nanotubes", Phys. Rev. B, vol. 60(11), 7828 (1999)


Uses

  • module~~w90_transport_mod~~UsesGraph module~w90_transport_mod w90_transport_mod module~w90_comms w90_comms module~w90_transport_mod->module~w90_comms module~w90_constants w90_constants module~w90_transport_mod->module~w90_constants module~w90_error w90_error module~w90_transport_mod->module~w90_error module~w90_comms->module~w90_constants module~w90_error_base w90_error_base module~w90_comms->module~w90_error_base module~w90_error->module~w90_comms module~w90_error->module~w90_error_base

Used by

  • module~~w90_transport_mod~~UsedByGraph module~w90_transport_mod w90_transport_mod proc~w90_transport w90_transport proc~w90_transport->module~w90_transport_mod

Variables

Type Visibility Attributes Name Initial
complex(kind=dp), private, parameter :: eta = (0.0_dp, 0.0005_dp)

small complex number

integer, private, parameter :: nterx = 50

nterx = # of maximum iteration to calculate transfer matrix


Subroutines

public subroutine tran_main(atom_data, dis_manifold, fermi_energy_list, ham_logical, kpt_latt, output_file, real_space_ham, transport, print_output, wannier_data, ws_region, w90_calculation, ham_k, ham_r, u_matrix, u_matrix_opt, eigval, real_lattice, wannier_centres_translated, irvec, mp_grid, ndegen, shift_vec, nrpts, num_bands, num_kpts, num_wann, rpt_origin, bands_plot_mode, have_disentangled, lsitesymmetry, seedname, stdout, timer, error, comm)

Main transport subroutine

Arguments

Type IntentOptional Attributes Name
type(atom_data_type), intent(in) :: atom_data
type(dis_manifold_type), intent(in) :: dis_manifold
real(kind=dp), intent(in), allocatable :: fermi_energy_list(:)
type(ham_logical_type), intent(inout) :: ham_logical
real(kind=dp), intent(in) :: kpt_latt(:,:)
type(output_file_type), intent(in) :: output_file
type(real_space_ham_type), intent(inout) :: real_space_ham
type(transport_type), intent(inout) :: transport
type(print_output_type), intent(in) :: print_output
type(wannier_data_type), intent(in) :: wannier_data
type(ws_region_type), intent(inout) :: ws_region
type(w90_calculation_type), intent(in) :: w90_calculation
complex(kind=dp), intent(inout), allocatable :: ham_k(:,:,:)
complex(kind=dp), intent(inout), allocatable :: ham_r(:,:,:)
complex(kind=dp), intent(in) :: u_matrix(:,:,:)
complex(kind=dp), intent(in) :: u_matrix_opt(:,:,:)
real(kind=dp), intent(in) :: eigval(:,:)
real(kind=dp), intent(in) :: real_lattice(3,3)
real(kind=dp), intent(inout), allocatable :: wannier_centres_translated(:,:)
integer, intent(inout), allocatable :: irvec(:,:)
integer, intent(in) :: mp_grid(3)
integer, intent(inout), allocatable :: ndegen(:)
integer, intent(inout), allocatable :: shift_vec(:,:)
integer, intent(inout) :: nrpts
integer, intent(in) :: num_bands
integer, intent(in) :: num_kpts
integer, intent(in) :: num_wann
integer, intent(inout) :: rpt_origin
character(len=*), intent(in) :: bands_plot_mode
logical, intent(in) :: have_disentangled
logical, intent(in) :: lsitesymmetry
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 tran_reduce_hr(real_space_ham, ham_r, hr_one_dim, real_lattice, irvec, mp_grid, irvec_max, nrpts, nrpts_one_dim, num_wann, one_dim_vec, timing_level, stdout, timer, error, comm)

Arguments

Type IntentOptional Attributes Name
type(real_space_ham_type), intent(in) :: real_space_ham
complex(kind=dp), intent(in) :: ham_r(:,:,:)
real(kind=dp), intent(inout), allocatable :: hr_one_dim(:,:,:)
real(kind=dp), intent(in) :: real_lattice(3,3)
integer, intent(in) :: irvec(:,:)
integer, intent(in) :: mp_grid(3)
integer, intent(inout) :: irvec_max
integer, intent(in) :: nrpts
integer, intent(inout) :: nrpts_one_dim
integer, intent(in) :: num_wann
integer, intent(inout) :: one_dim_vec
integer, intent(in) :: timing_level
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 tran_cut_hr_one_dim(real_space_ham, transport, print_output, hr_one_dim, real_lattice, wannier_centres_translated, mp_grid, irvec_max, num_pl, num_wann, one_dim_vec, stdout, timer)

Arguments

Type IntentOptional Attributes Name
type(real_space_ham_type), intent(inout) :: real_space_ham
type(transport_type), intent(inout) :: transport
type(print_output_type), intent(in) :: print_output
real(kind=dp), intent(inout) :: hr_one_dim(:,:,-irvec_max:)
real(kind=dp), intent(in) :: real_lattice(3,3)
real(kind=dp), intent(in) :: wannier_centres_translated(:,:)
integer, intent(in) :: mp_grid(3)
integer, intent(in) :: irvec_max
integer, intent(inout) :: num_pl
integer, intent(in) :: num_wann
integer, intent(in) :: one_dim_vec
integer, intent(in) :: stdout
type(timer_list_type), intent(inout) :: timer

private subroutine tran_get_ht(fermi_energy_list, transport, hB0, hB1, hr_one_dim, irvec_max, num_pl, num_wann, timing_level, seedname, timer, error, comm)

Construct h00 and h01

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in), allocatable :: fermi_energy_list(:)
type(transport_type), intent(inout) :: transport
real(kind=dp), intent(inout), allocatable :: hB0(:,:)
real(kind=dp), intent(inout), allocatable :: hB1(:,:)
real(kind=dp), intent(in) :: hr_one_dim(:,:,-irvec_max:)
integer, intent(in) :: irvec_max
integer, intent(in) :: num_pl
integer, intent(in) :: num_wann
integer, intent(in) :: timing_level
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

private subroutine tran_bulk(transport, hB0, hB1, timing_level, stdout, seedname, timer, error, comm)

Arguments

Type IntentOptional Attributes Name
type(transport_type), intent(in) :: transport
real(kind=dp), allocatable :: hB0(:,:)
real(kind=dp), allocatable :: hB1(:,:)
integer, intent(in) :: timing_level
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

private subroutine tran_lcr(transport, hC, hCR, hL0, hL1, hLC, hR0, hR1, timing_level, stdout, seedname, timer, error, comm)

Arguments

Type IntentOptional Attributes Name
type(transport_type), intent(in) :: transport
real(kind=dp), intent(inout), allocatable :: hC(:,:)
real(kind=dp), intent(inout), allocatable :: hCR(:,:)
real(kind=dp), intent(inout), allocatable :: hL0(:,:)
real(kind=dp), intent(inout), allocatable :: hL1(:,:)
real(kind=dp), intent(inout), allocatable :: hLC(:,:)
real(kind=dp), intent(inout), allocatable :: hR0(:,:)
real(kind=dp), intent(inout), allocatable :: hR1(:,:)
integer, intent(in) :: timing_level
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

private subroutine tran_transfer(tot, tott, h_00, h_01, e_scan_cmp, nxx, stdout, error, comm)

Arguments

Type IntentOptional Attributes Name
complex(kind=dp), intent(out) :: tot(nxx,nxx)
complex(kind=dp), intent(out) :: tott(nxx,nxx)
real(kind=dp), intent(in) :: h_00(nxx,nxx)
real(kind=dp), intent(in) :: h_01(nxx,nxx)
complex(kind=dp), intent(in) :: e_scan_cmp
integer, intent(in) :: nxx
integer, intent(in) :: stdout
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm

private subroutine tran_green(tot, tott, h_00, h_01, e_scan, g, igreen, invert, nxx, stdout, error, comm)

Arguments

Type IntentOptional Attributes Name
complex(kind=dp), intent(in) :: tot(nxx,nxx)
complex(kind=dp), intent(in) :: tott(nxx,nxx)
real(kind=dp), intent(in) :: h_00(nxx,nxx)
real(kind=dp), intent(in) :: h_01(nxx,nxx)
real(kind=dp), intent(in) :: e_scan
complex(kind=dp), intent(out) :: g(nxx,nxx)
integer, intent(in) :: igreen
integer, intent(in) :: invert
integer, intent(in) :: nxx
integer, intent(in) :: stdout
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm

private subroutine tran_read_htX(nxx, h_00, h_01, h_file, stdout, error, comm)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nxx
real(kind=dp), intent(out) :: h_00(nxx,nxx)
real(kind=dp), intent(out) :: h_01(nxx,nxx)
character(len=50), intent(in) :: h_file
integer, intent(in) :: stdout
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm

private subroutine tran_read_htC(nxx, h_00, h_file, stdout, error, comm)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nxx
real(kind=dp), intent(out) :: h_00(nxx,nxx)
character(len=50), intent(in) :: h_file
integer, intent(in) :: stdout
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm

private subroutine tran_read_htXY(nxx1, nxx2, h_01, h_file, stdout, error, comm)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nxx1
integer, intent(in) :: nxx2
real(kind=dp), intent(out) :: h_01(nxx1,nxx2)
character(len=50), intent(in) :: h_file
integer, intent(in) :: stdout
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm

private subroutine tran_find_integral_signatures(signatures, num_G, print_output, real_lattice, u_matrix_opt, u_matrix, num_bands, num_wann, have_disentangled, wannier_centres_translated, stdout, seedname, timer, error, comm)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(out), allocatable :: signatures(:,:)
integer, intent(out) :: num_G
type(print_output_type), intent(in) :: print_output
real(kind=dp), intent(in) :: real_lattice(3,3)
complex(kind=dp), intent(in) :: u_matrix_opt(:,:,:)
complex(kind=dp), intent(in) :: u_matrix(:,:,:)
integer, intent(in) :: num_bands
integer, intent(in) :: num_wann
logical, intent(in) :: have_disentangled
real(kind=dp), intent(in) :: wannier_centres_translated(:,:)
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

private subroutine tran_lcr_2c2_sort(signatures, num_G, pl_warning, transport, atom_data, wannier_data, real_space_ham, print_output, real_lattice, num_wann, mp_grid, ham_r, irvec, nrpts, wannier_centres_translated, one_dim_vec, nrpts_one_dim, num_pl, coord, tran_sorted_idx, hr_one_dim, irvec_max, write_xyz, stdout, seedname, timer, error, comm)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: signatures(:,:)
integer, intent(in) :: num_G
logical, intent(out) :: pl_warning
type(transport_type), intent(inout) :: transport
type(atom_data_type), intent(in) :: atom_data
type(wannier_data_type), intent(in) :: wannier_data
type(real_space_ham_type), intent(inout) :: real_space_ham
type(print_output_type), intent(in) :: print_output
real(kind=dp), intent(in) :: real_lattice(3,3)
integer, intent(in) :: num_wann
integer, intent(in) :: mp_grid(3)
complex(kind=dp), intent(in) :: ham_r(:,:,:)
integer, intent(in) :: irvec(:,:)
integer, intent(inout) :: nrpts
real(kind=dp), intent(inout) :: wannier_centres_translated(:,:)
integer, intent(inout) :: one_dim_vec
integer, intent(inout) :: nrpts_one_dim
integer, intent(inout) :: num_pl
integer, intent(inout) :: coord(3)
integer, intent(inout), allocatable :: tran_sorted_idx(:)
real(kind=dp), intent(inout), allocatable :: hr_one_dim(:,:,:)
integer, intent(inout) :: irvec_max
logical, intent(in) :: write_xyz
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

private subroutine master_sort_and_group(Array, Array_groups, subgroup_info, tran_group_threshold, print_output, wannier_centres_translated, coord, stdout, timer, error, comm)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(inout) :: Array(:,:)
integer, intent(in) :: Array_groups(:)
integer, intent(out), allocatable :: subgroup_info(:,:)
real(kind=dp), intent(in) :: tran_group_threshold
type(print_output_type), intent(in) :: print_output
real(kind=dp), intent(in) :: wannier_centres_translated(:,:)
integer, intent(in) :: coord(3)
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 sort(non_sorted, sorted)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(inout) :: non_sorted(:,:)
real(kind=dp), intent(out) :: sorted(:,:)

private subroutine group(array, array_groups, tran_group_threshold, error, comm)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: array(:,:)
integer, intent(out), allocatable :: array_groups(:)
real(kind=dp), intent(in) :: tran_group_threshold
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm

private subroutine check_and_sort_similar_centres(signatures, num_G, atom_data, transport, print_output, num_wann, wannier_centres_translated, coord, tran_sorted_idx, write_xyz, stdout, seedname, timer, error, comm)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: signatures(:,:)
integer, intent(in) :: num_G
type(atom_data_type), intent(in) :: atom_data
type(transport_type), intent(inout) :: transport
type(print_output_type), intent(in) :: print_output
integer, intent(in) :: num_wann
real(kind=dp), intent(in) :: wannier_centres_translated(:,:)
integer, intent(in) :: coord(3)
integer, intent(inout) :: tran_sorted_idx(:)
logical, intent(in) :: write_xyz
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

private subroutine tran_write_xyz(atom_data, transport, wannier_centres_translated, tran_sorted_idx, num_wann, seedname, stdout)

Arguments

Type IntentOptional Attributes Name
type(atom_data_type), intent(in) :: atom_data
type(transport_type), intent(inout) :: transport
real(kind=dp), intent(in) :: wannier_centres_translated(:,:)
integer, intent(in) :: tran_sorted_idx(:)
integer, intent(in) :: num_wann
character(len=50), intent(in) :: seedname
integer, intent(in) :: stdout

private subroutine tran_parity_enforce(signatures, print_output, transport, num_wann, tran_sorted_idx, hr_one_dim, irvec_max, stdout, timer)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(inout) :: signatures(:,:)
type(print_output_type), intent(in) :: print_output
type(transport_type), intent(in) :: transport
integer, intent(in) :: num_wann
integer, intent(in) :: tran_sorted_idx(:)
real(kind=dp), intent(inout) :: hr_one_dim(:,:,-irvec_max:)
integer, intent(in) :: irvec_max
integer, intent(in) :: stdout
type(timer_list_type), intent(inout) :: timer

private subroutine tran_lcr_2c2_build_ham(pl_warning, real_space_ham, fermi_energy_list, kpt_latt, num_wann, transport, print_output, real_lattice, mp_grid, ham_r, irvec, nrpts, wannier_centres_translated, one_dim_vec, nrpts_one_dim, num_pl, coord, tran_sorted_idx, hC, hCR, hL0, hL1, hLC, hR0, hR1, hr_one_dim, irvec_max, stdout, seedname, timer, error, comm)

Arguments

Type IntentOptional Attributes Name
logical, intent(in) :: pl_warning
type(real_space_ham_type), intent(inout) :: real_space_ham
real(kind=dp), intent(in), allocatable :: fermi_energy_list(:)
real(kind=dp), intent(in) :: kpt_latt(:,:)
integer, intent(in) :: num_wann
type(transport_type), intent(inout) :: transport
type(print_output_type), intent(in) :: print_output
real(kind=dp), intent(in) :: real_lattice(3,3)
integer, intent(in) :: mp_grid(3)
complex(kind=dp), intent(in) :: ham_r(:,:,:)
integer, intent(in) :: irvec(:,:)
integer, intent(inout) :: nrpts
real(kind=dp), intent(in) :: wannier_centres_translated(:,:)
integer, intent(inout) :: one_dim_vec
integer, intent(inout) :: nrpts_one_dim
integer, intent(inout) :: num_pl
integer, intent(in) :: coord(3)
integer, intent(in) :: tran_sorted_idx(:)
real(kind=dp), intent(inout), allocatable :: hC(:,:)
real(kind=dp), intent(inout), allocatable :: hCR(:,:)
real(kind=dp), intent(inout), allocatable :: hL0(:,:)
real(kind=dp), intent(inout), allocatable :: hL1(:,:)
real(kind=dp), intent(inout), allocatable :: hLC(:,:)
real(kind=dp), intent(inout), allocatable :: hR0(:,:)
real(kind=dp), intent(inout), allocatable :: hR1(:,:)
real(kind=dp), intent(inout), allocatable :: hr_one_dim(:,:,:)
integer, intent(inout) :: irvec_max
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