Octopus
|
Data Types | |
type | batch_pointer_t |
type | eigen_chebyshev_t |
Functions/Subroutines | |
subroutine, public | dchebyshev_filter_solver (namespace, sdiag, mesh, st, hm, ik, subspace_tol, filter_params, scf_iter, prior_residuals) |
Driver for Chebyshev filter-based solver. More... | |
subroutine | dfirstscf_iterative_chebyshev_filter (namespace, sdiag, mesh, st, hm, ik, tolerance, filter_params) |
Iterative application of Chebyshev filter, for use with the first SCF step. More... | |
subroutine | dchebyshev_filter (namespace, mesh, st, hm, degree, bounds, ik) |
Chebyshev Filter. More... | |
subroutine, public | zchebyshev_filter_solver (namespace, sdiag, mesh, st, hm, ik, subspace_tol, filter_params, scf_iter, prior_residuals) |
Driver for Chebyshev filter-based solver. More... | |
subroutine | zfirstscf_iterative_chebyshev_filter (namespace, sdiag, mesh, st, hm, ik, tolerance, filter_params) |
Iterative application of Chebyshev filter, for use with the first SCF step. More... | |
subroutine | zchebyshev_filter (namespace, mesh, st, hm, degree, bounds, ik) |
Chebyshev Filter. More... | |
Variables | |
type(eigen_chebyshev_t), public, protected | default_chebyshev_params = eigen_chebyshev_t(5, 25, M_HALF, 5, .true.) |
Default Chebyshev input parameters Arguments 1 and 2 taken from 10.1016/j.jcp.2006.03.017 Argument 3. If this were a fixed value for the whole calculation, 10 would be reasonable (see 10.1016/j.jcp.2014.06.056) however as the default is to use this as a max value, which is optimised by Octopus, any large value is reasonable. Argument 4 set empirically. A value > 2 results in a more accurate density. Values > 6 show minimal to no improvement in the number of SCF steps. More... | |
subroutine, public eigen_chebyshev_oct_m::dchebyshev_filter_solver | ( | type(namespace_t), intent(in) | namespace, |
type(subspace_t), intent(in) | sdiag, | ||
class(mesh_t), intent(in) | mesh, | ||
type(states_elec_t), intent(inout) | st, | ||
type(hamiltonian_elec_t), intent(in) | hm, | ||
integer, intent(in) | ik, | ||
real(real64), intent(in) | subspace_tol, | ||
type(eigen_chebyshev_t), intent(in) | filter_params, | ||
integer, intent(in) | scf_iter, | ||
real(real64), dimension(:), intent(in) | prior_residuals | ||
) |
Driver for Chebyshev filter-based solver.
This routine is implemented according to Algorithm 4.1 in the paper: ""Chebyshev-filtered subspace iteration method free of sparse diagonalization for solving the Kohn–Sham equation"". http:
The scaled Chebyshev algorithm is always utilised, as we get an estimate of the lowest eigenvalue of H from the lowest Ritz value of the prior step. The reason for the scaling is to prevent a potential overflow, which may happen if the filter degree is large or if the smallest eigenvalue is mapped far away from −1.
For the first SCF step, a Chebyshev polynomial of filter_paramsdegree is applied filter_paramsn_iter times to a set of search vectors found from the initial guess for the density.
[in] | namespace | Calling namespace |
[in] | sdiag | Subspace diagonalisation choice |
[in] | mesh | Real-space mesh |
[in,out] | st | Eigenstates |
[in] | hm | Hamiltonian |
[in] | ik | k-point index |
[in] | subspace_tol | Subspace iterative solver tolerance |
[in] | filter_params | Chebyshev filter parameters |
[in] | scf_iter | SCF iteration |
[in] | prior_residuals | Eigenvalue residuals from prior SCF step |
Definition at line 210 of file eigen_chebyshev.F90.
|
private |
Iterative application of Chebyshev filter, for use with the first SCF step.
The initial search vectors are found using the initial for the density (sum of atomic densities LCAO, etc), and returned in st: stgrouppsib.
[in] | namespace | Calling namespace |
[in] | sdiag | Subspace diagonalisation choice |
[in] | mesh | Real-space mesh |
[in,out] | st | Initial guess at search vectors, and much more |
[in] | hm | Hamiltonian |
[in] | ik | k-point index |
[in] | tolerance | Subspace iterative solver tolerance |
[in] | filter_params | Chebyshev filter parameters |
Definition at line 266 of file eigen_chebyshev.F90.
|
private |
Chebyshev Filter.
Filter an eigenspectrum by an m-degree Chebyshev polynomial that dampens on the interval [a,b]. Based on algorithm 3.2 of ""Chebyshev-filtered subspace iteration method free of sparse diagonalization for solving the Kohn–Sham equation"". http:
Application of the simple or scaled filter depends upon the choice of bounds. In the simple case, sigma will reduce to 1.
[in] | namespace | Calling namespace |
[in] | mesh | Real-space mesh |
[in] | hm | Hamiltonian |
[in] | degree | Chebyshev polynomial degree, per block |
[in] | bounds | Polynomial filter bounds of the subspace to dampen |
[in] | ik | k-point index |
[in,out] | st | KS containing input eigenvectors and |
Definition at line 372 of file eigen_chebyshev.F90.
subroutine, public eigen_chebyshev_oct_m::zchebyshev_filter_solver | ( | type(namespace_t), intent(in) | namespace, |
type(subspace_t), intent(in) | sdiag, | ||
class(mesh_t), intent(in) | mesh, | ||
type(states_elec_t), intent(inout) | st, | ||
type(hamiltonian_elec_t), intent(in) | hm, | ||
integer, intent(in) | ik, | ||
real(real64), intent(in) | subspace_tol, | ||
type(eigen_chebyshev_t), intent(in) | filter_params, | ||
integer, intent(in) | scf_iter, | ||
real(real64), dimension(:), intent(in) | prior_residuals | ||
) |
Driver for Chebyshev filter-based solver.
This routine is implemented according to Algorithm 4.1 in the paper: ""Chebyshev-filtered subspace iteration method free of sparse diagonalization for solving the Kohn–Sham equation"". http:
The scaled Chebyshev algorithm is always utilised, as we get an estimate of the lowest eigenvalue of H from the lowest Ritz value of the prior step. The reason for the scaling is to prevent a potential overflow, which may happen if the filter degree is large or if the smallest eigenvalue is mapped far away from −1.
For the first SCF step, a Chebyshev polynomial of filter_paramsdegree is applied filter_paramsn_iter times to a set of search vectors found from the initial guess for the density.
[in] | namespace | Calling namespace |
[in] | sdiag | Subspace diagonalisation choice |
[in] | mesh | Real-space mesh |
[in,out] | st | Eigenstates |
[in] | hm | Hamiltonian |
[in] | ik | k-point index |
[in] | subspace_tol | Subspace iterative solver tolerance |
[in] | filter_params | Chebyshev filter parameters |
[in] | scf_iter | SCF iteration |
[in] | prior_residuals | Eigenvalue residuals from prior SCF step |
Definition at line 547 of file eigen_chebyshev.F90.
|
private |
Iterative application of Chebyshev filter, for use with the first SCF step.
The initial search vectors are found using the initial for the density (sum of atomic densities LCAO, etc), and returned in st: stgrouppsib.
[in] | namespace | Calling namespace |
[in] | sdiag | Subspace diagonalisation choice |
[in] | mesh | Real-space mesh |
[in,out] | st | Initial guess at search vectors, and much more |
[in] | hm | Hamiltonian |
[in] | ik | k-point index |
[in] | tolerance | Subspace iterative solver tolerance |
[in] | filter_params | Chebyshev filter parameters |
Definition at line 603 of file eigen_chebyshev.F90.
|
private |
Chebyshev Filter.
Filter an eigenspectrum by an m-degree Chebyshev polynomial that dampens on the interval [a,b]. Based on algorithm 3.2 of ""Chebyshev-filtered subspace iteration method free of sparse diagonalization for solving the Kohn–Sham equation"". http:
Application of the simple or scaled filter depends upon the choice of bounds. In the simple case, sigma will reduce to 1.
[in] | namespace | Calling namespace |
[in] | mesh | Real-space mesh |
[in] | hm | Hamiltonian |
[in] | degree | Chebyshev polynomial degree, per block |
[in] | bounds | Polynomial filter bounds of the subspace to dampen |
[in] | ik | k-point index |
[in,out] | st | KS containing input eigenvectors and |
Definition at line 709 of file eigen_chebyshev.F90.
type(eigen_chebyshev_t), public, protected eigen_chebyshev_oct_m::default_chebyshev_params = eigen_chebyshev_t(5, 25, M_HALF, 5, .true.) |
Default Chebyshev input parameters Arguments 1 and 2 taken from 10.1016/j.jcp.2006.03.017 Argument 3. If this were a fixed value for the whole calculation, 10 would be reasonable (see 10.1016/j.jcp.2014.06.056) however as the default is to use this as a max value, which is optimised by Octopus, any large value is reasonable. Argument 4 set empirically. A value > 2 results in a more accurate density. Values > 6 show minimal to no improvement in the number of SCF steps.
Definition at line 149 of file eigen_chebyshev.F90.