2
c Calculate LU decomposition of a matrix
3
c Author: Pearu Peterson, March 2002
5
c prefixes: d,z,s,c (double,complex double,float,complex float)
6
c suffixes: _c,_r (column major order,row major order)
8
subroutine dlu_c(p,l,u,a,m,n,k,piv,info,permute_l,m1)
9
integer m,n,piv(k),i,j,k,permute_l,m1
10
double precision l(m,k),u(k,n),a(m,n)
11
double precision p(m1,m1)
13
cf2py intent(in,copy) :: a
14
cf2py intent(out) :: info
15
cf2py integer intent(hide,cache),depend(k),dimension(k) :: piv
16
cf2py integer intent(hide),depend(a) :: m = shape(a,0)
17
cf2py integer intent(hide),depend(a) :: n = shape(a,1)
18
cf2py integer intent(hide),depend(m,n) :: k = (m<n?m:n)
19
cf2py intent(out) :: p,l,u
20
cf2py integer optional,intent(in):: permute_l = 0
21
cf2py integer intent(hide),depend(permute_l,m) :: m1 = (permute_l?1:m)
24
cf2py callprotoargument double*,double*,double*,double*,int*,int*,int*,int*,int*,int*,int*
26
external dgetrf,dlaswp
27
call dgetrf(m,n,a,m,piv,info)
40
if (i.le.k.and.i.le.j) then
45
if (permute_l.ne.0) then
46
call dlaswp(n,l,m,1,k,piv,1)
51
call dlaswp(m,p,m,1,k,piv,1)
55
subroutine zlu_c(p,l,u,a,m,n,k,piv,info,permute_l,m1)
56
integer m,n,piv(k),i,j,k,permute_l,m1
57
complex*16 l(m,k),u(k,n),a(m,n)
58
double precision p(m1,m1)
60
cf2py intent(in,copy) :: a
61
cf2py intent(out) :: info
62
cf2py integer intent(hide,cache),depend(k),dimension(k) :: piv
63
cf2py integer intent(hide),depend(a) :: m = shape(a,0)
64
cf2py integer intent(hide),depend(a) :: n = shape(a,1)
65
cf2py integer intent(hide),depend(m,n) :: k = (m<n?m:n)
66
cf2py intent(out) :: p,l,u
67
cf2py integer optional,intent(in):: permute_l = 0
68
cf2py integer intent(hide),depend(permute_l,m) :: m1 = (permute_l?1:m)
71
cf2py callprotoargument double*,complex_double*,complex_double*,complex_double*,int*,int*,int*,int*,int*,int*,int*
73
external zgetrf,zlaswp,dlaswp
74
call zgetrf(m,n,a,m,piv,info)
87
if (i.le.k.and.i.le.j) then
92
if (permute_l.ne.0) then
93
call zlaswp(n,l,m,1,k,piv,1)
98
call dlaswp(m,p,m,1,k,piv,1)
102
subroutine slu_c(p,l,u,a,m,n,k,piv,info,permute_l,m1)
103
integer m,n,piv(k),i,j,k,permute_l,m1
104
real l(m,k),u(k,n),a(m,n)
107
cf2py intent(in,copy) :: a
108
cf2py intent(out) :: info
109
cf2py integer intent(hide,cache),depend(k),dimension(k) :: piv
110
cf2py integer intent(hide),depend(a) :: m = shape(a,0)
111
cf2py integer intent(hide),depend(a) :: n = shape(a,1)
112
cf2py integer intent(hide),depend(m,n) :: k = (m<n?m:n)
113
cf2py intent(out) :: p,l,u
114
cf2py integer optional,intent(in):: permute_l = 0
115
cf2py integer intent(hide),depend(permute_l,m) :: m1 = (permute_l?1:m)
116
cf2py depend(m1) :: p
118
cf2py callprotoargument float*,float*,float*,float*,int*,int*,int*,int*,int*,int*,int*
120
external sgetrf,slaswp
121
call sgetrf(m,n,a,m,piv,info)
134
if (i.le.k.and.i.le.j) then
139
if (permute_l.ne.0) then
140
call slaswp(n,l,m,1,k,piv,1)
145
call slaswp(m,p,m,1,k,piv,1)
149
subroutine clu_c(p,l,u,a,m,n,k,piv,info,permute_l,m1)
150
integer m,n,piv(k),i,j,k,permute_l,m1
151
complex l(m,k),u(k,n),a(m,n)
154
cf2py intent(in,copy) :: a
155
cf2py intent(out) :: info
156
cf2py integer intent(hide,cache),depend(k),dimension(k) :: piv
157
cf2py integer intent(hide),depend(a) :: m = shape(a,0)
158
cf2py integer intent(hide),depend(a) :: n = shape(a,1)
159
cf2py integer intent(hide),depend(m,n) :: k = (m<n?m:n)
160
cf2py intent(out) :: p,l,u
161
cf2py integer optional,intent(in):: permute_l = 0
162
cf2py integer intent(hide),depend(permute_l,m) :: m1 = (permute_l?1:m)
163
cf2py depend(m1) :: p
165
cf2py callprotoargument float*,complex_float*,complex_float*,complex_float*,int*,int*,int*,int*,int*,int*,int*
167
external cgetrf,claswp,slaswp
168
call cgetrf(m,n,a,m,piv,info)
181
if (i.le.k.and.i.le.j) then
186
if (permute_l.ne.0) then
187
call claswp(n,l,m,1,k,piv,1)
192
call slaswp(m,p,m,1,k,piv,1)