(git:374b731)
Loading...
Searching...
No Matches
lapack.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2024 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief Interface to the LAPACK F77 library
10!> \par History
11!> JGH (26-5-2001): New flag __SGL
12!> : Added SVD routines
13!> JGH (30-5-2001): Added Cholesky factorisation and triangular inverse
14!> JGH (23-1-2009): Added linear system solution by SVD
15!> \author APSI
16! **************************************************************************************************
17MODULE lapack
18
19 IMPLICIT NONE
20
21 PRIVATE
22
23 ! API
24 PUBLIC :: lapack_ssyev, lapack_chpev, &
29
30 INTERFACE lapack_ssyev
31! **************************************************************************************************
32!> \brief ...
33!> \param jobz ...
34!> \param uplo ...
35!> \param n ...
36!> \param a ...
37!> \param lda ...
38!> \param w ...
39!> \param work ...
40!> \param lwork ...
41!> \param info ...
42! **************************************************************************************************
43 SUBROUTINE dsyev(jobz, uplo, n, a, lda, w, work, lwork, info)
44 USE kinds, ONLY: dp
45 CHARACTER :: jobz, uplo
46 INTEGER :: N, LDA
47 REAL(KIND=dp) :: a(lda, *), w(*), work(*)
48 INTEGER :: LWORK, INFO
49
50 END SUBROUTINE dsyev
51 END INTERFACE
52
53 INTERFACE lapack_ssygv
54! **************************************************************************************************
55!> \brief ...
56!> \param itype ...
57!> \param jobz ...
58!> \param uplo ...
59!> \param n ...
60!> \param a ...
61!> \param lda ...
62!> \param b ...
63!> \param ldb ...
64!> \param w ...
65!> \param work ...
66!> \param lwork ...
67!> \param info ...
68! **************************************************************************************************
69 SUBROUTINE dsygv(itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, info)
70 USE kinds, ONLY: dp
71 INTEGER :: itype
72 CHARACTER :: jobz, uplo
73 INTEGER :: N, LDA
74 REAL(KIND=dp) :: a(lda, *)
75 INTEGER :: LDB
76 REAL(KIND=dp) :: b(ldb, *), w(*), work(*)
77 INTEGER :: LWORK, INFO
78
79 END SUBROUTINE dsygv
80 END INTERFACE
81
82 INTERFACE lapack_chpev
83! **************************************************************************************************
84!> \brief ...
85!> \param jobz ...
86!> \param uplo ...
87!> \param n ...
88!> \param ap ...
89!> \param w ...
90!> \param z ...
91!> \param ldz ...
92!> \param work ...
93!> \param rwork ...
94!> \param info ...
95! **************************************************************************************************
96 SUBROUTINE zhpev(jobz, uplo, n, ap, w, z, ldz, work, rwork, info)
97 USE kinds, ONLY: dp
98 CHARACTER :: jobz, uplo
99 INTEGER :: n
100 COMPLEX(KIND=dp) :: ap(*)
101 REAL(KIND=dp) :: w(*)
102 INTEGER :: ldz
103 COMPLEX(KIND=dp) :: z(ldz, *), work(*)
104 REAL(KIND=dp) :: rwork(*)
105 INTEGER :: info
106
107 END SUBROUTINE zhpev
108 END INTERFACE
109
110 INTERFACE lapack_sspgv
111! **************************************************************************************************
112!> \brief ...
113!> \param itype ...
114!> \param jobz ...
115!> \param uplo ...
116!> \param n ...
117!> \param ap ...
118!> \param bp ...
119!> \param w ...
120!> \param z ...
121!> \param ldz ...
122!> \param work ...
123!> \param info ...
124! **************************************************************************************************
125 SUBROUTINE dspgv(itype, jobz, uplo, n, ap, bp, w, z, ldz, work, &
126 info)
127 USE kinds, ONLY: dp
128 INTEGER :: itype
129 CHARACTER :: jobz, uplo
130 INTEGER :: n
131 REAL(KIND=dp) :: ap(*), bp(*), w(*)
132 INTEGER :: ldz
133 REAL(KIND=dp) :: z(ldz, *), work(*)
134 INTEGER :: info
135
136 END SUBROUTINE dspgv
137 END INTERFACE
138
139 INTERFACE lapack_chpgv
140! **************************************************************************************************
141!> \brief ...
142!> \param itype ...
143!> \param jobz ...
144!> \param uplo ...
145!> \param n ...
146!> \param ap ...
147!> \param bp ...
148!> \param w ...
149!> \param z ...
150!> \param ldz ...
151!> \param work ...
152!> \param rwork ...
153!> \param info ...
154! **************************************************************************************************
155 SUBROUTINE zhpgv(itype, jobz, uplo, n, ap, bp, w, z, ldz, work, &
156 rwork, info)
157 USE kinds, ONLY: dp
158 INTEGER :: itype
159 CHARACTER :: jobz, uplo
160 INTEGER :: n
161 COMPLEX(KIND=dp) :: ap(*), bp(*)
162 REAL(KIND=dp) :: w(*)
163 INTEGER :: ldz
164 COMPLEX(KIND=dp) :: z(ldz, *), work(*)
165 REAL(KIND=dp) :: rwork(*)
166 INTEGER :: info
167
168 END SUBROUTINE zhpgv
169 END INTERFACE
170
172! **************************************************************************************************
173!> \brief ...
174!> \param jobu ...
175!> \param jobvt ...
176!> \param m ...
177!> \param n ...
178!> \param a ...
179!> \param lda ...
180!> \param s ...
181!> \param u ...
182!> \param ldu ...
183!> \param vt ...
184!> \param ldvt ...
185!> \param work ...
186!> \param lwork ...
187!> \param info ...
188! **************************************************************************************************
189 SUBROUTINE dgesvd(jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt, &
190 work, lwork, info)
191 USE kinds, ONLY: dp
192 CHARACTER :: jobu, jobvt
193 INTEGER :: m, n, lda
194 REAL(KIND=dp) :: a(lda, *), s(*)
195 INTEGER :: ldu
196 REAL(KIND=dp) :: u(ldu, *)
197 INTEGER :: ldvt
198 REAL(KIND=dp) :: vt(ldvt, *), work(*)
199 INTEGER :: lwork, info
200
201 END SUBROUTINE dgesvd
202 END INTERFACE
203
205! **************************************************************************************************
206!> \brief ...
207!> \param jobu ...
208!> \param jobvt ...
209!> \param m ...
210!> \param n ...
211!> \param a ...
212!> \param lda ...
213!> \param s ...
214!> \param u ...
215!> \param ldu ...
216!> \param vt ...
217!> \param ldvt ...
218!> \param work ...
219!> \param lwork ...
220!> \param rwork ...
221!> \param info ...
222! **************************************************************************************************
223 SUBROUTINE zgesvd(jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt, &
224 work, lwork, rwork, info)
225 USE kinds, ONLY: dp
226 CHARACTER :: jobu, jobvt
227 INTEGER :: m, n, lda
228 COMPLEX(KIND=dp) :: a(lda, *)
229 REAL(KIND=dp) :: s(*)
230 INTEGER :: ldu
231 COMPLEX(KIND=dp) :: u(ldu, *)
232 INTEGER :: ldvt
233 COMPLEX(KIND=dp) :: vt(ldvt, *), work(*)
234 INTEGER :: lwork
235 REAL(KIND=dp) :: rwork(*)
236 INTEGER :: info
237
238 END SUBROUTINE zgesvd
239 END INTERFACE
240
242! **************************************************************************************************
243!> \brief ...
244!> \param uplo ...
245!> \param n ...
246!> \param a ...
247!> \param lda ...
248!> \param info ...
249! **************************************************************************************************
250 SUBROUTINE dpotrf(uplo, n, a, lda, info)
251 USE kinds, ONLY: dp
252 CHARACTER :: uplo
253 INTEGER :: n, lda
254 REAL(KIND=dp) :: a(lda, *)
255 INTEGER :: info
256
257 END SUBROUTINE dpotrf
258 END INTERFACE
259
260 INTERFACE lapack_cpotrf
261! **************************************************************************************************
262!> \brief ...
263!> \param uplo ...
264!> \param n ...
265!> \param a ...
266!> \param lda ...
267!> \param info ...
268! **************************************************************************************************
269 SUBROUTINE zpotrf(uplo, n, a, lda, info)
270 USE kinds, ONLY: dp
271 CHARACTER :: uplo
272 INTEGER :: n, lda
273 COMPLEX(KIND=dp) :: a(lda, *)
274 INTEGER :: info
275
276 END SUBROUTINE zpotrf
277 END INTERFACE
278
280! **************************************************************************************************
281!> \brief ...
282!> \param uplo ...
283!> \param diag ...
284!> \param n ...
285!> \param a ...
286!> \param lda ...
287!> \param info ...
288! **************************************************************************************************
289 SUBROUTINE dtrtri(uplo, diag, n, a, lda, info)
290 USE kinds, ONLY: dp
291 CHARACTER :: uplo, diag
292 INTEGER :: n, lda
293 REAL(KIND=dp) :: a(lda, *)
294 INTEGER :: info
295
296 END SUBROUTINE dtrtri
297 END INTERFACE
298
299 INTERFACE lapack_ctrtri
300! **************************************************************************************************
301!> \brief ...
302!> \param uplo ...
303!> \param diag ...
304!> \param n ...
305!> \param a ...
306!> \param lda ...
307!> \param info ...
308! **************************************************************************************************
309 SUBROUTINE ztrtri(uplo, diag, n, a, lda, info)
310 USE kinds, ONLY: dp
311 CHARACTER :: uplo, diag
312 INTEGER :: n, lda
313 COMPLEX(KIND=dp) :: a(lda, *)
314 INTEGER :: info
315
316 END SUBROUTINE ztrtri
317 END INTERFACE
318
319 INTERFACE lapack_sgesv
320! **************************************************************************************************
321!> \brief ...
322!> \param n ...
323!> \param nrhs ...
324!> \param a ...
325!> \param lda ...
326!> \param ipiv ...
327!> \param b ...
328!> \param ldb ...
329!> \param info ...
330! **************************************************************************************************
331 SUBROUTINE dgesv(n, nrhs, a, lda, ipiv, b, ldb, info)
332 USE kinds, ONLY: dp
333 INTEGER :: N, NRHS, LDA
334 REAL(KIND=dp) :: a(lda, *)
335 INTEGER :: IPIV(*), LDB
336 REAL(KIND=dp) :: b(ldb, *)
337 INTEGER :: INFO
338
339 END SUBROUTINE dgesv
340 END INTERFACE
341
342 INTERFACE lapack_sgbsv
343! **************************************************************************************************
344!> \brief ...
345!> \param n ...
346!> \param kl ...
347!> \param ku ...
348!> \param nrhs ...
349!> \param ab ...
350!> \param ldab ...
351!> \param ipiv ...
352!> \param b ...
353!> \param ldb ...
354!> \param info ...
355! **************************************************************************************************
356 SUBROUTINE dgbsv(n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb, info)
357 USE kinds, ONLY: dp
358 INTEGER :: N, KL, KU, NRHS, LDAB
359 REAL(KIND=dp) :: ab(ldab, *)
360 INTEGER :: IPIV(*), LDB
361 REAL(KIND=dp) :: b(ldb, *)
362 INTEGER :: INFO
363
364 END SUBROUTINE dgbsv
365 END INTERFACE
366
368! **************************************************************************************************
369!> \brief ...
370!> \param m ...
371!> \param n ...
372!> \param nrhs ...
373!> \param a ...
374!> \param lda ...
375!> \param b ...
376!> \param ldb ...
377!> \param s ...
378!> \param rcond ...
379!> \param rank ...
380!> \param work ...
381!> \param lwork ...
382!> \param info ...
383! **************************************************************************************************
384 SUBROUTINE dgelss(m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork, info)
385 USE kinds, ONLY: dp
386 INTEGER :: m, n, nrhs, lda
387 REAL(KIND=dp) :: a(lda, *)
388 INTEGER :: ldb
389 REAL(KIND=dp) :: b(ldb, *), s(*), rcond
390 INTEGER :: rank
391 REAL(KIND=dp) :: work(*)
392 INTEGER :: lwork, info
393
394 END SUBROUTINE dgelss
395 END INTERFACE
396
397END MODULE lapack
398
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Interface to the LAPACK F77 library.
Definition lapack.F:17