(git:ccc2433)
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 ! **************************************************************************************************
17 MODULE 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 
171  INTERFACE lapack_sgesvd
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 
204  INTERFACE lapack_cgesvd
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 
241  INTERFACE lapack_spotrf
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 
279  INTERFACE lapack_strtri
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 
367  INTERFACE lapack_sgelss
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 
397 END 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