(git:6344619)
Loading...
Searching...
No Matches
low_rank_preconditioner_unittest.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
9 USE kinds, ONLY: dp
12
13 IMPLICIT NONE
14
15 REAL(kind=dp), PARAMETER :: tolerance = 2.0e-14_dp
16 INTEGER :: selected_rank
17 REAL(kind=dp), DIMENSION(7) :: full_eigenvalues
18
19 full_eigenvalues = [-0.8_dp, -0.2_dp, 0.2_dp, 0.4_dp, 0.7_dp, 0.7_dp, 1.4_dp]
20 selected_rank = low_rank_select_rank(full_eigenvalues, 2, 3, 1.0e-8_dp)
21 IF (selected_rank /= 2) error stop "Rank cap split a degenerate complementary manifold"
22 selected_rank = low_rank_select_rank(full_eigenvalues, 2, 5, 1.0e-8_dp)
23 IF (selected_rank /= 5) error stop "Full complementary space did not retain its rank"
24 IF (abs(low_rank_inverse_weight(1.5_dp, 0.0_dp, 0.08_dp) - 2.0_dp/3.0_dp) > tolerance) THEN
25 error stop "Common-reference inverse weight differs from the spectral model"
26 END IF
27
program low_rank_preconditioner_unittest
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Small algebraic helpers for the rotationally covariant low-rank OT preconditioner.
pure elemental real(kind=dp) function, public low_rank_inverse_weight(eigenvalue, reference, energy_gap)
Spectral inverse weight relative to a common occupied reference level.
pure integer function, public low_rank_select_rank(eigenvalues, nocc, max_rank, degeneracy_tolerance)
Select a bounded spectral rank without cutting a degenerate boundary manifold.