13 USE dlaf_fortran,
ONLY: dlaf_pzheevd, &
18#include "../base/base_uses.f90"
24 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'cp_cfm_dlaf_api'
43 CHARACTER,
INTENT(IN) :: uplo
44 INTEGER,
INTENT(IN) :: n
45 COMPLEX(KIND=dp),
DIMENSION(:, :),
TARGET :: a
46 INTEGER,
INTENT(IN) :: ia, ja
47 INTEGER,
DIMENSION(9) :: desca
48 INTEGER,
TARGET :: info
50 CHARACTER(len=*),
PARAMETER :: routinen =
'cp_cfm_pzpotrf_dlaf'
54 CALL timeset(routinen, handle)
56 CALL dlaf_pzpotrf(uplo, n, a, ia, ja, desca, info)
65 cpabort(
"CP2K compiled without the DLA-Future library.")
79 TYPE(
cp_cfm_type),
INTENT(IN) :: matrix, eigenvectors
80 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT) :: eigenvalues
82 CHARACTER(LEN=*),
PARAMETER :: routinen =
'cp_cfm_diag_dlaf'
84 INTEGER :: handle, n, nmo
85 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:),
TARGET :: eig
87 CALL timeset(routinen, handle)
89 n = matrix%matrix_struct%nrow_global
92 CALL cp_cfm_diag_dlaf_base(matrix, eigenvectors, eig)
94 nmo =
SIZE(eigenvalues, 1)
96 eigenvalues(1:n) = eig(1:n)
98 eigenvalues(1:nmo) = eig(1:nmo)
103 CALL timestop(handle)
117 TYPE(
cp_cfm_type),
INTENT(IN) :: amatrix, bmatrix, eigenvectors
118 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT) :: eigenvalues
120 CHARACTER(LEN=*),
PARAMETER :: routinen =
'cp_cfm_diag_gen_dlaf'
122 INTEGER :: handle, n, nmo
123 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:),
TARGET :: eig
125 CALL timeset(routinen, handle)
127 n = amatrix%matrix_struct%nrow_global
130 CALL cp_cfm_diag_gen_dlaf_base(amatrix, bmatrix, eigenvectors, eig)
132 nmo =
SIZE(eigenvalues, 1)
134 eigenvalues(1:n) = eig(1:n)
136 eigenvalues(1:nmo) = eig(1:nmo)
141 CALL timestop(handle)
152 SUBROUTINE cp_cfm_diag_dlaf_base(matrix, eigenvectors, eigenvalues)
153 TYPE(
cp_cfm_type),
INTENT(IN) :: matrix, eigenvectors
154 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT),
TARGET :: eigenvalues
156 CHARACTER(len=*),
PARAMETER :: dlaf_name =
'pzheevd_dlaf', routinen =
'cp_cfm_diag_dlaf_base'
157 CHARACTER,
PARAMETER :: uplo =
'L'
159 CHARACTER(LEN=100) :: message
160 COMPLEX(KIND=dp),
DIMENSION(:, :),
POINTER :: a, z
161 INTEGER :: dlaf_handle, handle, n
162 INTEGER,
DIMENSION(9) :: desca, descz
163 INTEGER,
TARGET :: info
165 CALL timeset(routinen, handle)
172 n = matrix%matrix_struct%nrow_global
174 a => matrix%local_data
175 z => eigenvectors%local_data
177 desca(:) = matrix%matrix_struct%descriptor(:)
178 descz(:) = eigenvectors%matrix_struct%descriptor(:)
181 CALL timeset(dlaf_name, dlaf_handle)
183 CALL dlaf_pzheevd(uplo, n, a, 1, 1, desca, eigenvalues, z, 1, 1, descz, info)
185 CALL timestop(dlaf_handle)
188 WRITE (message,
"(A,I0,A)")
"ERROR in DLAF_PZHEEVD: Eigensolver failed (INFO = ", info,
")"
189 cpabort(trim(message))
197 mark_used(eigenvectors)
198 mark_used(eigenvalues)
202 mark_used(dlaf_handle)
205 cpabort(
"CP2K compiled without DLAF library.")
208 CALL timestop(handle)
210 END SUBROUTINE cp_cfm_diag_dlaf_base
220 SUBROUTINE cp_cfm_diag_gen_dlaf_base(amatrix, bmatrix, eigenvectors, eigenvalues)
221 TYPE(
cp_cfm_type),
INTENT(IN) :: amatrix, bmatrix, eigenvectors
222 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT),
TARGET :: eigenvalues
224 CHARACTER(len=*),
PARAMETER :: dlaf_name =
'pzhegvd_dlaf', &
225 routinen =
'cp_cfm_diag_gen_dlaf_base'
226 CHARACTER,
PARAMETER :: uplo =
'L'
228 CHARACTER(LEN=100) :: message
229 COMPLEX(KIND=dp),
DIMENSION(:, :),
POINTER :: a, b, z
230 INTEGER :: dlaf_handle, handle, n
231 INTEGER,
DIMENSION(9) :: desca, descb, descz
232 INTEGER,
TARGET :: info
234 CALL timeset(routinen, handle)
242 n = amatrix%matrix_struct%nrow_global
244 a => amatrix%local_data
245 b => bmatrix%local_data
246 z => eigenvectors%local_data
248 desca(:) = amatrix%matrix_struct%descriptor(:)
249 descb(:) = bmatrix%matrix_struct%descriptor(:)
250 descz(:) = eigenvectors%matrix_struct%descriptor(:)
253 CALL timeset(dlaf_name, dlaf_handle)
255 CALL dlaf_pzhegvd(uplo, n, a, 1, 1, desca, b, 1, 1, descb, eigenvalues, z, 1, 1, descz, info)
257 CALL timestop(dlaf_handle)
260 WRITE (message,
"(A,I0,A)")
"ERROR in DLAF_PZHEGVD: Eigensolver failed (INFO = ", info,
")"
261 cpabort(trim(message))
272 mark_used(eigenvectors)
273 mark_used(eigenvalues)
277 mark_used(dlaf_handle)
280 cpabort(
"CP2K compiled without DLAF library.")
283 CALL timestop(handle)
285 END SUBROUTINE cp_cfm_diag_gen_dlaf_base
Basic linear algebra operations for complex full matrices.
subroutine, public cp_cfm_uplo_to_full(matrix, workspace, uplo)
...
subroutine, public cp_cfm_diag_dlaf(matrix, eigenvectors, eigenvalues)
DLA-Future eigensolver for complex Hermitian matrices.
subroutine, public cp_cfm_pzpotrf_dlaf(uplo, n, a, ia, ja, desca, info)
Cholesky factorization using DLA-Future.
subroutine, public cp_cfm_diag_gen_dlaf(amatrix, bmatrix, eigenvectors, eigenvalues)
DLA-Future generalized eigensolver for complex Hermitian matrices.
Represents a complex full matrix distributed on many processors.
Defines the basic variable types.
integer, parameter, public dp
Represent a complex full matrix.