![]() |
(git:b77b4be)
|
lower level routines for linear scaling SCF More...
Functions/Subroutines | |
subroutine, public | ls_scf_init_matrix_s (matrix_s, ls_scf_env) |
initialize S matrix related properties (sqrt, inverse...) Might be factored-out since this seems common code with the other SCF. | |
subroutine, public | compute_matrix_preconditioner (matrix_s, preconditioner_type, ls_mstruct, matrix_bs_sqrt, matrix_bs_sqrt_inv, threshold, order, eps_lanczos, max_iter_lanczos) |
compute for a block positive definite matrix s (bs) the sqrt(bs) and inv(sqrt(bs)) | |
subroutine, public | apply_matrix_preconditioner (matrix, direction, matrix_bs_sqrt, matrix_bs_sqrt_inv) |
apply a preconditioner either forward (precondition) inv(sqrt(bs)) * A * inv(sqrt(bs)) backward (restore to old form) sqrt(bs) * A * sqrt(bs) | |
subroutine, public | density_matrix_sign (matrix_p, mu, fixed_mu, sign_method, sign_order, matrix_ks, matrix_s, matrix_s_inv, nelectron, threshold, sign_symmetric, submatrix_sign_method, matrix_s_sqrt_inv) |
compute the density matrix with a trace that is close to nelectron. take a mu as input, and improve by bisection as needed. | |
subroutine, public | density_matrix_sign_fixed_mu (matrix_p, trace, mu, sign_method, sign_order, matrix_ks, matrix_s, matrix_s_inv, threshold, sign_symmetric, submatrix_sign_method, matrix_s_sqrt_inv) |
for a fixed mu, compute the corresponding density matrix and its trace | |
subroutine, public | density_matrix_trs4 (matrix_p, matrix_ks, matrix_s_sqrt_inv, nelectron, threshold, e_homo, e_lumo, e_mu, dynamic_threshold, matrix_ks_deviation, max_iter_lanczos, eps_lanczos, converged, iounit) |
compute the density matrix using a trace-resetting algorithm | |
subroutine, public | density_matrix_tc2 (matrix_p, matrix_ks, matrix_s_sqrt_inv, nelectron, threshold, e_homo, e_lumo, non_monotonic, eps_lanczos, max_iter_lanczos, iounit) |
compute the density matrix using a non monotonic trace conserving algorithm based on SIAM DOI. 10.1137/130911585. 2014.04 created [Jonathan Mullin] | |
subroutine, public | compute_homo_lumo (matrix_k, matrix_p, eps_min, eps_max, threshold, max_iter_lanczos, eps_lanczos, homo, lumo, unit_nr) |
compute the homo and lumo given a KS matrix and a density matrix in the orthonormalized basis and the eps_min and eps_max, min and max eigenvalue of the ks matrix | |
lower level routines for linear scaling SCF
subroutine, public dm_ls_scf_methods::ls_scf_init_matrix_s | ( | type(dbcsr_type) | matrix_s, |
type(ls_scf_env_type) | ls_scf_env | ||
) |
initialize S matrix related properties (sqrt, inverse...) Might be factored-out since this seems common code with the other SCF.
matrix_s | ... |
ls_scf_env | ... |
Definition at line 73 of file dm_ls_scf_methods.F.
subroutine, public dm_ls_scf_methods::compute_matrix_preconditioner | ( | type(dbcsr_type), intent(inout) | matrix_s, |
integer | preconditioner_type, | ||
type(ls_mstruct_type) | ls_mstruct, | ||
type(dbcsr_type), intent(inout) | matrix_bs_sqrt, | ||
type(dbcsr_type), intent(inout) | matrix_bs_sqrt_inv, | ||
real(kind=dp) | threshold, | ||
integer | order, | ||
real(kind=dp) | eps_lanczos, | ||
integer | max_iter_lanczos | ||
) |
compute for a block positive definite matrix s (bs) the sqrt(bs) and inv(sqrt(bs))
matrix_s | ... |
preconditioner_type | ... |
ls_mstruct | ... |
matrix_bs_sqrt | ... |
matrix_bs_sqrt_inv | ... |
threshold | ... |
order | ... |
eps_lanczos | ... |
max_iter_lanczos | ... |
Definition at line 216 of file dm_ls_scf_methods.F.
subroutine, public dm_ls_scf_methods::apply_matrix_preconditioner | ( | type(dbcsr_type), intent(inout) | matrix, |
character(len=*) | direction, | ||
type(dbcsr_type), intent(inout) | matrix_bs_sqrt, | ||
type(dbcsr_type), intent(inout) | matrix_bs_sqrt_inv | ||
) |
apply a preconditioner either forward (precondition) inv(sqrt(bs)) * A * inv(sqrt(bs)) backward (restore to old form) sqrt(bs) * A * sqrt(bs)
matrix | ... |
direction | ... |
matrix_bs_sqrt | ... |
matrix_bs_sqrt_inv | ... |
Definition at line 318 of file dm_ls_scf_methods.F.
subroutine, public dm_ls_scf_methods::density_matrix_sign | ( | type(dbcsr_type), intent(inout) | matrix_p, |
real(kind=dp), intent(inout) | mu, | ||
logical | fixed_mu, | ||
integer | sign_method, | ||
integer | sign_order, | ||
type(dbcsr_type), intent(inout) | matrix_ks, | ||
type(dbcsr_type), intent(inout) | matrix_s, | ||
type(dbcsr_type), intent(inout) | matrix_s_inv, | ||
integer, intent(in) | nelectron, | ||
real(kind=dp), intent(in) | threshold, | ||
logical, optional | sign_symmetric, | ||
integer, optional | submatrix_sign_method, | ||
type(dbcsr_type), intent(in), optional | matrix_s_sqrt_inv | ||
) |
compute the density matrix with a trace that is close to nelectron. take a mu as input, and improve by bisection as needed.
matrix_p | ... |
mu | ... |
fixed_mu | ... |
sign_method | ... |
sign_order | ... |
matrix_ks | ... |
matrix_s | ... |
matrix_s_inv | ... |
nelectron | ... |
threshold | ... |
sign_symmetric | ... |
submatrix_sign_method | ... |
matrix_s_sqrt_inv | ... |
Definition at line 374 of file dm_ls_scf_methods.F.
subroutine, public dm_ls_scf_methods::density_matrix_sign_fixed_mu | ( | type(dbcsr_type), intent(inout) | matrix_p, |
real(kind=dp), intent(out) | trace, | ||
real(kind=dp), intent(inout) | mu, | ||
integer | sign_method, | ||
integer | sign_order, | ||
type(dbcsr_type), intent(inout) | matrix_ks, | ||
type(dbcsr_type), intent(inout) | matrix_s, | ||
type(dbcsr_type), intent(inout) | matrix_s_inv, | ||
real(kind=dp), intent(in) | threshold, | ||
logical | sign_symmetric, | ||
integer | submatrix_sign_method, | ||
type(dbcsr_type), intent(in), optional | matrix_s_sqrt_inv | ||
) |
for a fixed mu, compute the corresponding density matrix and its trace
matrix_p | ... |
trace | ... |
mu | ... |
sign_method | ... |
sign_order | ... |
matrix_ks | ... |
matrix_s | ... |
matrix_s_inv | ... |
threshold | ... |
sign_symmetric | ... |
submatrix_sign_method | ... |
matrix_s_sqrt_inv | ... |
Definition at line 484 of file dm_ls_scf_methods.F.
subroutine, public dm_ls_scf_methods::density_matrix_trs4 | ( | type(dbcsr_type), intent(inout) | matrix_p, |
type(dbcsr_type), intent(in) | matrix_ks, | ||
type(dbcsr_type), intent(in) | matrix_s_sqrt_inv, | ||
integer, intent(in) | nelectron, | ||
real(kind=dp), intent(in) | threshold, | ||
real(kind=dp), intent(inout) | e_homo, | ||
real(kind=dp), intent(inout) | e_lumo, | ||
real(kind=dp), intent(inout) | e_mu, | ||
logical, intent(in), optional | dynamic_threshold, | ||
type(dbcsr_type), intent(inout), optional | matrix_ks_deviation, | ||
integer, intent(in) | max_iter_lanczos, | ||
real(kind=dp), intent(in) | eps_lanczos, | ||
logical, intent(out), optional | converged, | ||
integer, intent(in), optional | iounit | ||
) |
compute the density matrix using a trace-resetting algorithm
matrix_p | ... |
matrix_ks | ... |
matrix_s_sqrt_inv | ... |
nelectron | ... |
threshold | ... |
e_homo | ... |
e_lumo | ... |
e_mu | ... |
dynamic_threshold | ... |
matrix_ks_deviation | ... |
max_iter_lanczos | ... |
eps_lanczos | ... |
converged | ... |
iounit | ... |
Definition at line 725 of file dm_ls_scf_methods.F.
subroutine, public dm_ls_scf_methods::density_matrix_tc2 | ( | type(dbcsr_type), intent(inout) | matrix_p, |
type(dbcsr_type), intent(in) | matrix_ks, | ||
type(dbcsr_type), intent(in) | matrix_s_sqrt_inv, | ||
integer, intent(in) | nelectron, | ||
real(kind=dp), intent(in) | threshold, | ||
real(kind=dp), intent(inout) | e_homo, | ||
real(kind=dp), intent(inout) | e_lumo, | ||
logical, intent(in), optional | non_monotonic, | ||
real(kind=dp), intent(in) | eps_lanczos, | ||
integer, intent(in) | max_iter_lanczos, | ||
integer, intent(in), optional | iounit | ||
) |
compute the density matrix using a non monotonic trace conserving algorithm based on SIAM DOI. 10.1137/130911585. 2014.04 created [Jonathan Mullin]
matrix_p | ... |
matrix_ks | ... |
matrix_s_sqrt_inv | ... |
nelectron | ... |
threshold | ... |
e_homo | ... |
e_lumo | ... |
non_monotonic | ... |
eps_lanczos | ... |
max_iter_lanczos | ... |
iounit | ... |
Definition at line 1027 of file dm_ls_scf_methods.F.
subroutine, public dm_ls_scf_methods::compute_homo_lumo | ( | type(dbcsr_type) | matrix_k, |
type(dbcsr_type) | matrix_p, | ||
real(kind=dp) | eps_min, | ||
real(kind=dp) | eps_max, | ||
real(kind=dp) | threshold, | ||
integer, intent(in) | max_iter_lanczos, | ||
real(kind=dp), intent(in) | eps_lanczos, | ||
real(kind=dp) | homo, | ||
real(kind=dp) | lumo, | ||
integer | unit_nr | ||
) |
compute the homo and lumo given a KS matrix and a density matrix in the orthonormalized basis and the eps_min and eps_max, min and max eigenvalue of the ks matrix
matrix_k | ... |
matrix_p | ... |
eps_min | ... |
eps_max | ... |
threshold | ... |
max_iter_lanczos | ... |
eps_lanczos | ... |
homo | ... |
lumo | ... |
unit_nr | ... |
Definition at line 1298 of file dm_ls_scf_methods.F.