MAGMA  1.2.0
MatrixAlgebraonGPUandMulticoreArchitectures
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
magma_zfortran.f90
Go to the documentation of this file.
1 !
2 ! -- MAGMA (version 1.2.0) --
3 ! Univ. of Tennessee, Knoxville
4 ! Univ. of California, Berkeley
5 ! Univ. of Colorado, Denver
6 ! May 2012
7 !
8 ! @precisions normal z -> c d s
9 !
10 
11 #define PRECISION_z
12 
14 
15  use magma_param, only: sizeof_complex_16
16 
17  implicit none
18 
19  !---- Fortran interfaces to MAGMA subroutines ----
20  interface
21 
22  subroutine magmaf_zgetptr( m, n, A, lda, d, e,tauq, taup, work, lwork, info)
23  integer :: m
24  integer :: n
25  complex*16 :: a(*)
26  integer :: lda
27  double precision:: d(*)
28  double precision:: e(*)
29  complex*16 :: tauq(*)
30  complex*16 :: taup(*)
31  complex*16 :: work(*)
32  integer :: lwork
33  integer :: info
34  end subroutine magmaf_zgetptr
35 
36 
37  subroutine magmaf_zgebrd( m, n, A, lda, d, e,tauq, taup, work, lwork, info)
38  integer :: m
39  integer :: n
40  complex*16 :: a(*)
41  integer :: lda
42  double precision:: d(*)
43  double precision:: e(*)
44  complex*16 :: tauq(*)
45  complex*16 :: taup(*)
46  complex*16 :: work(*)
47  integer :: lwork
48  integer :: info
49  end subroutine magmaf_zgebrd
50 
51  subroutine magmaf_zgehrd2(n, ilo, ihi,A, lda, tau, work, lwork, info)
52  integer :: n
53  integer :: ilo
54  integer :: ihi
55  complex*16 :: a(*)
56  integer :: lda
57  complex*16 :: tau(*)
58  complex*16 :: work(*)
59  integer :: lwork
60  integer :: info
61  end subroutine magmaf_zgehrd2
62 
63  subroutine magmaf_zgehrd(n, ilo, ihi,A, lda, tau, work, lwork, d_T, info)
64  integer :: n
65  integer :: ilo
66  integer :: ihi
67  complex*16 :: a(*)
68  integer :: lda
69  complex*16 :: tau(*)
70  complex*16 :: work(*)
71  integer :: lwork
72  complex*16 :: d_t(*)
73  integer :: info
74  end subroutine magmaf_zgehrd
75 
76  subroutine magmaf_zgelqf( m, n, A, lda, tau, work, lwork, info)
77  integer :: m
78  integer :: n
79  complex*16 :: a(*)
80  integer :: lda
81  complex*16 :: tau(*)
82  complex*16 :: work(*)
83  integer :: lwork
84  integer :: info
85  end subroutine magmaf_zgelqf
86 
87  subroutine magmaf_zgeqlf( m, n, A, lda, tau, work, lwork, info)
88  integer :: m
89  integer :: n
90  complex*16 :: a(*)
91  integer :: lda
92  complex*16 :: tau(*)
93  complex*16 :: work(*)
94  integer :: lwork
95  integer :: info
96  end subroutine magmaf_zgeqlf
97 
98  subroutine magmaf_zgeqrf( m, n, A, lda, tau, work, lwork, info)
99  integer :: m
100  integer :: n
101  complex*16 :: a(*)
102  integer :: lda
103  complex*16 :: tau(*)
104  complex*16 :: work(*)
105  integer :: lwork
106  integer :: info
107  end subroutine magmaf_zgeqrf
108 
109  subroutine magmaf_zgesv( n, nrhs, A, lda, ipiv, B, ldb, info)
110  integer :: n
111  integer :: nrhs
112  complex*16 :: a
113  integer :: lda
114  integer :: ipiv(*)
115  complex*16 :: b
116  integer :: ldb
117  integer :: info
118  end subroutine magmaf_zgesv
119 
120  subroutine magmaf_zgetrf( m, n, A, lda, ipiv, info)
121  integer :: m
122  integer :: n
123  complex*16 :: a(*)
124  integer :: lda
125  integer :: ipiv(*)
126  integer :: info
127  end subroutine magmaf_zgetrf
128 
129  subroutine magmaf_zposv( uplo, n, nrhs, dA, ldda, dB, lddb, info)
130  character :: uplo
131  integer :: n
132  integer :: nrhs
133  magma_devptr_t:: da
134  integer :: ldda
135  magma_devptr_t:: db
136  integer :: lddb
137  integer :: info
138  end subroutine magmaf_zposv
139 
140  subroutine magmaf_zpotrf( uplo, n, A, lda, info)
141  character :: uplo
142  integer :: n
143  complex*16 :: a(*)
144  integer :: lda
145  integer :: info
146  end subroutine magmaf_zpotrf
147 
148  subroutine magmaf_zhetrd( uplo, n, A, lda, d, e, tau, work, lwork, info)
149  character :: uplo
150  integer :: n
151  complex*16 :: a(*)
152  integer :: lda
153  double precision:: d(*)
154  double precision:: e(*)
155  complex*16 :: tau(*)
156  complex*16 :: work(*)
157  integer :: lwork
158  integer :: info
159  end subroutine magmaf_zhetrd
160 
161  subroutine magmaf_zunmqr( side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
162  character :: side
163  character :: trans
164  integer :: m
165  integer :: n
166  integer :: k
167  complex*16 :: a(*)
168  integer :: lda
169  complex*16 :: tau(*)
170  complex*16 :: c(*)
171  integer :: ldc
172  complex*16 :: work(*)
173  integer :: lwork
174  integer :: info
175  end subroutine magmaf_zunmqr
176 
177  subroutine magmaf_zunmtr( side, uplo, trans, m, n, a, lda,tau,c, ldc,work, lwork,info)
178  character :: side
179  character :: uplo
180  character :: trans
181  integer :: m
182  integer :: n
183  complex*16 :: a(*)
184  integer :: lda
185  complex*16 :: tau(*)
186  complex*16 :: c(*)
187  integer :: ldc
188  complex*16 :: work(*)
189  integer :: lwork
190  integer :: info
191  end subroutine magmaf_zunmtr
192 #if defined(PRECISION_z) || defined(PRECISION_c)
193 
194  subroutine magmaf_zgeev( jobvl, jobvr, n, a, lda, w, vl, ldvl, vr, ldvr, work, lwork, rwork, info)
195  character :: jobvl
196  character :: jobvr
197  integer :: n
198  complex*16 :: a(*)
199  integer :: lda
200  complex*16 :: w(*)
201  complex*16 :: vl(*)
202  integer :: ldvl
203  complex*16 :: vr(*)
204  integer :: ldvr
205  complex*16 :: work(*)
206  integer :: lwork
207  double precision:: rwork(*)
208  integer :: info
209  end subroutine magmaf_zgeev
210 
211  subroutine magmaf_zgesvd( jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork, rwork, info)
212  character :: jobu
213  character :: jobvt
214  integer :: m
215  integer :: n
216  complex*16 :: a(*)
217  integer :: lda
218  double precision:: s(*)
219  complex*16 :: u(*)
220  integer :: ldu
221  complex*16 :: vt(*)
222  integer :: ldvt
223  complex*16 :: work(*)
224  integer :: lwork
225  double precision:: rwork(*)
226  integer :: info
227  end subroutine magmaf_zgesvd
228 
229  subroutine magmaf_zheevd( jobz, uplo, n, a, lda, w, work, lwork, rwork, lrwork, iwork, liwork, info)
230  character :: jobz
231  character :: uplo
232  integer :: n
233  complex*16 :: a(*)
234  integer :: lda
235  double precision:: w(*)
236  complex*16 :: work(*)
237  integer :: lwork
238  double precision:: rwork(*)
239  integer :: lrwork
240  integer :: iwork(*)
241  integer :: liwork
242  integer :: info
243  end subroutine magmaf_zheevd
244 
245  subroutine magmaf_zhegvd( itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, rwork, lrwork, iwork, liwork, info)
246  integer :: itype
247  character :: jobz
248  character :: uplo
249  integer :: n
250  complex*16 :: a(*)
251  integer :: lda
252  complex*16 :: b(*)
253  integer :: ldb
254  double precision:: w(*)
255  complex*16 :: work(*)
256  integer :: lwork
257  double precision:: rwork(*)
258  integer :: lrwork
259  integer :: iwork(*)
260  integer :: liwork
261  integer :: info
262  end subroutine magmaf_zhegvd
263 
264 #else
265  subroutine magmaf_zgeev( jobvl, jobvr, n, a, lda, wr, wi, vl, ldvl, vr, ldvr, work, lwork, info)
266  character :: jobvl
267  character :: jobvr
268  integer :: n
269  complex*16 :: a(*)
270  integer :: lda
271  complex*16 :: wr(*)
272  complex*16 :: wi(*)
273  complex*16 :: vl(*)
274  integer :: ldvl
275  complex*16 :: vr(*)
276  integer :: ldvr
277  complex*16 :: work(*)
278  integer :: lwork
279  integer :: info
280  end subroutine magmaf_zgeev
281 
282  subroutine magmaf_zgesvd( jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork, info)
283  character :: jobu
284  character :: jobvt
285  integer :: m
286  integer :: n
287  complex*16 :: a(*)
288  integer :: lda
289  double precision:: s(*)
290  complex*16 :: u(*)
291  integer :: ldu
292  complex*16 :: vt(*)
293  integer :: ldvt
294  complex*16 :: work(*)
295  integer :: lwork
296  integer :: info
297  end subroutine magmaf_zgesvd
298 
299  subroutine magmaf_zheevd( jobz, uplo, n, a, lda, w, work, lwork, iwork, liwork, info)
300  character :: jobz
301  character :: uplo
302  integer :: n
303  complex*16 :: a(*)
304  integer :: lda
305  double precision:: w(*)
306  complex*16 :: work(*)
307  integer :: lwork
308  integer :: iwork(*)
309  integer :: liwork
310  integer :: info
311  end subroutine magmaf_zheevd
312 
313  subroutine magmaf_zhegvd( itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, iwork, liwork, info)
314  integer :: itype
315  character :: jobz
316  character :: uplo
317  integer :: n
318  complex*16 :: a(*)
319  integer :: lda
320  complex*16 :: b(*)
321  integer :: ldb
322  double precision:: w(*)
323  complex*16 :: work(*)
324  integer :: lwork
325  integer :: iwork(*)
326  integer :: liwork
327  integer :: info
328  end subroutine magmaf_zhegvd
329 #endif
330 
331  subroutine magmaf_zgels_gpu( trans, m, n, nrhs, dA, ldda, dB, lddb, hwork, lwork, info)
332  character :: trans
333  integer :: m
334  integer :: n
335  integer :: nrhs
336  magma_devptr_t:: da
337  integer :: ldda
338  magma_devptr_t:: db
339  integer :: lddb
340  complex*16 :: hwork(*)
341  integer :: lwork
342  integer :: info
343  end subroutine magmaf_zgels_gpu
344 
345  subroutine magmaf_zgeqrf_gpu( m, n, dA, ldda, tau, dT, info)
346  integer :: m
347  integer :: n
348  magma_devptr_t:: da
349  integer :: ldda
350  complex*16 :: tau(*)
351  magma_devptr_t:: dt
352  integer :: info
353  end subroutine magmaf_zgeqrf_gpu
354 
355  subroutine magmaf_zgeqrf2_gpu(m, n, dA, ldda, tau, info)
356  integer :: m
357  integer :: n
358  magma_devptr_t:: da
359  integer :: ldda
360  complex*16 :: tau(*)
361  integer :: info
362  end subroutine magmaf_zgeqrf2_gpu
363 
364  subroutine magmaf_zgeqrf3_gpu(m, n, dA, ldda, tau, dT, info)
365  integer :: m
366  integer :: n
367  magma_devptr_t:: da
368  integer :: ldda
369  complex*16 :: tau(*)
370  magma_devptr_t:: dt
371  integer :: info
372  end subroutine magmaf_zgeqrf3_gpu
373 
374  subroutine magmaf_zgeqrs_gpu( m, n, nrhs, dA, ldda, tau, dT, dB, lddb, hwork, lhwork, info)
375  integer :: m
376  integer :: n
377  integer :: nrhs
378  magma_devptr_t:: da
379  integer :: ldda
380  complex*16 :: tau
381  magma_devptr_t:: dt
382  magma_devptr_t:: db
383  integer :: lddb
384  complex*16 :: hwork(*)
385  integer :: lhwork
386  integer :: info
387  end subroutine magmaf_zgeqrs_gpu
388 
389  subroutine magmaf_zgeqrs3_gpu( m, n, nrhs, dA, ldda, tau, dT, dB, lddb, hwork, lhwork, info)
390  integer :: m
391  integer :: n
392  integer :: nrhs
393  magma_devptr_t:: da
394  integer :: ldda
395  complex*16 :: tau
396  magma_devptr_t:: dt
397  magma_devptr_t:: db
398  integer :: lddb
399  complex*16 :: hwork(*)
400  integer :: lhwork
401  integer :: info
402  end subroutine magmaf_zgeqrs3_gpu
403 
404  subroutine magmaf_zgessm_gpu( storev, m, n, k, ib, ipiv, dL1, lddl1, dL, lddl, dA, ldda, info)
405  character :: storev
406  integer :: m
407  integer :: n
408  integer :: k
409  integer :: ib
410  integer :: ipiv(*)
411  magma_devptr_t:: dl1
412  integer :: lddl1
413  magma_devptr_t:: dl
414  integer :: lddl
415  magma_devptr_t:: da
416  integer :: ldda
417  integer :: info
418  end subroutine magmaf_zgessm_gpu
419 
420  subroutine magmaf_zgesv_gpu( n, nrhs, dA, ldda, ipiv, dB, lddb, info)
421  integer :: n
422  integer :: nrhs
423  magma_devptr_t:: da
424  integer :: ldda
425  integer :: ipiv(*)
426  magma_devptr_t:: db
427  integer :: lddb
428  integer :: info
429  end subroutine magmaf_zgesv_gpu
430 
431  subroutine magmaf_zgetrf_gpu( m, n, dA, ldda, ipiv, info)
432  integer :: m
433  integer :: n
434  magma_devptr_t:: da
435  integer :: ldda
436  integer :: ipiv(*)
437  integer :: info
438  end subroutine magmaf_zgetrf_gpu
439 
440  subroutine magmaf_zgetrs_gpu( trans, n, nrhs, dA, ldda, ipiv, dB, lddb, info)
441  character :: trans
442  integer :: n
443  integer :: nrhs
444  magma_devptr_t:: da
445  integer :: ldda
446  integer :: ipiv(*)
447  magma_devptr_t:: db
448  integer :: lddb
449  integer :: info
450  end subroutine magmaf_zgetrs_gpu
451 
452  subroutine magmaf_zlabrd_gpu( m, n, nb, a, lda, da, ldda, d, e, tauq, taup, x, ldx, dx, lddx, y, ldy, dy, lddy)
453  integer :: m
454  integer :: n
455  integer :: nb
456  complex*16 :: a(*)
457  integer :: lda
458  magma_devptr_t:: da
459  integer :: ldda
460  double precision:: d(*)
461  double precision:: e(*)
462  complex*16 :: tauq(*)
463  complex*16 :: taup(*)
464  complex*16 :: x(*)
465  integer :: ldx
466  magma_devptr_t:: dx
467  integer :: lddx
468  complex*16 :: y(*)
469  integer :: ldy
470  magma_devptr_t:: dy
471  integer :: lddy
472  end subroutine magmaf_zlabrd_gpu
473 
474  subroutine magmaf_zlarfb_gpu( side, trans, direct, storev, m, n, k, dv, ldv, dt, ldt, dc, ldc, dowrk, ldwork)
475  character :: side
476  character :: trans
477  character :: direct
478  character :: storev
479  integer :: m
480  integer :: n
481  integer :: k
482  magma_devptr_t:: dv
483  integer :: ldv
484  magma_devptr_t:: dt
485  integer :: ldt
486  magma_devptr_t:: dc
487  integer :: ldc
488  magma_devptr_t:: dowrk
489  integer :: ldwork
490  end subroutine magmaf_zlarfb_gpu
491 
492  subroutine magmaf_zposv_gpu( uplo, n, nrhs, dA, ldda, dB, lddb, info)
493  character :: uplo
494  integer :: n
495  integer :: nrhs
496  magma_devptr_t:: da
497  integer :: ldda
498  magma_devptr_t:: db
499  integer :: lddb
500  integer :: info
501  end subroutine magmaf_zposv_gpu
502 
503  subroutine magmaf_zpotrf_gpu( uplo, n, dA, ldda, info)
504  character :: uplo
505  integer :: n
506  magma_devptr_t:: da
507  integer :: ldda
508  integer :: info
509  end subroutine magmaf_zpotrf_gpu
510 
511  subroutine magmaf_zpotrs_gpu( uplo, n, nrhs, dA, ldda, dB, lddb, info)
512  character :: uplo
513  integer :: n
514  integer :: nrhs
515  magma_devptr_t:: da
516  integer :: ldda
517  magma_devptr_t:: db
518  integer :: lddb
519  integer :: info
520  end subroutine magmaf_zpotrs_gpu
521 
522  subroutine magmaf_zssssm_gpu( storev, m1, n1, m2, n2, k, ib, dA1, ldda1, dA2, ldda2, dL1, lddl1, dL2, lddl2, IPIV, info)
523  character :: storev
524  integer :: m1
525  integer :: n1
526  integer :: m2
527  integer :: n2
528  integer :: k
529  integer :: ib
530  magma_devptr_t:: da1
531  integer :: ldda1
532  magma_devptr_t:: da2
533  integer :: ldda2
534  magma_devptr_t:: dl1
535  integer :: lddl1
536  magma_devptr_t:: dl2
537  integer :: lddl2
538  integer :: ipiv(*)
539  integer :: info
540  end subroutine magmaf_zssssm_gpu
541 
542  subroutine magmaf_zungqr_gpu( m, n, k, da, ldda, tau, dwork, nb, info)
543  integer :: m
544  integer :: n
545  integer :: k
546  magma_devptr_t:: da
547  integer :: ldda
548  complex*16 :: tau(*)
549  magma_devptr_t:: dwork
550  integer :: nb
551  integer :: info
552  end subroutine magmaf_zungqr_gpu
553 
554  subroutine magmaf_zunmqr_gpu( side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, td, nb, info)
555  character :: side
556  character :: trans
557  integer :: m
558  integer :: n
559  integer :: k
560  magma_devptr_t:: a
561  integer :: lda
562  complex*16 :: tau(*)
563  magma_devptr_t:: c
564  integer :: ldc
565  magma_devptr_t:: work
566  integer :: lwork
567  magma_devptr_t:: td
568  integer :: nb
569  integer :: info
570  end subroutine magmaf_zunmqr_gpu
571 
572  end interface
573 
574 contains
575 
576  subroutine magmaf_zoff1d( ptrNew, ptrOld, inc, i)
577  magma_devptr_t :: ptrnew
578  magma_devptr_t :: ptrold
579  integer :: inc, i
580 
581  ptrnew = ptrold + (i-1) * inc * sizeof_complex_16
582 
583  end subroutine magmaf_zoff1d
584 
585  subroutine magmaf_zoff2d( ptrNew, ptrOld, lda, i, j)
586  magma_devptr_t :: ptrnew
587  magma_devptr_t :: ptrold
588  integer :: lda, i, j
589 
590  ptrnew = ptrold + ((j-1) * lda + (i-1)) * sizeof_complex_16
591 
592  end subroutine magmaf_zoff2d
593 
594 end module magma_zfortran