![]() |
(git:b77b4be)
|
Auxiliary routines for GW + Bethe-Salpeter for computing electronic excitations. More...
Functions/Subroutines | |
subroutine, public | mult_b_with_w (fm_mat_s_ij_bse, fm_mat_s_ia_bse, fm_mat_s_bar_ia_bse, fm_mat_s_bar_ij_bse, fm_mat_q_static_bse_gemm, dimen_ri, homo, virtual) |
Multiplies B-matrix (RI-3c-Integrals) with W (screening) to obtain \bar{B}. | |
subroutine, public | fm_general_add_bse (fm_out, fm_in, beta, nrow_secidx_in, ncol_secidx_in, nrow_secidx_out, ncol_secidx_out, unit_nr, reordering, mp2_env) |
Adds and reorders full matrices with a combined index structure, e.g. adding W_ij,ab to A_ia, jb which needs MPI communication. | |
subroutine, public | truncate_fm (fm_out, fm_in, ncol_in, nrow_out, ncol_out, unit_nr, mp2_env, nrow_offset, ncol_offset) |
Routine for truncating a full matrix as given by the energy cutoffs in the input file. Logic: Matrices have some dimension dimen_RI x nrow_in*ncol_in for the incoming (untruncated) matrix and dimen_RI x nrow_out*ncol_out for the truncated matrix. The truncation is done by resorting the indices via parallel communication. | |
subroutine, public | deallocate_matrices_bse (fm_mat_s_bar_ia_bse, fm_mat_s_bar_ij_bse, fm_mat_s_trunc, fm_mat_s_ij_trunc, fm_mat_s_ab_trunc, fm_mat_q_static_bse_gemm, mp2_env) |
... | |
subroutine, public | comp_eigvec_coeff_bse (fm_work, eig_vals, beta, gamma, do_transpose) |
Routine for computing the coefficients of the eigenvectors of the BSE matrix from a multiplication with the eigenvalues. | |
subroutine, public | sort_excitations (idx_prim, idx_sec, eigvec_entries) |
... | |
subroutine, public | estimate_bse_resources (homo_red, virtual_red, unit_nr, bse_abba, para_env, diag_runtime_est) |
Roughly estimates the needed runtime and memory during the BSE run. | |
subroutine, public | filter_eigvec_contrib (fm_eigvec, idx_homo, idx_virt, eigvec_entries, i_exc, virtual, num_entries, mp2_env) |
Filters eigenvector entries above a given threshold to describe excitations in the singleparticle basis. | |
subroutine, public | determine_cutoff_indices (eigenval, homo, virtual, homo_red, virt_red, homo_incl, virt_incl, mp2_env) |
Reads cutoffs for BSE from mp2_env and compares to energies in Eigenval to extract reduced homo/virtual and. | |
subroutine, public | truncate_bse_matrices (fm_mat_s_ia_bse, fm_mat_s_ij_bse, fm_mat_s_ab_bse, fm_mat_s_trunc, fm_mat_s_ij_trunc, fm_mat_s_ab_trunc, eigenval_scf, eigenval, eigenval_reduced, homo, virtual, dimen_ri, unit_nr, bse_lev_virt, homo_red, virt_red, mp2_env) |
Determines indices within the given energy cutoffs and truncates Eigenvalues and matrices. | |
subroutine, public | reshuffle_eigvec (fm_eigvec, fm_eigvec_reshuffled, homo, virtual, n_exc, do_transpose, unit_nr, mp2_env) |
... | |
subroutine, public | print_bse_nto_cubes (qs_env, mos, istate, info_approximation, stride, append_cube, print_section) |
Borrowed from the tddfpt module with slight adaptions. | |
subroutine, public | adapt_bse_input_params (homo, virtual, unit_nr, mp2_env, qs_env) |
Checks BSE input section and adapts them if necessary. | |
subroutine, public | get_multipoles_mo (fm_multipole_ai_trunc, fm_multipole_ij_trunc, fm_multipole_ab_trunc, qs_env, mo_coeff, rpoint, n_moments, homo_red, virtual_red, context_bse) |
... | |
subroutine, public | trace_exciton_descr (fm_a, fm_b, fm_c, alpha) |
Computes trace of form Tr{A^T B C} for exciton descriptors. | |
Auxiliary routines for GW + Bethe-Salpeter for computing electronic excitations.
subroutine, public bse_util::mult_b_with_w | ( | type(cp_fm_type), intent(in) | fm_mat_s_ij_bse, |
type(cp_fm_type), intent(in) | fm_mat_s_ia_bse, | ||
type(cp_fm_type), intent(out) | fm_mat_s_bar_ia_bse, | ||
type(cp_fm_type), intent(out) | fm_mat_s_bar_ij_bse, | ||
type(cp_fm_type), intent(in) | fm_mat_q_static_bse_gemm, | ||
integer, intent(in) | dimen_ri, | ||
integer, intent(in) | homo, | ||
integer, intent(in) | virtual | ||
) |
Multiplies B-matrix (RI-3c-Integrals) with W (screening) to obtain \bar{B}.
fm_mat_S_ij_bse | ... |
fm_mat_S_ia_bse | ... |
fm_mat_S_bar_ia_bse | ... |
fm_mat_S_bar_ij_bse | ... |
fm_mat_Q_static_bse_gemm | ... |
dimen_RI | ... |
homo | ... |
virtual | ... |
Definition at line 110 of file bse_util.F.
subroutine, public bse_util::fm_general_add_bse | ( | type(cp_fm_type), intent(inout) | fm_out, |
type(cp_fm_type), intent(in) | fm_in, | ||
real(kind=dp) | beta, | ||
integer, intent(in) | nrow_secidx_in, | ||
integer, intent(in) | ncol_secidx_in, | ||
integer, intent(in) | nrow_secidx_out, | ||
integer, intent(in) | ncol_secidx_out, | ||
integer | unit_nr, | ||
integer, dimension(4) | reordering, | ||
type(mp2_type), intent(in) | mp2_env | ||
) |
Adds and reorders full matrices with a combined index structure, e.g. adding W_ij,ab to A_ia, jb which needs MPI communication.
fm_out | ... |
fm_in | ... |
beta | ... |
nrow_secidx_in | ... |
ncol_secidx_in | ... |
nrow_secidx_out | ... |
ncol_secidx_out | ... |
unit_nr | ... |
reordering | ... |
mp2_env | ... |
Definition at line 197 of file bse_util.F.
subroutine, public bse_util::truncate_fm | ( | type(cp_fm_type), intent(inout) | fm_out, |
type(cp_fm_type), intent(in) | fm_in, | ||
integer | ncol_in, | ||
integer | nrow_out, | ||
integer | ncol_out, | ||
integer | unit_nr, | ||
type(mp2_type), intent(inout) | mp2_env, | ||
integer, intent(in), optional | nrow_offset, | ||
integer, intent(in), optional | ncol_offset | ||
) |
Routine for truncating a full matrix as given by the energy cutoffs in the input file. Logic: Matrices have some dimension dimen_RI x nrow_in*ncol_in for the incoming (untruncated) matrix and dimen_RI x nrow_out*ncol_out for the truncated matrix. The truncation is done by resorting the indices via parallel communication.
fm_out | ... |
fm_in | ... |
ncol_in | ... |
nrow_out | ... |
ncol_out | ... |
unit_nr | ... |
mp2_env | ... |
nrow_offset | ... |
ncol_offset | ... |
Definition at line 456 of file bse_util.F.
subroutine, public bse_util::deallocate_matrices_bse | ( | type(cp_fm_type), intent(inout) | fm_mat_s_bar_ia_bse, |
type(cp_fm_type), intent(inout) | fm_mat_s_bar_ij_bse, | ||
type(cp_fm_type), intent(inout) | fm_mat_s_trunc, | ||
type(cp_fm_type), intent(inout) | fm_mat_s_ij_trunc, | ||
type(cp_fm_type), intent(inout) | fm_mat_s_ab_trunc, | ||
type(cp_fm_type), intent(inout) | fm_mat_q_static_bse_gemm, | ||
type(mp2_type) | mp2_env | ||
) |
...
fm_mat_S_bar_ia_bse | ... |
fm_mat_S_bar_ij_bse | ... |
fm_mat_S_trunc | ... |
fm_mat_S_ij_trunc | ... |
fm_mat_S_ab_trunc | ... |
fm_mat_Q_static_bse_gemm | ... |
mp2_env | ... |
Definition at line 749 of file bse_util.F.
subroutine, public bse_util::comp_eigvec_coeff_bse | ( | type(cp_fm_type), intent(inout) | fm_work, |
real(kind=dp), dimension(:), intent(in), allocatable | eig_vals, | ||
real(kind=dp), intent(in) | beta, | ||
real(kind=dp), intent(in), optional | gamma, | ||
logical, intent(in), optional | do_transpose | ||
) |
Routine for computing the coefficients of the eigenvectors of the BSE matrix from a multiplication with the eigenvalues.
fm_work | ... |
eig_vals | ... |
beta | ... |
gamma | ... |
do_transpose | ... |
Definition at line 786 of file bse_util.F.
subroutine, public bse_util::sort_excitations | ( | integer, dimension(:), allocatable | idx_prim, |
integer, dimension(:), allocatable | idx_sec, | ||
real(kind=dp), dimension(:), allocatable | eigvec_entries | ||
) |
...
idx_prim | ... |
idx_sec | ... |
eigvec_entries | ... |
Definition at line 851 of file bse_util.F.
subroutine, public bse_util::estimate_bse_resources | ( | integer | homo_red, |
integer | virtual_red, | ||
integer | unit_nr, | ||
logical | bse_abba, | ||
type(mp_para_env_type), pointer | para_env, | ||
real(kind=dp) | diag_runtime_est | ||
) |
Roughly estimates the needed runtime and memory during the BSE run.
homo_red | ... |
virtual_red | ... |
unit_nr | ... |
bse_abba | ... |
para_env | ... |
diag_runtime_est | ... |
Definition at line 934 of file bse_util.F.
subroutine, public bse_util::filter_eigvec_contrib | ( | type(cp_fm_type), intent(in) | fm_eigvec, |
integer, dimension(:), allocatable | idx_homo, | ||
integer, dimension(:), allocatable | idx_virt, | ||
real(kind=dp), dimension(:), allocatable | eigvec_entries, | ||
integer | i_exc, | ||
integer | virtual, | ||
integer | num_entries, | ||
type(mp2_type), intent(inout) | mp2_env | ||
) |
Filters eigenvector entries above a given threshold to describe excitations in the singleparticle basis.
fm_eigvec | ... |
idx_homo | ... |
idx_virt | ... |
eigvec_entries | ... |
i_exc | ... |
virtual | ... |
num_entries | ... |
mp2_env | ... |
Definition at line 992 of file bse_util.F.
subroutine, public bse_util::determine_cutoff_indices | ( | real(kind=dp), dimension(:), intent(in) | eigenval, |
integer, intent(in) | homo, | ||
integer, intent(in) | virtual, | ||
integer, intent(out) | homo_red, | ||
integer, intent(out) | virt_red, | ||
integer, intent(out) | homo_incl, | ||
integer, intent(out) | virt_incl, | ||
type(mp2_type), intent(inout) | mp2_env | ||
) |
Reads cutoffs for BSE from mp2_env and compares to energies in Eigenval to extract reduced homo/virtual and.
Eigenval | array (1d) with energies, can be e.g. from GW or DFT |
homo | Total number of occupied orbitals |
virtual | Total number of unoccupied orbitals |
homo_red | Total number of occupied orbitals to include after cutoff |
virt_red | Total number of unoccupied orbitals to include after ctuoff |
homo_incl | First occupied index to include after cutoff |
virt_incl | Last unoccupied index to include after cutoff |
mp2_env | ... |
Definition at line 1125 of file bse_util.F.
subroutine, public bse_util::truncate_bse_matrices | ( | type(cp_fm_type), intent(in) | fm_mat_s_ia_bse, |
type(cp_fm_type), intent(in) | fm_mat_s_ij_bse, | ||
type(cp_fm_type), intent(in) | fm_mat_s_ab_bse, | ||
type(cp_fm_type), intent(inout) | fm_mat_s_trunc, | ||
type(cp_fm_type), intent(inout) | fm_mat_s_ij_trunc, | ||
type(cp_fm_type), intent(inout) | fm_mat_s_ab_trunc, | ||
real(kind=dp), dimension(:) | eigenval_scf, | ||
real(kind=dp), dimension(:) | eigenval, | ||
real(kind=dp), dimension(:), allocatable | eigenval_reduced, | ||
integer, intent(in) | homo, | ||
integer, intent(in) | virtual, | ||
integer, intent(in) | dimen_ri, | ||
integer, intent(in) | unit_nr, | ||
integer, intent(in) | bse_lev_virt, | ||
integer, intent(out) | homo_red, | ||
integer, intent(out) | virt_red, | ||
type(mp2_type), intent(inout) | mp2_env | ||
) |
Determines indices within the given energy cutoffs and truncates Eigenvalues and matrices.
fm_mat_S_ia_bse | ... |
fm_mat_S_ij_bse | ... |
fm_mat_S_ab_bse | ... |
fm_mat_S_trunc | ... |
fm_mat_S_ij_trunc | ... |
fm_mat_S_ab_trunc | ... |
Eigenval_scf | ... |
Eigenval | ... |
Eigenval_reduced | ... |
homo | ... |
virtual | ... |
dimen_RI | ... |
unit_nr | ... |
bse_lev_virt | ... |
homo_red | ... |
virt_red | ... |
mp2_env | ... |
Definition at line 1204 of file bse_util.F.
subroutine, public bse_util::reshuffle_eigvec | ( | type(cp_fm_type), intent(in) | fm_eigvec, |
type(cp_fm_type), intent(inout) | fm_eigvec_reshuffled, | ||
integer, intent(in) | homo, | ||
integer, intent(in) | virtual, | ||
integer, intent(in) | n_exc, | ||
logical, intent(in) | do_transpose, | ||
integer, intent(in) | unit_nr, | ||
type(mp2_type), intent(inout) | mp2_env | ||
) |
...
fm_eigvec | ... |
fm_eigvec_reshuffled | ... |
homo | ... |
virtual | ... |
n_exc | ... |
do_transpose | ... |
unit_nr | ... |
mp2_env | ... |
Definition at line 1349 of file bse_util.F.
subroutine, public bse_util::print_bse_nto_cubes | ( | type(qs_environment_type), pointer | qs_env, |
type(mo_set_type), dimension(:), intent(in) | mos, | ||
integer, intent(in) | istate, | ||
character(len=10) | info_approximation, | ||
integer, dimension(:), pointer | stride, | ||
logical, intent(in) | append_cube, | ||
type(section_vals_type), pointer | print_section | ||
) |
Borrowed from the tddfpt module with slight adaptions.
qs_env | ... |
mos | ... |
istate | ... |
info_approximation | ... |
stride | ... |
append_cube | ... |
print_section | ... |
Definition at line 1423 of file bse_util.F.
subroutine, public bse_util::adapt_bse_input_params | ( | integer, intent(in) | homo, |
integer, intent(in) | virtual, | ||
integer, intent(in) | unit_nr, | ||
type(mp2_type) | mp2_env, | ||
type(qs_environment_type), pointer | qs_env | ||
) |
Checks BSE input section and adapts them if necessary.
homo | ... |
virtual | ... |
unit_nr | ... |
mp2_env | ... |
qs_env | ... |
Definition at line 1519 of file bse_util.F.
subroutine, public bse_util::get_multipoles_mo | ( | type(cp_fm_type), dimension(:), intent(inout), allocatable | fm_multipole_ai_trunc, |
type(cp_fm_type), dimension(:), intent(inout), allocatable | fm_multipole_ij_trunc, | ||
type(cp_fm_type), dimension(:), intent(inout), allocatable | fm_multipole_ab_trunc, | ||
type(qs_environment_type), pointer | qs_env, | ||
type(cp_fm_type), dimension(:), intent(in) | mo_coeff, | ||
real(dp), dimension(:), intent(inout), allocatable | rpoint, | ||
integer, intent(in) | n_moments, | ||
integer, intent(in) | homo_red, | ||
integer, intent(in) | virtual_red, | ||
type(cp_blacs_env_type), pointer | context_bse | ||
) |
...
fm_multipole_ai_trunc | ... |
fm_multipole_ij_trunc | ... |
fm_multipole_ab_trunc | ... |
qs_env | ... |
mo_coeff | ... |
rpoint | ... |
n_moments | ... |
homo_red | ... |
virtual_red | ... |
context_BSE | ... |
Definition at line 1712 of file bse_util.F.
subroutine, public bse_util::trace_exciton_descr | ( | type(cp_fm_type), intent(in) | fm_a, |
type(cp_fm_type), intent(in) | fm_b, | ||
type(cp_fm_type), intent(in) | fm_c, | ||
real(kind=dp), intent(out) | alpha | ||
) |
Computes trace of form Tr{A^T B C} for exciton descriptors.
fm_A | Full Matrix, typically X or Y, in format homo x virtual |
fm_B | ... |
fm_C | ... |
alpha | ... |
Definition at line 1892 of file bse_util.F.