10 USE iso_c_binding,
ONLY: c_char,&
19 #include "../base/base_uses.f90"
25 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'cp_fm_dlaf_api'
46 CHARACTER,
INTENT(IN) :: uplo
47 INTEGER,
INTENT(IN) :: n
48 REAL(kind=
dp),
DIMENSION(:, :),
TARGET :: a
49 INTEGER,
INTENT(IN) :: ia, ja
50 INTEGER,
DIMENSION(9) :: desca
51 INTEGER,
TARGET :: info
53 CHARACTER(len=*),
PARAMETER :: routinen =
'cp_pdpotrf_dlaf'
57 SUBROUTINE pdpotrf_dlaf(uplo, n, a, ia, ja, desca, info) &
58 bind(c, name=
'dlaf_pdpotrf')
59 IMPORT :: c_ptr, c_int, c_double, c_signed_char
60 INTEGER(KIND=C_SIGNED_CHAR),
VALUE :: uplo
61 INTEGER(KIND=C_INT),
VALUE :: ia, ja, n
62 TYPE(c_ptr),
VALUE :: info
63 INTEGER(kind=C_INT),
DIMENSION(*) :: desca
64 TYPE(c_ptr),
VALUE :: a
65 END SUBROUTINE pdpotrf_dlaf
68 CALL timeset(routinen, handle)
71 CALL pdpotrf_dlaf(iachar(uplo, c_signed_char), n, c_loc(a(1, 1)), ia, ja, desca, c_loc(info))
80 cpabort(
"CP2K compiled without the DLA-Future library.")
99 CHARACTER,
INTENT(IN) :: uplo
100 INTEGER,
INTENT(IN) :: n
101 REAL,
DIMENSION(:, :),
TARGET :: a
102 INTEGER,
INTENT(IN) :: ia, ja
103 INTEGER,
DIMENSION(9) :: desca
104 INTEGER,
TARGET :: info
106 CHARACTER(len=*),
PARAMETER :: routinen =
'cp_pspotrf_dlaf'
110 SUBROUTINE pspotrf_dlaf(uplo, n, a, ia, ja, desca, info) &
111 bind(c, name=
'dlaf_pspotrf')
112 IMPORT :: c_ptr, c_int, c_double, c_signed_char
113 INTEGER(KIND=C_SIGNED_CHAR),
VALUE :: uplo
114 INTEGER(KIND=C_INT),
VALUE :: ia, ja, n
115 TYPE(c_ptr),
VALUE :: info
116 INTEGER(kind=C_INT),
DIMENSION(*) :: desca
117 TYPE(c_ptr),
VALUE :: a
118 END SUBROUTINE pspotrf_dlaf
121 CALL timeset(routinen, handle)
124 CALL pspotrf_dlaf(iachar(uplo, c_signed_char), n, c_loc(a(1, 1)), ia, ja, desca, c_loc(info))
133 cpabort(
"CP2K compiled without the DLA-Future library.")
135 CALL timestop(handle)
146 TYPE(cp_fm_type),
INTENT(IN) :: matrix, eigenvectors
147 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT) :: eigenvalues
149 CHARACTER(LEN=*),
PARAMETER :: routinen =
'cp_fm_diag_dlaf'
151 INTEGER :: handle, n, nmo
152 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:),
TARGET :: eig
154 CALL timeset(routinen, handle)
156 n = matrix%matrix_struct%nrow_global
159 CALL cp_fm_diag_dlaf_base(matrix, eigenvectors, eig)
161 nmo =
SIZE(eigenvalues, 1)
163 eigenvalues(1:n) = eig(1:n)
165 eigenvalues(1:nmo) = eig(1:nmo)
170 CALL timestop(handle)
181 SUBROUTINE cp_fm_diag_dlaf_base(matrix, eigenvectors, eigenvalues)
182 TYPE(cp_fm_type),
INTENT(IN) :: matrix, eigenvectors
183 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT),
TARGET :: eigenvalues
185 CHARACTER(len=*),
PARAMETER :: routinen =
'cp_fm_diag_dlaf_base'
186 CHARACTER,
PARAMETER :: uplo =
'L'
187 CHARACTER(LEN=100) :: message
188 INTEGER :: dlaf_handle, handle, n
189 INTEGER,
DIMENSION(9) :: desca, descz
190 INTEGER,
TARGET :: info
191 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: a, z
193 SUBROUTINE pdsyevd_dlaf(uplo, n, a, ia, ja, desca, w, z, iz, jz, descz, info) &
194 bind(c, name=
'dlaf_pdsyevd')
196 IMPORT :: c_int, c_double, c_char, c_ptr, c_signed_char
198 INTEGER(kind=C_SIGNED_CHAR),
VALUE :: uplo
199 INTEGER(kind=C_INT),
VALUE :: n, ia, ja, iz, jz
200 TYPE(c_ptr),
VALUE :: a, w, z
201 INTEGER(kind=C_INT),
DIMENSION(9) :: desca, descz
202 TYPE(c_ptr),
VALUE :: info
203 END SUBROUTINE pdsyevd_dlaf
205 CHARACTER(len=*),
PARAMETER :: dlaf_name =
'pdsyevd_dlaf'
207 CALL timeset(routinen, handle)
214 CALL timeset(dlaf_name, dlaf_handle)
216 n = matrix%matrix_struct%nrow_global
218 a => matrix%local_data
219 z => eigenvectors%local_data
221 desca(:) = matrix%matrix_struct%descriptor(:)
222 descz(:) = eigenvectors%matrix_struct%descriptor(:)
227 uplo=iachar(uplo, c_signed_char), &
229 a=c_loc(a(1, 1)), ia=1, ja=1, desca=desca, &
230 w=c_loc(eigenvalues(1)), &
231 z=c_loc(z(1, 1)), iz=1, jz=1, descz=descz, &
235 CALL timestop(dlaf_handle)
238 WRITE (message,
"(A,I0,A)")
"ERROR in DLAF_PDSYEVD: Eigensolver failed (INFO = ", info,
")"
239 cpabort(trim(message))
247 mark_used(eigenvectors)
248 mark_used(eigenvalues)
252 mark_used(dlaf_handle)
255 cpabort(
"CP2K compiled without DLAF library.")
258 CALL timestop(handle)
260 END SUBROUTINE cp_fm_diag_dlaf_base
basic linear algebra operations for full matrices
subroutine, public cp_fm_upper_to_full(matrix, work)
given an upper triangular matrix computes the corresponding full matrix
subroutine, public cp_pdpotrf_dlaf(uplo, n, a, ia, ja, desca, info)
Cholesky factorization using DLA-Future.
subroutine, public cp_pspotrf_dlaf(uplo, n, a, ia, ja, desca, info)
Cholesky factorization using DLA-Future.
subroutine, public cp_fm_diag_dlaf(matrix, eigenvectors, eigenvalues)
...
represent a full matrix distributed on many processors
Defines the basic variable types.
integer, parameter, public dp