diff --git a/books/bookvol10.5.pamphlet b/books/bookvol10.5.pamphlet index 2e20ffd..5fbcb2a 100644 --- a/books/bookvol10.5.pamphlet +++ b/books/bookvol10.5.pamphlet @@ -525,7 +525,7 @@ BlasLevelOne() : Exports == Implementation where ++ dcabs1(z) computes (+ (abs (realpart z)) (abs (imagpart z))) ++ ++X t1:Complex DoubleFloat := complex(1.0,0) - ++X dcabs(t1) + ++X dcabs1(t1) dasum: (SI, DX, SI) -> DF ++ dasum(n,array,incx) computes the sum of n elements in array @@ -743,7 +743,7 @@ the real part and whose cdr is the imaginary part. This fact is used in this implementation. This should really be a macro. -\begin{verbatim} +\begin{chunk}{dcabs1.f} double precision function dcabs1(z) C ORIGINAL: c double complex z,zz @@ -759,7 +759,26 @@ c NEW \end{verbatim} -\begin{chunk}{BLAS dcabs1} +\begin{chunk}{dcabs1 example} + program dcabs1EX + double complex a,b,c,d + a=COMPLEX(2.1,2.1) + b=(3.1D2,4.1D3) + c=a+b + d=dcabs1(c) + write(6,100)a + 100 format(" a=(",f10.3,",",f10.3,")") + write(6,200)b + 200 format(" b=(",f10.3,",",f10.3,")") + write(6,300)c + 300 format(" a+b=(",f10.3,",",f10.3,")") + write(6,400)d + 400 format("dcabs1(c)=(",f10.3,",",f10.3,")") + stop + end +\end{chunk} + +\begin{chunk}{BLAS 1 dcabs1} (defun dcabs1 (z) "Complex(DoubleFloat) z is a pair where (realpart . imaginarypart). The result is a DoubleFloat (+ (abs (realpart z)) (abs (imagpart z)))" @@ -769,6 +788,11 @@ c NEW (the double-float (abs (the double-float (cdr z))))))) \end{chunk} + +\begin{chunk}{BLAS 1 dcabs1 test} +(dcabs1 '(312.100 . 4102.100)) +\end{chunk} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{lsame BLAS} %\pagehead{lsame}{lsame} @@ -781,7 +805,7 @@ This has been replaced everywhere with common lisp's char-equal function which compares characters ignoring case. The type (simple-array character (*)) has been replaced everywhere which character. -\begin{verbatim} +\begin{chunk}{lsame.f} LOGICAL FUNCTION LSAME( CA, CB ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -884,7 +908,7 @@ It is called if an input parameter has an invalid value. This function has been rewritten everywhere to use the common lisp error function. -\begin{verbatim} +\begin{chunk}{xerbla.f} SUBROUTINE XERBLA( SRNAME, INFO ) * * -- LAPACK auxiliary routine (preliminary version) -- @@ -1363,7 +1387,7 @@ NOTES: \end{chunk} -\begin{verbatim} +\begin{chunk}{dasum.f} double precision function dasum(n,dx,incx) c c takes the sum of the absolute values. @@ -1408,7 +1432,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 dasum} (defun dasum (n dx incx) @@ -1774,7 +1798,7 @@ RETURN VALUES \end{chunk} -\begin{verbatim} +\begin{chunk}{daxpy.f} subroutine daxpy(n,da,dx,incx,dy,incy) c c constant times a vector plus a vector. @@ -1824,7 +1848,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 daxpy} (defun daxpy (n da dx incx dy incy) @@ -2158,7 +2182,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dcopy.f} subroutine dcopy(n,dx,incx,dy,incy) c c copies a vector, x, to a vector, y. @@ -2210,7 +2234,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 dcopy} (defun dcopy (n dx incx dy incy) @@ -2321,7 +2345,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{ddot.f} double precision function ddot(n,dx,incx,dy,incy) c c forms the dot product of two vectors. @@ -2372,7 +2396,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 ddot} (defun ddot (n dx incx dy incy) @@ -2386,89 +2410,90 @@ c (type fixnum mp1 m iy ix i)) (setf ddot 0.0) (setf dtemp 0.0) - (if (<= n 0) (go end_label)) - (if (and (= incx 1) (= incy 1)) (go label20)) - (setf ix 1) - (setf iy 1) - (if (< incx 0) - (setf ix - (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incx) - 1))) - (if (< incy 0) - (setf iy - (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incy) - 1))) - (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) - ((> i n) nil) - (tagbody - (setf dtemp - (+ dtemp - (* (f2cl-lib:fref dx-%data% (ix) ((1 *)) dx-%offset%) - (f2cl-lib:fref dy-%data% (iy) ((1 *)) dy-%offset%)))) - (setf ix (f2cl-lib:int-add ix incx)) - (setf iy (f2cl-lib:int-add iy incy)))) - (setf ddot dtemp) - (go end_label) + (when (> n 0) + (if (and (= incx 1) (= incy 1)) (go label20)) + (setf ix 1) + (setf iy 1) + (if (< incx 0) + (setf ix + (f2cl-lib:int-add + (f2cl-lib:int-mul + (the fixnum (1- n)) incx) + 1))) + (if (< incy 0) + (setf iy + (f2cl-lib:int-add + (f2cl-lib:int-mul (the fixnum (1- n)) incy) + 1))) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf dtemp + (+ dtemp + (* (f2cl-lib:fref dx-%data% (ix) ((1 *)) dx-%offset%) + (f2cl-lib:fref dy-%data% (iy) ((1 *)) dy-%offset%)))) + (setf ix (f2cl-lib:int-add ix incx)) + (setf iy (f2cl-lib:int-add iy incy)))) + (setf ddot dtemp) + (go end_label) label20 - (setf m (mod n 5)) - (if (= m 0) (go label40)) - (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) - ((> i m) nil) - (tagbody - (setf dtemp - (+ dtemp - (* (f2cl-lib:fref dx-%data% (i) ((1 *)) dx-%offset%) - (f2cl-lib:fref dy-%data% (i) ((1 *)) dy-%offset%)))))) - (if (< n 5) (go label60)) + (setf m (mod n 5)) + (if (= m 0) (go label40)) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i m) nil) + (tagbody + (setf dtemp + (+ dtemp + (* (f2cl-lib:fref dx-%data% (i) ((1 *)) dx-%offset%) + (f2cl-lib:fref dy-%data% (i) ((1 *)) dy-%offset%)))))) + (if (< n 5) (go label60)) label40 - (setf mp1 (f2cl-lib:int-add m 1)) - (f2cl-lib:fdo (i mp1 (f2cl-lib:int-add i 5)) - ((> i n) nil) - (tagbody - (setf dtemp - (+ dtemp - (* (f2cl-lib:fref dx-%data% (i) ((1 *)) dx-%offset%) - (f2cl-lib:fref dy-%data% (i) ((1 *)) dy-%offset%)) - (* - (f2cl-lib:fref dx-%data% - ((f2cl-lib:int-add i 1)) - ((1 *)) - dx-%offset%) - (f2cl-lib:fref dy-%data% - ((f2cl-lib:int-add i 1)) - ((1 *)) - dy-%offset%)) - (* - (f2cl-lib:fref dx-%data% - ((f2cl-lib:int-add i 2)) - ((1 *)) - dx-%offset%) - (f2cl-lib:fref dy-%data% - ((f2cl-lib:int-add i 2)) - ((1 *)) - dy-%offset%)) - (* - (f2cl-lib:fref dx-%data% - ((f2cl-lib:int-add i 3)) - ((1 *)) - dx-%offset%) - (f2cl-lib:fref dy-%data% - ((f2cl-lib:int-add i 3)) - ((1 *)) - dy-%offset%)) - (* - (f2cl-lib:fref dx-%data% - ((f2cl-lib:int-add i 4)) - ((1 *)) - dx-%offset%) - (f2cl-lib:fref dy-%data% - ((f2cl-lib:int-add i 4)) - ((1 *)) - dy-%offset%)))))) + (setf mp1 (f2cl-lib:int-add m 1)) + (f2cl-lib:fdo (i mp1 (f2cl-lib:int-add i 5)) + ((> i n) nil) + (tagbody + (setf dtemp + (+ dtemp + (* (f2cl-lib:fref dx-%data% (i) ((1 *)) dx-%offset%) + (f2cl-lib:fref dy-%data% (i) ((1 *)) dy-%offset%)) + (* + (f2cl-lib:fref dx-%data% + ((f2cl-lib:int-add i 1)) + ((1 *)) + dx-%offset%) + (f2cl-lib:fref dy-%data% + ((f2cl-lib:int-add i 1)) + ((1 *)) + dy-%offset%)) + (* + (f2cl-lib:fref dx-%data% + ((f2cl-lib:int-add i 2)) + ((1 *)) + dx-%offset%) + (f2cl-lib:fref dy-%data% + ((f2cl-lib:int-add i 2)) + ((1 *)) + dy-%offset%)) + (* + (f2cl-lib:fref dx-%data% + ((f2cl-lib:int-add i 3)) + ((1 *)) + dx-%offset%) + (f2cl-lib:fref dy-%data% + ((f2cl-lib:int-add i 3)) + ((1 *)) + dy-%offset%)) + (* + (f2cl-lib:fref dx-%data% + ((f2cl-lib:int-add i 4)) + ((1 *)) + dx-%offset%) + (f2cl-lib:fref dy-%data% + ((f2cl-lib:int-add i 4)) + ((1 *)) + dy-%offset%)))))) label60 - (setf ddot dtemp) + (setf ddot dtemp)) end_label (return (values ddot nil nil nil nil nil))))) @@ -2542,7 +2567,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{dnrm2.f} DOUBLE PRECISION FUNCTION DNRM2 ( N, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, N @@ -2604,7 +2629,7 @@ NOTES * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 dnrm2} (let* ((one 1.0) (zero 0.0)) @@ -2630,10 +2655,7 @@ NOTES ((> ix (f2cl-lib:int-add 1 (f2cl-lib:int-mul - (f2cl-lib:int-add n - (f2cl-lib:int-sub - 1)) - incx))) + (the fixnum (1- n)) incx))) nil) (tagbody (cond @@ -2773,7 +2795,7 @@ Returns multiple values where: \item 4 s - double-float \end{itemize} -\begin{verbatim} +\begin{chunk}{drotg.f} subroutine drotg(da,db,c,s) c c construct givens plane rotation. @@ -2802,7 +2824,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 drotg} (defun drotg (da db c s) @@ -2938,7 +2960,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{drot.f} subroutine drot (n,dx,incx,dy,incy,c,s) c c applies a plane rotation. @@ -2977,7 +2999,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 drot} (defun drot (n dx incx dy incy c s) @@ -2996,12 +3018,12 @@ c (if (< incx 0) (setf ix (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incx) + (f2cl-lib:int-mul (the fixnum (1- n)) incx) 1))) (if (< incy 0) (setf iy (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incy) + (f2cl-lib:int-mul (the fixnum (1- n)) incy) 1))) (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) ((> i n) nil) @@ -3101,7 +3123,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{dscal.f} subroutine dscal(n,da,dx,incx) c c scales a vector by a constant. @@ -3146,7 +3168,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 dscal} (defun dscal (n da dx incx) @@ -3299,7 +3321,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{dswap.f} subroutine dswap (n,dx,incx,dy,incy) c c interchanges two vectors. @@ -3357,7 +3379,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 dswap} (defun dswap (n dx incx dy incy) @@ -3376,12 +3398,12 @@ c (if (< incx 0) (setf ix (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incx) + (f2cl-lib:int-mul (the fixnum (1- n)) incx) 1))) (if (< incy 0) (setf iy (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incy) + (f2cl-lib:int-mul (the fixnum (1- n)) incy) 1))) (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) ((> i n) nil) @@ -3539,7 +3561,7 @@ Return values are: \item 3 nil \end{itemize} -\begin{verbatim} +\begin{chunk}{dzasum.f} double precision function dzasum(n,zx,incx) c c takes the sum of the absolute values. @@ -3575,7 +3597,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 dzasum} (defun dzasum (n zx incx) @@ -3684,7 +3706,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{dznrm2.f} DOUBLE PRECISION FUNCTION DZNRM2( N, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, N @@ -3753,7 +3775,7 @@ NOTES * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 dznrm2} (let* ((one 1.0) (zero 0.0)) @@ -3777,8 +3799,7 @@ NOTES ((> ix (f2cl-lib:int-add 1 (f2cl-lib:int-mul - (f2cl-lib:int-add n - (f2cl-lib:int-sub 1)) + (the fixnum (1- n)) incx))) nil) (tagbody @@ -3893,7 +3914,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{icamax.f} integer function icamax(n,cx,incx) c c finds the index of element having max. absolute value. @@ -3938,7 +3959,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 icamax} (defun icamax (n cx incx) @@ -4066,7 +4087,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{idamax.f} integer function idamax(n,dx,incx) c c finds the index of element having max. absolute value. @@ -4107,7 +4128,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 idamax} (defun idamax (n dx incx) @@ -4249,7 +4270,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{isamax.f} integer function isamax(n,sx,incx) c c finds the index of element having max. absolute value. @@ -4290,7 +4311,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 isamax} (defun isamax (n sx incx) @@ -4412,7 +4433,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{izamax.f} integer function izamax(n,zx,incx) c c finds the index of element having max. absolute value. @@ -4455,7 +4476,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 izamax} (defun izamax (n zx incx) @@ -4617,7 +4638,7 @@ Return values are: \item 6 nil \end{itemize} -\begin{verbatim} +\begin{chunk}{zaxpy.f} subroutine zaxpy(n,za,zx,incx,zy,incy) c c constant times a vector plus a vector. @@ -4653,7 +4674,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 zaxpy} (defun zaxpy (n za zx incx zy incy) @@ -4673,12 +4694,12 @@ c (if (< incx 0) (setf ix (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incx) + (f2cl-lib:int-mul (the fixnum (1- n)) incx) 1))) (if (< incy 0) (setf iy (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incy) + (f2cl-lib:int-mul (the fixnum (1- n)) incy) 1))) (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) ((> i n) nil) @@ -4779,7 +4800,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{zcopy.f} subroutine zcopy(n,zx,incx,zy,incy) c c copies a vector, x, to a vector, y. @@ -4814,7 +4835,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 zcopy} (defun zcopy (n zx incx zy incy) @@ -4832,12 +4853,12 @@ c (if (< incx 0) (setf ix (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incx) + (f2cl-lib:int-mul (the fixnum (1- n)) incx) 1))) (if (< incy 0) (setf iy (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incy) + (f2cl-lib:int-mul (the fixnum (1- n)) incy) 1))) (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) ((> i n) nil) @@ -4948,7 +4969,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{zdotc.f} double complex function zdotc(n,zx,incx,zy,incy) c c forms the dot product of a vector. @@ -4986,7 +5007,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 zdotc} (defun zdotc (n zx incx zy incy) @@ -5007,12 +5028,12 @@ c (if (< incx 0) (setf ix (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incx) + (f2cl-lib:int-mul (the fixnum (1- n)) incx) 1))) (if (< incy 0) (setf iy (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incy) + (f2cl-lib:int-mul (the fixnum (1- n)) incy) 1))) (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) ((> i n) nil) @@ -5126,7 +5147,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{zdotu.f} double complex function zdotu(n,zx,incx,zy,incy) c c forms the dot product of two vectors. @@ -5164,7 +5185,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 zdotu} (defun zdotu (n zx incx zy incy) @@ -5185,12 +5206,12 @@ c (if (< incx 0) (setf ix (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incx) + (f2cl-lib:int-mul (the fixnum (1- n)) incx) 1))) (if (< incy 0) (setf iy (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incy) + (f2cl-lib:int-mul (the fixnum (1- n)) incy) 1))) (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) ((> i n) nil) @@ -5289,7 +5310,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{zdscal.f} subroutine zdscal(n,da,zx,incx) c c scales a vector by a constant. @@ -5321,7 +5342,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 zdscal} (defun zdscal (n da zx incx) @@ -5471,7 +5492,7 @@ Returns multiple values where: \item 4 s - s \end{itemize} -\begin{verbatim} +\begin{chunk}{zrotg.f} subroutine zrotg(ca,cb,c,s) double complex ca,cb,s double precision c @@ -5494,7 +5515,7 @@ Returns multiple values where: return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 zrotg} (defun zrotg (ca cb c s) @@ -5597,7 +5618,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{zscal.f} subroutine zscal(n,za,zx,incx) c c scales a vector by a constant. @@ -5628,7 +5649,7 @@ c return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 zscal} (defun zscal (n za zx incx) @@ -5736,7 +5757,7 @@ NOTES \end{chunk} -\begin{verbatim} +\begin{chunk}{zswap.f} subroutine zswap (n,zx,incx,zy,incy) c c interchanges two vectors. @@ -5774,7 +5795,7 @@ c code for both increments equal to 1 return end -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 1 zswap} (defun zswap (n zx incx zy incy) @@ -5793,12 +5814,12 @@ c code for both increments equal to 1 (if (< incx 0) (setf ix (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incx) + (f2cl-lib:int-mul (the fixnum (1- n)) incx) 1))) (if (< incy 0) (setf iy (f2cl-lib:int-add - (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incy) + (f2cl-lib:int-mul (the fixnum (1- n)) incy) 1))) (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) ((> i n) nil) @@ -5965,7 +5986,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dgbmv.f} SUBROUTINE DGBMV ( TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX, $ BETA, Y, INCY ) * .. Scalar Arguments .. @@ -6160,7 +6181,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dgbmv} (let* ((one 1.0) (zero 0.0)) @@ -6221,19 +6242,20 @@ Man Page Details (setf kx 1)) (t (setf kx - (f2cl-lib:int-sub 1 + (the fixnum (- 1 (f2cl-lib:int-mul - (f2cl-lib:int-sub lenx 1) - incx))))) + (the fixnum (1- lenx)) + incx)))))) (cond ((> incy 0) (setf ky 1)) (t (setf ky - (f2cl-lib:int-sub 1 + (the fixnum (- 1 (f2cl-lib:int-mul - (f2cl-lib:int-sub leny 1) - incy))))) + (the fixnum (1- leny)) + incy))) +))) (cond ((/= beta one) (cond @@ -6555,7 +6577,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dgemv.f} SUBROUTINE DGEMV ( TRANS, M, N, ALPHA, A, LDA, X, INCX, $ BETA, Y, INCY ) * .. Scalar Arguments .. @@ -6737,7 +6759,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dgemv} (let* ((one 1.0) (zero 0.0)) @@ -7056,7 +7078,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dger.f} SUBROUTINE DGER ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA @@ -7154,7 +7176,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dger} (let* ((zero 0.0)) @@ -7408,7 +7430,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dsbmv.f} SUBROUTINE DSBMV ( UPLO, N, K, ALPHA, A, LDA, X, INCX, $ BETA, Y, INCY ) * .. Scalar Arguments .. @@ -7602,7 +7624,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dsbmv} (let* ((one 1.0) (zero 0.0)) @@ -8029,7 +8051,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dspmv.f} SUBROUTINE DSPMV ( UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA, BETA @@ -8217,7 +8239,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dspmv} (let* ((one 1.0) (zero 0.0)) @@ -8635,7 +8657,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dspr2.f} SUBROUTINE DSPR2 ( UPLO, N, ALPHA, X, INCX, Y, INCY, AP ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA @@ -8791,7 +8813,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dspr2} (let* ((zero 0.0)) @@ -9163,7 +9185,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dspr.f} SUBROUTINE DSPR ( UPLO, N, ALPHA, X, INCX, AP ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA @@ -9299,7 +9321,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dspr} (let* ((zero 0.0)) @@ -9612,7 +9634,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dsymv.f} SUBROUTINE DSYMV ( UPLO, N, ALPHA, A, LDA, X, INCX, $ BETA, Y, INCY ) * .. Scalar Arguments .. @@ -9796,7 +9818,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dsymv} (let* ((one 1.0) (zero 0.0)) @@ -10193,7 +10215,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dsyr2.f} SUBROUTINE DSYR2 ( UPLO, N, ALPHA, X, INCX, Y, INCY, A, LDA ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA @@ -10347,7 +10369,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dsyr2} (let* ((zero 0.0)) @@ -10701,7 +10723,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dsyr.f} SUBROUTINE DSYR ( UPLO, N, ALPHA, X, INCX, A, LDA ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA @@ -10833,7 +10855,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dsyr} (let* ((zero 0.0)) @@ -11158,7 +11180,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dtbmv.f} SUBROUTINE DTBMV ( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, K, LDA, N @@ -11383,7 +11405,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dtbmv} (let* ((zero 0.0)) @@ -11982,7 +12004,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dtbsv.f} SUBROUTINE DTBSV ( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, K, LDA, N @@ -12207,7 +12229,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dtbsv} (let* ((zero 0.0)) @@ -12289,7 +12311,7 @@ Man Page Details ((1 lda) (1 *)) a-%offset%)))) (setf temp - (f2cl-lib:fref x-%data% (j) ((1 *)) x-%offset%)) + (f2cl-lib:fref x-%data% (j) ((1 *)) x-%offset%)) (f2cl-lib:fdo (i (f2cl-lib:int-add j (f2cl-lib:int-sub 1)) @@ -12299,7 +12321,7 @@ Man Page Details (max (the fixnum 1) (the fixnum (f2cl-lib:int-add j - (f2cl-lib:int-sub + (f2cl-lib:int-sub k))))) nil) (tagbody @@ -12361,7 +12383,7 @@ Man Page Details (max (the fixnum 1) (the fixnum (f2cl-lib:int-add j - (f2cl-lib:int-sub + (f2cl-lib:int-sub k))))) nil) (tagbody @@ -12770,7 +12792,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dtpmv.f} SUBROUTINE DTPMV ( UPLO, TRANS, DIAG, N, AP, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, N @@ -12992,7 +13014,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dtpmv} (let* ((zero 0.0)) @@ -13557,7 +13579,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dtpsv.f} SUBROUTINE DTPSV ( UPLO, TRANS, DIAG, N, AP, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, N @@ -13779,7 +13801,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dtpsv} (let* ((zero 0.0)) @@ -14344,7 +14366,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dtrmv.f} SUBROUTINE DTRMV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, LDA, N @@ -14550,7 +14572,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dtrmv} (let* ((zero 0.0)) @@ -15056,7 +15078,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dtrsv.f} SUBROUTINE DTRSV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, LDA, N @@ -15262,7 +15284,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 dtrsv} (let* ((zero 0.0)) @@ -15794,7 +15816,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zgbmv.f} SUBROUTINE ZGBMV ( TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX, $ BETA, Y, INCY ) * .. Scalar Arguments .. @@ -16007,7 +16029,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 zgbmv} (let* ((one (complex 1.0 0.0)) (zero (complex 0.0 0.0))) @@ -16461,7 +16483,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zgemv.f} SUBROUTINE ZGEMV ( TRANS, M, N, ALPHA, A, LDA, X, INCX, $ BETA, Y, INCY ) * .. Scalar Arguments .. @@ -16660,7 +16682,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 zgemv} (let* ((one (complex 1.0 0.0)) (zero (complex 0.0 0.0))) @@ -17018,7 +17040,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zgerc.f} SUBROUTINE ZGERC ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA ) * .. Scalar Arguments .. COMPLEX*16 ALPHA @@ -17116,7 +17138,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 zgerc} (let* ((zero (complex 0.0 0.0))) @@ -17327,7 +17349,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zgeru.f} SUBROUTINE ZGERU ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA ) * .. Scalar Arguments .. COMPLEX*16 ALPHA @@ -17425,7 +17447,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 zgeru} (let* ((zero (complex 0.0 0.0))) @@ -17682,7 +17704,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zhbmv.f} SUBROUTINE ZHBMV ( UPLO, N, K, ALPHA, A, LDA, X, INCX, $ BETA, Y, INCY ) * .. Scalar Arguments .. @@ -17880,7 +17902,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 zhbmv} (let* ((one (complex 1.0 0.0)) (zero (complex 0.0 0.0))) @@ -18318,7 +18340,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zhemv.f} SUBROUTINE ZHEMV ( UPLO, N, ALPHA, A, LDA, X, INCX, $ BETA, Y, INCY ) * .. Scalar Arguments .. @@ -18504,7 +18526,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 zhemv} (let* ((one (complex 1.0 0.0)) (zero (complex 0.0 0.0))) @@ -18911,7 +18933,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zher2.f} SUBROUTINE ZHER2 ( UPLO, N, ALPHA, X, INCX, Y, INCY, A, LDA ) * .. Scalar Arguments .. COMPLEX*16 ALPHA @@ -19081,7 +19103,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 zher2} (let* ((zero (complex 0.0 0.0))) @@ -19614,7 +19636,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zher.f} SUBROUTINE ZHER ( UPLO, N, ALPHA, X, INCX, A, LDA ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA @@ -19758,7 +19780,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 zher} (let* ((zero (complex 0.0 0.0))) @@ -20193,7 +20215,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zhpmv.f} SUBROUTINE ZHPMV ( UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY ) * .. Scalar Arguments .. COMPLEX*16 ALPHA, BETA @@ -20386,7 +20408,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 zhpmv} (let* ((one (complex 1.0 0.0)) (zero (complex 0.0 0.0))) @@ -20813,7 +20835,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zhpr2.f} SUBROUTINE ZHPR2 ( UPLO, N, ALPHA, X, INCX, Y, INCY, AP ) * .. Scalar Arguments .. COMPLEX*16 ALPHA @@ -20988,7 +21010,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 zhpr2} (let* ((zero (complex 0.0 0.0))) @@ -21539,7 +21561,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zhpr.f} SUBROUTINE ZHPR ( UPLO, N, ALPHA, X, INCX, AP ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA @@ -21691,7 +21713,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 zhpr} (let* ((zero (complex 0.0 0.0))) @@ -22182,7 +22204,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{ztbmv.f} SUBROUTINE ZTBMV ( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, K, LDA, N @@ -22442,7 +22464,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 ztbmv} (let* ((zero (complex 0.0 0.0))) @@ -22751,7 +22773,7 @@ Man Page Details (max (the fixnum 1) (the fixnum (f2cl-lib:int-add j - (f2cl-lib:int-sub + (f2cl-lib:int-sub k))))) nil) (tagbody @@ -22785,7 +22807,7 @@ Man Page Details (max (the fixnum 1) (the fixnum (f2cl-lib:int-add j - (f2cl-lib:int-sub + (f2cl-lib:int-sub k))))) nil) (tagbody @@ -22837,7 +22859,7 @@ Man Page Details (max (the fixnum 1) (the fixnum (f2cl-lib:int-add j - (f2cl-lib:int-sub + (f2cl-lib:int-sub k))))) nil) (tagbody @@ -22872,7 +22894,7 @@ Man Page Details (max (the fixnum 1) (the fixnum (f2cl-lib:int-add j - (f2cl-lib:int-sub + (f2cl-lib:int-sub k))))) nil) (tagbody @@ -23192,7 +23214,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{ztbsv.f} SUBROUTINE ZTBSV ( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, K, LDA, N @@ -23452,7 +23474,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 ztbsv} (let* ((zero (complex 0.0 0.0))) @@ -23545,7 +23567,7 @@ Man Page Details (max (the fixnum 1) (the fixnum (f2cl-lib:int-add j - (f2cl-lib:int-sub + (f2cl-lib:int-sub k))))) nil) (tagbody @@ -23607,7 +23629,7 @@ Man Page Details (max (the fixnum 1) (the fixnum (f2cl-lib:int-add j - (f2cl-lib:int-sub + (f2cl-lib:int-sub k))))) nil) (tagbody @@ -24164,7 +24186,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{ztpmv.f} SUBROUTINE ZTPMV ( UPLO, TRANS, DIAG, N, AP, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, N @@ -24425,7 +24447,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 ztpmv} (let* ((zero (complex 0.0 0.0))) @@ -25126,7 +25148,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{ztpsv.f} SUBROUTINE ZTPSV ( UPLO, TRANS, DIAG, N, AP, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, N @@ -25387,7 +25409,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 ztpsv} (let* ((zero (complex 0.0 0.0))) @@ -26100,7 +26122,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{ztrmv.f} SUBROUTINE ZTRMV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, LDA, N @@ -26341,7 +26363,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 ztrmv} (let* ((zero (complex 0.0 0.0))) @@ -26971,7 +26993,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{ztrsv.f} SUBROUTINE ZTRSV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, LDA, N @@ -27212,7 +27234,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 2 ztrsv} (let* ((zero (complex 0.0 0.0))) @@ -27878,7 +27900,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dgemm.f} SUBROUTINE DGEMM ( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, $ BETA, C, LDC ) * .. Scalar Arguments .. @@ -28082,7 +28104,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 dgemm} (let* ((one 1.0) (zero 0.0)) @@ -28120,9 +28142,11 @@ Man Page Details (setf nrowb n))) (setf info 0) (cond - ((and (not nota) (not (char-equal transa #\C)) (not (char-equal transa #\T))) + ((and (not nota) (not (char-equal transa #\C)) + (not (char-equal transa #\T))) (setf info 1)) - ((and (not notb) (not (char-equal transb #\C)) (not (char-equal transb #\T))) + ((and (not notb) (not (char-equal transb #\C)) + (not (char-equal transb #\T))) (setf info 2)) ((< m 0) (setf info 3)) @@ -28533,7 +28557,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dsymm.f} SUBROUTINE DSYMM ( SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, $ BETA, C, LDC ) * .. Scalar Arguments .. @@ -28714,7 +28738,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 dsymm} (let* ((one 1.0) (zero 0.0)) @@ -29224,7 +29248,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dsyr2k.f} SUBROUTINE DSYR2K( UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, $ BETA, C, LDC ) * .. Scalar Arguments .. @@ -29436,7 +29460,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 dsyr2k} (let* ((one 1.0) (zero 0.0)) @@ -29946,7 +29970,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dsyrk.f} SUBROUTINE DSYRK ( UPLO, TRANS, N, K, ALPHA, A, LDA, $ BETA, C, LDC ) * .. Scalar Arguments .. @@ -30143,7 +30167,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 dsyrk} (let* ((one 1.0) (zero 0.0)) @@ -30600,7 +30624,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dtrmm.f} SUBROUTINE DTRMM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, $ B, LDB ) * .. Scalar Arguments .. @@ -30850,7 +30874,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 dtrmm} (let* ((one 1.0) (zero 0.0)) @@ -31489,7 +31513,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dtrsm.f} SUBROUTINE DTRSM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, $ B, LDB ) * .. Scalar Arguments .. @@ -31760,7 +31784,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 dtrsm} (let* ((one 1.0) (zero 0.0)) @@ -32472,7 +32496,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zgemm.f} SUBROUTINE ZGEMM ( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, $ BETA, C, LDC ) * .. Scalar Arguments .. @@ -32778,7 +32802,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 zgemm} (let* ((one (complex 1.0 0.0)) (zero (complex 0.0 0.0))) @@ -33455,7 +33479,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zhemm.f} SUBROUTINE ZHEMM ( SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, $ BETA, C, LDC ) * .. Scalar Arguments .. @@ -33644,7 +33668,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 zhemm} (let* ((one (complex 1.0 0.0)) (zero (complex 0.0 0.0))) @@ -34167,7 +34191,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zher2k.f} SUBROUTINE ZHER2K( UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA, $ C, LDC ) * .. Scalar Arguments .. @@ -34422,7 +34446,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 zher2k} (let* ((one 1.0) (zero (complex 0.0 0.0))) @@ -35153,7 +35177,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zherk.f} SUBROUTINE ZHERK( UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC ) * .. Scalar Arguments .. CHARACTER TRANS, UPLO @@ -35385,7 +35409,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 zherk} (let* ((one 1.0) (zero 0.0)) @@ -36069,7 +36093,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zsymm.f} SUBROUTINE ZSYMM ( SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, $ BETA, C, LDC ) * .. Scalar Arguments .. @@ -36252,7 +36276,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 zsymm} (let* ((one (complex 1.0 0.0)) (zero (complex 0.0 0.0))) @@ -36757,7 +36781,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zsyr2k.f} SUBROUTINE ZSYR2K( UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, $ BETA, C, LDC ) * .. Scalar Arguments .. @@ -36969,7 +36993,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 zsyr2k} (let* ((one (complex 1.0 0.0)) (zero (complex 0.0 0.0))) @@ -37475,7 +37499,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zsyrk.f} SUBROUTINE ZSYRK ( UPLO, TRANS, N, K, ALPHA, A, LDA, $ BETA, C, LDC ) * .. Scalar Arguments .. @@ -37673,7 +37697,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 zsyrk} (let* ((one (complex 1.0 0.0)) (zero (complex 0.0 0.0))) @@ -38124,7 +38148,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{ztrmm.f} SUBROUTINE ZTRMM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, $ B, LDB ) * .. Scalar Arguments .. @@ -38411,7 +38435,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 ztrmm} (let* ((one (complex 1.0 0.0)) (zero (complex 0.0 0.0))) @@ -39151,7 +39175,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{ztrsm.f} SUBROUTINE ZTRSM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, $ B, LDB ) * .. Scalar Arguments .. @@ -39458,7 +39482,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{BLAS 3 ztrsm} (let* ((one (complex 1.0 0.0)) (zero (complex 0.0 0.0))) @@ -40319,7 +40343,7 @@ The return values are: \calls{dbdsdc}{xerbla} \calls{dbdsdc}{char-equal} -\begin{verbatim} +\begin{chunk}{dbdsdc.f} SUBROUTINE DBDSDC( UPLO, COMPQ, N, D, E, U, LDU, VT, LDVT, Q, IQ, $ WORK, IWORK, INFO ) * @@ -40635,7 +40659,7 @@ The return values are: * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dbdsdc} (let* ((zero 0.0) (one 1.0) (two 2.0)) @@ -41224,7 +41248,7 @@ PARAMETERS \end{chunk} -\begin{verbatim} +\begin{chunk}{dbdsqr.f} SUBROUTINE DBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U, $ LDU, C, LDC, WORK, INFO ) * @@ -41845,7 +41869,7 @@ PARAMETERS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dbdsqr} (let* ((zero 0.0) @@ -43068,7 +43092,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{ddisna.f} SUBROUTINE DDISNA( JOB, M, N, D, SEP, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -43198,7 +43222,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK ddisna} (let* ((zero 0.0)) @@ -43437,7 +43461,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgebak.f} SUBROUTINE DGEBAK( JOB, SIDE, N, ILO, IHI, SCALE, M, V, LDV, $ INFO ) * @@ -43578,7 +43602,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgebak} (let* ((one 1.0)) @@ -43822,7 +43846,7 @@ FURTHER DETAILS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgebal.f} SUBROUTINE DGEBAL( JOB, N, A, LDA, ILO, IHI, SCALE, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -44062,7 +44086,7 @@ FURTHER DETAILS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgebal} (let* ((zero 0.0) (one 1.0) (sclfac 8.0) (factor 0.95)) @@ -44425,7 +44449,7 @@ FURTHER DETAILS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgebd2.f} SUBROUTINE DGEBD2( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -44556,7 +44580,7 @@ FURTHER DETAILS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgebd2} (let* ((zero 0.0) (one 1.0)) @@ -44925,7 +44949,7 @@ FURTHER DETAILS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgebrd.f} SUBROUTINE DGEBRD( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, LWORK, $ INFO ) * @@ -45076,7 +45100,7 @@ FURTHER DETAILS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgebrd} (let* ((one 1.0)) @@ -45390,7 +45414,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgeev.f} SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR, $ LDVR, WORK, LWORK, INFO ) * @@ -45705,7 +45729,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgeev} (let* ((zero 0.0) (one 1.0)) @@ -46449,7 +46473,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgeevx.f} SUBROUTINE DGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, WR, WI, $ VL, LDVL, VR, LDVR, ILO, IHI, SCALE, ABNRM, $ RCONDE, RCONDV, WORK, LWORK, IWORK, INFO ) @@ -46819,7 +46843,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgeevx} (let* ((zero 0.0) (one 1.0)) @@ -47562,7 +47586,7 @@ FURTHER DETAILS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgehd2.f} SUBROUTINE DGEHD2( N, ILO, IHI, A, LDA, TAU, WORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -47640,7 +47664,7 @@ FURTHER DETAILS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgehd2} (let* ((one 1.0)) @@ -47845,7 +47869,7 @@ FURTHER DETAILS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgehrd.f} SUBROUTINE DGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -48016,7 +48040,7 @@ FURTHER DETAILS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgehrd} (let* ((nbmax 64) (ldt (+ nbmax 1)) (zero 0.0) (one 1.0)) @@ -48276,7 +48300,7 @@ FURTHER DETAILS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgelq2.f} SUBROUTINE DGELQ2( M, N, A, LDA, TAU, WORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -48349,7 +48373,7 @@ FURTHER DETAILS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgelq2} (let* ((one 1.0)) @@ -48514,7 +48538,7 @@ FURTHER DETAILS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgelqf.f} SUBROUTINE DGELQF( M, N, A, LDA, TAU, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -48650,7 +48674,7 @@ FURTHER DETAILS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgelqf} (defun dgelqf (m n a lda tau work lwork info) @@ -48849,7 +48873,7 @@ FURTHER DETAILS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgeqr2.f} SUBROUTINE DGEQR2( M, N, A, LDA, TAU, WORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -48922,7 +48946,7 @@ FURTHER DETAILS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgeqr2} (let* ((one 1.0)) @@ -49085,7 +49109,7 @@ FURTHER DETAILS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgeqrf.f} SUBROUTINE DGEQRF( M, N, A, LDA, TAU, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -49221,7 +49245,7 @@ FURTHER DETAILS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgeqrf} (defun dgeqrf (m n a lda tau work lwork info) @@ -49494,7 +49518,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgesdd.f} SUBROUTINE DGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT, WORK, $ LWORK, IWORK, INFO ) * @@ -50706,7 +50730,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgesdd} (let* ((zero 0.0) (one 1.0)) @@ -52754,525 +52778,3840 @@ SYNOPSIS DOUBLE PRECISION A( LDA, * ), S( * ), U( LDU, * ), VT( LDVT, * ), WORK( * ) -PURPOSE - DGESVD computes the singular value decomposition (SVD) of a real M-by-N - matrix A, optionally computing the left and/or right singular vectors. - The SVD is written + Purpose + ======= - A = U * SIGMA * transpose(V) + DGESVD computes the singular value decomposition (SVD) of a real + M-by-N matrix A, optionally computing the left and/or right singular + vectors. The SVD is written - where SIGMA is an M-by-N matrix which is zero except for its min(m,n) - diagonal elements, U is an M-by-M orthogonal matrix, and V is an N-by-N - orthogonal matrix. The diagonal elements of SIGMA are the singular - values of A; they are real and non-negative, and are returned in - descending order. The first min(m,n) columns of U and V are the left - and right singular vectors of A. + A = U * SIGMA * transpose(V) - Note that the routine returns V**T, not V. + where SIGMA is an M-by-N matrix which is zero except for its + min(m,n) diagonal elements, U is an M-by-M orthogonal matrix, and + V is an N-by-N orthogonal matrix. The diagonal elements of SIGMA + are the singular values of A; they are real and non-negative, and + are returned in descending order. The first min(m,n) columns of + U and V are the left and right singular vectors of A. + Note that the routine returns V**T, not V. -ARGUMENTS - JOBU (input) CHARACTER*1 - Specifies options for computing all or part of the matrix U: - = 'A': all M columns of U are returned in array U: - = 'S': the first min(m,n) columns of U (the left singular vec- - tors) are returned in the array U; = 'O': the first min(m,n) - columns of U (the left singular vectors) are overwritten on the - array A; = 'N': no columns of U (no left singular vectors) are - computed. - - JOBVT (input) CHARACTER*1 - Specifies options for computing all or part of the matrix V**T: - = 'A': all N rows of V**T are returned in the array VT; - = 'S': the first min(m,n) rows of V**T (the right singular - vectors) are returned in the array VT; = 'O': the first - min(m,n) rows of V**T (the right singular vectors) are over- - written on the array A; = 'N': no rows of V**T (no right sin- - gular vectors) are computed. - - JOBVT and JOBU cannot both be 'O'. + Arguments + ========= - M (input) INTEGER - The number of rows of the input matrix A. M >= 0. + JOBU (input) CHARACTER*1 + Specifies options for computing all or part of the matrix U: + = 'A': all M columns of U are returned in array U: + = 'S': the first min(m,n) columns of U (the left singular + vectors) are returned in the array U; + = 'O': the first min(m,n) columns of U (the left singular + vectors) are overwritten on the array A; + = 'N': no columns of U (no left singular vectors) are + computed. - N (input) INTEGER - The number of columns of the input matrix A. N >= 0. + JOBVT (input) CHARACTER*1 + Specifies options for computing all or part of the matrix + V**T: + = 'A': all N rows of V**T are returned in the array VT; + = 'S': the first min(m,n) rows of V**T (the right singular + vectors) are returned in the array VT; + = 'O': the first min(m,n) rows of V**T (the right singular + vectors) are overwritten on the array A; + = 'N': no rows of V**T (no right singular vectors) are + computed. - A (input/output) DOUBLE PRECISION array, dimension (LDA,N) - On entry, the M-by-N matrix A. On exit, if JOBU = 'O', A is - overwritten with the first min(m,n) columns of U (the left - singular vectors, stored columnwise); if JOBVT = 'O', A is - overwritten with the first min(m,n) rows of V**T (the right - singular vectors, stored rowwise); if JOBU .ne. 'O' and JOBVT - .ne. 'O', the contents of A are destroyed. + JOBVT and JOBU cannot both be 'O'. - LDA (input) INTEGER - The leading dimension of the array A. LDA >= max(1,M). + M (input) INTEGER + The number of rows of the input matrix A. M >= 0. - S (output) DOUBLE PRECISION array, dimension (min(M,N)) - The singular values of A, sorted so that S(i) >= S(i+1). + N (input) INTEGER + The number of columns of the input matrix A. N >= 0. - U (output) DOUBLE PRECISION array, dimension (LDU,UCOL) - (LDU,M) if JOBU = 'A' or (LDU,min(M,N)) if JOBU = 'S'. If JOBU - = 'A', U contains the M-by-M orthogonal matrix U; if JOBU = - 'S', U contains the first min(m,n) columns of U (the left sin- - gular vectors, stored columnwise); if JOBU = 'N' or 'O', U is - not referenced. + A (input/output) DOUBLE PRECISION array, dimension (LDA,N) + On entry, the M-by-N matrix A. + On exit, + if JOBU = 'O', A is overwritten with the first min(m,n) + columns of U (the left singular vectors, + stored columnwise); + if JOBVT = 'O', A is overwritten with the first min(m,n) + rows of V**T (the right singular vectors, + stored rowwise); + if JOBU .ne. 'O' and JOBVT .ne. 'O', the contents of A + are destroyed. - LDU (input) INTEGER - The leading dimension of the array U. LDU >= 1; if JOBU = 'S' - or 'A', LDU >= M. + LDA (input) INTEGER + The leading dimension of the array A. LDA >= max(1,M). - VT (output) DOUBLE PRECISION array, dimension (LDVT,N) - If JOBVT = 'A', VT contains the N-by-N orthogonal matrix V**T; - if JOBVT = 'S', VT contains the first min(m,n) rows of V**T - (the right singular vectors, stored rowwise); if JOBVT = 'N' or - 'O', VT is not referenced. + S (output) DOUBLE PRECISION array, dimension (min(M,N)) + The singular values of A, sorted so that S(i) >= S(i+1). - LDVT (input) INTEGER - The leading dimension of the array VT. LDVT >= 1; if JOBVT = - 'A', LDVT >= N; if JOBVT = 'S', LDVT >= min(M,N). + U (output) DOUBLE PRECISION array, dimension (LDU,UCOL) + (LDU,M) if JOBU = 'A' or (LDU,min(M,N)) if JOBU = 'S'. + If JOBU = 'A', U contains the M-by-M orthogonal matrix U; + if JOBU = 'S', U contains the first min(m,n) columns of U + (the left singular vectors, stored columnwise); + if JOBU = 'N' or 'O', U is not referenced. - WORK (workspace/output) DOUBLE PRECISION array, dimension - (MAX(1,LWORK)) - On exit, if INFO = 0, WORK(1) returns the optimal LWORK; if - INFO > 0, WORK(2:MIN(M,N)) contains the unconverged superdiago- - nal elements of an upper bidiagonal matrix B whose diagonal is - in S (not necessarily sorted). B satisfies A = U * B * VT, so - it has the same singular values as A, and singular vectors - related by U and VT. + LDU (input) INTEGER + The leading dimension of the array U. LDU >= 1; if + JOBU = 'S' or 'A', LDU >= M. - LWORK (input) INTEGER - The dimension of the array WORK. LWORK >= - MAX(1,3*MIN(M,N)+MAX(M,N),5*MIN(M,N)). For good performance, - LWORK should generally be larger. + VT (output) DOUBLE PRECISION array, dimension (LDVT,N) + If JOBVT = 'A', VT contains the N-by-N orthogonal matrix + V**T; + if JOBVT = 'S', VT contains the first min(m,n) rows of + V**T (the right singular vectors, stored rowwise); + if JOBVT = 'N' or 'O', VT is not referenced. - If LWORK = -1, then a workspace query is assumed; the routine - only calculates the optimal size of the WORK array, returns - this value as the first entry of the WORK array, and no error - message related to LWORK is issued by XERBLA. + LDVT (input) INTEGER + The leading dimension of the array VT. LDVT >= 1; if + JOBVT = 'A', LDVT >= N; if JOBVT = 'S', LDVT >= min(M,N). - INFO (output) INTEGER - = 0: successful exit. - < 0: if INFO = -i, the i-th argument had an illegal value. - > 0: if DBDSQR did not converge, INFO specifies how many - superdiagonals of an intermediate bidiagonal form B did not - converge to zero. See the description of WORK above for - details. + WORK (workspace/output) DOUBLE PRECISION array, dimension (LWORK) + On exit, if INFO = 0, WORK(1) returns the optimal LWORK; + if INFO > 0, WORK(2:MIN(M,N)) contains the unconverged + superdiagonal elements of an upper bidiagonal matrix B + whose diagonal is in S (not necessarily sorted). B + satisfies A = U * B * VT, so it has the same singular values + as A, and singular vectors related by U and VT. + + LWORK (input) INTEGER + The dimension of the array WORK. LWORK >= 1. + LWORK >= MAX(3*MIN(M,N)+MAX(M,N),5*MIN(M,N)). + For good performance, LWORK should generally be larger. + + If LWORK = -1, then a workspace query is assumed; the routine + only calculates the optimal size of the WORK array, returns + this value as the first entry of the WORK array, and no error + message related to LWORK is issued by XERBLA. + + INFO (output) INTEGER + = 0: successful exit. + < 0: if INFO = -i, the i-th argument had an illegal value. + > 0: if DBDSQR did not converge, INFO specifies how many + superdiagonals of an intermediate bidiagonal form B + did not converge to zero. See the description of WORK + above for details. \end{chunk} -\begin{chunk}{LAPACK dgesvd} -(let* ((zero 0.0) (one 1.0)) - (declare (type (double-float 0.0 0.0) zero) - (type (double-float 1.0 1.0) one)) - (defun dgesvd (jobu jobvt m n a lda s u ldu vt ldvt work lwork info) - (declare (type (simple-array double-float (*)) work vt u s a) - (type fixnum info lwork ldvt ldu lda n m) - (type character jobvt jobu)) - (f2cl-lib:with-multi-array-data - ((jobu character jobu-%data% jobu-%offset%) - (jobvt character jobvt-%data% jobvt-%offset%) - (a double-float a-%data% a-%offset%) - (s double-float s-%data% s-%offset%) - (u double-float u-%data% u-%offset%) - (vt double-float vt-%data% vt-%offset%) - (work double-float work-%data% work-%offset%)) - (prog ((dum (make-array 1 :element-type 'double-float)) (anrm 0.0) - (bignum 0.0) (eps 0.0) (smlnum 0.0) (bdspac 0) (blk 0) (chunk 0) - (i 0) (ie 0) (ierr 0) (ir 0) (iscl 0) (itau 0) (itaup 0) (itauq 0) - (iu 0) (iwork 0) (ldwrkr 0) (ldwrku 0) (maxwrk 0) (minmn 0) - (minwrk 0) (mnthr 0) (ncu 0) (ncvt 0) (nru 0) (nrvt 0) (wrkbl 0) - (lquery nil) (wntua nil) (wntuas nil) (wntun nil) (wntuo nil) - (wntus nil) (wntva nil) (wntvas nil) (wntvn nil) (wntvo nil) - (wntvs nil)) - (declare (type (simple-array double-float (1)) dum) - (type (double-float) anrm bignum eps smlnum) - (type fixnum bdspac blk chunk i ie ierr ir iscl - itau itaup itauq iu iwork ldwrkr - ldwrku maxwrk minmn minwrk mnthr ncu - ncvt nru nrvt wrkbl) - (type (member t nil) lquery wntua wntuas wntun wntuo wntus - wntva wntvas wntvn wntvo wntvs)) - (setf info 0) - (setf minmn (min (the fixnum m) (the fixnum n))) - (setf mnthr (ilaenv 6 "DGESVD" (f2cl-lib:f2cl-// jobu jobvt) m n 0 0)) - (setf wntua (char-equal jobu #\A)) - (setf wntus (char-equal jobu #\S)) - (setf wntuas (or wntua wntus)) - (setf wntuo (char-equal jobu #\O)) - (setf wntun (char-equal jobu #\N)) - (setf wntva (char-equal jobvt #\A)) - (setf wntvs (char-equal jobvt #\S)) - (setf wntvas (or wntva wntvs)) - (setf wntvo (char-equal jobvt #\O)) - (setf wntvn (char-equal jobvt #\N)) - (setf minwrk 1) - (setf lquery (coerce (= lwork -1) '(member t nil))) - (cond - ((not (or wntua wntus wntuo wntun)) - (setf info -1)) - ((or (not (or wntva wntvs wntvo wntvn)) (and wntvo wntuo)) - (setf info -2)) - ((< m 0) - (setf info -3)) - ((< n 0) - (setf info -4)) - ((< lda (max (the fixnum 1) (the fixnum m))) - (setf info -6)) - ((or (< ldu 1) (and wntuas (< ldu m))) - (setf info -9)) - ((or (< ldvt 1) (and wntva (< ldvt n)) (and wntvs (< ldvt minmn))) - (setf info -11))) - (cond - ((and (= info 0) (or (>= lwork 1) lquery) (> m 0) (> n 0)) - (cond - ((>= m n) - (setf bdspac (f2cl-lib:int-mul 5 n)) - (cond - ((>= m mnthr) - (cond - (wntun - (setf maxwrk - (f2cl-lib:int-add n - (f2cl-lib:int-mul n - (ilaenv 1 - "DGEQRF" " " m - n -1 -1)))) - (setf maxwrk - (max (the fixnum maxwrk) - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) - (f2cl-lib:int-mul 2 - n - (ilaenv - 1 - "DGEBRD" - " " - n n - -1 - -1)))))) - (if (or wntvo wntvas) - (setf maxwrk - (max (the fixnum maxwrk) - (the fixnum - (f2cl-lib:int-add - (f2cl-lib:int-mul 3 n) - (f2cl-lib:int-mul - (f2cl-lib:int-sub n 1) - (ilaenv 1 "DORGBR" "P" n n n - -1))))))) - (setf maxwrk - (max (the fixnum maxwrk) - (the fixnum bdspac))) - (setf minwrk - (max (the fixnum (f2cl-lib:int-mul 4 n)) - (the fixnum bdspac))) - (setf maxwrk - (max (the fixnum maxwrk) - (the fixnum minwrk)))) - ((and wntuo wntvn) - (setf wrkbl - (f2cl-lib:int-add n - (f2cl-lib:int-mul n - (ilaenv 1 - "DGEQRF" " " m - n -1 -1)))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add n - (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGQR" - " " - m n - n - -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) - (f2cl-lib:int-mul 2 - n - (ilaenv - 1 - "DGEBRD" - " " - n n - -1 - -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) - (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGBR" - "Q" - n n - n - -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum bdspac))) - (setf maxwrk - (max - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul n n) - wrkbl)) - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul n n) - (f2cl-lib:int-mul m n) - n)))) - (setf minwrk - (max - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) m)) - (the fixnum bdspac))) - (setf maxwrk - (max (the fixnum maxwrk) - (the fixnum minwrk)))) - ((and wntuo wntvas) - (setf wrkbl - (f2cl-lib:int-add n - (f2cl-lib:int-mul n - (ilaenv 1 - "DGEQRF" " " m - n -1 -1)))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add n - (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGQR" - " " - m n - n - -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) - (f2cl-lib:int-mul 2 - n - (ilaenv - 1 - "DGEBRD" - " " - n n - -1 - -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) - (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGBR" - "Q" - n n - n - -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) - (f2cl-lib:int-mul - (f2cl-lib:int-sub n 1) - (ilaenv 1 "DORGBR" "P" - n n n -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum bdspac))) - (setf maxwrk - (max - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul n n) - wrkbl)) - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul n n) - (f2cl-lib:int-mul m n) - n)))) - (setf minwrk - (max - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) m)) - (the fixnum bdspac))) - (setf maxwrk - (max (the fixnum maxwrk) - (the fixnum minwrk)))) - ((and wntus wntvn) - (setf wrkbl - (f2cl-lib:int-add n - (f2cl-lib:int-mul n - (ilaenv 1 - "DGEQRF" " " m - n -1 -1)))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add n - (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGQR" - " " - m n - n - -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) - (f2cl-lib:int-mul 2 - n - (ilaenv - 1 - "DGEBRD" - " " - n n - -1 - -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) - (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGBR" - "Q" - n n - n - -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum bdspac))) - (setf maxwrk - (f2cl-lib:int-add (f2cl-lib:int-mul n n) wrkbl)) - (setf minwrk - (max - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) m)) - (the fixnum bdspac))) - (setf maxwrk - (max (the fixnum maxwrk) - (the fixnum minwrk)))) - ((and wntus wntvo) - (setf wrkbl - (f2cl-lib:int-add n - (f2cl-lib:int-mul n - (ilaenv 1 - "DGEQRF" " " m - n -1 -1)))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add n - (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGQR" - " " - m n - n - -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) - (f2cl-lib:int-mul 2 - n - (ilaenv - 1 - "DGEBRD" - " " - n n - -1 - -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) - (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGBR" - "Q" - n n - n - -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) - (f2cl-lib:int-mul - (f2cl-lib:int-sub n 1) - (ilaenv 1 "DORGBR" "P" - n n n -1)))))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum bdspac))) - (setf maxwrk - (f2cl-lib:int-add (f2cl-lib:int-mul 2 n n) wrkbl)) - (setf minwrk - (max - (the fixnum - (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) m)) - (the fixnum bdspac))) - (setf maxwrk - (max (the fixnum maxwrk) - (the fixnum minwrk)))) - ((and wntus wntvas) - (setf wrkbl - (f2cl-lib:int-add n - (f2cl-lib:int-mul n - (ilaenv 1 - "DGEQRF" " " m - n -1 -1)))) - (setf wrkbl - (max (the fixnum wrkbl) - (the fixnum - (f2cl-lib:int-add n - (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGQR" - " " - m n - n - -1)))))) +\begin{chunk}{dgesvd.f} + SUBROUTINE DGESVD( JOBU, JOBVT, M, N, A, LDA, S, U, LDU, VT, LDVT, + $ WORK, LWORK, INFO ) +* +* -- LAPACK driver routine (version 3.0) -- +* Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., +* Courant Institute, Argonne National Lab, and Rice University +* October 31, 1999 +* +* .. Scalar Arguments .. + CHARACTER JOBU, JOBVT + INTEGER INFO, LDA, LDU, LDVT, LWORK, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), S( * ), U( LDU, * ), + $ VT( LDVT, * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + LOGICAL LQUERY, WNTUA, WNTUAS, WNTUN, WNTUO, WNTUS, + $ WNTVA, WNTVAS, WNTVN, WNTVO, WNTVS + INTEGER BDSPAC, BLK, CHUNK, I, IE, IERR, IR, ISCL, + $ ITAU, ITAUP, ITAUQ, IU, IWORK, LDWRKR, LDWRKU, + $ MAXWRK, MINMN, MINWRK, MNTHR, NCU, NCVT, NRU, + $ NRVT, WRKBL + DOUBLE PRECISION ANRM, BIGNUM, EPS, SMLNUM +* .. +* .. Local Arrays .. + DOUBLE PRECISION DUM( 1 ) +* .. +* .. External Subroutines .. + EXTERNAL DBDSQR, DGEBRD, DGELQF, DGEMM, DGEQRF, DLACPY, + $ DLASCL, DLASET, DORGBR, DORGLQ, DORGQR, DORMBR, + $ XERBLA +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER ILAENV + DOUBLE PRECISION DLAMCH, DLANGE + EXTERNAL LSAME, ILAENV, DLAMCH, DLANGE +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN, SQRT +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 + MINMN = MIN( M, N ) + MNTHR = ILAENV( 6, 'DGESVD', JOBU // JOBVT, M, N, 0, 0 ) + WNTUA = LSAME( JOBU, 'A' ) + WNTUS = LSAME( JOBU, 'S' ) + WNTUAS = WNTUA .OR. WNTUS + WNTUO = LSAME( JOBU, 'O' ) + WNTUN = LSAME( JOBU, 'N' ) + WNTVA = LSAME( JOBVT, 'A' ) + WNTVS = LSAME( JOBVT, 'S' ) + WNTVAS = WNTVA .OR. WNTVS + WNTVO = LSAME( JOBVT, 'O' ) + WNTVN = LSAME( JOBVT, 'N' ) + MINWRK = 1 + LQUERY = ( LWORK.EQ.-1 ) +* + IF( .NOT.( WNTUA .OR. WNTUS .OR. WNTUO .OR. WNTUN ) ) THEN + INFO = -1 + ELSE IF( .NOT.( WNTVA .OR. WNTVS .OR. WNTVO .OR. WNTVN ) .OR. + $ ( WNTVO .AND. WNTUO ) ) THEN + INFO = -2 + ELSE IF( M.LT.0 ) THEN + INFO = -3 + ELSE IF( N.LT.0 ) THEN + INFO = -4 + ELSE IF( LDA.LT.MAX( 1, M ) ) THEN + INFO = -6 + ELSE IF( LDU.LT.1 .OR. ( WNTUAS .AND. LDU.LT.M ) ) THEN + INFO = -9 + ELSE IF( LDVT.LT.1 .OR. ( WNTVA .AND. LDVT.LT.N ) .OR. + $ ( WNTVS .AND. LDVT.LT.MINMN ) ) THEN + INFO = -11 + END IF +* +* Compute workspace +* (Note: Comments in the code beginning "Workspace:" describe the +* minimal amount of workspace needed at that point in the code, +* as well as the preferred amount for good performance. +* NB refers to the optimal block size for the immediately +* following subroutine, as returned by ILAENV.) +* + IF( INFO.EQ.0 .AND. ( LWORK.GE.1 .OR. LQUERY ) .AND. M.GT.0 .AND. + $ N.GT.0 ) THEN + IF( M.GE.N ) THEN +* +* Compute space needed for DBDSQR +* + BDSPAC = 5*N + IF( M.GE.MNTHR ) THEN + IF( WNTUN ) THEN +* +* Path 1 (M much larger than N, JOBU='N') +* + MAXWRK = N + N*ILAENV( 1, 'DGEQRF', ' ', M, N, -1, + $ -1 ) + MAXWRK = MAX( MAXWRK, 3*N+2*N* + $ ILAENV( 1, 'DGEBRD', ' ', N, N, -1, -1 ) ) + IF( WNTVO .OR. WNTVAS ) + $ MAXWRK = MAX( MAXWRK, 3*N+( N-1 )* + $ ILAENV( 1, 'DORGBR', 'P', N, N, N, -1 ) ) + MAXWRK = MAX( MAXWRK, BDSPAC ) + MINWRK = MAX( 4*N, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTUO .AND. WNTVN ) THEN +* +* Path 2 (M much larger than N, JOBU='O', JOBVT='N') +* + WRKBL = N + N*ILAENV( 1, 'DGEQRF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, N+N*ILAENV( 1, 'DORGQR', ' ', M, + $ N, N, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+2*N* + $ ILAENV( 1, 'DGEBRD', ' ', N, N, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+N* + $ ILAENV( 1, 'DORGBR', 'Q', N, N, N, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = MAX( N*N+WRKBL, N*N+M*N+N ) + MINWRK = MAX( 3*N+M, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTUO .AND. WNTVAS ) THEN +* +* Path 3 (M much larger than N, JOBU='O', JOBVT='S' or +* 'A') +* + WRKBL = N + N*ILAENV( 1, 'DGEQRF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, N+N*ILAENV( 1, 'DORGQR', ' ', M, + $ N, N, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+2*N* + $ ILAENV( 1, 'DGEBRD', ' ', N, N, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+N* + $ ILAENV( 1, 'DORGBR', 'Q', N, N, N, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+( N-1 )* + $ ILAENV( 1, 'DORGBR', 'P', N, N, N, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = MAX( N*N+WRKBL, N*N+M*N+N ) + MINWRK = MAX( 3*N+M, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTUS .AND. WNTVN ) THEN +* +* Path 4 (M much larger than N, JOBU='S', JOBVT='N') +* + WRKBL = N + N*ILAENV( 1, 'DGEQRF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, N+N*ILAENV( 1, 'DORGQR', ' ', M, + $ N, N, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+2*N* + $ ILAENV( 1, 'DGEBRD', ' ', N, N, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+N* + $ ILAENV( 1, 'DORGBR', 'Q', N, N, N, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = N*N + WRKBL + MINWRK = MAX( 3*N+M, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTUS .AND. WNTVO ) THEN +* +* Path 5 (M much larger than N, JOBU='S', JOBVT='O') +* + WRKBL = N + N*ILAENV( 1, 'DGEQRF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, N+N*ILAENV( 1, 'DORGQR', ' ', M, + $ N, N, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+2*N* + $ ILAENV( 1, 'DGEBRD', ' ', N, N, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+N* + $ ILAENV( 1, 'DORGBR', 'Q', N, N, N, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+( N-1 )* + $ ILAENV( 1, 'DORGBR', 'P', N, N, N, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = 2*N*N + WRKBL + MINWRK = MAX( 3*N+M, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTUS .AND. WNTVAS ) THEN +* +* Path 6 (M much larger than N, JOBU='S', JOBVT='S' or +* 'A') +* + WRKBL = N + N*ILAENV( 1, 'DGEQRF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, N+N*ILAENV( 1, 'DORGQR', ' ', M, + $ N, N, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+2*N* + $ ILAENV( 1, 'DGEBRD', ' ', N, N, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+N* + $ ILAENV( 1, 'DORGBR', 'Q', N, N, N, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+( N-1 )* + $ ILAENV( 1, 'DORGBR', 'P', N, N, N, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = N*N + WRKBL + MINWRK = MAX( 3*N+M, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTUA .AND. WNTVN ) THEN +* +* Path 7 (M much larger than N, JOBU='A', JOBVT='N') +* + WRKBL = N + N*ILAENV( 1, 'DGEQRF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, N+M*ILAENV( 1, 'DORGQR', ' ', M, + $ M, N, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+2*N* + $ ILAENV( 1, 'DGEBRD', ' ', N, N, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+N* + $ ILAENV( 1, 'DORGBR', 'Q', N, N, N, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = N*N + WRKBL + MINWRK = MAX( 3*N+M, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTUA .AND. WNTVO ) THEN +* +* Path 8 (M much larger than N, JOBU='A', JOBVT='O') +* + WRKBL = N + N*ILAENV( 1, 'DGEQRF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, N+M*ILAENV( 1, 'DORGQR', ' ', M, + $ M, N, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+2*N* + $ ILAENV( 1, 'DGEBRD', ' ', N, N, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+N* + $ ILAENV( 1, 'DORGBR', 'Q', N, N, N, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+( N-1 )* + $ ILAENV( 1, 'DORGBR', 'P', N, N, N, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = 2*N*N + WRKBL + MINWRK = MAX( 3*N+M, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTUA .AND. WNTVAS ) THEN +* +* Path 9 (M much larger than N, JOBU='A', JOBVT='S' or +* 'A') +* + WRKBL = N + N*ILAENV( 1, 'DGEQRF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, N+M*ILAENV( 1, 'DORGQR', ' ', M, + $ M, N, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+2*N* + $ ILAENV( 1, 'DGEBRD', ' ', N, N, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+N* + $ ILAENV( 1, 'DORGBR', 'Q', N, N, N, -1 ) ) + WRKBL = MAX( WRKBL, 3*N+( N-1 )* + $ ILAENV( 1, 'DORGBR', 'P', N, N, N, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = N*N + WRKBL + MINWRK = MAX( 3*N+M, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + END IF + ELSE +* +* Path 10 (M at least N, but not much larger) +* + MAXWRK = 3*N + ( M+N )*ILAENV( 1, 'DGEBRD', ' ', M, N, + $ -1, -1 ) + IF( WNTUS .OR. WNTUO ) + $ MAXWRK = MAX( MAXWRK, 3*N+N* + $ ILAENV( 1, 'DORGBR', 'Q', M, N, N, -1 ) ) + IF( WNTUA ) + $ MAXWRK = MAX( MAXWRK, 3*N+M* + $ ILAENV( 1, 'DORGBR', 'Q', M, M, N, -1 ) ) + IF( .NOT.WNTVN ) + $ MAXWRK = MAX( MAXWRK, 3*N+( N-1 )* + $ ILAENV( 1, 'DORGBR', 'P', N, N, N, -1 ) ) + MAXWRK = MAX( MAXWRK, BDSPAC ) + MINWRK = MAX( 3*N+M, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + END IF + ELSE +* +* Compute space needed for DBDSQR +* + BDSPAC = 5*M + IF( N.GE.MNTHR ) THEN + IF( WNTVN ) THEN +* +* Path 1t(N much larger than M, JOBVT='N') +* + MAXWRK = M + M*ILAENV( 1, 'DGELQF', ' ', M, N, -1, + $ -1 ) + MAXWRK = MAX( MAXWRK, 3*M+2*M* + $ ILAENV( 1, 'DGEBRD', ' ', M, M, -1, -1 ) ) + IF( WNTUO .OR. WNTUAS ) + $ MAXWRK = MAX( MAXWRK, 3*M+M* + $ ILAENV( 1, 'DORGBR', 'Q', M, M, M, -1 ) ) + MAXWRK = MAX( MAXWRK, BDSPAC ) + MINWRK = MAX( 4*M, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTVO .AND. WNTUN ) THEN +* +* Path 2t(N much larger than M, JOBU='N', JOBVT='O') +* + WRKBL = M + M*ILAENV( 1, 'DGELQF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, M+M*ILAENV( 1, 'DORGLQ', ' ', M, + $ N, M, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+2*M* + $ ILAENV( 1, 'DGEBRD', ' ', M, M, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+( M-1 )* + $ ILAENV( 1, 'DORGBR', 'P', M, M, M, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = MAX( M*M+WRKBL, M*M+M*N+M ) + MINWRK = MAX( 3*M+N, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTVO .AND. WNTUAS ) THEN +* +* Path 3t(N much larger than M, JOBU='S' or 'A', +* JOBVT='O') +* + WRKBL = M + M*ILAENV( 1, 'DGELQF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, M+M*ILAENV( 1, 'DORGLQ', ' ', M, + $ N, M, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+2*M* + $ ILAENV( 1, 'DGEBRD', ' ', M, M, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+( M-1 )* + $ ILAENV( 1, 'DORGBR', 'P', M, M, M, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+M* + $ ILAENV( 1, 'DORGBR', 'Q', M, M, M, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = MAX( M*M+WRKBL, M*M+M*N+M ) + MINWRK = MAX( 3*M+N, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTVS .AND. WNTUN ) THEN +* +* Path 4t(N much larger than M, JOBU='N', JOBVT='S') +* + WRKBL = M + M*ILAENV( 1, 'DGELQF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, M+M*ILAENV( 1, 'DORGLQ', ' ', M, + $ N, M, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+2*M* + $ ILAENV( 1, 'DGEBRD', ' ', M, M, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+( M-1 )* + $ ILAENV( 1, 'DORGBR', 'P', M, M, M, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = M*M + WRKBL + MINWRK = MAX( 3*M+N, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTVS .AND. WNTUO ) THEN +* +* Path 5t(N much larger than M, JOBU='O', JOBVT='S') +* + WRKBL = M + M*ILAENV( 1, 'DGELQF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, M+M*ILAENV( 1, 'DORGLQ', ' ', M, + $ N, M, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+2*M* + $ ILAENV( 1, 'DGEBRD', ' ', M, M, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+( M-1 )* + $ ILAENV( 1, 'DORGBR', 'P', M, M, M, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+M* + $ ILAENV( 1, 'DORGBR', 'Q', M, M, M, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = 2*M*M + WRKBL + MINWRK = MAX( 3*M+N, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTVS .AND. WNTUAS ) THEN +* +* Path 6t(N much larger than M, JOBU='S' or 'A', +* JOBVT='S') +* + WRKBL = M + M*ILAENV( 1, 'DGELQF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, M+M*ILAENV( 1, 'DORGLQ', ' ', M, + $ N, M, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+2*M* + $ ILAENV( 1, 'DGEBRD', ' ', M, M, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+( M-1 )* + $ ILAENV( 1, 'DORGBR', 'P', M, M, M, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+M* + $ ILAENV( 1, 'DORGBR', 'Q', M, M, M, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = M*M + WRKBL + MINWRK = MAX( 3*M+N, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTVA .AND. WNTUN ) THEN +* +* Path 7t(N much larger than M, JOBU='N', JOBVT='A') +* + WRKBL = M + M*ILAENV( 1, 'DGELQF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, M+N*ILAENV( 1, 'DORGLQ', ' ', N, + $ N, M, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+2*M* + $ ILAENV( 1, 'DGEBRD', ' ', M, M, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+( M-1 )* + $ ILAENV( 1, 'DORGBR', 'P', M, M, M, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = M*M + WRKBL + MINWRK = MAX( 3*M+N, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTVA .AND. WNTUO ) THEN +* +* Path 8t(N much larger than M, JOBU='O', JOBVT='A') +* + WRKBL = M + M*ILAENV( 1, 'DGELQF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, M+N*ILAENV( 1, 'DORGLQ', ' ', N, + $ N, M, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+2*M* + $ ILAENV( 1, 'DGEBRD', ' ', M, M, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+( M-1 )* + $ ILAENV( 1, 'DORGBR', 'P', M, M, M, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+M* + $ ILAENV( 1, 'DORGBR', 'Q', M, M, M, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = 2*M*M + WRKBL + MINWRK = MAX( 3*M+N, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + ELSE IF( WNTVA .AND. WNTUAS ) THEN +* +* Path 9t(N much larger than M, JOBU='S' or 'A', +* JOBVT='A') +* + WRKBL = M + M*ILAENV( 1, 'DGELQF', ' ', M, N, -1, -1 ) + WRKBL = MAX( WRKBL, M+N*ILAENV( 1, 'DORGLQ', ' ', N, + $ N, M, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+2*M* + $ ILAENV( 1, 'DGEBRD', ' ', M, M, -1, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+( M-1 )* + $ ILAENV( 1, 'DORGBR', 'P', M, M, M, -1 ) ) + WRKBL = MAX( WRKBL, 3*M+M* + $ ILAENV( 1, 'DORGBR', 'Q', M, M, M, -1 ) ) + WRKBL = MAX( WRKBL, BDSPAC ) + MAXWRK = M*M + WRKBL + MINWRK = MAX( 3*M+N, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + END IF + ELSE +* +* Path 10t(N greater than M, but not much larger) +* + MAXWRK = 3*M + ( M+N )*ILAENV( 1, 'DGEBRD', ' ', M, N, + $ -1, -1 ) + IF( WNTVS .OR. WNTVO ) + $ MAXWRK = MAX( MAXWRK, 3*M+M* + $ ILAENV( 1, 'DORGBR', 'P', M, N, M, -1 ) ) + IF( WNTVA ) + $ MAXWRK = MAX( MAXWRK, 3*M+N* + $ ILAENV( 1, 'DORGBR', 'P', N, N, M, -1 ) ) + IF( .NOT.WNTUN ) + $ MAXWRK = MAX( MAXWRK, 3*M+( M-1 )* + $ ILAENV( 1, 'DORGBR', 'Q', M, M, M, -1 ) ) + MAXWRK = MAX( MAXWRK, BDSPAC ) + MINWRK = MAX( 3*M+N, BDSPAC ) + MAXWRK = MAX( MAXWRK, MINWRK ) + END IF + END IF + WORK( 1 ) = MAXWRK + END IF +* + IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN + INFO = -13 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DGESVD', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( M.EQ.0 .OR. N.EQ.0 ) THEN + IF( LWORK.GE.1 ) + $ WORK( 1 ) = ONE + RETURN + END IF +* +* Get machine constants +* + EPS = DLAMCH( 'P' ) + SMLNUM = SQRT( DLAMCH( 'S' ) ) / EPS + BIGNUM = ONE / SMLNUM +* +* Scale A if max element outside range [SMLNUM,BIGNUM] +* + ANRM = DLANGE( 'M', M, N, A, LDA, DUM ) + ISCL = 0 + IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN + ISCL = 1 + CALL DLASCL( 'G', 0, 0, ANRM, SMLNUM, M, N, A, LDA, IERR ) + ELSE IF( ANRM.GT.BIGNUM ) THEN + ISCL = 1 + CALL DLASCL( 'G', 0, 0, ANRM, BIGNUM, M, N, A, LDA, IERR ) + END IF +* + IF( M.GE.N ) THEN +* +* A has at least as many rows as columns. If A has sufficiently +* more rows than columns, first reduce using the QR +* decomposition (if sufficient workspace available) +* + IF( M.GE.MNTHR ) THEN +* + IF( WNTUN ) THEN +* +* Path 1 (M much larger than N, JOBU='N') +* No left singular vectors to be computed +* + ITAU = 1 + IWORK = ITAU + N +* +* Compute A=Q*R +* (Workspace: need 2*N, prefer N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Zero out below R +* + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, A( 2, 1 ), LDA ) + IE = 1 + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize R in A +* (Workspace: need 4*N, prefer 3*N+2*N*NB) +* + CALL DGEBRD( N, N, A, LDA, S, WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), LWORK-IWORK+1, + $ IERR ) + NCVT = 0 + IF( WNTVO .OR. WNTVAS ) THEN +* +* If right singular vectors desired, generate P'. +* (Workspace: need 4*N-1, prefer 3*N+(N-1)*NB) +* + CALL DORGBR( 'P', N, N, N, A, LDA, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + NCVT = N + END IF + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing right +* singular vectors of A in A if desired +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', N, NCVT, 0, 0, S, WORK( IE ), A, LDA, + $ DUM, 1, DUM, 1, WORK( IWORK ), INFO ) +* +* If right singular vectors desired in VT, copy them there +* + IF( WNTVAS ) + $ CALL DLACPY( 'F', N, N, A, LDA, VT, LDVT ) +* + ELSE IF( WNTUO .AND. WNTVN ) THEN +* +* Path 2 (M much larger than N, JOBU='O', JOBVT='N') +* N left singular vectors to be overwritten on A and +* no right singular vectors to be computed +* + IF( LWORK.GE.N*N+MAX( 4*N, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IR = 1 + IF( LWORK.GE.MAX( WRKBL, LDA*N+N )+LDA*N ) THEN +* +* WORK(IU) is LDA by N, WORK(IR) is LDA by N +* + LDWRKU = LDA + LDWRKR = LDA + ELSE IF( LWORK.GE.MAX( WRKBL, LDA*N+N )+N*N ) THEN +* +* WORK(IU) is LDA by N, WORK(IR) is N by N +* + LDWRKU = LDA + LDWRKR = N + ELSE +* +* WORK(IU) is LDWRKU by N, WORK(IR) is N by N +* + LDWRKU = ( LWORK-N*N-N ) / N + LDWRKR = N + END IF + ITAU = IR + LDWRKR*N + IWORK = ITAU + N +* +* Compute A=Q*R +* (Workspace: need N*N+2*N, prefer N*N+N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy R to WORK(IR) and zero out below it +* + CALL DLACPY( 'U', N, N, A, LDA, WORK( IR ), LDWRKR ) + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, WORK( IR+1 ), + $ LDWRKR ) +* +* Generate Q in A +* (Workspace: need N*N+2*N, prefer N*N+N+N*NB) +* + CALL DORGQR( M, N, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize R in WORK(IR) +* (Workspace: need N*N+4*N, prefer N*N+3*N+2*N*NB) +* + CALL DGEBRD( N, N, WORK( IR ), LDWRKR, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Generate left vectors bidiagonalizing R +* (Workspace: need N*N+4*N, prefer N*N+3*N+N*NB) +* + CALL DORGBR( 'Q', N, N, N, WORK( IR ), LDWRKR, + $ WORK( ITAUQ ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of R in WORK(IR) +* (Workspace: need N*N+BDSPAC) +* + CALL DBDSQR( 'U', N, 0, N, 0, S, WORK( IE ), DUM, 1, + $ WORK( IR ), LDWRKR, DUM, 1, + $ WORK( IWORK ), INFO ) + IU = IE + N +* +* Multiply Q in A by left singular vectors of R in +* WORK(IR), storing result in WORK(IU) and copying to A +* (Workspace: need N*N+2*N, prefer N*N+M*N+N) +* + DO 10 I = 1, M, LDWRKU + CHUNK = MIN( M-I+1, LDWRKU ) + CALL DGEMM( 'N', 'N', CHUNK, N, N, ONE, A( I, 1 ), + $ LDA, WORK( IR ), LDWRKR, ZERO, + $ WORK( IU ), LDWRKU ) + CALL DLACPY( 'F', CHUNK, N, WORK( IU ), LDWRKU, + $ A( I, 1 ), LDA ) + 10 CONTINUE +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + IE = 1 + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize A +* (Workspace: need 3*N+M, prefer 3*N+(M+N)*NB) +* + CALL DGEBRD( M, N, A, LDA, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Generate left vectors bidiagonalizing A +* (Workspace: need 4*N, prefer 3*N+N*NB) +* + CALL DORGBR( 'Q', M, N, N, A, LDA, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of A in A +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', N, 0, M, 0, S, WORK( IE ), DUM, 1, + $ A, LDA, DUM, 1, WORK( IWORK ), INFO ) +* + END IF +* + ELSE IF( WNTUO .AND. WNTVAS ) THEN +* +* Path 3 (M much larger than N, JOBU='O', JOBVT='S' or 'A') +* N left singular vectors to be overwritten on A and +* N right singular vectors to be computed in VT +* + IF( LWORK.GE.N*N+MAX( 4*N, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IR = 1 + IF( LWORK.GE.MAX( WRKBL, LDA*N+N )+LDA*N ) THEN +* +* WORK(IU) is LDA by N and WORK(IR) is LDA by N +* + LDWRKU = LDA + LDWRKR = LDA + ELSE IF( LWORK.GE.MAX( WRKBL, LDA*N+N )+N*N ) THEN +* +* WORK(IU) is LDA by N and WORK(IR) is N by N +* + LDWRKU = LDA + LDWRKR = N + ELSE +* +* WORK(IU) is LDWRKU by N and WORK(IR) is N by N +* + LDWRKU = ( LWORK-N*N-N ) / N + LDWRKR = N + END IF + ITAU = IR + LDWRKR*N + IWORK = ITAU + N +* +* Compute A=Q*R +* (Workspace: need N*N+2*N, prefer N*N+N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy R to VT, zeroing out below it +* + CALL DLACPY( 'U', N, N, A, LDA, VT, LDVT ) + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, VT( 2, 1 ), + $ LDVT ) +* +* Generate Q in A +* (Workspace: need N*N+2*N, prefer N*N+N+N*NB) +* + CALL DORGQR( M, N, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize R in VT, copying result to WORK(IR) +* (Workspace: need N*N+4*N, prefer N*N+3*N+2*N*NB) +* + CALL DGEBRD( N, N, VT, LDVT, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', N, N, VT, LDVT, WORK( IR ), LDWRKR ) +* +* Generate left vectors bidiagonalizing R in WORK(IR) +* (Workspace: need N*N+4*N, prefer N*N+3*N+N*NB) +* + CALL DORGBR( 'Q', N, N, N, WORK( IR ), LDWRKR, + $ WORK( ITAUQ ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate right vectors bidiagonalizing R in VT +* (Workspace: need N*N+4*N-1, prefer N*N+3*N+(N-1)*NB) +* + CALL DORGBR( 'P', N, N, N, VT, LDVT, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of R in WORK(IR) and computing right +* singular vectors of R in VT +* (Workspace: need N*N+BDSPAC) +* + CALL DBDSQR( 'U', N, N, N, 0, S, WORK( IE ), VT, LDVT, + $ WORK( IR ), LDWRKR, DUM, 1, + $ WORK( IWORK ), INFO ) + IU = IE + N +* +* Multiply Q in A by left singular vectors of R in +* WORK(IR), storing result in WORK(IU) and copying to A +* (Workspace: need N*N+2*N, prefer N*N+M*N+N) +* + DO 20 I = 1, M, LDWRKU + CHUNK = MIN( M-I+1, LDWRKU ) + CALL DGEMM( 'N', 'N', CHUNK, N, N, ONE, A( I, 1 ), + $ LDA, WORK( IR ), LDWRKR, ZERO, + $ WORK( IU ), LDWRKU ) + CALL DLACPY( 'F', CHUNK, N, WORK( IU ), LDWRKU, + $ A( I, 1 ), LDA ) + 20 CONTINUE +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + N +* +* Compute A=Q*R +* (Workspace: need 2*N, prefer N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy R to VT, zeroing out below it +* + CALL DLACPY( 'U', N, N, A, LDA, VT, LDVT ) + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, VT( 2, 1 ), + $ LDVT ) +* +* Generate Q in A +* (Workspace: need 2*N, prefer N+N*NB) +* + CALL DORGQR( M, N, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize R in VT +* (Workspace: need 4*N, prefer 3*N+2*N*NB) +* + CALL DGEBRD( N, N, VT, LDVT, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply Q in A by left vectors bidiagonalizing R +* (Workspace: need 3*N+M, prefer 3*N+M*NB) +* + CALL DORMBR( 'Q', 'R', 'N', M, N, N, VT, LDVT, + $ WORK( ITAUQ ), A, LDA, WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate right vectors bidiagonalizing R in VT +* (Workspace: need 4*N-1, prefer 3*N+(N-1)*NB) +* + CALL DORGBR( 'P', N, N, N, VT, LDVT, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of A in A and computing right +* singular vectors of A in VT +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', N, N, M, 0, S, WORK( IE ), VT, LDVT, + $ A, LDA, DUM, 1, WORK( IWORK ), INFO ) +* + END IF +* + ELSE IF( WNTUS ) THEN +* + IF( WNTVN ) THEN +* +* Path 4 (M much larger than N, JOBU='S', JOBVT='N') +* N left singular vectors to be computed in U and +* no right singular vectors to be computed +* + IF( LWORK.GE.N*N+MAX( 4*N, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IR = 1 + IF( LWORK.GE.WRKBL+LDA*N ) THEN +* +* WORK(IR) is LDA by N +* + LDWRKR = LDA + ELSE +* +* WORK(IR) is N by N +* + LDWRKR = N + END IF + ITAU = IR + LDWRKR*N + IWORK = ITAU + N +* +* Compute A=Q*R +* (Workspace: need N*N+2*N, prefer N*N+N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy R to WORK(IR), zeroing out below it +* + CALL DLACPY( 'U', N, N, A, LDA, WORK( IR ), + $ LDWRKR ) + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, + $ WORK( IR+1 ), LDWRKR ) +* +* Generate Q in A +* (Workspace: need N*N+2*N, prefer N*N+N+N*NB) +* + CALL DORGQR( M, N, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize R in WORK(IR) +* (Workspace: need N*N+4*N, prefer N*N+3*N+2*N*NB) +* + CALL DGEBRD( N, N, WORK( IR ), LDWRKR, S, + $ WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate left vectors bidiagonalizing R in WORK(IR) +* (Workspace: need N*N+4*N, prefer N*N+3*N+N*NB) +* + CALL DORGBR( 'Q', N, N, N, WORK( IR ), LDWRKR, + $ WORK( ITAUQ ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of R in WORK(IR) +* (Workspace: need N*N+BDSPAC) +* + CALL DBDSQR( 'U', N, 0, N, 0, S, WORK( IE ), DUM, + $ 1, WORK( IR ), LDWRKR, DUM, 1, + $ WORK( IWORK ), INFO ) +* +* Multiply Q in A by left singular vectors of R in +* WORK(IR), storing result in U +* (Workspace: need N*N) +* + CALL DGEMM( 'N', 'N', M, N, N, ONE, A, LDA, + $ WORK( IR ), LDWRKR, ZERO, U, LDU ) +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + N +* +* Compute A=Q*R, copying result to U +* (Workspace: need 2*N, prefer N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', M, N, A, LDA, U, LDU ) +* +* Generate Q in U +* (Workspace: need 2*N, prefer N+N*NB) +* + CALL DORGQR( M, N, N, U, LDU, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Zero out below R in A +* + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, A( 2, 1 ), + $ LDA ) +* +* Bidiagonalize R in A +* (Workspace: need 4*N, prefer 3*N+2*N*NB) +* + CALL DGEBRD( N, N, A, LDA, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply Q in U by left vectors bidiagonalizing R +* (Workspace: need 3*N+M, prefer 3*N+M*NB) +* + CALL DORMBR( 'Q', 'R', 'N', M, N, N, A, LDA, + $ WORK( ITAUQ ), U, LDU, WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of A in U +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', N, 0, M, 0, S, WORK( IE ), DUM, + $ 1, U, LDU, DUM, 1, WORK( IWORK ), + $ INFO ) +* + END IF +* + ELSE IF( WNTVO ) THEN +* +* Path 5 (M much larger than N, JOBU='S', JOBVT='O') +* N left singular vectors to be computed in U and +* N right singular vectors to be overwritten on A +* + IF( LWORK.GE.2*N*N+MAX( 4*N, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IU = 1 + IF( LWORK.GE.WRKBL+2*LDA*N ) THEN +* +* WORK(IU) is LDA by N and WORK(IR) is LDA by N +* + LDWRKU = LDA + IR = IU + LDWRKU*N + LDWRKR = LDA + ELSE IF( LWORK.GE.WRKBL+( LDA+N )*N ) THEN +* +* WORK(IU) is LDA by N and WORK(IR) is N by N +* + LDWRKU = LDA + IR = IU + LDWRKU*N + LDWRKR = N + ELSE +* +* WORK(IU) is N by N and WORK(IR) is N by N +* + LDWRKU = N + IR = IU + LDWRKU*N + LDWRKR = N + END IF + ITAU = IR + LDWRKR*N + IWORK = ITAU + N +* +* Compute A=Q*R +* (Workspace: need 2*N*N+2*N, prefer 2*N*N+N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy R to WORK(IU), zeroing out below it +* + CALL DLACPY( 'U', N, N, A, LDA, WORK( IU ), + $ LDWRKU ) + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, + $ WORK( IU+1 ), LDWRKU ) +* +* Generate Q in A +* (Workspace: need 2*N*N+2*N, prefer 2*N*N+N+N*NB) +* + CALL DORGQR( M, N, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize R in WORK(IU), copying result to +* WORK(IR) +* (Workspace: need 2*N*N+4*N, +* prefer 2*N*N+3*N+2*N*NB) +* + CALL DGEBRD( N, N, WORK( IU ), LDWRKU, S, + $ WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + CALL DLACPY( 'U', N, N, WORK( IU ), LDWRKU, + $ WORK( IR ), LDWRKR ) +* +* Generate left bidiagonalizing vectors in WORK(IU) +* (Workspace: need 2*N*N+4*N, prefer 2*N*N+3*N+N*NB) +* + CALL DORGBR( 'Q', N, N, N, WORK( IU ), LDWRKU, + $ WORK( ITAUQ ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate right bidiagonalizing vectors in WORK(IR) +* (Workspace: need 2*N*N+4*N-1, +* prefer 2*N*N+3*N+(N-1)*NB) +* + CALL DORGBR( 'P', N, N, N, WORK( IR ), LDWRKR, + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of R in WORK(IU) and computing +* right singular vectors of R in WORK(IR) +* (Workspace: need 2*N*N+BDSPAC) +* + CALL DBDSQR( 'U', N, N, N, 0, S, WORK( IE ), + $ WORK( IR ), LDWRKR, WORK( IU ), + $ LDWRKU, DUM, 1, WORK( IWORK ), INFO ) +* +* Multiply Q in A by left singular vectors of R in +* WORK(IU), storing result in U +* (Workspace: need N*N) +* + CALL DGEMM( 'N', 'N', M, N, N, ONE, A, LDA, + $ WORK( IU ), LDWRKU, ZERO, U, LDU ) +* +* Copy right singular vectors of R to A +* (Workspace: need N*N) +* + CALL DLACPY( 'F', N, N, WORK( IR ), LDWRKR, A, + $ LDA ) +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + N +* +* Compute A=Q*R, copying result to U +* (Workspace: need 2*N, prefer N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', M, N, A, LDA, U, LDU ) +* +* Generate Q in U +* (Workspace: need 2*N, prefer N+N*NB) +* + CALL DORGQR( M, N, N, U, LDU, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Zero out below R in A +* + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, A( 2, 1 ), + $ LDA ) +* +* Bidiagonalize R in A +* (Workspace: need 4*N, prefer 3*N+2*N*NB) +* + CALL DGEBRD( N, N, A, LDA, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply Q in U by left vectors bidiagonalizing R +* (Workspace: need 3*N+M, prefer 3*N+M*NB) +* + CALL DORMBR( 'Q', 'R', 'N', M, N, N, A, LDA, + $ WORK( ITAUQ ), U, LDU, WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate right vectors bidiagonalizing R in A +* (Workspace: need 4*N-1, prefer 3*N+(N-1)*NB) +* + CALL DORGBR( 'P', N, N, N, A, LDA, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of A in U and computing right +* singular vectors of A in A +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', N, N, M, 0, S, WORK( IE ), A, + $ LDA, U, LDU, DUM, 1, WORK( IWORK ), + $ INFO ) +* + END IF +* + ELSE IF( WNTVAS ) THEN +* +* Path 6 (M much larger than N, JOBU='S', JOBVT='S' +* or 'A') +* N left singular vectors to be computed in U and +* N right singular vectors to be computed in VT +* + IF( LWORK.GE.N*N+MAX( 4*N, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IU = 1 + IF( LWORK.GE.WRKBL+LDA*N ) THEN +* +* WORK(IU) is LDA by N +* + LDWRKU = LDA + ELSE +* +* WORK(IU) is N by N +* + LDWRKU = N + END IF + ITAU = IU + LDWRKU*N + IWORK = ITAU + N +* +* Compute A=Q*R +* (Workspace: need N*N+2*N, prefer N*N+N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy R to WORK(IU), zeroing out below it +* + CALL DLACPY( 'U', N, N, A, LDA, WORK( IU ), + $ LDWRKU ) + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, + $ WORK( IU+1 ), LDWRKU ) +* +* Generate Q in A +* (Workspace: need N*N+2*N, prefer N*N+N+N*NB) +* + CALL DORGQR( M, N, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize R in WORK(IU), copying result to VT +* (Workspace: need N*N+4*N, prefer N*N+3*N+2*N*NB) +* + CALL DGEBRD( N, N, WORK( IU ), LDWRKU, S, + $ WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + CALL DLACPY( 'U', N, N, WORK( IU ), LDWRKU, VT, + $ LDVT ) +* +* Generate left bidiagonalizing vectors in WORK(IU) +* (Workspace: need N*N+4*N, prefer N*N+3*N+N*NB) +* + CALL DORGBR( 'Q', N, N, N, WORK( IU ), LDWRKU, + $ WORK( ITAUQ ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate right bidiagonalizing vectors in VT +* (Workspace: need N*N+4*N-1, +* prefer N*N+3*N+(N-1)*NB) +* + CALL DORGBR( 'P', N, N, N, VT, LDVT, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of R in WORK(IU) and computing +* right singular vectors of R in VT +* (Workspace: need N*N+BDSPAC) +* + CALL DBDSQR( 'U', N, N, N, 0, S, WORK( IE ), VT, + $ LDVT, WORK( IU ), LDWRKU, DUM, 1, + $ WORK( IWORK ), INFO ) +* +* Multiply Q in A by left singular vectors of R in +* WORK(IU), storing result in U +* (Workspace: need N*N) +* + CALL DGEMM( 'N', 'N', M, N, N, ONE, A, LDA, + $ WORK( IU ), LDWRKU, ZERO, U, LDU ) +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + N +* +* Compute A=Q*R, copying result to U +* (Workspace: need 2*N, prefer N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', M, N, A, LDA, U, LDU ) +* +* Generate Q in U +* (Workspace: need 2*N, prefer N+N*NB) +* + CALL DORGQR( M, N, N, U, LDU, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy R to VT, zeroing out below it +* + CALL DLACPY( 'U', N, N, A, LDA, VT, LDVT ) + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, VT( 2, 1 ), + $ LDVT ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize R in VT +* (Workspace: need 4*N, prefer 3*N+2*N*NB) +* + CALL DGEBRD( N, N, VT, LDVT, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply Q in U by left bidiagonalizing vectors +* in VT +* (Workspace: need 3*N+M, prefer 3*N+M*NB) +* + CALL DORMBR( 'Q', 'R', 'N', M, N, N, VT, LDVT, + $ WORK( ITAUQ ), U, LDU, WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate right bidiagonalizing vectors in VT +* (Workspace: need 4*N-1, prefer 3*N+(N-1)*NB) +* + CALL DORGBR( 'P', N, N, N, VT, LDVT, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of A in U and computing right +* singular vectors of A in VT +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', N, N, M, 0, S, WORK( IE ), VT, + $ LDVT, U, LDU, DUM, 1, WORK( IWORK ), + $ INFO ) +* + END IF +* + END IF +* + ELSE IF( WNTUA ) THEN +* + IF( WNTVN ) THEN +* +* Path 7 (M much larger than N, JOBU='A', JOBVT='N') +* M left singular vectors to be computed in U and +* no right singular vectors to be computed +* + IF( LWORK.GE.N*N+MAX( N+M, 4*N, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IR = 1 + IF( LWORK.GE.WRKBL+LDA*N ) THEN +* +* WORK(IR) is LDA by N +* + LDWRKR = LDA + ELSE +* +* WORK(IR) is N by N +* + LDWRKR = N + END IF + ITAU = IR + LDWRKR*N + IWORK = ITAU + N +* +* Compute A=Q*R, copying result to U +* (Workspace: need N*N+2*N, prefer N*N+N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', M, N, A, LDA, U, LDU ) +* +* Copy R to WORK(IR), zeroing out below it +* + CALL DLACPY( 'U', N, N, A, LDA, WORK( IR ), + $ LDWRKR ) + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, + $ WORK( IR+1 ), LDWRKR ) +* +* Generate Q in U +* (Workspace: need N*N+N+M, prefer N*N+N+M*NB) +* + CALL DORGQR( M, M, N, U, LDU, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize R in WORK(IR) +* (Workspace: need N*N+4*N, prefer N*N+3*N+2*N*NB) +* + CALL DGEBRD( N, N, WORK( IR ), LDWRKR, S, + $ WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate left bidiagonalizing vectors in WORK(IR) +* (Workspace: need N*N+4*N, prefer N*N+3*N+N*NB) +* + CALL DORGBR( 'Q', N, N, N, WORK( IR ), LDWRKR, + $ WORK( ITAUQ ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of R in WORK(IR) +* (Workspace: need N*N+BDSPAC) +* + CALL DBDSQR( 'U', N, 0, N, 0, S, WORK( IE ), DUM, + $ 1, WORK( IR ), LDWRKR, DUM, 1, + $ WORK( IWORK ), INFO ) +* +* Multiply Q in U by left singular vectors of R in +* WORK(IR), storing result in A +* (Workspace: need N*N) +* + CALL DGEMM( 'N', 'N', M, N, N, ONE, U, LDU, + $ WORK( IR ), LDWRKR, ZERO, A, LDA ) +* +* Copy left singular vectors of A from A to U +* + CALL DLACPY( 'F', M, N, A, LDA, U, LDU ) +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + N +* +* Compute A=Q*R, copying result to U +* (Workspace: need 2*N, prefer N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', M, N, A, LDA, U, LDU ) +* +* Generate Q in U +* (Workspace: need N+M, prefer N+M*NB) +* + CALL DORGQR( M, M, N, U, LDU, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Zero out below R in A +* + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, A( 2, 1 ), + $ LDA ) +* +* Bidiagonalize R in A +* (Workspace: need 4*N, prefer 3*N+2*N*NB) +* + CALL DGEBRD( N, N, A, LDA, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply Q in U by left bidiagonalizing vectors +* in A +* (Workspace: need 3*N+M, prefer 3*N+M*NB) +* + CALL DORMBR( 'Q', 'R', 'N', M, N, N, A, LDA, + $ WORK( ITAUQ ), U, LDU, WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of A in U +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', N, 0, M, 0, S, WORK( IE ), DUM, + $ 1, U, LDU, DUM, 1, WORK( IWORK ), + $ INFO ) +* + END IF +* + ELSE IF( WNTVO ) THEN +* +* Path 8 (M much larger than N, JOBU='A', JOBVT='O') +* M left singular vectors to be computed in U and +* N right singular vectors to be overwritten on A +* + IF( LWORK.GE.2*N*N+MAX( N+M, 4*N, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IU = 1 + IF( LWORK.GE.WRKBL+2*LDA*N ) THEN +* +* WORK(IU) is LDA by N and WORK(IR) is LDA by N +* + LDWRKU = LDA + IR = IU + LDWRKU*N + LDWRKR = LDA + ELSE IF( LWORK.GE.WRKBL+( LDA+N )*N ) THEN +* +* WORK(IU) is LDA by N and WORK(IR) is N by N +* + LDWRKU = LDA + IR = IU + LDWRKU*N + LDWRKR = N + ELSE +* +* WORK(IU) is N by N and WORK(IR) is N by N +* + LDWRKU = N + IR = IU + LDWRKU*N + LDWRKR = N + END IF + ITAU = IR + LDWRKR*N + IWORK = ITAU + N +* +* Compute A=Q*R, copying result to U +* (Workspace: need 2*N*N+2*N, prefer 2*N*N+N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', M, N, A, LDA, U, LDU ) +* +* Generate Q in U +* (Workspace: need 2*N*N+N+M, prefer 2*N*N+N+M*NB) +* + CALL DORGQR( M, M, N, U, LDU, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy R to WORK(IU), zeroing out below it +* + CALL DLACPY( 'U', N, N, A, LDA, WORK( IU ), + $ LDWRKU ) + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, + $ WORK( IU+1 ), LDWRKU ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize R in WORK(IU), copying result to +* WORK(IR) +* (Workspace: need 2*N*N+4*N, +* prefer 2*N*N+3*N+2*N*NB) +* + CALL DGEBRD( N, N, WORK( IU ), LDWRKU, S, + $ WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + CALL DLACPY( 'U', N, N, WORK( IU ), LDWRKU, + $ WORK( IR ), LDWRKR ) +* +* Generate left bidiagonalizing vectors in WORK(IU) +* (Workspace: need 2*N*N+4*N, prefer 2*N*N+3*N+N*NB) +* + CALL DORGBR( 'Q', N, N, N, WORK( IU ), LDWRKU, + $ WORK( ITAUQ ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate right bidiagonalizing vectors in WORK(IR) +* (Workspace: need 2*N*N+4*N-1, +* prefer 2*N*N+3*N+(N-1)*NB) +* + CALL DORGBR( 'P', N, N, N, WORK( IR ), LDWRKR, + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of R in WORK(IU) and computing +* right singular vectors of R in WORK(IR) +* (Workspace: need 2*N*N+BDSPAC) +* + CALL DBDSQR( 'U', N, N, N, 0, S, WORK( IE ), + $ WORK( IR ), LDWRKR, WORK( IU ), + $ LDWRKU, DUM, 1, WORK( IWORK ), INFO ) +* +* Multiply Q in U by left singular vectors of R in +* WORK(IU), storing result in A +* (Workspace: need N*N) +* + CALL DGEMM( 'N', 'N', M, N, N, ONE, U, LDU, + $ WORK( IU ), LDWRKU, ZERO, A, LDA ) +* +* Copy left singular vectors of A from A to U +* + CALL DLACPY( 'F', M, N, A, LDA, U, LDU ) +* +* Copy right singular vectors of R from WORK(IR) to A +* + CALL DLACPY( 'F', N, N, WORK( IR ), LDWRKR, A, + $ LDA ) +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + N +* +* Compute A=Q*R, copying result to U +* (Workspace: need 2*N, prefer N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', M, N, A, LDA, U, LDU ) +* +* Generate Q in U +* (Workspace: need N+M, prefer N+M*NB) +* + CALL DORGQR( M, M, N, U, LDU, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Zero out below R in A +* + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, A( 2, 1 ), + $ LDA ) +* +* Bidiagonalize R in A +* (Workspace: need 4*N, prefer 3*N+2*N*NB) +* + CALL DGEBRD( N, N, A, LDA, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply Q in U by left bidiagonalizing vectors +* in A +* (Workspace: need 3*N+M, prefer 3*N+M*NB) +* + CALL DORMBR( 'Q', 'R', 'N', M, N, N, A, LDA, + $ WORK( ITAUQ ), U, LDU, WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate right bidiagonalizing vectors in A +* (Workspace: need 4*N-1, prefer 3*N+(N-1)*NB) +* + CALL DORGBR( 'P', N, N, N, A, LDA, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of A in U and computing right +* singular vectors of A in A +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', N, N, M, 0, S, WORK( IE ), A, + $ LDA, U, LDU, DUM, 1, WORK( IWORK ), + $ INFO ) +* + END IF +* + ELSE IF( WNTVAS ) THEN +* +* Path 9 (M much larger than N, JOBU='A', JOBVT='S' +* or 'A') +* M left singular vectors to be computed in U and +* N right singular vectors to be computed in VT +* + IF( LWORK.GE.N*N+MAX( N+M, 4*N, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IU = 1 + IF( LWORK.GE.WRKBL+LDA*N ) THEN +* +* WORK(IU) is LDA by N +* + LDWRKU = LDA + ELSE +* +* WORK(IU) is N by N +* + LDWRKU = N + END IF + ITAU = IU + LDWRKU*N + IWORK = ITAU + N +* +* Compute A=Q*R, copying result to U +* (Workspace: need N*N+2*N, prefer N*N+N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', M, N, A, LDA, U, LDU ) +* +* Generate Q in U +* (Workspace: need N*N+N+M, prefer N*N+N+M*NB) +* + CALL DORGQR( M, M, N, U, LDU, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy R to WORK(IU), zeroing out below it +* + CALL DLACPY( 'U', N, N, A, LDA, WORK( IU ), + $ LDWRKU ) + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, + $ WORK( IU+1 ), LDWRKU ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize R in WORK(IU), copying result to VT +* (Workspace: need N*N+4*N, prefer N*N+3*N+2*N*NB) +* + CALL DGEBRD( N, N, WORK( IU ), LDWRKU, S, + $ WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + CALL DLACPY( 'U', N, N, WORK( IU ), LDWRKU, VT, + $ LDVT ) +* +* Generate left bidiagonalizing vectors in WORK(IU) +* (Workspace: need N*N+4*N, prefer N*N+3*N+N*NB) +* + CALL DORGBR( 'Q', N, N, N, WORK( IU ), LDWRKU, + $ WORK( ITAUQ ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate right bidiagonalizing vectors in VT +* (Workspace: need N*N+4*N-1, +* prefer N*N+3*N+(N-1)*NB) +* + CALL DORGBR( 'P', N, N, N, VT, LDVT, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of R in WORK(IU) and computing +* right singular vectors of R in VT +* (Workspace: need N*N+BDSPAC) +* + CALL DBDSQR( 'U', N, N, N, 0, S, WORK( IE ), VT, + $ LDVT, WORK( IU ), LDWRKU, DUM, 1, + $ WORK( IWORK ), INFO ) +* +* Multiply Q in U by left singular vectors of R in +* WORK(IU), storing result in A +* (Workspace: need N*N) +* + CALL DGEMM( 'N', 'N', M, N, N, ONE, U, LDU, + $ WORK( IU ), LDWRKU, ZERO, A, LDA ) +* +* Copy left singular vectors of A from A to U +* + CALL DLACPY( 'F', M, N, A, LDA, U, LDU ) +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + N +* +* Compute A=Q*R, copying result to U +* (Workspace: need 2*N, prefer N+N*NB) +* + CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', M, N, A, LDA, U, LDU ) +* +* Generate Q in U +* (Workspace: need N+M, prefer N+M*NB) +* + CALL DORGQR( M, M, N, U, LDU, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy R from A to VT, zeroing out below it +* + CALL DLACPY( 'U', N, N, A, LDA, VT, LDVT ) + CALL DLASET( 'L', N-1, N-1, ZERO, ZERO, VT( 2, 1 ), + $ LDVT ) + IE = ITAU + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize R in VT +* (Workspace: need 4*N, prefer 3*N+2*N*NB) +* + CALL DGEBRD( N, N, VT, LDVT, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply Q in U by left bidiagonalizing vectors +* in VT +* (Workspace: need 3*N+M, prefer 3*N+M*NB) +* + CALL DORMBR( 'Q', 'R', 'N', M, N, N, VT, LDVT, + $ WORK( ITAUQ ), U, LDU, WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate right bidiagonalizing vectors in VT +* (Workspace: need 4*N-1, prefer 3*N+(N-1)*NB) +* + CALL DORGBR( 'P', N, N, N, VT, LDVT, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + N +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of A in U and computing right +* singular vectors of A in VT +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', N, N, M, 0, S, WORK( IE ), VT, + $ LDVT, U, LDU, DUM, 1, WORK( IWORK ), + $ INFO ) +* + END IF +* + END IF +* + END IF +* + ELSE +* +* M .LT. MNTHR +* +* Path 10 (M at least N, but not much larger) +* Reduce to bidiagonal form without QR decomposition +* + IE = 1 + ITAUQ = IE + N + ITAUP = ITAUQ + N + IWORK = ITAUP + N +* +* Bidiagonalize A +* (Workspace: need 3*N+M, prefer 3*N+(M+N)*NB) +* + CALL DGEBRD( M, N, A, LDA, S, WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), LWORK-IWORK+1, + $ IERR ) + IF( WNTUAS ) THEN +* +* If left singular vectors desired in U, copy result to U +* and generate left bidiagonalizing vectors in U +* (Workspace: need 3*N+NCU, prefer 3*N+NCU*NB) +* + CALL DLACPY( 'L', M, N, A, LDA, U, LDU ) + IF( WNTUS ) + $ NCU = N + IF( WNTUA ) + $ NCU = M + CALL DORGBR( 'Q', M, NCU, N, U, LDU, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + END IF + IF( WNTVAS ) THEN +* +* If right singular vectors desired in VT, copy result to +* VT and generate right bidiagonalizing vectors in VT +* (Workspace: need 4*N-1, prefer 3*N+(N-1)*NB) +* + CALL DLACPY( 'U', N, N, A, LDA, VT, LDVT ) + CALL DORGBR( 'P', N, N, N, VT, LDVT, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + END IF + IF( WNTUO ) THEN +* +* If left singular vectors desired in A, generate left +* bidiagonalizing vectors in A +* (Workspace: need 4*N, prefer 3*N+N*NB) +* + CALL DORGBR( 'Q', M, N, N, A, LDA, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + END IF + IF( WNTVO ) THEN +* +* If right singular vectors desired in A, generate right +* bidiagonalizing vectors in A +* (Workspace: need 4*N-1, prefer 3*N+(N-1)*NB) +* + CALL DORGBR( 'P', N, N, N, A, LDA, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + END IF + IWORK = IE + N + IF( WNTUAS .OR. WNTUO ) + $ NRU = M + IF( WNTUN ) + $ NRU = 0 + IF( WNTVAS .OR. WNTVO ) + $ NCVT = N + IF( WNTVN ) + $ NCVT = 0 + IF( ( .NOT.WNTUO ) .AND. ( .NOT.WNTVO ) ) THEN +* +* Perform bidiagonal QR iteration, if desired, computing +* left singular vectors in U and computing right singular +* vectors in VT +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', N, NCVT, NRU, 0, S, WORK( IE ), VT, + $ LDVT, U, LDU, DUM, 1, WORK( IWORK ), INFO ) + ELSE IF( ( .NOT.WNTUO ) .AND. WNTVO ) THEN +* +* Perform bidiagonal QR iteration, if desired, computing +* left singular vectors in U and computing right singular +* vectors in A +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', N, NCVT, NRU, 0, S, WORK( IE ), A, LDA, + $ U, LDU, DUM, 1, WORK( IWORK ), INFO ) + ELSE +* +* Perform bidiagonal QR iteration, if desired, computing +* left singular vectors in A and computing right singular +* vectors in VT +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', N, NCVT, NRU, 0, S, WORK( IE ), VT, + $ LDVT, A, LDA, DUM, 1, WORK( IWORK ), INFO ) + END IF +* + END IF +* + ELSE +* +* A has more columns than rows. If A has sufficiently more +* columns than rows, first reduce using the LQ decomposition (if +* sufficient workspace available) +* + IF( N.GE.MNTHR ) THEN +* + IF( WNTVN ) THEN +* +* Path 1t(N much larger than M, JOBVT='N') +* No right singular vectors to be computed +* + ITAU = 1 + IWORK = ITAU + M +* +* Compute A=L*Q +* (Workspace: need 2*M, prefer M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Zero out above L +* + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, A( 1, 2 ), LDA ) + IE = 1 + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize L in A +* (Workspace: need 4*M, prefer 3*M+2*M*NB) +* + CALL DGEBRD( M, M, A, LDA, S, WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), LWORK-IWORK+1, + $ IERR ) + IF( WNTUO .OR. WNTUAS ) THEN +* +* If left singular vectors desired, generate Q +* (Workspace: need 4*M, prefer 3*M+M*NB) +* + CALL DORGBR( 'Q', M, M, M, A, LDA, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + END IF + IWORK = IE + M + NRU = 0 + IF( WNTUO .OR. WNTUAS ) + $ NRU = M +* +* Perform bidiagonal QR iteration, computing left singular +* vectors of A in A if desired +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', M, 0, NRU, 0, S, WORK( IE ), DUM, 1, A, + $ LDA, DUM, 1, WORK( IWORK ), INFO ) +* +* If left singular vectors desired in U, copy them there +* + IF( WNTUAS ) + $ CALL DLACPY( 'F', M, M, A, LDA, U, LDU ) +* + ELSE IF( WNTVO .AND. WNTUN ) THEN +* +* Path 2t(N much larger than M, JOBU='N', JOBVT='O') +* M right singular vectors to be overwritten on A and +* no left singular vectors to be computed +* + IF( LWORK.GE.M*M+MAX( 4*M, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IR = 1 + IF( LWORK.GE.MAX( WRKBL, LDA*N+M )+LDA*M ) THEN +* +* WORK(IU) is LDA by N and WORK(IR) is LDA by M +* + LDWRKU = LDA + CHUNK = N + LDWRKR = LDA + ELSE IF( LWORK.GE.MAX( WRKBL, LDA*N+M )+M*M ) THEN +* +* WORK(IU) is LDA by N and WORK(IR) is M by M +* + LDWRKU = LDA + CHUNK = N + LDWRKR = M + ELSE +* +* WORK(IU) is M by CHUNK and WORK(IR) is M by M +* + LDWRKU = M + CHUNK = ( LWORK-M*M-M ) / M + LDWRKR = M + END IF + ITAU = IR + LDWRKR*M + IWORK = ITAU + M +* +* Compute A=L*Q +* (Workspace: need M*M+2*M, prefer M*M+M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy L to WORK(IR) and zero out above it +* + CALL DLACPY( 'L', M, M, A, LDA, WORK( IR ), LDWRKR ) + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, + $ WORK( IR+LDWRKR ), LDWRKR ) +* +* Generate Q in A +* (Workspace: need M*M+2*M, prefer M*M+M+M*NB) +* + CALL DORGLQ( M, N, M, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize L in WORK(IR) +* (Workspace: need M*M+4*M, prefer M*M+3*M+2*M*NB) +* + CALL DGEBRD( M, M, WORK( IR ), LDWRKR, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Generate right vectors bidiagonalizing L +* (Workspace: need M*M+4*M-1, prefer M*M+3*M+(M-1)*NB) +* + CALL DORGBR( 'P', M, M, M, WORK( IR ), LDWRKR, + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing right +* singular vectors of L in WORK(IR) +* (Workspace: need M*M+BDSPAC) +* + CALL DBDSQR( 'U', M, M, 0, 0, S, WORK( IE ), + $ WORK( IR ), LDWRKR, DUM, 1, DUM, 1, + $ WORK( IWORK ), INFO ) + IU = IE + M +* +* Multiply right singular vectors of L in WORK(IR) by Q +* in A, storing result in WORK(IU) and copying to A +* (Workspace: need M*M+2*M, prefer M*M+M*N+M) +* + DO 30 I = 1, N, CHUNK + BLK = MIN( N-I+1, CHUNK ) + CALL DGEMM( 'N', 'N', M, BLK, M, ONE, WORK( IR ), + $ LDWRKR, A( 1, I ), LDA, ZERO, + $ WORK( IU ), LDWRKU ) + CALL DLACPY( 'F', M, BLK, WORK( IU ), LDWRKU, + $ A( 1, I ), LDA ) + 30 CONTINUE +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + IE = 1 + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize A +* (Workspace: need 3*M+N, prefer 3*M+(M+N)*NB) +* + CALL DGEBRD( M, N, A, LDA, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Generate right vectors bidiagonalizing A +* (Workspace: need 4*M, prefer 3*M+M*NB) +* + CALL DORGBR( 'P', M, N, M, A, LDA, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing right +* singular vectors of A in A +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'L', M, N, 0, 0, S, WORK( IE ), A, LDA, + $ DUM, 1, DUM, 1, WORK( IWORK ), INFO ) +* + END IF +* + ELSE IF( WNTVO .AND. WNTUAS ) THEN +* +* Path 3t(N much larger than M, JOBU='S' or 'A', JOBVT='O') +* M right singular vectors to be overwritten on A and +* M left singular vectors to be computed in U +* + IF( LWORK.GE.M*M+MAX( 4*M, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IR = 1 + IF( LWORK.GE.MAX( WRKBL, LDA*N+M )+LDA*M ) THEN +* +* WORK(IU) is LDA by N and WORK(IR) is LDA by M +* + LDWRKU = LDA + CHUNK = N + LDWRKR = LDA + ELSE IF( LWORK.GE.MAX( WRKBL, LDA*N+M )+M*M ) THEN +* +* WORK(IU) is LDA by N and WORK(IR) is M by M +* + LDWRKU = LDA + CHUNK = N + LDWRKR = M + ELSE +* +* WORK(IU) is M by CHUNK and WORK(IR) is M by M +* + LDWRKU = M + CHUNK = ( LWORK-M*M-M ) / M + LDWRKR = M + END IF + ITAU = IR + LDWRKR*M + IWORK = ITAU + M +* +* Compute A=L*Q +* (Workspace: need M*M+2*M, prefer M*M+M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy L to U, zeroing about above it +* + CALL DLACPY( 'L', M, M, A, LDA, U, LDU ) + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, U( 1, 2 ), + $ LDU ) +* +* Generate Q in A +* (Workspace: need M*M+2*M, prefer M*M+M+M*NB) +* + CALL DORGLQ( M, N, M, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize L in U, copying result to WORK(IR) +* (Workspace: need M*M+4*M, prefer M*M+3*M+2*M*NB) +* + CALL DGEBRD( M, M, U, LDU, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'U', M, M, U, LDU, WORK( IR ), LDWRKR ) +* +* Generate right vectors bidiagonalizing L in WORK(IR) +* (Workspace: need M*M+4*M-1, prefer M*M+3*M+(M-1)*NB) +* + CALL DORGBR( 'P', M, M, M, WORK( IR ), LDWRKR, + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate left vectors bidiagonalizing L in U +* (Workspace: need M*M+4*M, prefer M*M+3*M+M*NB) +* + CALL DORGBR( 'Q', M, M, M, U, LDU, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of L in U, and computing right +* singular vectors of L in WORK(IR) +* (Workspace: need M*M+BDSPAC) +* + CALL DBDSQR( 'U', M, M, M, 0, S, WORK( IE ), + $ WORK( IR ), LDWRKR, U, LDU, DUM, 1, + $ WORK( IWORK ), INFO ) + IU = IE + M +* +* Multiply right singular vectors of L in WORK(IR) by Q +* in A, storing result in WORK(IU) and copying to A +* (Workspace: need M*M+2*M, prefer M*M+M*N+M)) +* + DO 40 I = 1, N, CHUNK + BLK = MIN( N-I+1, CHUNK ) + CALL DGEMM( 'N', 'N', M, BLK, M, ONE, WORK( IR ), + $ LDWRKR, A( 1, I ), LDA, ZERO, + $ WORK( IU ), LDWRKU ) + CALL DLACPY( 'F', M, BLK, WORK( IU ), LDWRKU, + $ A( 1, I ), LDA ) + 40 CONTINUE +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + M +* +* Compute A=L*Q +* (Workspace: need 2*M, prefer M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy L to U, zeroing out above it +* + CALL DLACPY( 'L', M, M, A, LDA, U, LDU ) + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, U( 1, 2 ), + $ LDU ) +* +* Generate Q in A +* (Workspace: need 2*M, prefer M+M*NB) +* + CALL DORGLQ( M, N, M, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize L in U +* (Workspace: need 4*M, prefer 3*M+2*M*NB) +* + CALL DGEBRD( M, M, U, LDU, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply right vectors bidiagonalizing L by Q in A +* (Workspace: need 3*M+N, prefer 3*M+N*NB) +* + CALL DORMBR( 'P', 'L', 'T', M, N, M, U, LDU, + $ WORK( ITAUP ), A, LDA, WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate left vectors bidiagonalizing L in U +* (Workspace: need 4*M, prefer 3*M+M*NB) +* + CALL DORGBR( 'Q', M, M, M, U, LDU, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of A in U and computing right +* singular vectors of A in A +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', M, N, M, 0, S, WORK( IE ), A, LDA, + $ U, LDU, DUM, 1, WORK( IWORK ), INFO ) +* + END IF +* + ELSE IF( WNTVS ) THEN +* + IF( WNTUN ) THEN +* +* Path 4t(N much larger than M, JOBU='N', JOBVT='S') +* M right singular vectors to be computed in VT and +* no left singular vectors to be computed +* + IF( LWORK.GE.M*M+MAX( 4*M, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IR = 1 + IF( LWORK.GE.WRKBL+LDA*M ) THEN +* +* WORK(IR) is LDA by M +* + LDWRKR = LDA + ELSE +* +* WORK(IR) is M by M +* + LDWRKR = M + END IF + ITAU = IR + LDWRKR*M + IWORK = ITAU + M +* +* Compute A=L*Q +* (Workspace: need M*M+2*M, prefer M*M+M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy L to WORK(IR), zeroing out above it +* + CALL DLACPY( 'L', M, M, A, LDA, WORK( IR ), + $ LDWRKR ) + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, + $ WORK( IR+LDWRKR ), LDWRKR ) +* +* Generate Q in A +* (Workspace: need M*M+2*M, prefer M*M+M+M*NB) +* + CALL DORGLQ( M, N, M, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize L in WORK(IR) +* (Workspace: need M*M+4*M, prefer M*M+3*M+2*M*NB) +* + CALL DGEBRD( M, M, WORK( IR ), LDWRKR, S, + $ WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate right vectors bidiagonalizing L in +* WORK(IR) +* (Workspace: need M*M+4*M, prefer M*M+3*M+(M-1)*NB) +* + CALL DORGBR( 'P', M, M, M, WORK( IR ), LDWRKR, + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing right +* singular vectors of L in WORK(IR) +* (Workspace: need M*M+BDSPAC) +* + CALL DBDSQR( 'U', M, M, 0, 0, S, WORK( IE ), + $ WORK( IR ), LDWRKR, DUM, 1, DUM, 1, + $ WORK( IWORK ), INFO ) +* +* Multiply right singular vectors of L in WORK(IR) by +* Q in A, storing result in VT +* (Workspace: need M*M) +* + CALL DGEMM( 'N', 'N', M, N, M, ONE, WORK( IR ), + $ LDWRKR, A, LDA, ZERO, VT, LDVT ) +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + M +* +* Compute A=L*Q +* (Workspace: need 2*M, prefer M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy result to VT +* + CALL DLACPY( 'U', M, N, A, LDA, VT, LDVT ) +* +* Generate Q in VT +* (Workspace: need 2*M, prefer M+M*NB) +* + CALL DORGLQ( M, N, M, VT, LDVT, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Zero out above L in A +* + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, A( 1, 2 ), + $ LDA ) +* +* Bidiagonalize L in A +* (Workspace: need 4*M, prefer 3*M+2*M*NB) +* + CALL DGEBRD( M, M, A, LDA, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply right vectors bidiagonalizing L by Q in VT +* (Workspace: need 3*M+N, prefer 3*M+N*NB) +* + CALL DORMBR( 'P', 'L', 'T', M, N, M, A, LDA, + $ WORK( ITAUP ), VT, LDVT, + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing right +* singular vectors of A in VT +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', M, N, 0, 0, S, WORK( IE ), VT, + $ LDVT, DUM, 1, DUM, 1, WORK( IWORK ), + $ INFO ) +* + END IF +* + ELSE IF( WNTUO ) THEN +* +* Path 5t(N much larger than M, JOBU='O', JOBVT='S') +* M right singular vectors to be computed in VT and +* M left singular vectors to be overwritten on A +* + IF( LWORK.GE.2*M*M+MAX( 4*M, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IU = 1 + IF( LWORK.GE.WRKBL+2*LDA*M ) THEN +* +* WORK(IU) is LDA by M and WORK(IR) is LDA by M +* + LDWRKU = LDA + IR = IU + LDWRKU*M + LDWRKR = LDA + ELSE IF( LWORK.GE.WRKBL+( LDA+M )*M ) THEN +* +* WORK(IU) is LDA by M and WORK(IR) is M by M +* + LDWRKU = LDA + IR = IU + LDWRKU*M + LDWRKR = M + ELSE +* +* WORK(IU) is M by M and WORK(IR) is M by M +* + LDWRKU = M + IR = IU + LDWRKU*M + LDWRKR = M + END IF + ITAU = IR + LDWRKR*M + IWORK = ITAU + M +* +* Compute A=L*Q +* (Workspace: need 2*M*M+2*M, prefer 2*M*M+M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy L to WORK(IU), zeroing out below it +* + CALL DLACPY( 'L', M, M, A, LDA, WORK( IU ), + $ LDWRKU ) + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, + $ WORK( IU+LDWRKU ), LDWRKU ) +* +* Generate Q in A +* (Workspace: need 2*M*M+2*M, prefer 2*M*M+M+M*NB) +* + CALL DORGLQ( M, N, M, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize L in WORK(IU), copying result to +* WORK(IR) +* (Workspace: need 2*M*M+4*M, +* prefer 2*M*M+3*M+2*M*NB) +* + CALL DGEBRD( M, M, WORK( IU ), LDWRKU, S, + $ WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', M, M, WORK( IU ), LDWRKU, + $ WORK( IR ), LDWRKR ) +* +* Generate right bidiagonalizing vectors in WORK(IU) +* (Workspace: need 2*M*M+4*M-1, +* prefer 2*M*M+3*M+(M-1)*NB) +* + CALL DORGBR( 'P', M, M, M, WORK( IU ), LDWRKU, + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate left bidiagonalizing vectors in WORK(IR) +* (Workspace: need 2*M*M+4*M, prefer 2*M*M+3*M+M*NB) +* + CALL DORGBR( 'Q', M, M, M, WORK( IR ), LDWRKR, + $ WORK( ITAUQ ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of L in WORK(IR) and computing +* right singular vectors of L in WORK(IU) +* (Workspace: need 2*M*M+BDSPAC) +* + CALL DBDSQR( 'U', M, M, M, 0, S, WORK( IE ), + $ WORK( IU ), LDWRKU, WORK( IR ), + $ LDWRKR, DUM, 1, WORK( IWORK ), INFO ) +* +* Multiply right singular vectors of L in WORK(IU) by +* Q in A, storing result in VT +* (Workspace: need M*M) +* + CALL DGEMM( 'N', 'N', M, N, M, ONE, WORK( IU ), + $ LDWRKU, A, LDA, ZERO, VT, LDVT ) +* +* Copy left singular vectors of L to A +* (Workspace: need M*M) +* + CALL DLACPY( 'F', M, M, WORK( IR ), LDWRKR, A, + $ LDA ) +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + M +* +* Compute A=L*Q, copying result to VT +* (Workspace: need 2*M, prefer M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'U', M, N, A, LDA, VT, LDVT ) +* +* Generate Q in VT +* (Workspace: need 2*M, prefer M+M*NB) +* + CALL DORGLQ( M, N, M, VT, LDVT, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Zero out above L in A +* + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, A( 1, 2 ), + $ LDA ) +* +* Bidiagonalize L in A +* (Workspace: need 4*M, prefer 3*M+2*M*NB) +* + CALL DGEBRD( M, M, A, LDA, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply right vectors bidiagonalizing L by Q in VT +* (Workspace: need 3*M+N, prefer 3*M+N*NB) +* + CALL DORMBR( 'P', 'L', 'T', M, N, M, A, LDA, + $ WORK( ITAUP ), VT, LDVT, + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Generate left bidiagonalizing vectors of L in A +* (Workspace: need 4*M, prefer 3*M+M*NB) +* + CALL DORGBR( 'Q', M, M, M, A, LDA, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, compute left +* singular vectors of A in A and compute right +* singular vectors of A in VT +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', M, N, M, 0, S, WORK( IE ), VT, + $ LDVT, A, LDA, DUM, 1, WORK( IWORK ), + $ INFO ) +* + END IF +* + ELSE IF( WNTUAS ) THEN +* +* Path 6t(N much larger than M, JOBU='S' or 'A', +* JOBVT='S') +* M right singular vectors to be computed in VT and +* M left singular vectors to be computed in U +* + IF( LWORK.GE.M*M+MAX( 4*M, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IU = 1 + IF( LWORK.GE.WRKBL+LDA*M ) THEN +* +* WORK(IU) is LDA by N +* + LDWRKU = LDA + ELSE +* +* WORK(IU) is LDA by M +* + LDWRKU = M + END IF + ITAU = IU + LDWRKU*M + IWORK = ITAU + M +* +* Compute A=L*Q +* (Workspace: need M*M+2*M, prefer M*M+M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy L to WORK(IU), zeroing out above it +* + CALL DLACPY( 'L', M, M, A, LDA, WORK( IU ), + $ LDWRKU ) + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, + $ WORK( IU+LDWRKU ), LDWRKU ) +* +* Generate Q in A +* (Workspace: need M*M+2*M, prefer M*M+M+M*NB) +* + CALL DORGLQ( M, N, M, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize L in WORK(IU), copying result to U +* (Workspace: need M*M+4*M, prefer M*M+3*M+2*M*NB) +* + CALL DGEBRD( M, M, WORK( IU ), LDWRKU, S, + $ WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', M, M, WORK( IU ), LDWRKU, U, + $ LDU ) +* +* Generate right bidiagonalizing vectors in WORK(IU) +* (Workspace: need M*M+4*M-1, +* prefer M*M+3*M+(M-1)*NB) +* + CALL DORGBR( 'P', M, M, M, WORK( IU ), LDWRKU, + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate left bidiagonalizing vectors in U +* (Workspace: need M*M+4*M, prefer M*M+3*M+M*NB) +* + CALL DORGBR( 'Q', M, M, M, U, LDU, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of L in U and computing right +* singular vectors of L in WORK(IU) +* (Workspace: need M*M+BDSPAC) +* + CALL DBDSQR( 'U', M, M, M, 0, S, WORK( IE ), + $ WORK( IU ), LDWRKU, U, LDU, DUM, 1, + $ WORK( IWORK ), INFO ) +* +* Multiply right singular vectors of L in WORK(IU) by +* Q in A, storing result in VT +* (Workspace: need M*M) +* + CALL DGEMM( 'N', 'N', M, N, M, ONE, WORK( IU ), + $ LDWRKU, A, LDA, ZERO, VT, LDVT ) +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + M +* +* Compute A=L*Q, copying result to VT +* (Workspace: need 2*M, prefer M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'U', M, N, A, LDA, VT, LDVT ) +* +* Generate Q in VT +* (Workspace: need 2*M, prefer M+M*NB) +* + CALL DORGLQ( M, N, M, VT, LDVT, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy L to U, zeroing out above it +* + CALL DLACPY( 'L', M, M, A, LDA, U, LDU ) + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, U( 1, 2 ), + $ LDU ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize L in U +* (Workspace: need 4*M, prefer 3*M+2*M*NB) +* + CALL DGEBRD( M, M, U, LDU, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply right bidiagonalizing vectors in U by Q +* in VT +* (Workspace: need 3*M+N, prefer 3*M+N*NB) +* + CALL DORMBR( 'P', 'L', 'T', M, N, M, U, LDU, + $ WORK( ITAUP ), VT, LDVT, + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Generate left bidiagonalizing vectors in U +* (Workspace: need 4*M, prefer 3*M+M*NB) +* + CALL DORGBR( 'Q', M, M, M, U, LDU, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of A in U and computing right +* singular vectors of A in VT +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', M, N, M, 0, S, WORK( IE ), VT, + $ LDVT, U, LDU, DUM, 1, WORK( IWORK ), + $ INFO ) +* + END IF +* + END IF +* + ELSE IF( WNTVA ) THEN +* + IF( WNTUN ) THEN +* +* Path 7t(N much larger than M, JOBU='N', JOBVT='A') +* N right singular vectors to be computed in VT and +* no left singular vectors to be computed +* + IF( LWORK.GE.M*M+MAX( N+M, 4*M, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IR = 1 + IF( LWORK.GE.WRKBL+LDA*M ) THEN +* +* WORK(IR) is LDA by M +* + LDWRKR = LDA + ELSE +* +* WORK(IR) is M by M +* + LDWRKR = M + END IF + ITAU = IR + LDWRKR*M + IWORK = ITAU + M +* +* Compute A=L*Q, copying result to VT +* (Workspace: need M*M+2*M, prefer M*M+M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'U', M, N, A, LDA, VT, LDVT ) +* +* Copy L to WORK(IR), zeroing out above it +* + CALL DLACPY( 'L', M, M, A, LDA, WORK( IR ), + $ LDWRKR ) + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, + $ WORK( IR+LDWRKR ), LDWRKR ) +* +* Generate Q in VT +* (Workspace: need M*M+M+N, prefer M*M+M+N*NB) +* + CALL DORGLQ( N, N, M, VT, LDVT, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize L in WORK(IR) +* (Workspace: need M*M+4*M, prefer M*M+3*M+2*M*NB) +* + CALL DGEBRD( M, M, WORK( IR ), LDWRKR, S, + $ WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate right bidiagonalizing vectors in WORK(IR) +* (Workspace: need M*M+4*M-1, +* prefer M*M+3*M+(M-1)*NB) +* + CALL DORGBR( 'P', M, M, M, WORK( IR ), LDWRKR, + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing right +* singular vectors of L in WORK(IR) +* (Workspace: need M*M+BDSPAC) +* + CALL DBDSQR( 'U', M, M, 0, 0, S, WORK( IE ), + $ WORK( IR ), LDWRKR, DUM, 1, DUM, 1, + $ WORK( IWORK ), INFO ) +* +* Multiply right singular vectors of L in WORK(IR) by +* Q in VT, storing result in A +* (Workspace: need M*M) +* + CALL DGEMM( 'N', 'N', M, N, M, ONE, WORK( IR ), + $ LDWRKR, VT, LDVT, ZERO, A, LDA ) +* +* Copy right singular vectors of A from A to VT +* + CALL DLACPY( 'F', M, N, A, LDA, VT, LDVT ) +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + M +* +* Compute A=L*Q, copying result to VT +* (Workspace: need 2*M, prefer M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'U', M, N, A, LDA, VT, LDVT ) +* +* Generate Q in VT +* (Workspace: need M+N, prefer M+N*NB) +* + CALL DORGLQ( N, N, M, VT, LDVT, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Zero out above L in A +* + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, A( 1, 2 ), + $ LDA ) +* +* Bidiagonalize L in A +* (Workspace: need 4*M, prefer 3*M+2*M*NB) +* + CALL DGEBRD( M, M, A, LDA, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply right bidiagonalizing vectors in A by Q +* in VT +* (Workspace: need 3*M+N, prefer 3*M+N*NB) +* + CALL DORMBR( 'P', 'L', 'T', M, N, M, A, LDA, + $ WORK( ITAUP ), VT, LDVT, + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing right +* singular vectors of A in VT +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', M, N, 0, 0, S, WORK( IE ), VT, + $ LDVT, DUM, 1, DUM, 1, WORK( IWORK ), + $ INFO ) +* + END IF +* + ELSE IF( WNTUO ) THEN +* +* Path 8t(N much larger than M, JOBU='O', JOBVT='A') +* N right singular vectors to be computed in VT and +* M left singular vectors to be overwritten on A +* + IF( LWORK.GE.2*M*M+MAX( N+M, 4*M, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IU = 1 + IF( LWORK.GE.WRKBL+2*LDA*M ) THEN +* +* WORK(IU) is LDA by M and WORK(IR) is LDA by M +* + LDWRKU = LDA + IR = IU + LDWRKU*M + LDWRKR = LDA + ELSE IF( LWORK.GE.WRKBL+( LDA+M )*M ) THEN +* +* WORK(IU) is LDA by M and WORK(IR) is M by M +* + LDWRKU = LDA + IR = IU + LDWRKU*M + LDWRKR = M + ELSE +* +* WORK(IU) is M by M and WORK(IR) is M by M +* + LDWRKU = M + IR = IU + LDWRKU*M + LDWRKR = M + END IF + ITAU = IR + LDWRKR*M + IWORK = ITAU + M +* +* Compute A=L*Q, copying result to VT +* (Workspace: need 2*M*M+2*M, prefer 2*M*M+M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'U', M, N, A, LDA, VT, LDVT ) +* +* Generate Q in VT +* (Workspace: need 2*M*M+M+N, prefer 2*M*M+M+N*NB) +* + CALL DORGLQ( N, N, M, VT, LDVT, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy L to WORK(IU), zeroing out above it +* + CALL DLACPY( 'L', M, M, A, LDA, WORK( IU ), + $ LDWRKU ) + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, + $ WORK( IU+LDWRKU ), LDWRKU ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize L in WORK(IU), copying result to +* WORK(IR) +* (Workspace: need 2*M*M+4*M, +* prefer 2*M*M+3*M+2*M*NB) +* + CALL DGEBRD( M, M, WORK( IU ), LDWRKU, S, + $ WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', M, M, WORK( IU ), LDWRKU, + $ WORK( IR ), LDWRKR ) +* +* Generate right bidiagonalizing vectors in WORK(IU) +* (Workspace: need 2*M*M+4*M-1, +* prefer 2*M*M+3*M+(M-1)*NB) +* + CALL DORGBR( 'P', M, M, M, WORK( IU ), LDWRKU, + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate left bidiagonalizing vectors in WORK(IR) +* (Workspace: need 2*M*M+4*M, prefer 2*M*M+3*M+M*NB) +* + CALL DORGBR( 'Q', M, M, M, WORK( IR ), LDWRKR, + $ WORK( ITAUQ ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of L in WORK(IR) and computing +* right singular vectors of L in WORK(IU) +* (Workspace: need 2*M*M+BDSPAC) +* + CALL DBDSQR( 'U', M, M, M, 0, S, WORK( IE ), + $ WORK( IU ), LDWRKU, WORK( IR ), + $ LDWRKR, DUM, 1, WORK( IWORK ), INFO ) +* +* Multiply right singular vectors of L in WORK(IU) by +* Q in VT, storing result in A +* (Workspace: need M*M) +* + CALL DGEMM( 'N', 'N', M, N, M, ONE, WORK( IU ), + $ LDWRKU, VT, LDVT, ZERO, A, LDA ) +* +* Copy right singular vectors of A from A to VT +* + CALL DLACPY( 'F', M, N, A, LDA, VT, LDVT ) +* +* Copy left singular vectors of A from WORK(IR) to A +* + CALL DLACPY( 'F', M, M, WORK( IR ), LDWRKR, A, + $ LDA ) +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + M +* +* Compute A=L*Q, copying result to VT +* (Workspace: need 2*M, prefer M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'U', M, N, A, LDA, VT, LDVT ) +* +* Generate Q in VT +* (Workspace: need M+N, prefer M+N*NB) +* + CALL DORGLQ( N, N, M, VT, LDVT, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Zero out above L in A +* + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, A( 1, 2 ), + $ LDA ) +* +* Bidiagonalize L in A +* (Workspace: need 4*M, prefer 3*M+2*M*NB) +* + CALL DGEBRD( M, M, A, LDA, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply right bidiagonalizing vectors in A by Q +* in VT +* (Workspace: need 3*M+N, prefer 3*M+N*NB) +* + CALL DORMBR( 'P', 'L', 'T', M, N, M, A, LDA, + $ WORK( ITAUP ), VT, LDVT, + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Generate left bidiagonalizing vectors in A +* (Workspace: need 4*M, prefer 3*M+M*NB) +* + CALL DORGBR( 'Q', M, M, M, A, LDA, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of A in A and computing right +* singular vectors of A in VT +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', M, N, M, 0, S, WORK( IE ), VT, + $ LDVT, A, LDA, DUM, 1, WORK( IWORK ), + $ INFO ) +* + END IF +* + ELSE IF( WNTUAS ) THEN +* +* Path 9t(N much larger than M, JOBU='S' or 'A', +* JOBVT='A') +* N right singular vectors to be computed in VT and +* M left singular vectors to be computed in U +* + IF( LWORK.GE.M*M+MAX( N+M, 4*M, BDSPAC ) ) THEN +* +* Sufficient workspace for a fast algorithm +* + IU = 1 + IF( LWORK.GE.WRKBL+LDA*M ) THEN +* +* WORK(IU) is LDA by M +* + LDWRKU = LDA + ELSE +* +* WORK(IU) is M by M +* + LDWRKU = M + END IF + ITAU = IU + LDWRKU*M + IWORK = ITAU + M +* +* Compute A=L*Q, copying result to VT +* (Workspace: need M*M+2*M, prefer M*M+M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'U', M, N, A, LDA, VT, LDVT ) +* +* Generate Q in VT +* (Workspace: need M*M+M+N, prefer M*M+M+N*NB) +* + CALL DORGLQ( N, N, M, VT, LDVT, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy L to WORK(IU), zeroing out above it +* + CALL DLACPY( 'L', M, M, A, LDA, WORK( IU ), + $ LDWRKU ) + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, + $ WORK( IU+LDWRKU ), LDWRKU ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize L in WORK(IU), copying result to U +* (Workspace: need M*M+4*M, prefer M*M+3*M+2*M*NB) +* + CALL DGEBRD( M, M, WORK( IU ), LDWRKU, S, + $ WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) + CALL DLACPY( 'L', M, M, WORK( IU ), LDWRKU, U, + $ LDU ) +* +* Generate right bidiagonalizing vectors in WORK(IU) +* (Workspace: need M*M+4*M, prefer M*M+3*M+(M-1)*NB) +* + CALL DORGBR( 'P', M, M, M, WORK( IU ), LDWRKU, + $ WORK( ITAUP ), WORK( IWORK ), + $ LWORK-IWORK+1, IERR ) +* +* Generate left bidiagonalizing vectors in U +* (Workspace: need M*M+4*M, prefer M*M+3*M+M*NB) +* + CALL DORGBR( 'Q', M, M, M, U, LDU, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of L in U and computing right +* singular vectors of L in WORK(IU) +* (Workspace: need M*M+BDSPAC) +* + CALL DBDSQR( 'U', M, M, M, 0, S, WORK( IE ), + $ WORK( IU ), LDWRKU, U, LDU, DUM, 1, + $ WORK( IWORK ), INFO ) +* +* Multiply right singular vectors of L in WORK(IU) by +* Q in VT, storing result in A +* (Workspace: need M*M) +* + CALL DGEMM( 'N', 'N', M, N, M, ONE, WORK( IU ), + $ LDWRKU, VT, LDVT, ZERO, A, LDA ) +* +* Copy right singular vectors of A from A to VT +* + CALL DLACPY( 'F', M, N, A, LDA, VT, LDVT ) +* + ELSE +* +* Insufficient workspace for a fast algorithm +* + ITAU = 1 + IWORK = ITAU + M +* +* Compute A=L*Q, copying result to VT +* (Workspace: need 2*M, prefer M+M*NB) +* + CALL DGELQF( M, N, A, LDA, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + CALL DLACPY( 'U', M, N, A, LDA, VT, LDVT ) +* +* Generate Q in VT +* (Workspace: need M+N, prefer M+N*NB) +* + CALL DORGLQ( N, N, M, VT, LDVT, WORK( ITAU ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Copy L to U, zeroing out above it +* + CALL DLACPY( 'L', M, M, A, LDA, U, LDU ) + CALL DLASET( 'U', M-1, M-1, ZERO, ZERO, U( 1, 2 ), + $ LDU ) + IE = ITAU + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize L in U +* (Workspace: need 4*M, prefer 3*M+2*M*NB) +* + CALL DGEBRD( M, M, U, LDU, S, WORK( IE ), + $ WORK( ITAUQ ), WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Multiply right bidiagonalizing vectors in U by Q +* in VT +* (Workspace: need 3*M+N, prefer 3*M+N*NB) +* + CALL DORMBR( 'P', 'L', 'T', M, N, M, U, LDU, + $ WORK( ITAUP ), VT, LDVT, + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) +* +* Generate left bidiagonalizing vectors in U +* (Workspace: need 4*M, prefer 3*M+M*NB) +* + CALL DORGBR( 'Q', M, M, M, U, LDU, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + IWORK = IE + M +* +* Perform bidiagonal QR iteration, computing left +* singular vectors of A in U and computing right +* singular vectors of A in VT +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'U', M, N, M, 0, S, WORK( IE ), VT, + $ LDVT, U, LDU, DUM, 1, WORK( IWORK ), + $ INFO ) +* + END IF +* + END IF +* + END IF +* + ELSE +* +* N .LT. MNTHR +* +* Path 10t(N greater than M, but not much larger) +* Reduce to bidiagonal form without LQ decomposition +* + IE = 1 + ITAUQ = IE + M + ITAUP = ITAUQ + M + IWORK = ITAUP + M +* +* Bidiagonalize A +* (Workspace: need 3*M+N, prefer 3*M+(M+N)*NB) +* + CALL DGEBRD( M, N, A, LDA, S, WORK( IE ), WORK( ITAUQ ), + $ WORK( ITAUP ), WORK( IWORK ), LWORK-IWORK+1, + $ IERR ) + IF( WNTUAS ) THEN +* +* If left singular vectors desired in U, copy result to U +* and generate left bidiagonalizing vectors in U +* (Workspace: need 4*M-1, prefer 3*M+(M-1)*NB) +* + CALL DLACPY( 'L', M, M, A, LDA, U, LDU ) + CALL DORGBR( 'Q', M, M, N, U, LDU, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + END IF + IF( WNTVAS ) THEN +* +* If right singular vectors desired in VT, copy result to +* VT and generate right bidiagonalizing vectors in VT +* (Workspace: need 3*M+NRVT, prefer 3*M+NRVT*NB) +* + CALL DLACPY( 'U', M, N, A, LDA, VT, LDVT ) + IF( WNTVA ) + $ NRVT = N + IF( WNTVS ) + $ NRVT = M + CALL DORGBR( 'P', NRVT, N, M, VT, LDVT, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + END IF + IF( WNTUO ) THEN +* +* If left singular vectors desired in A, generate left +* bidiagonalizing vectors in A +* (Workspace: need 4*M-1, prefer 3*M+(M-1)*NB) +* + CALL DORGBR( 'Q', M, M, N, A, LDA, WORK( ITAUQ ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + END IF + IF( WNTVO ) THEN +* +* If right singular vectors desired in A, generate right +* bidiagonalizing vectors in A +* (Workspace: need 4*M, prefer 3*M+M*NB) +* + CALL DORGBR( 'P', M, N, M, A, LDA, WORK( ITAUP ), + $ WORK( IWORK ), LWORK-IWORK+1, IERR ) + END IF + IWORK = IE + M + IF( WNTUAS .OR. WNTUO ) + $ NRU = M + IF( WNTUN ) + $ NRU = 0 + IF( WNTVAS .OR. WNTVO ) + $ NCVT = N + IF( WNTVN ) + $ NCVT = 0 + IF( ( .NOT.WNTUO ) .AND. ( .NOT.WNTVO ) ) THEN +* +* Perform bidiagonal QR iteration, if desired, computing +* left singular vectors in U and computing right singular +* vectors in VT +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'L', M, NCVT, NRU, 0, S, WORK( IE ), VT, + $ LDVT, U, LDU, DUM, 1, WORK( IWORK ), INFO ) + ELSE IF( ( .NOT.WNTUO ) .AND. WNTVO ) THEN +* +* Perform bidiagonal QR iteration, if desired, computing +* left singular vectors in U and computing right singular +* vectors in A +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'L', M, NCVT, NRU, 0, S, WORK( IE ), A, LDA, + $ U, LDU, DUM, 1, WORK( IWORK ), INFO ) + ELSE +* +* Perform bidiagonal QR iteration, if desired, computing +* left singular vectors in A and computing right singular +* vectors in VT +* (Workspace: need BDSPAC) +* + CALL DBDSQR( 'L', M, NCVT, NRU, 0, S, WORK( IE ), VT, + $ LDVT, A, LDA, DUM, 1, WORK( IWORK ), INFO ) + END IF +* + END IF +* + END IF +* +* If DBDSQR failed to converge, copy unconverged superdiagonals +* to WORK( 2:MINMN ) +* + IF( INFO.NE.0 ) THEN + IF( IE.GT.2 ) THEN + DO 50 I = 1, MINMN - 1 + WORK( I+1 ) = WORK( I+IE-1 ) + 50 CONTINUE + END IF + IF( IE.LT.2 ) THEN + DO 60 I = MINMN - 1, 1, -1 + WORK( I+1 ) = WORK( I+IE-1 ) + 60 CONTINUE + END IF + END IF +* +* Undo scaling if necessary +* + IF( ISCL.EQ.1 ) THEN + IF( ANRM.GT.BIGNUM ) + $ CALL DLASCL( 'G', 0, 0, BIGNUM, ANRM, MINMN, 1, S, MINMN, + $ IERR ) + IF( INFO.NE.0 .AND. ANRM.GT.BIGNUM ) + $ CALL DLASCL( 'G', 0, 0, BIGNUM, ANRM, MINMN-1, 1, WORK( 2 ), + $ MINMN, IERR ) + IF( ANRM.LT.SMLNUM ) + $ CALL DLASCL( 'G', 0, 0, SMLNUM, ANRM, MINMN, 1, S, MINMN, + $ IERR ) + IF( INFO.NE.0 .AND. ANRM.LT.SMLNUM ) + $ CALL DLASCL( 'G', 0, 0, SMLNUM, ANRM, MINMN-1, 1, WORK( 2 ), + $ MINMN, IERR ) + END IF +* +* Return optimal workspace in WORK(1) +* + WORK( 1 ) = MAXWRK +* + RETURN +* +* End of DGESVD +* + END + +\end{chunk} + +\begin{chunk}{LAPACK dgesvd} +(let* ((zero 0.0) (one 1.0)) + (declare (type (double-float 0.0 0.0) zero) + (type (double-float 1.0 1.0) one)) + (defun dgesvd (jobu jobvt m n a lda s u ldu vt ldvt work lwork info) + (declare (type (simple-array double-float (*)) work vt u s a) + (type fixnum info lwork ldvt ldu lda n m) + (type character jobvt jobu)) + (f2cl-lib:with-multi-array-data + ((jobu character jobu-%data% jobu-%offset%) + (jobvt character jobvt-%data% jobvt-%offset%) + (a double-float a-%data% a-%offset%) + (s double-float s-%data% s-%offset%) + (u double-float u-%data% u-%offset%) + (vt double-float vt-%data% vt-%offset%) + (work double-float work-%data% work-%offset%)) + (prog ((dum (make-array 1 :element-type 'double-float)) (anrm 0.0) + (bignum 0.0) (eps 0.0) (smlnum 0.0) (bdspac 0) (blk 0) (chunk 0) + (i 0) (ie 0) (ierr 0) (ir 0) (iscl 0) (itau 0) (itaup 0) (itauq 0) + (iu 0) (iwork 0) (ldwrkr 0) (ldwrku 0) (maxwrk 0) (minmn 0) + (minwrk 0) (mnthr 0) (ncu 0) (ncvt 0) (nru 0) (nrvt 0) (wrkbl 0) + (lquery nil) (wntua nil) (wntuas nil) (wntun nil) (wntuo nil) + (wntus nil) (wntva nil) (wntvas nil) (wntvn nil) (wntvo nil) + (wntvs nil)) + (declare (type (simple-array double-float (1)) dum) + (type (double-float) anrm bignum eps smlnum) + (type fixnum bdspac blk chunk i ie ierr ir iscl + itau itaup itauq iu iwork ldwrkr + ldwrku maxwrk minmn minwrk mnthr ncu + ncvt nru nrvt wrkbl) + (type (member t nil) lquery wntua wntuas wntun wntuo wntus + wntva wntvas wntvn wntvo wntvs)) + (setf info 0) + (setf minmn (min (the fixnum m) (the fixnum n))) + (setf mnthr (ilaenv 6 "DGESVD" (f2cl-lib:f2cl-// jobu jobvt) m n 0 0)) + (setf wntua (char-equal jobu #\A)) + (setf wntus (char-equal jobu #\S)) + (setf wntuas (or wntua wntus)) + (setf wntuo (char-equal jobu #\O)) + (setf wntun (char-equal jobu #\N)) + (setf wntva (char-equal jobvt #\A)) + (setf wntvs (char-equal jobvt #\S)) + (setf wntvas (or wntva wntvs)) + (setf wntvo (char-equal jobvt #\O)) + (setf wntvn (char-equal jobvt #\N)) + (setf minwrk 1) + (setf lquery (coerce (= lwork -1) '(member t nil))) + (cond + ((not (or wntua wntus wntuo wntun)) + (setf info -1)) + ((or (not (or wntva wntvs wntvo wntvn)) (and wntvo wntuo)) + (setf info -2)) + ((< m 0) + (setf info -3)) + ((< n 0) + (setf info -4)) + ((< lda (max (the fixnum 1) (the fixnum m))) + (setf info -6)) + ((or (< ldu 1) (and wntuas (< ldu m))) + (setf info -9)) + ((or (< ldvt 1) (and wntva (< ldvt n)) (and wntvs (< ldvt minmn))) + (setf info -11))) + (cond + ((and (= info 0) (or (>= lwork 1) lquery) (> m 0) (> n 0)) + (cond + ((>= m n) + (setf bdspac (f2cl-lib:int-mul 5 n)) + (cond + ((>= m mnthr) + (cond + (wntun + (setf maxwrk + (f2cl-lib:int-add n + (f2cl-lib:int-mul n + (ilaenv 1 + "DGEQRF" " " m + n -1 -1)))) + (setf maxwrk + (max (the fixnum maxwrk) + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) + (f2cl-lib:int-mul 2 + n + (ilaenv + 1 + "DGEBRD" + " " + n n + -1 + -1)))))) + (if (or wntvo wntvas) + (setf maxwrk + (max (the fixnum maxwrk) + (the fixnum + (f2cl-lib:int-add + (f2cl-lib:int-mul 3 n) + (f2cl-lib:int-mul + (f2cl-lib:int-sub n 1) + (ilaenv 1 "DORGBR" "P" n n n + -1))))))) + (setf maxwrk + (max (the fixnum maxwrk) + (the fixnum bdspac))) + (setf minwrk + (max (the fixnum (f2cl-lib:int-mul 4 n)) + (the fixnum bdspac))) + (setf maxwrk + (max (the fixnum maxwrk) + (the fixnum minwrk)))) + ((and wntuo wntvn) + (setf wrkbl + (f2cl-lib:int-add n + (f2cl-lib:int-mul n + (ilaenv 1 + "DGEQRF" " " m + n -1 -1)))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add n + (f2cl-lib:int-mul n + (ilaenv + 1 + "DORGQR" + " " + m n + n + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) (f2cl-lib:int-mul 2 - n - (ilaenv - 1 - "DGEBRD" - " " - n n - -1 - -1)))))) + n + (ilaenv + 1 + "DGEBRD" + " " + n n + -1 + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGBR" - "Q" - n n - n - -1)))))) + (ilaenv + 1 + "DORGBR" + "Q" + n n + n + -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum bdspac))) + (setf maxwrk + (max + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul n n) + wrkbl)) + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul n n) + (f2cl-lib:int-mul m n) + n)))) + (setf minwrk + (max + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) m)) + (the fixnum bdspac))) + (setf maxwrk + (max (the fixnum maxwrk) + (the fixnum minwrk)))) + ((and wntuo wntvas) + (setf wrkbl + (f2cl-lib:int-add n + (f2cl-lib:int-mul n + (ilaenv 1 + "DGEQRF" " " m + n -1 -1)))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add n + (f2cl-lib:int-mul n + (ilaenv + 1 + "DORGQR" + " " + m n + n + -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) + (f2cl-lib:int-mul 2 + n + (ilaenv + 1 + "DGEBRD" + " " + n n + -1 + -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) + (f2cl-lib:int-mul n + (ilaenv + 1 + "DORGBR" + "Q" + n n + n + -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) + (f2cl-lib:int-mul + (f2cl-lib:int-sub n 1) + (ilaenv 1 "DORGBR" "P" + n n n -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum bdspac))) + (setf maxwrk + (max + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul n n) + wrkbl)) + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul n n) + (f2cl-lib:int-mul m n) + n)))) + (setf minwrk + (max + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) m)) + (the fixnum bdspac))) + (setf maxwrk + (max (the fixnum maxwrk) + (the fixnum minwrk)))) + ((and wntus wntvn) + (setf wrkbl + (f2cl-lib:int-add n + (f2cl-lib:int-mul n + (ilaenv 1 + "DGEQRF" " " m + n -1 -1)))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add n + (f2cl-lib:int-mul n + (ilaenv + 1 + "DORGQR" + " " + m n + n + -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) + (f2cl-lib:int-mul 2 + n + (ilaenv + 1 + "DGEBRD" + " " + n n + -1 + -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) + (f2cl-lib:int-mul n + (ilaenv + 1 + "DORGBR" + "Q" + n n + n + -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum bdspac))) + (setf maxwrk + (f2cl-lib:int-add (f2cl-lib:int-mul n n) wrkbl)) + (setf minwrk + (max + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) m)) + (the fixnum bdspac))) + (setf maxwrk + (max (the fixnum maxwrk) + (the fixnum minwrk)))) + ((and wntus wntvo) + (setf wrkbl + (f2cl-lib:int-add n + (f2cl-lib:int-mul n + (ilaenv 1 + "DGEQRF" " " m + n -1 -1)))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add n + (f2cl-lib:int-mul n + (ilaenv + 1 + "DORGQR" + " " + m n + n + -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) + (f2cl-lib:int-mul 2 + n + (ilaenv + 1 + "DGEBRD" + " " + n n + -1 + -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) + (f2cl-lib:int-mul n + (ilaenv + 1 + "DORGBR" + "Q" + n n + n + -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) + (f2cl-lib:int-mul + (f2cl-lib:int-sub n 1) + (ilaenv 1 "DORGBR" "P" + n n n -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum bdspac))) + (setf maxwrk + (f2cl-lib:int-add (f2cl-lib:int-mul 2 n n) wrkbl)) + (setf minwrk + (max + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) m)) + (the fixnum bdspac))) + (setf maxwrk + (max (the fixnum maxwrk) + (the fixnum minwrk)))) + ((and wntus wntvas) + (setf wrkbl + (f2cl-lib:int-add n + (f2cl-lib:int-mul n + (ilaenv 1 + "DGEQRF" " " m + n -1 -1)))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add n + (f2cl-lib:int-mul n + (ilaenv + 1 + "DORGQR" + " " + m n + n + -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) + (f2cl-lib:int-mul 2 + n + (ilaenv + 1 + "DGEBRD" + " " + n n + -1 + -1)))))) + (setf wrkbl + (max (the fixnum wrkbl) + (the fixnum + (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) + (f2cl-lib:int-mul n + (ilaenv + 1 + "DORGBR" + "Q" + n n + n + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum @@ -53306,38 +56645,38 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add n (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGQR" - " " - m m - n - -1)))))) + (ilaenv + 1 + "DORGQR" + " " + m m + n + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) (f2cl-lib:int-mul 2 - n - (ilaenv - 1 - "DGEBRD" - " " - n n - -1 - -1)))))) + n + (ilaenv + 1 + "DGEBRD" + " " + n n + -1 + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGBR" - "Q" - n n - n - -1)))))) + (ilaenv + 1 + "DORGBR" + "Q" + n n + n + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum bdspac))) @@ -53363,38 +56702,38 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add n (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGQR" - " " - m m - n - -1)))))) + (ilaenv + 1 + "DORGQR" + " " + m m + n + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) (f2cl-lib:int-mul 2 - n - (ilaenv - 1 - "DGEBRD" - " " - n n - -1 - -1)))))) + n + (ilaenv + 1 + "DGEBRD" + " " + n n + -1 + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGBR" - "Q" - n n - n - -1)))))) + (ilaenv + 1 + "DORGBR" + "Q" + n n + n + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum @@ -53428,38 +56767,38 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add n (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGQR" - " " - m m - n - -1)))))) + (ilaenv + 1 + "DORGQR" + " " + m m + n + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) (f2cl-lib:int-mul 2 - n - (ilaenv - 1 - "DGEBRD" - " " - n n - -1 - -1)))))) + n + (ilaenv + 1 + "DGEBRD" + " " + n n + -1 + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGBR" - "Q" - n n - n - -1)))))) + (ilaenv + 1 + "DORGBR" + "Q" + n n + n + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum @@ -53486,33 +56825,33 @@ ARGUMENTS (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) (f2cl-lib:int-mul (f2cl-lib:int-add m n) - (ilaenv 1 "DGEBRD" " " m n -1 -1)))) + (ilaenv 1 "DGEBRD" " " m n -1 -1)))) (if (or wntus wntuo) (setf maxwrk (max (the fixnum maxwrk) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGBR" - "Q" - m n - n - -1))))))) + (ilaenv + 1 + "DORGBR" + "Q" + m n + n + -1))))))) (if wntua (setf maxwrk (max (the fixnum maxwrk) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 n) (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGBR" - "Q" - m m - n - -1))))))) + (ilaenv + 1 + "DORGBR" + "Q" + m m + n + -1))))))) (if (not wntvn) (setf maxwrk (max (the fixnum maxwrk) @@ -53551,14 +56890,14 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul 2 - m - (ilaenv - 1 - "DGEBRD" - " " - m m - -1 - -1)))))) + m + (ilaenv + 1 + "DGEBRD" + " " + m m + -1 + -1)))))) (if (or wntuo wntuas) (setf maxwrk (max (the fixnum maxwrk) @@ -53590,26 +56929,26 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add m (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGLQ" - " " - m n - m - -1)))))) + (ilaenv + 1 + "DORGLQ" + " " + m n + m + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul 2 - m - (ilaenv - 1 - "DGEBRD" - " " - m m - -1 - -1)))))) + m + (ilaenv + 1 + "DGEBRD" + " " + m m + -1 + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum @@ -53650,26 +56989,26 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add m (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGLQ" - " " - m n - m - -1)))))) + (ilaenv + 1 + "DORGLQ" + " " + m n + m + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul 2 - m - (ilaenv - 1 - "DGEBRD" - " " - m m - -1 - -1)))))) + m + (ilaenv + 1 + "DGEBRD" + " " + m m + -1 + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum @@ -53683,13 +57022,13 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGBR" - "Q" - m m - m - -1)))))) + (ilaenv + 1 + "DORGBR" + "Q" + m m + m + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum bdspac))) @@ -53722,26 +57061,26 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add m (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGLQ" - " " - m n - m - -1)))))) + (ilaenv + 1 + "DORGLQ" + " " + m n + m + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul 2 - m - (ilaenv - 1 - "DGEBRD" - " " - m m - -1 - -1)))))) + m + (ilaenv + 1 + "DGEBRD" + " " + m m + -1 + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum @@ -53775,26 +57114,26 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add m (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGLQ" - " " - m n - m - -1)))))) + (ilaenv + 1 + "DORGLQ" + " " + m n + m + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul 2 - m - (ilaenv - 1 - "DGEBRD" - " " - m m - -1 - -1)))))) + m + (ilaenv + 1 + "DGEBRD" + " " + m m + -1 + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum @@ -53808,13 +57147,13 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGBR" - "Q" - m m - m - -1)))))) + (ilaenv + 1 + "DORGBR" + "Q" + m m + m + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum bdspac))) @@ -53840,26 +57179,26 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add m (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGLQ" - " " - m n - m - -1)))))) + (ilaenv + 1 + "DORGLQ" + " " + m n + m + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul 2 - m - (ilaenv - 1 - "DGEBRD" - " " - m m - -1 - -1)))))) + m + (ilaenv + 1 + "DGEBRD" + " " + m m + -1 + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum @@ -53873,13 +57212,13 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGBR" - "Q" - m m - m - -1)))))) + (ilaenv + 1 + "DORGBR" + "Q" + m m + m + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum bdspac))) @@ -53905,26 +57244,26 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add m (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGLQ" - " " - n n - m - -1)))))) + (ilaenv + 1 + "DORGLQ" + " " + n n + m + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul 2 - m - (ilaenv - 1 - "DGEBRD" - " " - m m - -1 - -1)))))) + m + (ilaenv + 1 + "DGEBRD" + " " + m m + -1 + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum @@ -53958,26 +57297,26 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add m (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGLQ" - " " - n n - m - -1)))))) + (ilaenv + 1 + "DORGLQ" + " " + n n + m + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul 2 - m - (ilaenv - 1 - "DGEBRD" - " " - m m - -1 - -1)))))) + m + (ilaenv + 1 + "DGEBRD" + " " + m m + -1 + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum @@ -53991,13 +57330,13 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGBR" - "Q" - m m - m - -1)))))) + (ilaenv + 1 + "DORGBR" + "Q" + m m + m + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum bdspac))) @@ -54023,26 +57362,26 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add m (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGLQ" - " " - n n - m - -1)))))) + (ilaenv + 1 + "DORGLQ" + " " + n n + m + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul 2 - m - (ilaenv - 1 - "DGEBRD" - " " - m m - -1 - -1)))))) + m + (ilaenv + 1 + "DGEBRD" + " " + m m + -1 + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum @@ -54056,13 +57395,13 @@ ARGUMENTS (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGBR" - "Q" - m m - m - -1)))))) + (ilaenv + 1 + "DORGBR" + "Q" + m m + m + -1)))))) (setf wrkbl (max (the fixnum wrkbl) (the fixnum bdspac))) @@ -54081,33 +57420,33 @@ ARGUMENTS (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul (f2cl-lib:int-add m n) - (ilaenv 1 "DGEBRD" " " m n -1 -1)))) + (ilaenv 1 "DGEBRD" " " m n -1 -1)))) (if (or wntvs wntvo) (setf maxwrk (max (the fixnum maxwrk) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul m - (ilaenv - 1 - "DORGBR" - "P" - m n - m - -1))))))) + (ilaenv + 1 + "DORGBR" + "P" + m n + m + -1))))))) (if wntva (setf maxwrk (max (the fixnum maxwrk) (the fixnum (f2cl-lib:int-add (f2cl-lib:int-mul 3 m) (f2cl-lib:int-mul n - (ilaenv - 1 - "DORGBR" - "P" - n n - m - -1))))))) + (ilaenv + 1 + "DORGBR" + "P" + n n + m + -1))))))) (if (not wntun) (setf maxwrk (max (the fixnum maxwrk) @@ -54145,7 +57484,7 @@ ARGUMENTS (cond ((or (= m 0) (= n 0)) (if (>= lwork 1) - (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) one)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) one)) (go end_label))) (setf eps (dlamch "P")) (setf smlnum (/ (f2cl-lib:fsqrt (dlamch "S")) eps)) @@ -54799,7 +58138,7 @@ ARGUMENTS (setf ir 1) (cond ((>= lwork - (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda n))) + (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda n))) (setf ldwrkr lda)) (t (setf ldwrkr n))) @@ -55384,7 +58723,7 @@ ARGUMENTS (setf iu 1) (cond ((>= lwork - (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda n))) + (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda n))) (setf ldwrku lda)) (t (setf ldwrku n))) @@ -55682,7 +59021,7 @@ ARGUMENTS (setf ir 1) (cond ((>= lwork - (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda n))) + (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda n))) (setf ldwrkr lda)) (t (setf ldwrkr n))) @@ -56275,7 +59614,7 @@ ARGUMENTS (setf iu 1) (cond ((>= lwork - (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda n))) + (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda n))) (setf ldwrku lda)) (t (setf ldwrku n))) @@ -57307,7 +60646,7 @@ ARGUMENTS (setf ir 1) (cond ((>= lwork - (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda m))) + (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda m))) (setf ldwrkr lda)) (t (setf ldwrkr m))) @@ -57891,7 +61230,7 @@ ARGUMENTS (setf iu 1) (cond ((>= lwork - (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda m))) + (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda m))) (setf ldwrku lda)) (t (setf ldwrku m))) @@ -58188,7 +61527,7 @@ ARGUMENTS (setf ir 1) (cond ((>= lwork - (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda m))) + (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda m))) (setf ldwrkr lda)) (t (setf ldwrkr m))) @@ -58780,7 +62119,7 @@ ARGUMENTS (setf iu 1) (cond ((>= lwork - (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda m))) + (f2cl-lib:int-add wrkbl (f2cl-lib:int-mul lda m))) (setf ldwrku lda)) (t (setf ldwrku m))) @@ -59345,7 +62684,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgesv.f} SUBROUTINE DGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO ) * * -- LAPACK driver routine (version 3.0) -- @@ -59404,7 +62743,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgesv} (defun dgesv (n nrhs a lda ipiv b ldb$ info) @@ -59529,7 +62868,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgetf2.f} SUBROUTINE DGETF2( M, N, A, LDA, IPIV, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -59623,7 +62962,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgetf2} (let* ((one 1.0) (zero 0.0)) @@ -59798,7 +63137,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgetrf.f} SUBROUTINE DGETRF( M, N, A, LDA, IPIV, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -59917,7 +63256,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgetrf} (let* ((one 1.0)) @@ -60125,7 +63464,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dgetrs.f} SUBROUTINE DGETRS( TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -60231,7 +63570,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dgetrs} (let* ((one 1.0)) @@ -60251,7 +63590,8 @@ ARGUMENTS (setf info 0) (setf notran (char-equal trans #\N)) (cond - ((and (not notran) (not (char-equal trans #\T)) (not (char-equal trans #\C))) + ((and (not notran) (not (char-equal trans #\T)) + (not (char-equal trans #\C))) (setf info -1)) ((< n 0) (setf info -2)) @@ -60426,7 +63766,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dhseqr.f} SUBROUTINE DHSEQR( JOB, COMPZ, N, ILO, IHI, H, LDH, WR, WI, Z, $ LDZ, WORK, LWORK, INFO ) * @@ -60798,7 +64138,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dhseqr} (let* ((zero 0.0) (one 1.0) (two 2.0) (const 1.5) (nsmax 15) (lds nsmax)) @@ -61321,7 +64661,7 @@ Online html documentation available at \end{chunk} -\begin{verbatim} +\begin{chunk}{disnan.f} * ===================================================================== LOGICAL FUNCTION DISNAN( DIN ) @@ -61346,7 +64686,7 @@ Online html documentation available at RETURN END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK disnan} \end{chunk} @@ -61410,7 +64750,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlabad.f} SUBROUTINE DLABAD( SMALL, LARGE ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -61443,7 +64783,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlabad} (defun dlabad (small large) @@ -61605,7 +64945,7 @@ FURTHER DETAILS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlabrd.f} SUBROUTINE DLABRD( M, N, NB, A, LDA, D, E, TAUQ, TAUP, X, LDX, Y, $ LDY ) * @@ -61779,7 +65119,7 @@ FURTHER DETAILS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlabrd} (let* ((zero 0.0) (one 1.0)) @@ -62384,7 +65724,7 @@ FURTHER DETAILS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlacon.f} SUBROUTINE DLACON( N, V, X, ISGN, EST, KASE ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -62546,7 +65886,7 @@ FURTHER DETAILS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlacon} (let* ((itmax 5) (zero 0.0) (one 1.0) (two 2.0)) @@ -62768,7 +66108,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlacpy.f} SUBROUTINE DLACPY( UPLO, M, N, A, LDA, B, LDB ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -62823,7 +66163,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlacpy} (defun dlacpy (uplo m n a lda b ldb$) @@ -62939,7 +66279,7 @@ NAME \end{chunk} -\begin{verbatim} +\begin{chunk}{dladiv.f} SUBROUTINE DLADIV( A, B, C, D, P, Q ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -62979,7 +66319,7 @@ NAME * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dladiv} (defun dladiv (a b c d p q) @@ -63084,7 +66424,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dlaed6.f} SUBROUTINE DLAED6( KNITER, ORGATI, RHO, D, Z, FINIT, TAU, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -63328,7 +66668,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlaed6} (let* ((maxit 20) @@ -63734,7 +67074,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlaexc.f} SUBROUTINE DLAEXC( WANTQ, N, T, LDT, Q, LDQ, J1, N1, N2, WORK, $ INFO ) * @@ -64035,7 +67375,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlaexc} (let* ((zero 0.0) (one 1.0) (ten 10.0) (ldd 4) (ldx 2)) @@ -64633,7 +67973,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlahqr.f} SUBROUTINE DLAHQR( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, $ ILOZ, IHIZ, Z, LDZ, INFO ) * @@ -64988,7 +68328,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlahqr} (let* ((zero 0.0) (one 1.0) (half 0.5) (dat1 0.75) (dat2 (- 0.4375))) @@ -65775,7 +69115,7 @@ FURTHER DETAILS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlahrd.f} SUBROUTINE DLAHRD( N, K, NB, A, LDA, TAU, T, LDT, Y, LDY ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -65896,7 +69236,7 @@ FURTHER DETAILS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlahrd} (let* ((zero 0.0) (one 1.0)) @@ -66142,7 +69482,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dlaisnan.f} * ===================================================================== LOGICAL FUNCTION DLAISNAN( DIN1, DIN2 ) * @@ -66162,7 +69502,7 @@ Man Page Details RETURN END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlaisnan} \end{chunk} @@ -66323,7 +69663,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlaln2.f} SUBROUTINE DLALN2( LTRANS, NA, NW, SMIN, CA, A, LDA, D1, D2, B, $ LDB, WR, WI, X, LDX, SCALE, XNORM, INFO ) * @@ -66743,7 +70083,7 @@ c CI( 2, 2 ) = -WI*D2 * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlaln2} (let* ((zero 0.0) (one 1.0) (two 2.0)) @@ -67516,7 +70856,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlamch.f} DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -67611,7 +70951,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlamch} (let* ((one 1.0) (zero 0.0)) @@ -67771,7 +71111,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dlamc1.f} ************************************************************************ * SUBROUTINE DLAMC1( BETA, T, RND, IEEE1 ) @@ -67922,7 +71262,7 @@ Man Page Details END * -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlamc1} (let ((lieee1 nil) (lbeta 0) (lrnd nil) (f2cl-lib:lt 0) (first$ nil)) @@ -68143,7 +71483,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dlamc2.f} ************************************************************************ * SUBROUTINE DLAMC2( BETA, T, RND, EPS, EMIN, RMIN, EMAX, RMAX ) @@ -68352,7 +71692,7 @@ Man Page Details * End of DLAMC2 * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlamc2} (let ((lbeta 0) @@ -68643,7 +71983,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dlamc3.f} ************************************************************************ * DOUBLE PRECISION FUNCTION DLAMC3( A, B ) @@ -68671,7 +72011,7 @@ Man Page Details END * -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlamc3} (defun dlamc3 (a b) @@ -68738,7 +72078,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dlamc4.f} ************************************************************************ * SUBROUTINE DLAMC4( EMIN, START, BASE ) @@ -68805,7 +72145,7 @@ Man Page Details END * -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlamc4} (defun dlamc4 (emin start base) @@ -68942,7 +72282,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dlamc5.f} ************************************************************************ * SUBROUTINE DLAMC5( BETA, P, EMIN, IEEE, EMAX, RMAX ) @@ -69074,7 +72414,7 @@ Man Page Details * * -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlamc5} (let* ((zero 0.0) (one 1.0)) @@ -69220,7 +72560,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlamrg.f} SUBROUTINE DLAMRG( N1, N2, A, DTRD1, DTRD2, INDX ) * * -- LAPACK routine (version 3.0) -- @@ -69294,7 +72634,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlamrg} (defun dlamrg (n1 n2 a dtrd1 dtrd2 indx) @@ -69442,7 +72782,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlange.f} DOUBLE PRECISION FUNCTION DLANGE( NORM, M, N, A, LDA, WORK ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -69539,7 +72879,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlange} (let* ((one 1.0) (zero 0.0)) @@ -69728,7 +73068,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlanhs.f} DOUBLE PRECISION FUNCTION DLANHS( NORM, N, A, LDA, WORK ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -69825,7 +73165,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlanhs} (let* ((one 1.0) (zero 0.0)) @@ -70023,7 +73363,7 @@ ARGUMENTS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlanst.f} DOUBLE PRECISION FUNCTION DLANST( NORM, N, D, E ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -70108,7 +73448,7 @@ ARGUMENTS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlanst} (let* ((one 1.0) (zero 0.0)) @@ -70141,7 +73481,8 @@ ARGUMENTS (max anorm (abs (f2cl-lib:fref e-%data% (i) ((1 *)) e-%offset%))))))) - ((or (char-equal norm #\O) (f2cl-lib:fstring-= norm "1") (char-equal norm #\I)) + ((or (char-equal norm #\O) (f2cl-lib:fstring-= norm "1") + (char-equal norm #\I)) (cond ((= n 1) (setf anorm @@ -70283,7 +73624,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlanv2.f} SUBROUTINE DLANV2( A, B, C, D, RT1R, RT1I, RT2R, RT2I, CS, SN ) * * -- LAPACK driver routine (version 3.0) -- @@ -70447,7 +73788,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlanv2} (let* ((zero 0.0) (half 0.5) (one 1.0) (multpl 4.0)) @@ -70609,7 +73950,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlapy2.f} DOUBLE PRECISION FUNCTION DLAPY2( X, Y ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -70652,7 +73993,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlapy2} (let* ((zero 0.0) (one 1.0)) @@ -70742,7 +74083,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{dlapy3.f} * ===================================================================== DOUBLE PRECISION FUNCTION DLAPY3( X, Y, Z ) * @@ -70788,9 +74129,22 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlapy3} +(let* ((zero 0.0d0)) + (declare (type (double-float 0.0d0 0.0d0) zero) (ignorable zero)) + (defun dlapy3 (x y z) (declare (type (double-float) z y x)) + (prog ((w 0.0d0) (xabs 0.0d0) (yabs 0.0d0) (zabs 0.0d0) (dlapy3 0.0d0)) + (declare (type (double-float) dlapy3 zabs yabs xabs w)) (setf xabs (abs x)) + (setf yabs (abs y)) (setf zabs (abs z)) (setf w (max xabs yabs zabs)) + (cond ((= w zero) (setf dlapy3 (+ xabs yabs zabs))) + (t + (setf dlapy3 + (* w + (f2cl-lib:fsqrt + (+ (expt (/ xabs w) 2) (expt (/ yabs w) 2) (expt (/ zabs w) 2))))))) + (go end_label) end_label (return (values dlapy3 nil nil nil))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{dlaqtr LAPACK} @@ -70917,7 +74271,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlaqtr.f} SUBROUTINE DLAQTR( LTRAN, LREAL, N, T, LDT, B, W, SCALE, X, WORK, $ INFO ) * @@ -71503,7 +74857,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlaqtr} (let* ((zero 0.0) (one 1.0)) @@ -72756,7 +76110,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlarfb.f} SUBROUTINE DLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, $ T, LDT, C, LDC, WORK, LDWORK ) * @@ -73274,7 +76628,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlarfb} (let* ((one 1.0)) @@ -73958,7 +77312,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlarfg.f} SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -74054,7 +77408,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlarfg} (let* ((one 1.0) (zero 0.0)) @@ -74198,7 +77552,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlarf.f} SUBROUTINE DLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -74267,7 +77621,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlarf} (let* ((one 1.0) (zero 0.0)) @@ -74427,7 +77781,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlarft.f} SUBROUTINE DLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -74559,7 +77913,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlarft} (let* ((one 1.0) (zero 0.0)) @@ -74882,7 +78236,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlarfx.f} SUBROUTINE DLARFX( SIDE, M, N, V, TAU, C, LDC, WORK ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -75475,7 +78829,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlarfx} (let* ((zero 0.0) (one 1.0)) @@ -77593,7 +80947,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlartg.f} SUBROUTINE DLARTG( F, G, CS, SN, R ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -77702,7 +81056,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlartg} (let* ((zero 0.0) (one 1.0) (two 2.0)) @@ -77863,7 +81217,7 @@ FURTHER DETAILS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlas2.f} SUBROUTINE DLAS2( F, G, H, SSMIN, SSMAX ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -77941,7 +81295,7 @@ FURTHER DETAILS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlas2} (let* ((zero 0.0) (one 1.0) (two 2.0)) @@ -78100,7 +81454,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlascl.f} SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -78311,7 +81665,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlascl} (let* ((zero 0.0) (one 1.0)) @@ -78684,7 +82038,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasd0.f} SUBROUTINE DLASD0( N, SQRE, D, E, U, LDU, VT, LDVT, SMLSIZ, IWORK, $ WORK, INFO ) * @@ -78850,7 +82204,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasd0} (defun dlasd0 (n sqre d e u ldu vt ldvt smlsiz iwork work info) @@ -79239,7 +82593,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasd1.f} SUBROUTINE DLASD1( NL, NR, SQRE, D, ALPHA, BETA, U, LDU, VT, LDVT, $ IDXQ, IWORK, WORK, INFO ) * @@ -79361,7 +82715,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasd1} (let* ((one 1.0) (zero 0.0)) @@ -79692,7 +83046,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasd2.f} SUBROUTINE DLASD2( NL, NR, SQRE, K, D, Z, ALPHA, BETA, U, LDU, VT, $ LDVT, DSIGMA, U2, LDU2, VT2, LDVT2, IDXP, IDX, $ IDXC, IDXQ, COLTYP, INFO ) @@ -80061,7 +83415,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasd2} (let* ((zero 0.0) (one 1.0) (two 2.0) (eight 8.0)) @@ -80698,7 +84052,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasd3.f} SUBROUTINE DLASD3( NL, NR, SQRE, K, D, Q, LDQ, DSIGMA, U, LDU, U2, $ LDU2, VT, LDVT, VT2, LDVT2, IDXC, CTOT, Z, $ INFO ) @@ -80947,7 +84301,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasd3} (let* ((one 1.0) (zero 0.0) (negone (- 1.0))) @@ -81569,7 +84923,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasd4.f} SUBROUTINE DLASD4( N, I, D, Z, DELTA, RHO, SIGMA, WORK, INFO ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -82384,7 +85738,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasd4} (let* ((maxit 20) @@ -84002,7 +87356,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasd5.f} SUBROUTINE DLASD5( I, D, Z, DELTA, RHO, DSIGMA, WORK ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -84119,7 +87473,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasd5} (let* ((zero 0.0) (one 1.0) (two 2.0) (three 3.0) (four 4.0)) @@ -84552,7 +87906,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasd6.f} SUBROUTINE DLASD6( ICOMPQ, NL, NR, SQRE, D, VF, VL, ALPHA, BETA, $ IDXQ, PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM, $ LDGNUM, POLES, DIFL, DIFR, Z, K, C, S, WORK, @@ -84681,7 +88035,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasd6} (let* ((one 1.0) (zero 0.0)) @@ -84692,8 +88046,8 @@ SYNOPSIS givnum ldgnum poles difl difr z k c s work iwork info) (declare (type (simple-array fixnum (*)) iwork givcol perm idxq) (type (double-float) s c beta alpha) - (type (simple-array double-float (*)) work z difr difl poles givnum vl vf - d) + (type (simple-array double-float (*)) work z difr + difl poles givnum vl vf d) (type fixnum info k ldgnum ldgcol givptr sqre nr nl icompq)) (f2cl-lib:with-multi-array-data @@ -85031,7 +88385,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasd7.f} SUBROUTINE DLASD7( ICOMPQ, NL, NR, SQRE, K, D, Z, ZW, VF, VFW, VL, $ VLW, ALPHA, BETA, DSIGMA, IDX, IDXP, IDXQ, $ PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM, LDGNUM, @@ -85336,7 +88690,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasd7} (let* ((zero 0.0) (one 1.0) (two 2.0) (eight 8.0)) @@ -85349,7 +88703,8 @@ SYNOPSIS idxq perm givptr givcol ldgcol givnum ldgnum c s info) (declare (type (simple-array fixnum (*)) givcol perm idxq idxp idx) (type (double-float) s c beta alpha) - (type (simple-array double-float (*)) givnum dsigma vlw vl vfw vf zw z d) + (type (simple-array double-float (*)) givnum dsigma vlw vl + vfw vf zw z d) (type fixnum info ldgnum ldgcol givptr k sqre nr nl icompq)) (f2cl-lib:with-multi-array-data @@ -85825,7 +89180,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasd8.f} SUBROUTINE DLASD8( ICOMPQ, K, D, Z, VF, VL, DIFL, DIFR, LDDIFR, $ DSIGMA, WORK, INFO ) * @@ -86003,7 +89358,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasd8} (let* ((one 1.0)) @@ -86540,7 +89895,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasda.f} SUBROUTINE DLASDA( ICOMPQ, SMLSIZ, N, SQRE, D, E, U, LDU, VT, K, $ DIFL, DIFR, Z, POLES, GIVPTR, GIVCOL, LDGCOL, $ PERM, GIVNUM, C, S, WORK, IWORK, INFO ) @@ -86785,7 +90140,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasda} (let* ((zero 0.0) (one 1.0)) @@ -87465,7 +90820,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasdq.f} SUBROUTINE DLASDQ( UPLO, SQRE, N, NCVT, NRU, NCC, D, E, VT, LDVT, $ U, LDU, C, LDC, WORK, INFO ) * @@ -87670,7 +91025,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasdq} (let* ((zero 0.0)) @@ -88024,7 +91379,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasdt.f} SUBROUTINE DLASDT( N, LVL, ND, INODE, NDIML, NDIMR, MSUB ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -88093,7 +91448,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasdt} (let* ((two 2.0)) @@ -88285,7 +91640,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlaset.f} SUBROUTINE DLASET( UPLO, M, N, ALPHA, BETA, A, LDA ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -88361,7 +91716,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlaset} (defun dlaset (uplo m n alpha beta a lda) @@ -88511,7 +91866,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasq1.f} SUBROUTINE DLASQ1( N, D, E, WORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -88618,7 +91973,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasq1} (let* ((zero 0.0)) @@ -88826,7 +92181,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasq2.f} SUBROUTINE DLASQ2( N, Z, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -89212,7 +92567,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasq2} (let* ((cbias 1.5) @@ -89957,9 +93312,9 @@ SYNOPSIS (f2cl-lib:int-add i4 4)) ((> i4 (f2cl-lib:int-mul 4 - (f2cl-lib:int-add n0 - (f2cl-lib:int-sub - 3)))) + (f2cl-lib:int-add n0 + (f2cl-lib:int-sub + 3)))) nil) (tagbody (cond @@ -89967,14 +93322,14 @@ SYNOPSIS (<= (f2cl-lib:fref z (i4) ((1 *))) (* tol2 (f2cl-lib:fref z - ((f2cl-lib:int-add i4 - (f2cl-lib:int-sub + ((f2cl-lib:int-add i4 + (f2cl-lib:int-sub 3))) ((1 *))))) (<= (f2cl-lib:fref z ((f2cl-lib:int-add i4 - (f2cl-lib:int-sub + (f2cl-lib:int-sub 1))) ((1 *))) (* tol2 sigma))) @@ -90176,7 +93531,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasq3.f} SUBROUTINE DLASQ3( I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL, $ ITER, NDIV, IEEE ) * @@ -90427,7 +93782,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasq3} (let* ((cbias 1.5) @@ -90707,8 +94062,8 @@ SYNOPSIS ((> j4 (f2cl-lib:int-mul 2 (f2cl-lib:int-add i0 - n0 - (f2cl-lib:int-sub + n0 + (f2cl-lib:int-sub 1)))) nil) (tagbody @@ -90951,9 +94306,9 @@ SYNOPSIS (f2cl-lib:fref z ((f2cl-lib:int-add (f2cl-lib:int-mul 4 - (f2cl-lib:int-add n0 - (f2cl-lib:int-sub - 1))) + (f2cl-lib:int-add n0 + (f2cl-lib:int-sub + 1))) (f2cl-lib:int-sub pp))) ((1 *))) (* tol (+ sigma dn1))) @@ -91121,7 +94476,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasq4.f} SUBROUTINE DLASQ4( I0, N0, Z, PP, N0IN, DMIN, DMIN1, DMIN2, DN, $ DN1, DN2, TAU, TTYPE ) * @@ -91404,7 +94759,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasq4} (let* ((cnst1 0.563) @@ -92015,7 +95370,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasq5.f} SUBROUTINE DLASQ5( I0, N0, Z, PP, TAU, DMIN, DMIN1, DMIN2, DN, $ DNM1, DNM2, IEEE ) * @@ -92167,7 +95522,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasq5} (let* ((zero 0.0)) @@ -92199,11 +95554,11 @@ SYNOPSIS (ieee (cond ((= pp 0) - (f2cl-lib:fdo (j4 (f2cl-lib:int-mul 4 i0) (f2cl-lib:int-add j4 4)) + (f2cl-lib:fdo (j4 (f2cl-lib:int-mul 4 i0) (f2cl-lib:int-add j4 4)) ((> j4 (f2cl-lib:int-mul 4 (f2cl-lib:int-add n0 - (f2cl-lib:int-sub + (f2cl-lib:int-sub 3)))) nil) (tagbody @@ -92239,11 +95594,11 @@ SYNOPSIS (min (f2cl-lib:fref z-%data% (j4) ((1 *)) z-%offset%) emin))))) (t - (f2cl-lib:fdo (j4 (f2cl-lib:int-mul 4 i0) (f2cl-lib:int-add j4 4)) + (f2cl-lib:fdo (j4 (f2cl-lib:int-mul 4 i0) (f2cl-lib:int-add j4 4)) ((> j4 (f2cl-lib:int-mul 4 (f2cl-lib:int-add n0 - (f2cl-lib:int-sub + (f2cl-lib:int-sub 3)))) nil) (tagbody @@ -92357,11 +95712,11 @@ SYNOPSIS (t (cond ((= pp 0) - (f2cl-lib:fdo (j4 (f2cl-lib:int-mul 4 i0) (f2cl-lib:int-add j4 4)) + (f2cl-lib:fdo (j4 (f2cl-lib:int-mul 4 i0) (f2cl-lib:int-add j4 4)) ((> j4 (f2cl-lib:int-mul 4 (f2cl-lib:int-add n0 - (f2cl-lib:int-sub + (f2cl-lib:int-sub 3)))) nil) (tagbody @@ -92414,11 +95769,11 @@ SYNOPSIS ((1 *)) z-%offset%)))))) (t - (f2cl-lib:fdo (j4 (f2cl-lib:int-mul 4 i0) (f2cl-lib:int-add j4 4)) + (f2cl-lib:fdo (j4 (f2cl-lib:int-mul 4 i0) (f2cl-lib:int-add j4 4)) ((> j4 (f2cl-lib:int-mul 4 - (f2cl-lib:int-add n0 - (f2cl-lib:int-sub + (f2cl-lib:int-add n0 + (f2cl-lib:int-sub 3)))) nil) (tagbody @@ -92657,7 +96012,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasq6.f} SUBROUTINE DLASQ6( I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN, $ DNM1, DNM2 ) * @@ -92795,7 +96150,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasq6} (let* ((zero 0.0)) @@ -93302,7 +96657,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasr.f} SUBROUTINE DLASR( SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -93541,7 +96896,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasr} (let* ((one 1.0) (zero 0.0)) @@ -93565,7 +96920,8 @@ SYNOPSIS (cond ((not (or (char-equal side #\L) (char-equal side #\R))) (setf info 1)) - ((not (or (char-equal pivot #\V) (char-equal pivot #\T) (char-equal pivot #\B))) + ((not (or (char-equal pivot #\V) (char-equal pivot #\T) + (char-equal pivot #\B))) (setf info 2)) ((not (or (char-equal direct #\F) (char-equal direct #\B))) (setf info 3)) @@ -94168,7 +97524,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasrt.f} SUBROUTINE DLASRT( ID, N, D, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -94385,7 +97741,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasrt} (let* ((select 20)) @@ -94687,7 +98043,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlassq.f} SUBROUTINE DLASSQ( N, X, INCX, SCALE, SUMSQ ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -94737,7 +98093,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlassq} (let* ((zero 0.0)) @@ -94874,7 +98230,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasv2.f} SUBROUTINE DLASV2( F, G, H, SSMIN, SSMAX, SNR, CSR, SNL, CSL ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -95063,7 +98419,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasv2} (let* ((zero 0.0) (half 0.5) (one 1.0) (two 2.0) (four 4.0)) @@ -95277,7 +98633,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlaswp.f} SUBROUTINE DLASWP( N, A, LDA, K1, K2, IPIV, INCX ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -95356,7 +98712,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlaswp} (defun dlaswp (n a lda k1 k2 ipiv incx) @@ -95580,7 +98936,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dlasy2.f} SUBROUTINE DLASY2( LTRANL, LTRANR, ISGN, N1, N2, TL, LDTL, TR, $ LDTR, B, LDB, SCALE, X, LDX, XNORM, INFO ) * @@ -95889,7 +99245,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dlasy2} (let* ((zero 0.0) (one 1.0) (two 2.0) (half 0.5) (eight 8.0)) @@ -96660,7 +100016,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dorg2r.f} SUBROUTINE DORG2R( M, N, K, A, LDA, TAU, WORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -96748,7 +100104,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dorg2r} (let* ((one 1.0) (zero 0.0)) @@ -96946,7 +100302,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dorgbr.f} SUBROUTINE DORGBR( VECT, M, N, K, A, LDA, TAU, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -97113,7 +100469,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dorgbr} (let* ((zero 0.0) (one 1.0)) @@ -97392,7 +100748,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dorghr.f} SUBROUTINE DORGHR( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -97508,7 +100864,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dorghr} (let* ((zero 0.0) (one 1.0)) @@ -97707,7 +101063,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dorgl2.f} SUBROUTINE DORGL2( M, N, K, A, LDA, TAU, WORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -97800,7 +101156,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dorgl2} (let* ((one 1.0) (zero 0.0)) @@ -97982,7 +101338,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dorglq.f} SUBROUTINE DORGLQ( M, N, K, A, LDA, TAU, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -98146,7 +101502,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dorglq} (let* ((zero 0.0)) @@ -98401,7 +101757,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dorgqr.f} SUBROUTINE DORGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.0) -- @@ -98565,7 +101921,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dorgqr} (let* ((zero 0.0)) @@ -98845,7 +102201,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dorm2r.f} SUBROUTINE DORM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, $ WORK, INFO ) * @@ -98971,7 +102327,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dorm2r} (let* ((one 1.0)) @@ -99209,7 +102565,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dormbr.f} SUBROUTINE DORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C, $ LDC, WORK, LWORK, INFO ) * @@ -99389,7 +102745,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dormbr} (defun dormbr (vect side trans m n k a lda tau c ldc work lwork info) @@ -99691,7 +103047,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dorml2.f} SUBROUTINE DORML2( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, $ WORK, INFO ) * @@ -99817,7 +103173,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dorml2} (let* ((one 1.0)) @@ -100033,7 +103389,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dormlq.f} SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, $ WORK, LWORK, INFO ) * @@ -100221,7 +103577,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dormlq} (let* ((nbmax 64) (ldt (+ nbmax 1))) @@ -100510,7 +103866,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dormqr.f} SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, $ WORK, LWORK, INFO ) * @@ -100691,7 +104047,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dormqr} (let* ((nbmax 64) (ldt (+ nbmax 1))) @@ -101041,7 +104397,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dtrevc.f} SUBROUTINE DTREVC( SIDE, HOWMNY, SELECT, N, T, LDT, VL, LDVL, VR, $ LDVR, MM, M, WORK, INFO ) * @@ -101899,7 +105255,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dtrevc} (let* ((zero 0.0) (one 1.0)) @@ -103953,7 +107309,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dtrexc.f} SUBROUTINE DTREXC( COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, WORK, $ INFO ) * @@ -104236,7 +107592,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dtrexc} (let* ((zero 0.0)) @@ -104768,7 +108124,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{dtrsna.f} SUBROUTINE DTRSNA( JOB, HOWMNY, SELECT, N, T, LDT, VL, LDVL, VR, $ LDVR, S, SEP, MM, M, WORK, LDWORK, IWORK, $ INFO ) @@ -105109,7 +108465,7 @@ SYNOPSIS * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK dtrsna} (let* ((zero 0.0) (one 1.0) (two 2.0)) @@ -105787,7 +109143,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{ieeeck.f} INTEGER FUNCTION IEEECK( ISPEC, ZERO, ONE ) * * -- LAPACK auxiliary routine (version 3.0) -- @@ -105908,7 +109264,7 @@ SYNOPSIS RETURN END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK ieeeck} (defun ieeeck (ispec zero one) @@ -106121,7 +109477,7 @@ SYNOPSIS \end{chunk} -\begin{verbatim} +\begin{chunk}{ilaenv.f} INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, $ N4 ) * @@ -106582,7 +109938,7 @@ C ILAENV = 0 * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK ilaenv} (defun ilaenv (ispec name opts n1 n2 n3 n4) @@ -107107,7 +110463,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{ilazlc.f} * ===================================================================== INTEGER FUNCTION ILAZLC( M, N, A, LDA ) * @@ -107150,10 +110506,38 @@ Man Page Details RETURN END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK ilazlc} - +(let* ((zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (f2cl-lib:complex16) zero) (ignorable zero)) + (defun ilazlc (m n a lda) + (declare (type (f2cl-lib:integer4) lda n m) + (type (array f2cl-lib:complex16 (*)) a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%)) + (prog + ((i 0) (ilazlc 0)) (declare (type (f2cl-lib:integer4) ilazlc i)) + (cond ((= n 0) (setf ilazlc n)) + ((or (/= (f2cl-lib:fref a (1 n) ((1 lda) (1 *))) zero) + (/= (f2cl-lib:fref a (m n) ((1 lda) (1 *))) zero)) + (setf ilazlc n)) + (t + (f2cl-lib:fdo (ilazlc n (f2cl-lib:int-add ilazlc (f2cl-lib:int-sub 1))) + ((> + ilazlc 1) + nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i m) nil) + (tagbody + (if + (/= (f2cl-lib:fref a-%data% (i ilazlc) + ((1 lda) (1 *)) a-%offset%) zero) + (go end_label)) + label100001)) + label100000)))) + (go end_label) end_label (return (values ilazlc nil nil nil nil)))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -107236,7 +110620,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{ilazlr.f} * ===================================================================== INTEGER FUNCTION ILAZLR( M, N, A, LDA ) * @@ -107285,9 +110669,42 @@ Man Page Details RETURN END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK ilazlr} +(let* ((zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (f2cl-lib:complex16) zero) (ignorable zero)) + (defun ilazlr (m n a lda) + (declare (type (f2cl-lib:integer4) lda n m) + (type (array f2cl-lib:complex16 (*)) a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%)) + (prog + ((i 0) (j 0) (ilazlr 0)) + (declare (type (f2cl-lib:integer4) ilazlr j i)) + (cond ((= m 0) (setf ilazlr m)) + ((or (/= (f2cl-lib:fref a (m 1) ((1 lda) (1 *))) zero) + (/= (f2cl-lib:fref a (m n) ((1 lda) (1 *))) zero)) + (setf ilazlr m)) + (t (setf ilazlr 0) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody (setf i m) + label100001 + (if + (not + (and (/= (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) zero) + (>= i 1))) + (go label100002)) + (setf i (f2cl-lib:int-sub i 1)) + (cond ((= i 0) (go f2cl-lib::exit))) + (go label100001) label100002 + (setf ilazlr + (max (the f2cl-lib:integer4 ilazlr) + (the f2cl-lib:integer4 i))) + label100000)))) + (go end_label) end_label (return (values ilazlr nil nil nil nil))))))} \end{chunk} @@ -107420,7 +110837,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zgebak.f} * ===================================================================== SUBROUTINE ZGEBAK( JOB, SIDE, N, ILO, IHI, SCALE, M, V, LDV, $ INFO ) @@ -107563,10 +110980,177 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zgebak} - +(let* ((one 1.0d0)) + (declare (type (double-float 1.0d0 1.0d0) one) (ignorable one)) + (defun zgebak (job side n ilo ihi scale m v ldv info) + (declare (type (simple-array character (*)) side job) + (type (f2cl-lib:integer4) info ldv m ihi ilo n) + (type (array double-float (*)) scale) + (type (array f2cl-lib:complex16 (*)) v)) + (f2cl-lib:with-multi-array-data + ((v f2cl-lib:complex16 v-%data% v-%offset%) + (scale double-float scale-%data% scale-%offset%) + (job character job-%data% job-%offset%) + (side character side-%data% side-%offset%)) + (prog + ((s 0.0d0) (i 0) (ii 0) (k 0) (leftv nil) (rightv nil)) + (declare (type (double-float) s) (type (f2cl-lib:integer4) k ii i) + (type f2cl-lib:logical rightv leftv)) + (setf rightv + (multiple-value-bind (ret-val var-0 var-1) (lsame side "R") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val)) + (setf leftv + (multiple-value-bind (ret-val var-0 var-1) (lsame side "L") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val)) + (setf info 0) + (cond + ((and + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame job "N") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val)) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame job "P") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val)) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame job "S") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val)) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame job "B") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val))) + (setf info -1)) + ((and (not rightv) (not leftv)) + (setf info -2)) ((< n 0) (setf info -3)) + ((or (< ilo 1) + (> ilo (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n)))) + (setf info -4)) + ((or (< ihi (min (the f2cl-lib:integer4 ilo) + (the f2cl-lib:integer4 n))) + (> ihi n)) + (setf info -5)) + ((< m 0) (setf info -7)) + ((< ldv (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n))) + (setf info -9))) + (cond ((/= info 0) + (xerbla "ZGEBAK" (f2cl-lib:int-sub info)) (go end_label))) + (if (= n 0) (go end_label)) (if (= m 0) (go end_label)) + (if + (multiple-value-bind (ret-val var-0 var-1) (lsame job "N") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val) + (go end_label)) + (if (= ilo ihi) (go label30)) + (cond + ((or + (multiple-value-bind (ret-val var-0 var-1) (lsame job "S") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val) + (multiple-value-bind (ret-val var-0 var-1) (lsame job "B") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val)) + (cond + (rightv + (f2cl-lib:fdo (i ilo (f2cl-lib:int-add i 1)) + ((> i ihi) nil) + (tagbody + (setf s + (f2cl-lib:fref scale-%data% (i) ((1 *)) + scale-%offset%)) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal m s + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (i 1) ((1 ldv) (1 *)) + v-%offset%) + ldv) + (declare (ignore var-2)) + (when var-0 (setf m var-0)) + (when var-1 (setf s var-1)) + (when var-3 (setf ldv var-3))) + label10)))) + (cond + (leftv + (f2cl-lib:fdo (i ilo (f2cl-lib:int-add i 1)) + ((> i ihi) nil) + (tagbody + (setf s + (/ one + (f2cl-lib:fref scale-%data% (i) ((1 *)) + scale-%offset%))) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal m s + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (i 1) ((1 ldv) (1 *)) + v-%offset%) + ldv) + (declare (ignore var-2)) + (when var-0 (setf m var-0)) + (when var-1 (setf s var-1)) + (when var-3 (setf ldv var-3))) + label20)))))) + label30 + (cond + ((or + (multiple-value-bind (ret-val var-0 var-1) (lsame job "P") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val) + (multiple-value-bind (ret-val var-0 var-1) (lsame job "B") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val)) + (cond + (rightv + (f2cl-lib:fdo (ii 1 (f2cl-lib:int-add ii 1)) + ((> ii n) nil) + (tagbody + (setf i ii) + (if (and (>= i ilo) (<= i ihi)) (go label40)) + (if (< i ilo) (setf i (f2cl-lib:int-sub ilo ii))) + (setf k + (f2cl-lib:int + (f2cl-lib:fref scale-%data% (i) ((1 *)) + scale-%offset%))) + (if (= k i) (go label40)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zswap m + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (i 1) ((1 ldv) (1 *)) + v-%offset%) + ldv + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (k 1) ((1 ldv) (1 *)) + v-%offset%) + ldv) + (declare (ignore var-1 var-3)) + (when var-0 (setf m var-0)) + (when var-2 (setf ldv var-2)) + (when var-4 (setf ldv var-4))) + label40)))) + (cond + (leftv + (f2cl-lib:fdo (ii 1 (f2cl-lib:int-add ii 1)) + ((> ii n) nil) + (tagbody + (setf i ii) + (if (and (>= i ilo) (<= i ihi)) (go label50)) + (if (< i ilo) (setf i (f2cl-lib:int-sub ilo ii))) + (setf k + (f2cl-lib:int + (f2cl-lib:fref scale-%data% (i) ((1 *) + ) scale-%offset%))) + (if (= k i) (go label50)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zswap m + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (i 1) ((1 ldv) (1 *)) + v-%offset%) + ldv + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (k 1) ((1 ldv) (1 *)) + v-%offset%) + ldv) + (declare (ignore var-1 var-3)) + (when var-0 (setf m var-0)) + (when var-2 (setf ldv var-2)) + (when var-4 (setf ldv var-4))) + label50)))))) + (go end_label) end_label + (return (values job side nil nil nil nil m nil ldv info)))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -107725,7 +111309,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zgebal.f} * ===================================================================== SUBROUTINE ZGEBAL( JOB, N, A, LDA, ILO, IHI, SCALE, INFO ) * @@ -107981,10 +111565,284 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zgebal} - +(let* ((zero 0.0d0) (one 1.0d0) (sclfac 2.0d0) (factor 0.95d0)) + (declare (type (double-float 0.0d0 0.0d0) zero) + (type (double-float 1.0d0 1.0d0) one) + (type (double-float 2.0d0 2.0d0) sclfac) + (type (double-float 0.95d0 0.95d0) factor) + (ignorable zero one sclfac factor)) + (defun zgebal (job n a lda ilo ihi scale info) + (declare (type (simple-array character (*)) job) + (type (f2cl-lib:integer4) info ihi ilo lda n) + (type (array f2cl-lib:complex16 (*)) a) + (type (array double-float (*)) scale)) + (f2cl-lib:with-multi-array-data + ((scale double-float scale-%data% + scale-%offset%) + (a f2cl-lib:complex16 a-%data% a-%offset%) + (job character job-%data% job-%offset%)) + (labels + ((cabs1 (cdum) + (+ (abs (f2cl-lib:dble cdum)) (abs (f2cl-lib:dimag cdum))))) + (declare + (ftype (function (f2cl-lib:complex16) + (values double-float &rest t)) cabs1)) + (prog + ((cdum #C(0.0d0 0.0d0)) (c 0.0d0) (ca 0.0d0) (f 0.0d0) + (g 0.0d0) (r 0.0d0) + (ra 0.0d0) (s 0.0d0) (sfmax1 0.0d0) (sfmax2 0.0d0) (sfmin1 0.0d0) + (sfmin2 0.0d0) (i 0) (ica 0) (iexc 0) (ira 0) (j 0) (k 0) (l 0) (m 0) + (noconv nil)) + (declare (type (f2cl-lib:complex16) cdum) + (type (double-float) sfmin2 sfmin1 sfmax2 sfmax1 s ra r g f ca c) + (type (f2cl-lib:integer4) m l k j ira iexc ica i) + (type f2cl-lib:logical noconv)) + (setf info 0) + (cond + ((and + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame job "N") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val)) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame job "P") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val)) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame job "S") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val)) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame job "B") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val))) + (setf info -1)) + ((< n 0) (setf info -2)) + ((< lda (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n))) + (setf info -4))) + (cond ((/= info 0) + (xerbla "ZGEBAL" (f2cl-lib:int-sub info)) + (go end_label))) + (setf k 1) (setf l n) (if (= n 0) (go label210)) + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame job "N") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf (f2cl-lib:fref scale-%data% (i) ((1 *)) + scale-%offset%) one) + label10)) + (go label210))) + (if + (multiple-value-bind (ret-val var-0 var-1) (lsame job "S") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val) + (go label120)) + (go label50) label20 + (setf (f2cl-lib:fref scale-%data% (m) ((1 *)) scale-%offset%) + (coerce (the f2cl-lib:integer4 j) 'double-float)) + (if (= j m) (go label30)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zswap l + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (1 j) ((1 lda) (1 *)) + a-%offset%) + 1 + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (1 m) ((1 lda) (1 *)) + a-%offset%) + 1) + (declare (ignore var-1 var-2 var-3 var-4)) + (when var-0 (setf l var-0))) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zswap (f2cl-lib:int-add (f2cl-lib:int-sub n k) 1) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (j k) ((1 lda) (1 *)) + a-%offset%) + lda + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (m k) ((1 lda) (1 *)) + a-%offset%) + lda) + (declare (ignore var-0 var-1 var-3)) (when var-2 (setf lda var-2)) + (when var-4 (setf lda var-4))) + label30 (f2cl-lib:computed-goto (label40 label80) iexc) label40 + (if (= l 1) (go label210)) (setf l (f2cl-lib:int-sub l 1)) label50 + (f2cl-lib:fdo (j l (f2cl-lib:int-add j (f2cl-lib:int-sub 1))) + ((> j 1) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i l) nil) + (tagbody + (if (= i j) (go label60)) + (if + (or + (/= + (f2cl-lib:dble + (f2cl-lib:fref a-%data% (j i) ((1 lda) (1 *)) + a-%offset%)) + zero) + (/= + (f2cl-lib:dimag + (f2cl-lib:fref a-%data% (j i) ((1 lda) (1 *)) + a-%offset%)) + zero)) + (go label70)) + label60)) + (setf m l) (setf iexc 1) (go label20) label70)) + (go label90) label80 (setf k (f2cl-lib:int-add k 1)) label90 + (f2cl-lib:fdo (j k (f2cl-lib:int-add j 1)) + ((> j l) nil) + (tagbody + (f2cl-lib:fdo (i k (f2cl-lib:int-add i 1)) + ((> i l) nil) + (tagbody + (if (= i j) (go label100)) + (if + (or + (/= + (f2cl-lib:dble + (f2cl-lib:fref a-%data% (i j) ((1 lda) (1 *)) + a-%offset%)) + zero) + (/= + (f2cl-lib:dimag + (f2cl-lib:fref a-%data% (i j) ((1 lda) (1 *)) + a-%offset%)) + zero)) + (go label110)) + label100)) + (setf m k) (setf iexc 2) (go label20) label110)) + label120 + (f2cl-lib:fdo (i k (f2cl-lib:int-add i 1)) + ((> i l) nil) + (tagbody + (setf (f2cl-lib:fref scale-%data% (i) ((1 *)) + scale-%offset%) one) label130) + ) + (if + (multiple-value-bind (ret-val var-0 var-1) (lsame job "P") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val) + (go label210)) + (setf sfmin1 (/ (dlamch "S") (dlamch "P"))) + (setf sfmax1 (/ one sfmin1)) + (setf sfmin2 (* sfmin1 sclfac)) (setf sfmax2 (/ one sfmin2)) label140 + (setf noconv f2cl-lib:%false%) + (f2cl-lib:fdo (i k (f2cl-lib:int-add i 1)) + ((> i l) nil) + (tagbody (setf c zero) + (setf r zero) + (f2cl-lib:fdo (j k (f2cl-lib:int-add j 1)) + ((> j l) nil) + (tagbody + (if (= j i) (go label150)) + (setf c + (+ c + (cabs1 + (f2cl-lib:fref a-%data% (j i) ((1 lda) (1 *)) + a-%offset%)))) + (setf r + (+ r + (cabs1 + (f2cl-lib:fref a-%data% (i j) ((1 lda) (1 *)) + a-%offset%)))) + label150)) + (setf ica + (multiple-value-bind (ret-val var-0 var-1 var-2) + (izamax l + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (1 i) ((1 lda) (1 *)) + a-%offset%) + 1) + (declare (ignore var-1 var-2)) + (when var-0 (setf l var-0)) ret-val)) + (setf ca + (abs + (f2cl-lib:fref a-%data% (ica i) ((1 lda) (1 *)) + a-%offset%))) + (setf ira + (multiple-value-bind (ret-val var-0 var-1 var-2) + (izamax (f2cl-lib:int-add (f2cl-lib:int-sub n k) 1) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (i k) ((1 lda) (1 *)) + a-%offset%) + lda) + (declare (ignore var-0 var-1)) + (when var-2 (setf lda var-2)) ret-val)) + (setf ra + (abs + (f2cl-lib:fref a-%data% + (i (f2cl-lib:int-sub (f2cl-lib:int-add ira k) 1)) + ((1 lda) (1 *)) a-%offset%))) + (if (or (= c zero) (= r zero)) (go label200)) + (setf g (/ r sclfac)) + (setf f one) (setf s (+ c r)) label160 + (if (or (>= c g) + (>= (max f c ca) sfmax2) + (<= (min r g ra) sfmin2)) + (go label170)) + (cond + ((disnan (+ c f ca r g ra)) (setf info -3) + (xerbla "ZGEBAL" (f2cl-lib:int-sub info)) + (go end_label))) + (setf f (* f sclfac)) + (setf c (* c sclfac)) + (setf ca (* ca sclfac)) + (setf r (/ r sclfac)) + (setf g (/ g sclfac)) + (setf ra (/ ra sclfac)) + (go label160) label170 (setf g (/ c sclfac)) label180 + (if (or (< g r) + (>= (max r ra) sfmax2) + (<= (min f c g ca) sfmin2)) + (go label190)) + (setf f (/ f sclfac)) + (setf c (/ c sclfac)) + (setf g (/ g sclfac)) + (setf ca (/ ca sclfac)) + (setf r (* r sclfac)) + (setf ra (* ra sclfac)) + (go label180) + label190 + (if (>= (+ c r) (* factor s)) (go label200)) + (cond + ((and (< f one) (< (f2cl-lib:fref scale (i) ((1 *))) one)) + (if + (<= (* f + (f2cl-lib:fref scale-%data% (i) ((1 *)) + scale-%offset%)) sfmin1) + (go label200)))) + (cond + ((and (> f one) (> (f2cl-lib:fref scale (i) ((1 *))) one)) + (if + (>= (f2cl-lib:fref scale-%data% (i) ((1 *)) + scale-%offset%) (/ sfmax1 f)) + (go label200)))) + (setf g (/ one f)) + (setf (f2cl-lib:fref scale-%data% (i) ((1 *)) + scale-%offset%) + (* (f2cl-lib:fref scale-%data% (i) ((1 *)) + scale-%offset%) f)) + (setf noconv f2cl-lib:%true%) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal (f2cl-lib:int-add (f2cl-lib:int-sub n k) 1) g + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (i k) ((1 lda) (1 *)) + a-%offset%) + lda) + (declare (ignore var-0 var-2)) (when var-1 (setf g var-1)) + (when var-3 (setf lda var-3))) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal l f + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (1 i) ((1 lda) (1 *)) + a-%offset%) + 1) + (declare (ignore var-2 var-3)) (when var-0 (setf l var-0)) + (when var-1 (setf f var-1))) + label200)) + (if noconv (go label140)) label210 + (setf ilo k) (setf ihi l) (go end_label) + end_label (return (values job nil nil lda ilo ihi nil info))))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -108161,7 +112019,7 @@ eigenvectors for GE matrices \end{chunk} -\begin{verbatim} +\begin{chunk}{zgeev.f} * ===================================================================== SUBROUTINE ZGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR, $ WORK, LWORK, RWORK, INFO ) @@ -108477,10 +112335,511 @@ eigenvectors for GE matrices * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zgeev} - +(let* ((zero 0.0d0) (one 1.0d0)) + (declare (type (double-float 0.0d0 0.0d0) zero) + (type (double-float 1.0d0 1.0d0) one) (ignorable zero one)) + (defun zgeev (jobvl jobvr n a lda w vl ldvl vr ldvr work lwork rwork info) + (declare (type (simple-array character (*)) jobvr jobvl) + (type (f2cl-lib:integer4) info lwork ldvr ldvl lda n) + (type (array f2cl-lib:complex16 (*)) work vr vl w a) + (type (array double-float (*)) rwork)) + (f2cl-lib:with-multi-array-data + ((rwork double-float rwork-%data% + rwork-%offset%) + (a f2cl-lib:complex16 a-%data% a-%offset%) + (w f2cl-lib:complex16 w-%data% w-%offset%) + (vl f2cl-lib:complex16 vl-%data% vl-%offset%) + (vr f2cl-lib:complex16 vr-%data% vr-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%) + (jobvl character jobvl-%data% jobvl-%offset%) + (jobvr character jobvr-%data% jobvr-%offset%)) + (prog + ((dum (make-array 1 :element-type 'double-float)) + (select (make-array 1 :element-type 't)) + (tmp #C(0.0d0 0.0d0)) (anrm 0.0d0) + (bignum 0.0d0) (cscale 0.0d0) (eps 0.0d0) (scl 0.0d0) (smlnum 0.0d0) + (hswork 0) (i 0) (ibal 0) (ierr 0) (ihi 0) (ilo 0) (irwork 0) (itau 0) + (iwrk 0) (k 0) (maxwrk 0) (minwrk 0) (nout 0) + (side (make-array '(1) :element-type 'character + :initial-element #\space)) + (lquery nil) (scalea nil) (wantvl nil) (wantvr nil)) + (declare (type (array double-float (1)) dum) + (type (array f2cl-lib:logical (1)) select) + (type (f2cl-lib:complex16) tmp) + (type (double-float) smlnum scl eps cscale bignum anrm) + (type (f2cl-lib:integer4) nout minwrk maxwrk k iwrk itau irwork + ilo ihi ierr + ibal i hswork) + (type (simple-array character (1)) side) + (type f2cl-lib:logical wantvr wantvl scalea lquery)) + (setf info 0) (setf lquery (coerce (= lwork -1) 'f2cl-lib:logical)) + (setf wantvl + (multiple-value-bind (ret-val var-0 var-1) (lsame jobvl "V") + (declare (ignore var-1)) (when var-0 (setf jobvl var-0)) ret-val)) + (setf wantvr + (multiple-value-bind (ret-val var-0 var-1) (lsame jobvr "V") + (declare (ignore var-1)) (when var-0 (setf jobvr var-0)) ret-val)) + (cond + ((and (not wantvl) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame jobvl "N") + (declare (ignore var-1)) + (when var-0 (setf jobvl var-0)) ret-val))) + (setf info -1)) + ((and (not wantvr) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame jobvr "N") + (declare (ignore var-1)) + (when var-0 (setf jobvr var-0)) ret-val))) + (setf info -2)) + ((< n 0) (setf info -3)) + ((< lda (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n))) + (setf info -5)) + ((or (< ldvl 1) (and wantvl (< ldvl n))) (setf info -8)) + ((or (< ldvr 1) (and wantvr (< ldvr n))) (setf info -10))) + (cond + ((= info 0) + (cond ((= n 0) (setf minwrk 1) (setf maxwrk 1)) + (t + (setf maxwrk + (f2cl-lib:int-add n + (f2cl-lib:int-mul n + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 1 "ZGEHRD" " " n 1 n 0) + (declare (ignore var-0 var-1 var-2 var-4 var-6)) + (when var-3 (setf n var-3)) + (when var-5 (setf n var-5)) ret-val)))) + (setf minwrk (f2cl-lib:int-mul 2 n)) + (cond + (wantvl + (setf maxwrk + (max (the f2cl-lib:integer4 maxwrk) + (the f2cl-lib:integer4 + (f2cl-lib:int-add n + (f2cl-lib:int-mul (f2cl-lib:int-sub n 1) + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 1 "ZUNGHR" " " n 1 n -1) + (declare (ignore var-0 var-1 var-2 var-4 var-6)) + (when var-3 (setf n var-3)) (when var-5 (setf n var-5)) + ret-val)))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 + var-10 + var-11 var-12) + (zhseqr "S" "V" n 1 n a lda w vl ldvl work -1 info) + (declare (ignore var-0 var-1 var-3 var-5 var-7 var-8 var-10 + var-11)) + (when var-2 (setf n var-2)) (when var-4 (setf n var-4)) + (when var-6 (setf lda var-6)) (when var-9 (setf ldvl var-9)) + (when var-12 (setf info var-12)))) + (wantvr + (setf maxwrk + (max (the f2cl-lib:integer4 maxwrk) + (the f2cl-lib:integer4 + (f2cl-lib:int-add n + (f2cl-lib:int-mul (f2cl-lib:int-sub n 1) + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 1 "ZUNGHR" " " n 1 n -1) + (declare (ignore var-0 var-1 var-2 var-4 var-6)) + (when var-3 (setf n var-3)) (when var-5 (setf n var-5)) + ret-val)))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 + var-10 + var-11 var-12) + (zhseqr "S" "V" n 1 n a lda w vr ldvr work -1 info) + (declare (ignore var-0 var-1 var-3 var-5 var-7 var-8 var-10 + var-11)) + (when var-2 (setf n var-2)) (when var-4 (setf n var-4)) + (when var-6 (setf lda var-6)) (when var-9 (setf ldvr var-9)) + (when var-12 (setf info var-12)))) + (t + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 + var-10 + var-11 var-12) + (zhseqr "E" "N" n 1 n a lda w vr ldvr work -1 info) + (declare (ignore var-0 var-1 var-3 var-5 var-7 var-8 var-10 + var-11)) + (when var-2 (setf n var-2)) (when var-4 (setf n var-4)) + (when var-6 (setf lda var-6)) (when var-9 (setf ldvr var-9)) + (when var-12 (setf info var-12))))) + (setf hswork + (f2cl-lib:int (f2cl-lib:fref work-%data% (1) ((1 *)) + work-%offset%))) + (setf maxwrk + (max (the f2cl-lib:integer4 maxwrk) (the f2cl-lib:integer4 hswork) + (the f2cl-lib:integer4 minwrk))))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce maxwrk 'f2cl-lib:complex16)) + (cond ((and (< lwork minwrk) (not lquery)) (setf info -12))))) + (cond ((/= info 0) + (xerbla "ZGEEV " (f2cl-lib:int-sub info)) + (go end_label)) + (lquery (go end_label))) + (if (= n 0) (go end_label)) + (setf eps (dlamch "P")) (setf smlnum (dlamch "S")) + (setf bignum (/ one smlnum)) + (multiple-value-bind (var-0 var-1) + (dlabad smlnum bignum) (declare (ignore)) + (when var-0 (setf smlnum var-0)) (when var-1 (setf bignum var-1))) + (setf smlnum (/ (f2cl-lib:fsqrt smlnum) eps)) + (setf bignum (/ one smlnum)) + (setf anrm + (multiple-value-bind (ret-val var-0 var-1 var-2 var-3 var-4 var-5) + (zlange "M" n n a lda dum) (declare (ignore var-0 var-3 var-5)) + (when var-1 (setf n var-1)) (when var-2 (setf n var-2)) + (when var-4 (setf lda var-4)) ret-val)) + (setf scalea f2cl-lib:%false%) + (cond + ((and (> anrm zero) (< anrm smlnum)) (setf scalea f2cl-lib:%true%) + (setf cscale smlnum)) + ((> anrm bignum) (setf scalea f2cl-lib:%true%) (setf cscale bignum))) + (if scalea + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9) + (zlascl "G" 0 0 anrm cscale n n a lda ierr) + (declare (ignore var-0 var-1 var-2 var-7)) + (when var-3 (setf anrm var-3)) + (when var-4 (setf cscale var-4)) (when var-5 (setf n var-5)) + (when var-6 (setf n var-6)) (when var-8 (setf lda var-8)) + (when var-9 (setf ierr var-9)))) + (setf ibal 1) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7) + (zgebal "B" n a lda ilo ihi + (f2cl-lib:array-slice rwork-%data% double-float (ibal) ((1 *)) + rwork-%offset%) + ierr) + (declare (ignore var-0 var-1 var-2 var-6)) + (setf lda var-3) (setf ilo var-4) + (setf ihi var-5) (setf ierr var-7)) + (setf itau 1) (setf iwrk (f2cl-lib:int-add itau n)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zgehrd n ilo ihi a lda + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 (itau) ((1 *)) + work-%offset%) + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 (iwrk) ((1 *)) + work-%offset%) + (f2cl-lib:int-add (f2cl-lib:int-sub lwork iwrk) 1) ierr) + (declare (ignore var-3 var-5 var-6 var-7)) (when var-0 (setf n var-0)) + (when var-1 (setf ilo var-1)) (when var-2 (setf ihi var-2)) + (when var-4 (setf lda var-4)) (when var-8 (setf ierr var-8))) + (cond + (wantvl (f2cl-lib:f2cl-set-string side "L" (string 1)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (zlacpy "L" n n a lda vl ldvl) (declare (ignore var-0 var-3 var-5)) + (when var-1 (setf n var-1)) (when var-2 (setf n var-2)) + (when var-4 (setf lda var-4)) (when var-6 (setf ldvl var-6))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zunghr n ilo ihi vl ldvl + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 (itau) ((1 *)) + work-%offset%) + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 (iwrk) ((1 *)) + work-%offset%) + (f2cl-lib:int-add (f2cl-lib:int-sub lwork iwrk) 1) ierr) + (declare (ignore var-3 var-5 var-6 var-7)) + (when var-0 (setf n var-0)) + (when var-1 (setf ilo var-1)) (when var-2 (setf ihi var-2)) + (when var-4 (setf ldvl var-4)) (when var-8 (setf ierr var-8))) + (setf iwrk itau) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 + var-10 var-11 + var-12) + (zhseqr "S" "V" n ilo ihi a lda w vl ldvl + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 (iwrk) ((1 *)) + work-%offset%) + (f2cl-lib:int-add (f2cl-lib:int-sub lwork iwrk) 1) info) + (declare (ignore var-0 var-1 var-5 var-7 var-8 var-10 var-11)) + (when var-2 (setf n var-2)) (when var-3 (setf ilo var-3)) + (when var-4 (setf ihi var-4)) (when var-6 (setf lda var-6)) + (when var-9 (setf ldvl var-9)) (when var-12 (setf info var-12))) + (cond + (wantvr (f2cl-lib:f2cl-set-string side "B" (string 1)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (zlacpy "F" n n vl ldvl vr ldvr) + (declare (ignore var-0 var-3 var-5)) + (when var-1 (setf n var-1)) (when var-2 (setf n var-2)) + (when var-4 (setf ldvl var-4)) (when var-6 (setf ldvr var-6)))))) + (wantvr (f2cl-lib:f2cl-set-string side "R" (string 1)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (zlacpy "L" n n a lda vr ldvr) (declare (ignore var-0 var-3 var-5)) + (when var-1 (setf n var-1)) (when var-2 (setf n var-2)) + (when var-4 (setf lda var-4)) (when var-6 (setf ldvr var-6))) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8) + (zunghr n ilo ihi vr ldvr + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 (itau) ((1 *)) + work-%offset%) + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 (iwrk) ((1 *)) + work-%offset%) + (f2cl-lib:int-add (f2cl-lib:int-sub lwork iwrk) 1) ierr) + (declare (ignore var-3 var-5 var-6 var-7)) + (when var-0 (setf n var-0)) + (when var-1 (setf ilo var-1)) (when var-2 (setf ihi var-2)) + (when var-4 (setf ldvr var-4)) (when var-8 (setf ierr var-8))) + (setf iwrk itau) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 + var-10 var-11 + var-12) + (zhseqr "S" "V" n ilo ihi a lda w vr ldvr + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 (iwrk) ((1 *)) + work-%offset%) + (f2cl-lib:int-add (f2cl-lib:int-sub lwork iwrk) 1) info) + (declare (ignore var-0 var-1 var-5 var-7 var-8 var-10 var-11)) + (when var-2 (setf n var-2)) (when var-3 (setf ilo var-3)) + (when var-4 (setf ihi var-4)) (when var-6 (setf lda var-6)) + (when var-9 (setf ldvr var-9)) (when var-12 (setf info var-12)))) + (t (setf iwrk itau) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 + var-10 var-11 + var-12) + (zhseqr "E" "N" n ilo ihi a lda w vr ldvr + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 (iwrk) ((1 *)) + work-%offset%) + (f2cl-lib:int-add (f2cl-lib:int-sub lwork iwrk) 1) info) + (declare (ignore var-0 var-1 var-5 var-7 var-8 var-10 var-11)) + (when var-2 (setf n var-2)) (when var-3 (setf ilo var-3)) + (when var-4 (setf ihi var-4)) (when var-6 (setf lda var-6)) + (when var-9 (setf ldvr var-9)) (when var-12 (setf info var-12))))) + (if (> info 0) (go label50)) + (cond + ((or wantvl wantvr) (setf irwork (f2cl-lib:int-add ibal n)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10 var-11 + var-12 var-13 var-14) + (ztrevc side "B" select n a lda vl ldvl vr ldvr n nout + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 (iwrk) ((1 *)) + work-%offset%) + (f2cl-lib:array-slice rwork-%data% double-float (irwork) ((1 *)) + rwork-%offset%) + ierr) + (declare (ignore var-1 var-2 var-4 var-6 var-8 var-12 var-13)) + (when var-0 (setf side var-0)) (when var-3 (setf n var-3)) + (when var-5 (setf lda var-5)) (when var-7 (setf ldvl var-7)) + (when var-9 (setf ldvr var-9)) (when var-10 (setf n var-10)) + (when var-11 (setf nout var-11)) (when var-14 (setf ierr var-14))))) + (cond + (wantvl + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9) + (zgebak "B" "L" n ilo ihi + (f2cl-lib:array-slice rwork-%data% double-float (ibal) ((1 *)) + rwork-%offset%) + n vl ldvl ierr) + (declare (ignore var-0 var-1 var-2 var-3 var-4 var-5 var-7)) + (setf n var-6) + (setf ldvl var-8) (setf ierr var-9)) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf scl + (/ one + (multiple-value-bind (ret-val var-0 var-1 var-2) + (dznrm2 n + (f2cl-lib:array-slice vl-%data% f2cl-lib:complex16 (1 i) + ((1 ldvl) (1 *)) vl-%offset%) + 1) + (declare (ignore var-1 var-2)) + (when var-0 (setf n var-0)) ret-val))) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal n scl + (f2cl-lib:array-slice vl-%data% f2cl-lib:complex16 + (1 i) ((1 ldvl) (1 *)) + vl-%offset%) + 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf scl var-1))) + (f2cl-lib:fdo (k 1 (f2cl-lib:int-add k 1)) + ((> k n) nil) + (tagbody + (setf + (f2cl-lib:fref rwork-%data% + ((f2cl-lib:int-sub (f2cl-lib:int-add irwork k) 1)) + ((1 *)) + rwork-%offset%) + (+ + (expt + (f2cl-lib:dble + (f2cl-lib:fref vl-%data% (k i) ((1 ldvl) (1 *)) + vl-%offset%)) + 2) + (expt + (f2cl-lib:dimag + (f2cl-lib:fref vl-%data% (k i) ((1 ldvl) (1 *)) + vl-%offset%)) + 2))) + label10)) + (setf k + (multiple-value-bind (ret-val var-0 var-1 var-2) + (idamax n + (f2cl-lib:array-slice rwork-%data% double-float + (irwork) ((1 *)) + rwork-%offset%) + 1) + (declare (ignore var-1 var-2)) + (when var-0 (setf n var-0)) ret-val)) + (setf tmp + (coerce + (/ + (f2cl-lib:dconjg + (f2cl-lib:fref vl-%data% (k i) ((1 ldvl) (1 *)) + vl-%offset%)) + (f2cl-lib:fsqrt + (f2cl-lib:fref rwork-%data% + ((f2cl-lib:int-sub (f2cl-lib:int-add irwork k) 1)) + ((1 *)) + rwork-%offset%))) + 'f2cl-lib:complex16)) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zscal n tmp + (f2cl-lib:array-slice vl-%data% f2cl-lib:complex16 + (1 i) ((1 ldvl) (1 *)) + vl-%offset%) + 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf tmp var-1))) + (setf (f2cl-lib:fref vl-%data% (k i) ((1 ldvl) (1 *)) + vl-%offset%) + (f2cl-lib:dcmplx + (f2cl-lib:dble + (f2cl-lib:fref vl-%data% (k i) ((1 ldvl) (1 *)) + vl-%offset%)) + zero)) + label20)))) + (cond + (wantvr + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9) + (zgebak "B" "R" n ilo ihi + (f2cl-lib:array-slice rwork-%data% double-float (ibal) ((1 *)) + rwork-%offset%) + n vr ldvr ierr) + (declare (ignore var-0 var-1 var-2 var-3 var-4 var-5 var-7)) + (setf n var-6) + (setf ldvr var-8) (setf ierr var-9)) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf scl + (/ one + (multiple-value-bind (ret-val var-0 var-1 var-2) + (dznrm2 n + (f2cl-lib:array-slice vr-%data% f2cl-lib:complex16 + (1 i) + ((1 ldvr) (1 *)) vr-%offset%) + 1) + (declare (ignore var-1 var-2)) + (when var-0 (setf n var-0)) ret-val))) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal n scl + (f2cl-lib:array-slice vr-%data% f2cl-lib:complex16 + (1 i) ((1 ldvr) (1 *)) + vr-%offset%) + 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf scl var-1))) + (f2cl-lib:fdo (k 1 (f2cl-lib:int-add k 1)) + ((> k n) nil) + (tagbody + (setf + (f2cl-lib:fref rwork-%data% + ((f2cl-lib:int-sub (f2cl-lib:int-add irwork k) 1)) + ((1 *)) + rwork-%offset%) + (+ + (expt + (f2cl-lib:dble + (f2cl-lib:fref vr-%data% (k i) ((1 ldvr) (1 *)) + vr-%offset%)) + 2) + (expt + (f2cl-lib:dimag + (f2cl-lib:fref vr-%data% (k i) ((1 ldvr) (1 *)) + vr-%offset%)) + 2))) + label30)) + (setf k + (multiple-value-bind (ret-val var-0 var-1 var-2) + (idamax n + (f2cl-lib:array-slice rwork-%data% double-float + (irwork) ((1 *)) + rwork-%offset%) + 1) + (declare (ignore var-1 var-2)) + (when var-0 (setf n var-0)) ret-val)) + (setf tmp + (coerce + (/ + (f2cl-lib:dconjg + (f2cl-lib:fref vr-%data% (k i) ((1 ldvr) (1 *)) + vr-%offset%)) + (f2cl-lib:fsqrt + (f2cl-lib:fref rwork-%data% + ((f2cl-lib:int-sub (f2cl-lib:int-add irwork k) 1)) + ((1 *)) + rwork-%offset%))) + 'f2cl-lib:complex16)) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zscal n tmp + (f2cl-lib:array-slice vr-%data% f2cl-lib:complex16 + (1 i) ((1 ldvr) (1 *)) + vr-%offset%) + 1) + (declare (ignore var-2 var-3)) (when var-0 (setf n var-0)) + (when var-1 (setf tmp var-1))) + (setf (f2cl-lib:fref vr-%data% (k i) ((1 ldvr) (1 *)) + vr-%offset%) + (f2cl-lib:dcmplx + (f2cl-lib:dble + (f2cl-lib:fref vr-%data% (k i) ((1 ldvr) (1 *)) + vr-%offset%)) + zero)) + label40)))) + label50 + (cond + (scalea + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9) + (zlascl "G" 0 0 cscale anrm (f2cl-lib:int-sub n info) 1 + (f2cl-lib:array-slice w-%data% f2cl-lib:complex16 + ((+ info 1)) ((1 *)) + w-%offset%) + (max (the f2cl-lib:integer4 (f2cl-lib:int-sub n info)) + (the f2cl-lib:integer4 1)) + ierr) + (declare (ignore var-0 var-1 var-2 var-5 var-6 var-7 var-8)) + (when var-3 (setf cscale var-3)) (when var-4 (setf anrm var-4)) + (when var-9 (setf ierr var-9))) + (cond + ((> info 0) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9) + (zlascl "G" 0 0 cscale anrm (f2cl-lib:int-sub ilo 1) 1 w n ierr) + (declare (ignore var-0 var-1 var-2 var-5 var-6 var-7)) + (when var-3 (setf cscale var-3)) (when var-4 (setf anrm var-4)) + (when var-8 (setf n var-8)) (when var-9 (setf ierr var-9))))))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce maxwrk 'f2cl-lib:complex16)) + (go end_label) end_label + (return + (values jobvl jobvr n nil lda nil nil ldvl nil + ldvr nil nil nil info))) + ))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -108628,7 +112987,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zgehd2.f} * ===================================================================== SUBROUTINE ZGEHD2( N, ILO, IHI, A, LDA, TAU, WORK, INFO ) * @@ -108706,10 +113065,102 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zgehd2} - +(let* ((one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (f2cl-lib:complex16) one) (ignorable one)) + (defun zgehd2 (n ilo ihi a lda tau work info) + (declare (type (f2cl-lib:integer4) info lda ihi ilo n) + (type (array f2cl-lib:complex16 (*)) work tau a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%) + (tau f2cl-lib:complex16 tau-%data% tau-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%)) + (prog + ((alpha #C(0.0d0 0.0d0)) (i 0) (dconjg$ 0.0)) + (declare (type (f2cl-lib:complex16) alpha) (type (f2cl-lib:integer4) i) + (type (single-float) dconjg$)) + (setf info 0) + (cond ((< n 0) (setf info -1)) + ((or (< ilo 1) + (> ilo (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n)))) + (setf info -2)) + ((or (< ihi (min (the f2cl-lib:integer4 ilo) + (the f2cl-lib:integer4 n))) + (> ihi n)) + (setf info -3)) + ((< lda (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n))) + (setf info -5))) + (cond ((/= info 0) + (xerbla "ZGEHD2" (f2cl-lib:int-sub info)) + (go end_label))) + (f2cl-lib:fdo (i ilo (f2cl-lib:int-add i 1)) + ((> i + (f2cl-lib:int-add ihi (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf alpha + (f2cl-lib:fref a-%data% ((f2cl-lib:int-add i 1) i) + ((1 lda) (1 *)) + a-%offset%)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zlarfg (f2cl-lib:int-sub ihi i) alpha + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((min (f2cl-lib:int-add i 2) n) i) ((1 lda) (1 *)) + a-%offset%) + 1 + (f2cl-lib:array-slice tau-%data% f2cl-lib:complex16 + (i) ((1 *)) + tau-%offset%)) + (declare (ignore var-0 var-2 var-3 var-4)) + (when var-1 (setf alpha var-1))) + (setf + (f2cl-lib:fref a-%data% ((f2cl-lib:int-add i 1) i) + ((1 lda) (1 *)) + a-%offset%) + one) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8) + (zlarf "Right" ihi (f2cl-lib:int-sub ihi i) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ i 1) i) + ((1 lda) (1 *)) a-%offset%) + 1 + (f2cl-lib:array-slice tau-%data% f2cl-lib:complex16 + (i) ((1 *)) + tau-%offset%) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add i 1)) ((1 lda) (1 *)) a-%offset%) + lda work) + (declare (ignore var-0 var-2 var-3 var-4 var-5 var-6 var-8)) + (when var-1 (setf ihi var-1)) (when var-7 (setf lda var-7))) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8) + (zlarf "Left" (f2cl-lib:int-sub ihi i) + (f2cl-lib:int-sub n i) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ i 1) i) + ((1 lda) (1 *)) a-%offset%) + 1 (f2cl-lib:dconjg (f2cl-lib:fref tau-%data% (i) ((1 *)) + tau-%offset%)) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ i 1) (f2cl-lib:int-add i 1)) ((1 lda) (1 *)) + a-%offset%) + lda work) + (declare (ignore var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-8)) + (when var-7 (setf lda var-7))) + (setf + (f2cl-lib:fref a-%data% ((f2cl-lib:int-add i 1) i) + ((1 lda) (1 *)) + a-%offset%) + alpha) + label10)) + (go end_label) + end_label + (return (values nil nil ihi nil lda nil nil info))) + ))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -108875,7 +113326,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zgehrd.f} * ===================================================================== SUBROUTINE ZGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO ) * @@ -109062,10 +113513,269 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zgehrd} - +(let* + ((nbmax 64) (ldt (+ nbmax 1)) + (zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16)) + (one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (f2cl-lib:integer4 64 64) nbmax) (type (f2cl-lib:integer4) ldt) + (type (f2cl-lib:complex16) zero) (type (f2cl-lib:complex16) one) + (ignorable nbmax ldt zero one)) + (defun zgehrd (n ilo ihi a lda tau work lwork info) + (declare (type (f2cl-lib:integer4) info lwork lda ihi ilo n) + (type (array f2cl-lib:complex16 (*)) work tau a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%) + (tau f2cl-lib:complex16 tau-%data% tau-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%)) + (prog + ((ei #C(0.0d0 0.0d0)) (i 0) (ib 0) (iinfo 0) (iws 0) (j 0) (ldwork 0) + (lwkopt 0) (nb 0) (nbmin 0) (nh 0) (nx 0) (lquery nil) + (t$ + (make-array (the fixnum (reduce #'* (list ldt nbmax))) :element-type + 'f2cl-lib:complex16))) + (declare (type (f2cl-lib:complex16) ei) + (type (f2cl-lib:integer4) + nx nh nbmin nb lwkopt ldwork j iws iinfo ib i) + (type f2cl-lib:logical lquery) + (type (array f2cl-lib:complex16 (*)) t$)) + (setf info 0) + (setf nb + (min (the f2cl-lib:integer4 nbmax) + (the f2cl-lib:integer4 + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 1 "ZGEHRD" " " n ilo ihi -1) + (declare (ignore var-0 var-1 var-2 var-6)) + (when var-3 (setf n var-3)) + (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) ret-val)))) + (setf lwkopt (f2cl-lib:int-mul n nb)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce lwkopt 'f2cl-lib:complex16)) + (setf lquery (coerce (= lwork -1) 'f2cl-lib:logical)) + (cond ((< n 0) (setf info -1)) + ((or (< ilo 1) + (> ilo (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n)))) + (setf info -2)) + ((or (< ihi (min (the f2cl-lib:integer4 ilo) + (the f2cl-lib:integer4 n))) + (> ihi n)) + (setf info -3)) + ((< lda (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n))) + (setf info -5)) + ((and (< lwork (max (the f2cl-lib:integer4 1) + (the f2cl-lib:integer4 n))) + (not lquery)) + (setf info -8))) + (cond ((/= info 0) + (xerbla "ZGEHRD" (f2cl-lib:int-sub info)) + (go end_label)) + (lquery (go end_label))) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i + (f2cl-lib:int-add ilo (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf (f2cl-lib:fref tau-%data% (i) ((1 *)) + tau-%offset%) zero) label10) + ) + (f2cl-lib:fdo (i (max (the f2cl-lib:integer4 1) + (the f2cl-lib:integer4 ihi)) + (f2cl-lib:int-add i 1)) + ((> i (f2cl-lib:int-add n (f2cl-lib:int-sub 1))) nil) + (tagbody + (setf (f2cl-lib:fref tau-%data% (i) ((1 *)) + tau-%offset%) zero) label20) + ) + (setf nh (f2cl-lib:int-add (f2cl-lib:int-sub ihi ilo) 1)) + (cond + ((<= nh 1) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce 1 'f2cl-lib:complex16)) + (go end_label))) + (setf nb + (min (the f2cl-lib:integer4 nbmax) + (the f2cl-lib:integer4 + (multiple-value-bind (ret-val var-0 var-1 var-2 var-3 var-4 + var-5 var-6) + (ilaenv 1 "ZGEHRD" " " n ilo ihi -1) + (declare (ignore var-0 var-1 var-2 var-6)) + (when var-3 (setf n var-3)) + (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) ret-val)))) + (setf nbmin 2) (setf iws 1) + (cond + ((and (> nb 1) (< nb nh)) + (setf nx + (max (the f2cl-lib:integer4 nb) + (the f2cl-lib:integer4 + (multiple-value-bind (ret-val var-0 var-1 var-2 var-3 var-4 + var-5 var-6) + (ilaenv 3 "ZGEHRD" " " n ilo ihi -1) + (declare (ignore var-0 var-1 var-2 var-6)) + (when var-3 (setf n var-3)) + (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) ret-val)))) + (cond + ((< nx nh) (setf iws (f2cl-lib:int-mul n nb)) + (cond + ((< lwork iws) + (setf nbmin + (max (the f2cl-lib:integer4 2) + (the f2cl-lib:integer4 + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 2 "ZGEHRD" " " n ilo ihi -1) + (declare (ignore var-0 var-1 var-2 var-6)) + (when var-3 (setf n var-3)) (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) ret-val)))) + (cond + ((>= lwork (f2cl-lib:int-mul n nbmin)) + (setf nb (the f2cl-lib:integer4 (truncate lwork n)))) + (t (setf nb 1))))))))) + (setf ldwork n) + (cond ((or (< nb nbmin) (>= nb nh)) (setf i ilo)) + (t + (f2cl-lib:fdo (i ilo (f2cl-lib:int-add i nb)) + ((> i + (f2cl-lib:int-add ihi + (f2cl-lib:int-sub 1) (f2cl-lib:int-sub nx))) + nil) + (tagbody + (setf ib + (min (the f2cl-lib:integer4 nb) + (the f2cl-lib:integer4 (f2cl-lib:int-sub ihi i)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9) + (zlahr2 ihi i ib + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (1 i) ((1 lda) (1 *)) + a-%offset%) + lda + (f2cl-lib:array-slice tau-%data% f2cl-lib:complex16 + (i) ((1 *)) + tau-%offset%) + t$ ldt work ldwork) + (declare (ignore var-3 var-5 var-6 var-8)) + (when var-0 (setf ihi var-0)) + (when var-1 (setf i var-1)) (when var-2 (setf ib var-2)) + (when var-4 (setf lda var-4)) + (when var-7 (setf ldt var-7)) + (when var-9 (setf ldwork var-9))) + (setf ei + (f2cl-lib:fref a-%data% + ((f2cl-lib:int-add i ib) + (f2cl-lib:int-sub (f2cl-lib:int-add i ib) 1)) + ((1 lda) (1 *)) a-%offset%)) + (setf + (f2cl-lib:fref a-%data% + ((f2cl-lib:int-add i ib) + (f2cl-lib:int-sub (f2cl-lib:int-add i ib) 1)) + ((1 lda) (1 *)) a-%offset%) + one) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 var-11 + var-12) + (zgemm "No transpose" "Conjugate transpose" ihi + (f2cl-lib:int-add (f2cl-lib:int-sub ihi i ib) 1) + ib (- one) work ldwork + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ i ib) i) + ((1 lda) (1 *)) a-%offset%) + lda one + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add i ib)) ((1 lda) (1 *)) + a-%offset%) + lda) + (declare (ignore var-0 var-1 var-3 var-5 var-6 + var-8 var-11)) + (when var-2 (setf ihi var-2)) + (when var-4 (setf ib var-4)) + (when var-7 (setf ldwork var-7)) + (when var-9 (setf lda var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf lda var-12))) + (setf + (f2cl-lib:fref a-%data% + ((f2cl-lib:int-add i ib) + (f2cl-lib:int-sub (f2cl-lib:int-add i ib) 1)) + ((1 lda) (1 *)) a-%offset%) + ei) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Lower" "Conjugate transpose" "Unit" i + (f2cl-lib:int-sub ib 1) one + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ i 1) i) + ((1 lda) (1 *)) a-%offset%) + lda work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-5 + var-7 var-9)) + (when var-4 (setf i var-4)) + (when var-6 (setf one var-6)) + (when var-8 (setf lda var-8)) + (when var-10 (setf ldwork var-10))) + (f2cl-lib:fdo (j 0 (f2cl-lib:int-add j 1)) + ((> j + (f2cl-lib:int-add ib (f2cl-lib:int-sub 2))) + nil) + (tagbody + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 + var-5) + (zaxpy i (- one) + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 + ((+ (f2cl-lib:int-mul ldwork j) 1)) ((1 *)) + work-%offset%) + 1 + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add i j 1)) ((1 lda) (1 *)) + a-%offset%) + 1) + (declare (ignore var-1 var-2 var-3 var-4 var-5)) + (when var-0 (setf i var-0))) + label30)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 var-11 + var-12 var-13 var-14) + (zlarfb "Left" "Conjugate transpose" + "Forward" "Columnwise" + (f2cl-lib:int-sub ihi i) + (f2cl-lib:int-add (f2cl-lib:int-sub n i ib) 1) + ib + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ i 1) i) + ((1 lda) (1 *)) a-%offset%) + lda t$ ldt + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ i 1) (f2cl-lib:int-add i ib)) ((1 lda) (1 *)) + a-%offset%) + lda work ldwork) + (declare + (ignore var-0 var-1 var-2 var-3 var-4 var-5 var-7 + var-9 var-11 var-13)) + (when var-6 (setf ib var-6)) + (when var-8 (setf lda var-8)) + (when var-10 (setf ldt var-10)) + (when var-12 (setf lda var-12)) + (when var-14 (setf ldwork var-14))) + label40)))) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7) + (zgehd2 n i ihi a lda tau work iinfo) + (declare (ignore var-0 var-1 var-3 var-5 var-6)) (setf ihi var-2) + (setf lda var-4) (setf iinfo var-7)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce iws 'f2cl-lib:complex16)) + (go end_label) + end_label + (return (values n ilo ihi nil lda nil nil nil info))) + ))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -109359,7 +114069,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zhseqr.f} * ===================================================================== SUBROUTINE ZHSEQR( JOB, COMPZ, N, ILO, IHI, H, LDH, W, Z, LDZ, $ WORK, LWORK, INFO ) @@ -109562,10 +114272,255 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zhseqr} - +(let* + ((ntiny 11) (nl 49) + (zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16)) + (one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16)) + (rzero 0.0d0)) + (declare (type (f2cl-lib:integer4 11 11) ntiny) + (type (f2cl-lib:integer4 49 49) nl) (type (f2cl-lib:complex16) zero) + (type (f2cl-lib:complex16) one) (type (double-float 0.0d0 0.0d0) rzero) + (ignorable ntiny nl zero one rzero)) + (defun zhseqr (job compz n ilo ihi h ldh w z ldz work lwork info) + (declare (type (simple-array character (*)) compz job) + (type (f2cl-lib:integer4) info lwork ldz ldh ihi ilo n) + (type (array f2cl-lib:complex16 (*)) work z w h)) + (f2cl-lib:with-multi-array-data + ((h f2cl-lib:complex16 h-%data% h-%offset%) + (w f2cl-lib:complex16 w-%data% w-%offset%) + (z f2cl-lib:complex16 z-%data% z-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%) + (job character job-%data% job-%offset%) + (compz character compz-%data% compz-%offset%)) + (prog + ((initz nil) (lquery nil) (wantt nil) (wantz nil) (kbot 0) (nmin 0) + (hl + (make-array (the fixnum (reduce #'* (list nl nl))) :element-type + 'f2cl-lib:complex16)) + (workl (make-array nl :element-type 'f2cl-lib:complex16))) + (declare (type f2cl-lib:logical wantz wantt lquery initz) + (type (f2cl-lib:integer4) nmin kbot) + (type (array f2cl-lib:complex16 (*)) workl hl)) + (setf wantt + (multiple-value-bind (ret-val var-0 var-1) (lsame job "S") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val)) + (setf initz + (multiple-value-bind (ret-val var-0 var-1) (lsame compz "I") + (declare (ignore var-1)) (when var-0 (setf compz var-0)) ret-val)) + (setf wantz + (or initz + (multiple-value-bind (ret-val var-0 var-1) (lsame compz "V") + (declare (ignore var-1)) (when var-0 (setf compz var-0)) ret-val))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (f2cl-lib:dcmplx + (f2cl-lib:dble (max (the f2cl-lib:integer4 1) + (the f2cl-lib:integer4 n))) + rzero)) + (setf lquery (coerce (= lwork -1) 'f2cl-lib:logical)) (setf info 0) + (cond + ((and + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame job "E") + (declare (ignore var-1)) (when var-0 (setf job var-0)) ret-val)) + (not wantt)) + (setf info -1)) + ((and + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame compz "N") + (declare (ignore var-1)) (when var-0 (setf compz var-0)) ret-val)) + (not wantz)) + (setf info -2)) + ((< n 0) (setf info -3)) + ((or (< ilo 1) + (> ilo (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n)))) + (setf info -4)) + ((or (< ihi (min (the f2cl-lib:integer4 ilo) + (the f2cl-lib:integer4 n))) + (> ihi n)) + (setf info -5)) + ((< ldh (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n))) + (setf info -7)) + ((or (< ldz 1) + (and wantz + (< ldz (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n))))) + (setf info -10)) + ((and (< lwork (max (the f2cl-lib:integer4 1) + (the f2cl-lib:integer4 n))) + (not lquery)) + (setf info -12))) + (cond ((/= info 0) + (xerbla "ZHSEQR" (f2cl-lib:int-sub info)) + (go end_label)) + ((= n 0) (go end_label)) + (lquery + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 + var-10 var-11 + var-12 var-13 var-14) + (zlaqr0 wantt wantz n ilo ihi h ldh w ilo ihi z ldz work lwork info) + (declare (ignore var-5 var-7 var-10 var-12)) + (when var-0 (setf wantt var-0)) (when var-1 (setf wantz var-1)) + (when var-2 (setf n var-2)) (when var-3 (setf ilo var-3)) + (when var-4 (setf ihi var-4)) (when var-6 (setf ldh var-6)) + (when var-8 (setf ilo var-8)) (when var-9 (setf ihi var-9)) + (when var-11 (setf ldz var-11)) (when var-13 (setf lwork var-13)) + (when var-14 (setf info var-14))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (f2cl-lib:dcmplx + (max (f2cl-lib:dble (f2cl-lib:fref work-%data% (1) ((1 *)) + work-%offset%)) + (f2cl-lib:dble + (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n)))) + rzero)) + (go end_label)) + (t + (if (> ilo 1) + (zcopy (f2cl-lib:int-sub ilo 1) h (f2cl-lib:int-add ldh 1) w 1)) + (if (< ihi n) + (zcopy (f2cl-lib:int-sub n ihi) + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 + ((+ ihi 1) (f2cl-lib:int-add ihi 1)) ((1 ldh) (1 *)) h-%offset%) + (f2cl-lib:int-add ldh 1) + (f2cl-lib:array-slice w-%data% f2cl-lib:complex16 + ((+ ihi 1)) ((1 *)) + w-%offset%) + 1)) + (if initz + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (zlaset "A" n n zero one z ldz) (declare (ignore var-0 var-5)) + (when var-1 (setf n var-1)) (when var-2 (setf n var-2)) + (when var-3 (setf zero var-3)) (when var-4 (setf one var-4)) + (when var-6 (setf ldz var-6)))) + (cond + ((= ilo ihi) + (setf (f2cl-lib:fref w-%data% (ilo) ((1 *)) w-%offset%) + (f2cl-lib:fref h-%data% (ilo ilo) ((1 ldh) (1 *)) h-%offset%)) + (go end_label))) + (setf nmin + (multiple-value-bind (ret-val var-0 var-1 var-2 var-3 var-4 + var-5 var-6) + (ilaenv 12 "ZHSEQR" (f2cl-lib:f2cl-// job compz) n ilo ihi lwork) + (declare (ignore var-0 var-1 var-2)) (when var-3 (setf n var-3)) + (when var-4 (setf ilo var-4)) (when var-5 (setf ihi var-5)) + (when var-6 (setf lwork var-6)) ret-val)) + (setf nmin (max (the f2cl-lib:integer4 ntiny) + (the f2cl-lib:integer4 nmin))) + (cond + ((> n nmin) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 + var-10 + var-11 var-12 var-13 var-14) + (zlaqr0 wantt wantz n ilo ihi h ldh w ilo ihi z + ldz work lwork info) + (declare (ignore var-5 var-7 var-10 var-12)) + (when var-0 (setf wantt var-0)) (when var-1 (setf wantz var-1)) + (when var-2 (setf n var-2)) (when var-3 (setf ilo var-3)) + (when var-4 (setf ihi var-4)) (when var-6 (setf ldh var-6)) + (when var-8 (setf ilo var-8)) (when var-9 (setf ihi var-9)) + (when var-11 (setf ldz var-11)) (when var-13 (setf lwork var-13)) + (when var-14 (setf info var-14)))) + (t + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 + var-10 + var-11 var-12) + (zlahqr wantt wantz n ilo ihi h ldh w ilo ihi z ldz info) + (declare (ignore var-5 var-7 var-10)) + (when var-0 (setf wantt var-0)) + (when var-1 (setf wantz var-1)) (when var-2 (setf n var-2)) + (when var-3 (setf ilo var-3)) (when var-4 (setf ihi var-4)) + (when var-6 (setf ldh var-6)) (when var-8 (setf ilo var-8)) + (when var-9 (setf ihi var-9)) (when var-11 (setf ldz var-11)) + (when var-12 (setf info var-12))) + (cond + ((> info 0) (setf kbot info) + (cond + ((>= n nl) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10 + var-11 var-12 var-13 var-14) + (zlaqr0 wantt wantz n ilo kbot h ldh w ilo ihi z + ldz work lwork info) + (declare (ignore var-5 var-7 var-10 var-12)) + (when var-0 (setf wantt var-0)) + (when var-1 (setf wantz var-1)) + (when var-2 (setf n var-2)) (when var-3 (setf ilo var-3)) + (when var-4 (setf kbot var-4)) (when var-6 (setf ldh var-6)) + (when var-8 (setf ilo var-8)) (when var-9 (setf ihi var-9)) + (when var-11 (setf ldz var-11)) + (when var-13 (setf lwork var-13)) + (when var-14 (setf info var-14)))) + (t + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (zlacpy "A" n n h ldh hl nl) + (declare (ignore var-0 var-3 var-5)) + (when var-1 (setf n var-1)) (when var-2 (setf n var-2)) + (when var-4 (setf ldh var-4)) (when var-6 (setf nl var-6))) + (setf (f2cl-lib:fref hl ((f2cl-lib:int-add n 1) n) + ((1 nl) (1 nl))) + zero) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (zlaset "A" nl (f2cl-lib:int-sub nl n) zero zero + (f2cl-lib:array-slice hl f2cl-lib:complex16 + (1 (f2cl-lib:int-add n 1)) ((1 nl) (1 nl))) + nl) + (declare (ignore var-0 var-2 var-5)) + (when var-1 (setf nl var-1)) + (when var-3 (setf zero var-3)) (when var-4 (setf zero var-4)) + (when var-6 (setf nl var-6))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12 var-13 var-14) + (zlaqr0 wantt wantz nl ilo kbot hl nl w ilo ihi z + ldz workl nl info) + (declare (ignore var-5 var-7 var-10 var-12)) + (when var-0 (setf wantt var-0)) + (when var-1 (setf wantz var-1)) + (when var-2 (setf nl var-2)) (when var-3 (setf ilo var-3)) + (when var-4 (setf kbot var-4)) (when var-6 (setf nl var-6)) + (when var-8 (setf ilo var-8)) (when var-9 (setf ihi var-9)) + (when var-11 (setf ldz var-11)) (when var-13 (setf nl var-13)) + (when var-14 (setf info var-14))) + (if (or wantt (/= info 0)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (zlacpy "A" n n hl nl h ldh) + (declare (ignore var-0 var-3 var-5)) + (when var-1 (setf n var-1)) + (when var-2 (setf n var-2)) + (when var-4 (setf nl var-4)) + (when var-6 (setf ldh var-6)))))))))) + (if (and (or wantt (/= info 0)) (> n 2)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (zlaset "L" (f2cl-lib:int-sub n 2) (f2cl-lib:int-sub n 2) zero zero + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 + (3 1) ((1 ldh) (1 *)) + h-%offset%) + ldh) + (declare (ignore var-0 var-1 var-2 var-5)) + (when var-3 (setf zero var-3)) + (when var-4 (setf zero var-4)) + (when var-6 (setf ldh var-6)))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (f2cl-lib:dcmplx + (max + (f2cl-lib:dble + (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n))) + (f2cl-lib:dble + (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%))) + rzero)))) + end_label + (return + (values job compz n ilo ihi nil ldh nil nil ldz nil lwork info))) + ))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -109647,7 +114602,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlacgv.f} * ===================================================================== SUBROUTINE ZLACGV( N, X, INCX ) * @@ -109692,10 +114647,41 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlacgv} - +(defun zlacgv (n x incx) + (declare (type (f2cl-lib:integer4) incx n) + (type (array f2cl-lib:complex16 (*)) x)) + (f2cl-lib:with-multi-array-data + ((x f2cl-lib:complex16 x-%data% x-%offset%)) + (prog + ((i 0) (ioff 0)) (declare (type (f2cl-lib:integer4) ioff i)) + (cond + ((= incx 1) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf (f2cl-lib:fref x-%data% (i) ((1 *)) x-%offset%) + (coerce (f2cl-lib:dconjg + (f2cl-lib:fref x-%data% (i) ((1 *)) x-%offset%)) + 'f2cl-lib:complex16)) + label10))) + (t (setf ioff 1) + (if (< incx 0) + (setf ioff + (f2cl-lib:int-sub 1 + (f2cl-lib:int-mul (f2cl-lib:int-sub n 1) incx)))) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf (f2cl-lib:fref x-%data% (ioff) ((1 *)) x-%offset%) + (coerce + (f2cl-lib:dconjg (f2cl-lib:fref x-%data% (ioff) + ((1 *)) x-%offset%)) + 'f2cl-lib:complex16)) + (setf ioff (f2cl-lib:int-add ioff incx)) label20)))) + (go end_label) end_label (return (values nil nil nil))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -109803,7 +114789,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlacpy.f} * ===================================================================== SUBROUTINE ZLACPY( UPLO, M, N, A, LDA, B, LDB ) * @@ -109862,10 +114848,68 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlacpy} - +(defun zlacpy (uplo m n a lda b ldb$) + (declare (type (simple-array character (*)) uplo) + (type (f2cl-lib:integer4) ldb$ lda n m) + (type (array f2cl-lib:complex16 (*)) b a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%) + (b f2cl-lib:complex16 b-%data% b-%offset%) + (uplo character uplo-%data% uplo-%offset%)) + (prog ((i 0) (j 0)) + (declare (type (f2cl-lib:integer4) j i)) + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame uplo "U") + (declare (ignore var-1)) (when var-0 (setf uplo var-0)) ret-val) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i + (min (the f2cl-lib:integer4 j) + (the f2cl-lib:integer4 m))) + nil) + (tagbody + (setf (f2cl-lib:fref b-%data% (i j) ((1 ldb$) (1 *)) + b-%offset%) + (f2cl-lib:fref a-%data% (i j) ((1 lda) (1 *)) + a-%offset%)) + label10)) + label20))) + ((multiple-value-bind (ret-val var-0 var-1) (lsame uplo "L") + (declare (ignore var-1)) (when var-0 (setf uplo var-0)) ret-val) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (i j (f2cl-lib:int-add i 1)) + ((> i m) nil) + (tagbody + (setf (f2cl-lib:fref b-%data% (i j) ((1 ldb$) (1 *)) + b-%offset%) + (f2cl-lib:fref a-%data% (i j) ((1 lda) (1 *)) + a-%offset%)) + label30)) + label40))) + (t + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i m) nil) + (tagbody + (setf (f2cl-lib:fref b-%data% (i j) ((1 ldb$) (1 *)) + b-%offset%) + (f2cl-lib:fref a-%data% (i j) ((1 lda) (1 *)) + a-%offset%)) + label50)) + label60)))) + (go end_label) + end_label + (return (values uplo nil nil nil nil nil nil))) + )) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -109938,7 +114982,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zladiv.f} * ===================================================================== COMPLEX*16 FUNCTION ZLADIV( X, Y ) * @@ -109974,10 +115018,21 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zladiv} - +(defun zladiv (x y) (declare (type (f2cl-lib:complex16) y x)) + (prog + ((zi 0.0d0) (zr 0.0d0) (zladiv #C(0.0d0 0.0d0)) (dble$ 0.0) (dimag$ 0.0)) + (declare (type (double-float) zr zi) (type (f2cl-lib:complex16) zladiv) + (type (single-float) dimag$ dble$)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5) + (dladiv (f2cl-lib:dble x) (f2cl-lib:dimag x) (f2cl-lib:dble y) + (f2cl-lib:dimag y) zr zi) + (declare (ignore var-0 var-1 var-2 var-3)) (when var-4 (setf zr var-4)) + (when var-5 (setf zi var-5))) + (setf zladiv (f2cl-lib:dcmplx zr zi)) (go end_label) end_label + (return (values zladiv nil nil)))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -110166,7 +115221,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlahqr.f} * ===================================================================== SUBROUTINE ZLAHQR( WANTT, WANTZ, N, ILO, IHI, H, LDH, W, ILOZ, $ IHIZ, Z, LDZ, INFO ) @@ -110543,10 +115598,589 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlahqr} - +(let* + ((itmax 30) (zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16)) + (one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16)) (rzero 0.0d0) + (rone 1.0d0) (half 0.5d0) (dat1 (f2cl-lib:f2cl/ 3.0d0 4.0d0))) + (declare (type (f2cl-lib:integer4 30 30) itmax) + (type (f2cl-lib:complex16) zero) (type (f2cl-lib:complex16) one) + (type (double-float 0.0d0 0.0d0) rzero) + (type (double-float 1.0d0 1.0d0) rone) (type (double-float 0.5d0 0.5d0) half) + (type (double-float) dat1) (ignorable itmax zero one rzero rone half dat1)) + (defun zlahqr (wantt wantz n ilo ihi h ldh w iloz ihiz z ldz info) + (declare (type f2cl-lib:logical wantz wantt) + (type (f2cl-lib:integer4) info ldz ihiz iloz ldh ihi ilo n) + (type (array f2cl-lib:complex16 (*)) z w h)) + (f2cl-lib:with-multi-array-data + ((h f2cl-lib:complex16 h-%data% h-%offset%) + (w f2cl-lib:complex16 w-%data% w-%offset%) + (z f2cl-lib:complex16 z-%data% z-%offset%)) + (labels + ((cabs1 (cdum) + (+ (abs (f2cl-lib:dble cdum)) (abs (f2cl-lib:dimag cdum))))) + (declare + (ftype (function (f2cl-lib:complex16) + (values double-float &rest t)) cabs1)) + (prog + ((v (make-array 2 :element-type 'f2cl-lib:complex16)) (i 0) (i1 0) + (i2 0) + (its 0) (j 0) (jhi 0) (jlo 0) (k 0) (l 0) (m 0) (nh 0) (nz 0) + (aa 0.0d0) + (ab 0.0d0) (ba 0.0d0) (bb 0.0d0) (h10 0.0d0) (h21 0.0d0) + (rtemp 0.0d0) + (s 0.0d0) (safmax 0.0d0) (safmin 0.0d0) (smlnum 0.0d0) + (sx 0.0d0) (t2 0.0d0) + (tst 0.0d0) (ulp 0.0d0) (cdum #C(0.0d0 0.0d0)) (h11 #C(0.0d0 0.0d0)) + (h11s #C(0.0d0 0.0d0)) (h22 #C(0.0d0 0.0d0)) (sc #C(0.0d0 0.0d0)) + (sum #C(0.0d0 0.0d0)) (t$ #C(0.0d0 0.0d0)) (t1 #C(0.0d0 0.0d0)) + (temp #C(0.0d0 0.0d0)) (u #C(0.0d0 0.0d0)) (v2 #C(0.0d0 0.0d0)) + (x #C(0.0d0 0.0d0)) (y #C(0.0d0 0.0d0)) (dconjg$ 0.0)) + (declare (type (array f2cl-lib:complex16 (2)) v) + (type (f2cl-lib:integer4) nz nh m l k jlo jhi j its i2 i1 i) + (type (double-float) + ulp tst t2 sx smlnum safmin safmax s rtemp h21 h10 bb + ba ab aa) + (type (f2cl-lib:complex16) + y x v2 u temp t1 t$ sum sc h22 h11s h11 cdum) + (type (single-float) dconjg$)) + (setf info 0) (if (= n 0) (go end_label)) + (cond + ((= ilo ihi) + (setf (f2cl-lib:fref w-%data% (ilo) ((1 *)) w-%offset%) + (f2cl-lib:fref h-%data% (ilo ilo) ((1 ldh) (1 *)) h-%offset%)) + (go end_label))) + (f2cl-lib:fdo (j ilo (f2cl-lib:int-add j 1)) + ((> j + (f2cl-lib:int-add ihi (f2cl-lib:int-sub 3))) + nil) + (tagbody + (setf + (f2cl-lib:fref h-%data% ((f2cl-lib:int-add j 2) j) + ((1 ldh) (1 *)) + h-%offset%) + zero) + (setf + (f2cl-lib:fref h-%data% ((f2cl-lib:int-add j 3) j) + ((1 ldh) (1 *)) + h-%offset%) + zero) + label10)) + (if (<= ilo (f2cl-lib:int-sub ihi 2)) + (setf + (f2cl-lib:fref h-%data% + (ihi (f2cl-lib:int-sub ihi 2)) ((1 ldh) (1 *)) + h-%offset%) + zero)) + (cond (wantt (setf jlo 1) (setf jhi n)) + (t (setf jlo ilo) (setf jhi ihi))) + (f2cl-lib:fdo (i (f2cl-lib:int-add ilo 1) (f2cl-lib:int-add i 1)) + ((> i ihi) + nil) + (tagbody + (cond + ((/= + (f2cl-lib:dimag + (f2cl-lib:fref h (i (f2cl-lib:int-add i + (f2cl-lib:int-sub 1))) + ((1 ldh) (1 *)))) + rzero) + (setf sc + (/ + (f2cl-lib:fref h-%data% (i (f2cl-lib:int-sub i 1)) + ((1 ldh) (1 *)) + h-%offset%) + (cabs1 + (f2cl-lib:fref h-%data% (i (f2cl-lib:int-sub i 1)) + ((1 ldh) (1 *)) + h-%offset%)))) + (setf sc (coerce (/ (f2cl-lib:dconjg sc) (abs sc)) + 'f2cl-lib:complex16)) + (setf + (f2cl-lib:fref h-%data% (i (f2cl-lib:int-sub i 1)) + ((1 ldh) (1 *)) + h-%offset%) + (coerce + (abs + (f2cl-lib:fref h-%data% (i (f2cl-lib:int-sub i 1)) + ((1 ldh) (1 *)) + h-%offset%)) + 'f2cl-lib:complex16)) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zscal (f2cl-lib:int-add (f2cl-lib:int-sub jhi i) 1) sc + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 + (i i) ((1 ldh) (1 *)) + h-%offset%) + ldh) + (declare (ignore var-0 var-2)) + (when var-1 (setf sc var-1)) + (when var-3 (setf ldh var-3))) + (zscal + (f2cl-lib:int-add + (f2cl-lib:int-sub + (min (the f2cl-lib:integer4 jhi) + (the f2cl-lib:integer4 (f2cl-lib:int-add i 1))) + jlo) + 1) + (f2cl-lib:dconjg sc) + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 + (jlo i) ((1 ldh) (1 *)) + h-%offset%) + 1) + (if wantz + (zscal (f2cl-lib:int-add (f2cl-lib:int-sub ihiz iloz) 1) + (f2cl-lib:dconjg sc) + (f2cl-lib:array-slice z-%data% f2cl-lib:complex16 + (iloz i) + ((1 ldz) (1 *)) z-%offset%) + 1)))) + label20)) + (setf nh (f2cl-lib:int-add (f2cl-lib:int-sub ihi ilo) 1)) + (setf nz (f2cl-lib:int-add (f2cl-lib:int-sub ihiz iloz) 1)) + (setf safmin (dlamch "SAFE MINIMUM")) (setf safmax (/ rone safmin)) + (multiple-value-bind (var-0 var-1) (dlabad safmin safmax) + (declare (ignore)) + (when var-0 (setf safmin var-0)) (when var-1 (setf safmax var-1))) + (setf ulp (dlamch "PRECISION")) + (setf smlnum (* safmin (/ (f2cl-lib:dble nh) ulp))) + (cond (wantt (setf i1 1) (setf i2 n))) (setf i ihi) label30 + (if (< i ilo) (go label150)) (setf l ilo) + (f2cl-lib:fdo (its 0 (f2cl-lib:int-add its 1)) + ((> its itmax) nil) + (tagbody + (f2cl-lib:fdo (k i (f2cl-lib:int-add k + (f2cl-lib:int-sub 1))) + ((> k + (f2cl-lib:int-add l 1)) + nil) + (tagbody + (if + (<= + (cabs1 + (f2cl-lib:fref h-%data% (k (f2cl-lib:int-sub k 1)) + ((1 ldh) (1 *)) + h-%offset%)) + smlnum) + (go label50)) + (setf tst + (+ + (cabs1 + (f2cl-lib:fref h-%data% ((f2cl-lib:int-sub k 1) + (f2cl-lib:int-sub k 1)) + ((1 ldh) (1 *)) h-%offset%)) + (cabs1 (f2cl-lib:fref h-%data% (k k) ((1 ldh) (1 *)) + h-%offset%)))) + (cond + ((= tst zero) + (if (>= (f2cl-lib:int-sub k 2) ilo) + (setf tst + (+ tst + (abs + (f2cl-lib:dble + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub k 1) + (f2cl-lib:int-sub k 2)) ((1 ldh) (1 *)) + h-%offset%)))))) + (if (<= (f2cl-lib:int-add k 1) ihi) + (setf tst + (+ tst + (abs + (f2cl-lib:dble + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) k) ((1 ldh) (1 *)) + h-%offset%)))))))) + (cond + ((<= + (abs + (f2cl-lib:dble + (f2cl-lib:fref h + (k (f2cl-lib:int-add k (f2cl-lib:int-sub 1))) + ((1 ldh) (1 *))))) + (* ulp tst)) + (setf ab + (max + (cabs1 + (f2cl-lib:fref h-%data% (k (f2cl-lib:int-sub k 1)) + ((1 ldh) (1 *)) + h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% ((f2cl-lib:int-sub k 1) k) + ((1 ldh) (1 *)) + h-%offset%)))) + (setf ba + (min + (cabs1 + (f2cl-lib:fref h-%data% (k (f2cl-lib:int-sub k 1)) + ((1 ldh) (1 *)) + h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% ((f2cl-lib:int-sub k 1) k) + ((1 ldh) (1 *)) + h-%offset%)))) + (setf aa + (max (cabs1 (f2cl-lib:fref h-%data% (k k) ((1 ldh) + (1 *)) h-%offset%)) + (cabs1 + (- + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub k 1) (f2cl-lib:int-sub k 1)) + ((1 ldh) (1 *)) + h-%offset%) + (f2cl-lib:fref h-%data% (k k) ((1 ldh) (1 *)) + h-%offset%))))) + (setf bb + (min (cabs1 (f2cl-lib:fref h-%data% (k k) ((1 ldh) + (1 *)) h-%offset%)) + (cabs1 + (- + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub k 1) (f2cl-lib:int-sub k 1)) + ((1 ldh) (1 *)) + h-%offset%) + (f2cl-lib:fref h-%data% (k k) ((1 ldh) (1 *)) + h-%offset%))))) + (setf s (+ aa ab)) + (if (<= (* ba (/ ab s)) + (max smlnum (* ulp (* bb (/ aa s))))) + (go label50)))) + label40)) + label50 (setf l k) + (cond + ((> l ilo) + (setf + (f2cl-lib:fref h-%data% (l (f2cl-lib:int-sub l 1)) + ((1 ldh) (1 *)) + h-%offset%) + zero))) + (if (>= l i) (go label140)) + (cond ((not wantt) (setf i1 l) (setf i2 i))) + (cond + ((= its 10) + (setf s + (* dat1 + (abs + (f2cl-lib:dble + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add l 1) l) ((1 ldh) (1 *)) + h-%offset%))))) + (setf t$ (+ s (f2cl-lib:fref h-%data% (l l) ((1 ldh) + (1 *)) h-%offset%)))) + ((= its 20) + (setf s + (* dat1 + (abs + (f2cl-lib:dble + (f2cl-lib:fref h-%data% + (i (f2cl-lib:int-sub i 1)) ((1 ldh) (1 *)) + h-%offset%))))) + (setf t$ (+ s (f2cl-lib:fref h-%data% + (i i) ((1 ldh) (1 *)) h-%offset%)))) + (t (setf t$ (f2cl-lib:fref h-%data% + (i i) ((1 ldh) (1 *)) h-%offset%)) + (setf u + (* + (f2cl-lib:fsqrt + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub i 1) i) ((1 ldh) (1 *)) + h-%offset%)) + (f2cl-lib:fsqrt + (f2cl-lib:fref h-%data% + (i (f2cl-lib:int-sub i 1)) ((1 ldh) (1 *)) + h-%offset%)))) + (setf s (cabs1 u)) + (cond + ((/= s rzero) + (setf x + (* half + (- + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub i 1) (f2cl-lib:int-sub i 1)) + ((1 ldh) (1 *)) + h-%offset%) + t$))) + (setf sx (cabs1 x)) (setf s (max s (cabs1 x))) + (setf y (* s (f2cl-lib:fsqrt (+ (expt (/ x s) 2) + (expt (/ u s) 2))))) + (cond + ((> sx rzero) + (if + (< + (+ (* (f2cl-lib:dble (/ x sx)) (f2cl-lib:dble y)) + (* (f2cl-lib:dimag (/ x sx)) (f2cl-lib:dimag y))) + rzero) + (setf y (- y))))) + (setf t$ (- t$ (* u (zladiv u (+ x y))))))))) + (f2cl-lib:fdo (m (f2cl-lib:int-add i (f2cl-lib:int-sub 1)) + (f2cl-lib:int-add m (f2cl-lib:int-sub 1))) + ((> m (f2cl-lib:int-add l 1)) + nil) + (tagbody + (setf h11 + (f2cl-lib:fref h-%data% (m m) ((1 ldh) (1 *)) + h-%offset%)) + (setf h22 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add m 1) (f2cl-lib:int-add m 1)) + ((1 ldh) (1 *)) h-%offset%)) + (setf h11s (- h11 t$)) + (setf h21 + (f2cl-lib:dble + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add m 1) m) ((1 ldh) (1 *)) + h-%offset%))) + (setf s (+ (cabs1 h11s) (abs h21))) + (setf h11s (/ h11s s)) + (setf h21 (/ h21 s)) + (setf (f2cl-lib:fref v (1) ((1 2))) h11s) + (setf (f2cl-lib:fref v (2) ((1 2))) + (coerce h21 'f2cl-lib:complex16)) + (setf h10 + (f2cl-lib:dble + (f2cl-lib:fref h-%data% + (m (f2cl-lib:int-sub m 1)) ((1 ldh) (1 *)) + h-%offset%))) + (if + (<= (* (abs h10) (abs h21)) + (* ulp (* (cabs1 h11s) (+ (cabs1 h11) (cabs1 h22))))) + (go label70)) + label60)) + (setf h11 + (f2cl-lib:fref h-%data% (l l) ((1 ldh) (1 *)) h-%offset%)) + (setf h22 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add l 1) (f2cl-lib:int-add l 1)) + ((1 ldh) (1 *)) h-%offset%)) + (setf h11s (- h11 t$)) + (setf h21 + (f2cl-lib:dble + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add l 1) l) ((1 ldh) (1 *)) + h-%offset%))) + (setf s (+ (cabs1 h11s) (abs h21))) (setf h11s (/ h11s s)) + (setf h21 (/ h21 s)) + (setf (f2cl-lib:fref v (1) ((1 2))) h11s) + (setf (f2cl-lib:fref v (2) ((1 2))) + (coerce h21 'f2cl-lib:complex16)) + label70 + (f2cl-lib:fdo (k m (f2cl-lib:int-add k 1)) + ((> k + (f2cl-lib:int-add i (f2cl-lib:int-sub 1))) + nil) + (tagbody + (if (> k m) + (zcopy 2 + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 + (k (f2cl-lib:int-sub k 1)) ((1 ldh) (1 *)) h-%offset%) + 1 v 1)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zlarfg 2 (f2cl-lib:array-slice v f2cl-lib:complex16 + (1) ((1 2))) + (f2cl-lib:array-slice v f2cl-lib:complex16 + (2) ((1 2))) 1 t1) + (declare (ignore var-0 var-1 var-2 var-3)) + (when var-4 (setf t1 var-4))) + (cond + ((> k m) + (setf + (f2cl-lib:fref h-%data% + (k (f2cl-lib:int-sub k 1)) ((1 ldh) (1 *)) + h-%offset%) + (f2cl-lib:fref v (1) ((1 2)))) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) (f2cl-lib:int-sub k 1)) + ((1 ldh) (1 *)) h-%offset%) + zero))) + (setf v2 (f2cl-lib:fref v (2) ((1 2)))) + (setf t2 (f2cl-lib:dble (* t1 v2))) + (f2cl-lib:fdo (j k (f2cl-lib:int-add j 1)) + ((> j i2) nil) + (tagbody + (setf sum + (+ + (* (f2cl-lib:dconjg t1) + (f2cl-lib:fref h-%data% (k j) + ((1 ldh) (1 *)) h-%offset%)) + (* t2 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) j) ((1 ldh) (1 *)) + h-%offset%)))) + (setf (f2cl-lib:fref h-%data% (k j) + ((1 ldh) (1 *)) h-%offset%) + (- (f2cl-lib:fref h-%data% (k j) + ((1 ldh) (1 *)) h-%offset%) sum)) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) j) ((1 ldh) (1 *)) + h-%offset%) + (- + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) j) ((1 ldh) (1 *)) + h-%offset%) + (* sum v2))) + label80)) + (f2cl-lib:fdo (j i1 (f2cl-lib:int-add j 1)) + ((> j + (min (the f2cl-lib:integer4 (f2cl-lib:int-add k 2)) + (the f2cl-lib:integer4 i))) + nil) + (tagbody + (setf sum + (+ (* t1 (f2cl-lib:fref h-%data% + (j k) ((1 ldh) (1 *)) h-%offset%)) + (* t2 + (f2cl-lib:fref h-%data% + (j (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%)))) + (setf (f2cl-lib:fref h-%data% + (j k) ((1 ldh) (1 *)) h-%offset%) + (- (f2cl-lib:fref h-%data% (j k) + ((1 ldh) (1 *)) h-%offset%) sum)) + (setf + (f2cl-lib:fref h-%data% + (j (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%) + (- + (f2cl-lib:fref h-%data% + (j (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%) + (* sum (f2cl-lib:dconjg v2)))) + label90)) + (cond + (wantz + (f2cl-lib:fdo (j iloz (f2cl-lib:int-add j 1)) + ((> j ihiz) nil) + (tagbody + (setf sum + (+ (* t1 (f2cl-lib:fref z-%data% + (j k) ((1 ldz) (1 *)) z-%offset%)) + (* t2 + (f2cl-lib:fref z-%data% + (j (f2cl-lib:int-add k 1)) ((1 ldz) (1 *)) + z-%offset%)))) + (setf (f2cl-lib:fref z-%data% + (j k) ((1 ldz) (1 *)) z-%offset%) + (- (f2cl-lib:fref z-%data% + (j k) ((1 ldz) (1 *)) z-%offset%) sum)) + (setf + (f2cl-lib:fref z-%data% + (j (f2cl-lib:int-add k 1)) ((1 ldz) (1 *)) + z-%offset%) + (- + (f2cl-lib:fref z-%data% + (j (f2cl-lib:int-add k 1)) ((1 ldz) (1 *)) + z-%offset%) + (* sum (f2cl-lib:dconjg v2)))) + label100)))) + (cond + ((and (= k m) (> m l)) (setf temp (- one t1)) + (setf temp (/ temp (abs temp))) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add m 1) m) ((1 ldh) (1 *)) + h-%offset%) + (coerce + (* + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add m 1) m) ((1 ldh) (1 *)) + h-%offset%) + (f2cl-lib:dconjg temp)) + 'f2cl-lib:complex16)) + (if (<= (f2cl-lib:int-add m 2) i) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add m 2) (f2cl-lib:int-add m 1)) + ((1 ldh) (1 *)) h-%offset%) + (* + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add m 2) + (f2cl-lib:int-add m 1)) ((1 ldh) (1 *)) + h-%offset%) + temp))) + (f2cl-lib:fdo (j m (f2cl-lib:int-add j 1)) + ((> j i) nil) + (tagbody + (cond + ((/= j (f2cl-lib:int-add m 1)) + (if (> i2 j) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zscal (f2cl-lib:int-sub i2 j) temp + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 + (j (f2cl-lib:int-add j 1)) + ((1 ldh) (1 *)) h-%offset%) + ldh) + (declare (ignore var-0 var-2)) + (when var-1 (setf temp var-1)) + (when var-3 (setf ldh var-3)))) + (zscal (f2cl-lib:int-sub j i1) + (f2cl-lib:dconjg temp) + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (i1 j) + ((1 ldh) (1 *)) h-%offset%) + 1) + (cond + (wantz + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zscal nz (f2cl-lib:dconjg temp) + (f2cl-lib:array-slice z-%data% + f2cl-lib:complex16 (iloz j) + ((1 ldz) (1 *)) z-%offset%) + 1) + (declare (ignore var-1 var-2 var-3)) + (when var-0 (setf nz var-0))))))) + label110)))) + label120)) + (setf temp + (f2cl-lib:fref h-%data% + (i (f2cl-lib:int-sub i 1)) ((1 ldh) (1 *)) + h-%offset%)) + (cond + ((/= (f2cl-lib:dimag temp) rzero) (setf rtemp (abs temp)) + (setf + (f2cl-lib:fref h-%data% + (i (f2cl-lib:int-sub i 1)) ((1 ldh) (1 *)) + h-%offset%) + (coerce rtemp 'f2cl-lib:complex16)) + (setf temp (/ temp rtemp)) + (if (> i2 i) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zscal (f2cl-lib:int-sub i2 i) (f2cl-lib:dconjg temp) + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 + (i (f2cl-lib:int-add i 1)) ((1 ldh) (1 *)) h-%offset%) + ldh) + (declare (ignore var-0 var-1 var-2)) + (when var-3 (setf ldh var-3)))) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zscal (f2cl-lib:int-sub i i1) temp + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 + (i1 i) ((1 ldh) (1 *)) + h-%offset%) + 1) + (declare (ignore var-0 var-2 var-3)) + (when var-1 (setf temp var-1))) + (cond + (wantz + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zscal nz temp + (f2cl-lib:array-slice z-%data% f2cl-lib:complex16 + (iloz i) + ((1 ldz) (1 *)) z-%offset%) + 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf nz var-0)) + (when var-1 (setf temp var-1))))))) + label130)) + (setf info i) (go end_label) label140 + (setf (f2cl-lib:fref w-%data% (i) ((1 *)) w-%offset%) + (f2cl-lib:fref h-%data% (i i) ((1 ldh) (1 *)) h-%offset%)) + (setf i (f2cl-lib:int-sub l 1)) (go label30) label150 (go end_label) + end_label + (return + (values nil nil nil nil nil nil ldh nil nil nil nil nil info)))) + ))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -110724,7 +116358,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlahr2.f} * ===================================================================== SUBROUTINE ZLAHR2( N, K, NB, A, LDA, TAU, T, LDT, Y, LDY ) * @@ -110874,10 +116508,326 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlahr2} - +(let* + ((zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16)) + (one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (f2cl-lib:complex16) zero) (type (f2cl-lib:complex16) one) + (ignorable zero one)) + (defun zlahr2 (n k nb a lda tau t$ ldt y ldy) + (declare (type (f2cl-lib:integer4) ldy ldt lda nb k n) + (type (array f2cl-lib:complex16 (*)) y t$ tau a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%) + (tau f2cl-lib:complex16 tau-%data% tau-%offset%) + (t$ f2cl-lib:complex16 t$-%data% t$-%offset%) + (y f2cl-lib:complex16 y-%data% y-%offset%)) + (prog ((ei #C(0.0d0 0.0d0)) (i 0)) + (declare (type (f2cl-lib:complex16) ei) (type (f2cl-lib:integer4) i)) + (if (<= n 1) (go end_label)) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i nb) nil) + (tagbody + (cond + ((> i 1) + (zlacgv (f2cl-lib:int-sub i 1) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k i (f2cl-lib:int-sub 1)) 1) ((1 lda) (1 *)) + a-%offset%) + lda) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (zgemv "NO TRANSPOSE" + (f2cl-lib:int-sub n k) (f2cl-lib:int-sub i 1) + (- one) + (f2cl-lib:array-slice y-%data% f2cl-lib:complex16 + ((+ k 1) 1) + ((1 ldy) (1 nb)) y-%offset%) + ldy + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k i (f2cl-lib:int-sub 1)) 1) ((1 lda) (1 *)) + a-%offset%) + lda one + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k 1) i) + ((1 lda) (1 *)) a-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-3 var-4 var-6 + var-9 var-10)) + (when var-5 (setf ldy var-5)) + (when var-7 (setf lda var-7)) + (when var-8 (setf one var-8))) + (zlacgv (f2cl-lib:int-sub i 1) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k i (f2cl-lib:int-sub 1)) 1) ((1 lda) (1 *)) + a-%offset%) + lda) + (zcopy (f2cl-lib:int-sub i 1) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k 1) i) + ((1 lda) (1 *)) a-%offset%) + 1 + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 + (1 nb) ((1 ldt) (1 nb)) + t$-%offset%) + 1) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 + var-5 var-6 var-7) + (ztrmv "Lower" "Conjugate transpose" "UNIT" + (f2cl-lib:int-sub i 1) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k 1) 1) + ((1 lda) (1 *)) a-%offset%) + lda + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 (1 nb) + ((1 ldt) (1 nb)) t$-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-3 var-4 + var-6 var-7)) + (when var-5 (setf lda var-5))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (zgemv "Conjugate transpose" + (f2cl-lib:int-add (f2cl-lib:int-sub n k i) 1) + (f2cl-lib:int-sub i 1) one + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k i) 1) + ((1 lda) (1 *)) a-%offset%) + lda + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k i) i) + ((1 lda) (1 *)) a-%offset%) + 1 one + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 (1 nb) + ((1 ldt) (1 nb)) t$-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-4 var-6 + var-7 var-9 var-10)) + (when var-3 (setf one var-3)) + (when var-5 (setf lda var-5)) + (when var-8 (setf one var-8))) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 + var-5 var-6 var-7) + (ztrmv "Upper" "Conjugate transpose" "NON-UNIT" + (f2cl-lib:int-sub i 1) t$ + ldt + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 (1 nb) + ((1 ldt) (1 nb)) t$-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-3 var-4 + var-6 var-7)) + (when var-5 (setf ldt var-5))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (zgemv "NO TRANSPOSE" + (f2cl-lib:int-add (f2cl-lib:int-sub n k i) 1) + (f2cl-lib:int-sub i 1) (- one) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k i) 1) + ((1 lda) (1 *)) a-%offset%) + lda + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 (1 nb) + ((1 ldt) (1 nb)) t$-%offset%) + 1 one + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k i) i) + ((1 lda) (1 *)) a-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-3 var-4 var-6 + var-7 var-9 var-10)) + (when var-5 (setf lda var-5)) + (when var-8 (setf one var-8))) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 + var-5 var-6 var-7) + (ztrmv "Lower" "NO TRANSPOSE" "UNIT" + (f2cl-lib:int-sub i 1) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k 1) 1) + ((1 lda) (1 *)) a-%offset%) + lda + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 (1 nb) + ((1 ldt) (1 nb)) t$-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-3 var-4 var-6 + var-7)) + (when var-5 (setf lda var-5))) + (zaxpy (f2cl-lib:int-sub i 1) (- one) + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 + (1 nb) ((1 ldt) (1 nb)) + t$-%offset%) + 1 + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k 1) i) + ((1 lda) (1 *)) a-%offset%) + 1) + (setf + (f2cl-lib:fref a-%data% + ((f2cl-lib:int-sub (f2cl-lib:int-add k i) 1) + (f2cl-lib:int-sub i 1)) + ((1 lda) (1 *)) a-%offset%) + ei))) + (zlarfg (f2cl-lib:int-add (f2cl-lib:int-sub n k i) 1) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k i) i) + ((1 lda) (1 *)) a-%offset%) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((min (f2cl-lib:int-add k i 1) n) i) ((1 lda) (1 *)) + a-%offset%) + 1 + (f2cl-lib:array-slice tau-%data% f2cl-lib:complex16 + (i) ((1 nb)) + tau-%offset%)) + (setf ei + (f2cl-lib:fref a-%data% ((f2cl-lib:int-add k i) i) + ((1 lda) (1 *)) + a-%offset%)) + (setf + (f2cl-lib:fref a-%data% ((f2cl-lib:int-add k i) i) + ((1 lda) (1 *)) + a-%offset%) + one) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10) + (zgemv "NO TRANSPOSE" (f2cl-lib:int-sub n k) + (f2cl-lib:int-add (f2cl-lib:int-sub n k i) 1) one + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k 1) (f2cl-lib:int-add i 1)) ((1 lda) (1 *)) a-%offset%) + lda + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k i) i) + ((1 lda) (1 *)) a-%offset%) + 1 zero + (f2cl-lib:array-slice y-%data% f2cl-lib:complex16 + ((+ k 1) i) + ((1 ldy) (1 nb)) y-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-4 var-6 var-7 + var-9 var-10)) + (when var-3 (setf one var-3)) (when var-5 (setf lda var-5)) + (when var-8 (setf zero var-8))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10) + (zgemv "Conjugate transpose" + (f2cl-lib:int-add (f2cl-lib:int-sub n k i) 1) + (f2cl-lib:int-sub i 1) one + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k i) 1) + ((1 lda) (1 *)) a-%offset%) + lda + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ k i) i) + ((1 lda) (1 *)) a-%offset%) + 1 zero + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 + (1 i) ((1 ldt) (1 nb)) + t$-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-4 var-6 var-7 + var-9 var-10)) + (when var-3 (setf one var-3)) (when var-5 (setf lda var-5)) + (when var-8 (setf zero var-8))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10) + (zgemv "NO TRANSPOSE" (f2cl-lib:int-sub n k) + (f2cl-lib:int-sub i 1) (- one) + (f2cl-lib:array-slice y-%data% f2cl-lib:complex16 + ((+ k 1) 1) + ((1 ldy) (1 nb)) y-%offset%) + ldy + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 + (1 i) ((1 ldt) (1 nb)) + t$-%offset%) + 1 one + (f2cl-lib:array-slice y-%data% f2cl-lib:complex16 + ((+ k 1) i) + ((1 ldy) (1 nb)) y-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-3 var-4 var-6 + var-7 var-9 var-10)) + (when var-5 (setf ldy var-5)) (when var-8 (setf one var-8))) + (zscal (f2cl-lib:int-sub n k) + (f2cl-lib:array-slice tau-%data% f2cl-lib:complex16 + (i) ((1 nb)) + tau-%offset%) + (f2cl-lib:array-slice y-%data% f2cl-lib:complex16 + ((+ k 1) i) + ((1 ldy) (1 nb)) y-%offset%) + 1) + (zscal (f2cl-lib:int-sub i 1) + (- (f2cl-lib:fref tau-%data% (i) ((1 nb)) tau-%offset%)) + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 + (1 i) ((1 ldt) (1 nb)) + t$-%offset%) + 1) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7) + (ztrmv "Upper" "No Transpose" "NON-UNIT" + (f2cl-lib:int-sub i 1) t$ ldt + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 + (1 i) ((1 ldt) (1 nb)) + t$-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-3 var-4 var-6 var-7)) + (when var-5 (setf ldt var-5))) + (setf (f2cl-lib:fref t$-%data% (i i) ((1 ldt) (1 nb)) + t$-%offset%) + (f2cl-lib:fref tau-%data% (i) ((1 nb)) tau-%offset%)) + label10)) + (setf + (f2cl-lib:fref a-%data% ((f2cl-lib:int-add k nb) nb) ((1 lda) (1 *)) + a-%offset%) + ei) + (zlacpy "ALL" k nb + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (1 2) ((1 lda) (1 *)) + a-%offset%) + lda y ldy) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 var-10) + (ztrmm "RIGHT" "Lower" "NO TRANSPOSE" "UNIT" k nb one + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 ((+ k 1) 1) + ((1 lda) (1 *)) a-%offset%) + lda y ldy) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf k var-4)) (when var-5 (setf nb var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf lda var-8)) + (when var-10 (setf ldy var-10))) + (if (> n (f2cl-lib:int-add k nb)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 + var-10 var-11 + var-12) + (zgemm "NO TRANSPOSE" "NO TRANSPOSE" + k nb (f2cl-lib:int-sub n k nb) one + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add 2 nb)) ((1 lda) (1 *)) a-%offset%) + lda + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 ((+ k 1 nb) 1) + ((1 lda) (1 *)) a-%offset%) + lda one y ldy) + (declare (ignore var-0 var-1 var-4 var-6 var-8 var-11)) + (when var-2 (setf k var-2)) (when var-3 (setf nb var-3)) + (when var-5 (setf one var-5)) (when var-7 (setf lda var-7)) + (when var-9 (setf lda var-9)) (when var-10 (setf one var-10)) + (when var-12 (setf ldy var-12)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 var-10) + (ztrmm "RIGHT" "Upper" "NO TRANSPOSE" "NON-UNIT" k nb one + t$ ldt y ldy) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf k var-4)) (when var-5 (setf nb var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldt var-8)) + (when var-10 (setf ldy var-10))) + (go end_label) end_label + (return (values nil k nb nil lda nil nil ldt nil ldy)))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -110993,7 +116943,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlange.f} * ===================================================================== DOUBLE PRECISION FUNCTION ZLANGE( NORM, M, N, A, LDA, WORK ) * @@ -111092,7 +117042,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlange} (let* ((one 1.0) (zero 0.0)) @@ -111431,7 +117381,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlaqr0.f} * ===================================================================== SUBROUTINE ZLAQR0( WANTT, WANTZ, N, ILO, IHI, H, LDH, W, ILOZ, $ IHIZ, Z, LDZ, WORK, LWORK, INFO ) @@ -111897,10 +117847,608 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlaqr0} - +(let* + ((ntiny 11) (kexnw 5) (kexsh 6) (wilk1 0.75d0) + (zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16)) + (one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16)) (two 2.0d0)) + (declare (type (f2cl-lib:integer4 11 11) ntiny) + (type (f2cl-lib:integer4 5 5) kexnw) (type (f2cl-lib:integer4 6 6) kexsh) + (type (double-float 0.75d0 0.75d0) wilk1) (type (f2cl-lib:complex16) zero) + (type (f2cl-lib:complex16) one) (type (double-float 2.0d0 2.0d0) two) + (ignorable ntiny kexnw kexsh wilk1 zero one two)) + (defun zlaqr0 (wantt wantz n ilo ihi h ldh w iloz ihiz z ldz work lwork info) + (declare (type f2cl-lib:logical wantz wantt) + (type (f2cl-lib:integer4) info lwork ldz ihiz iloz ldh ihi ilo n) + (type (array f2cl-lib:complex16 (*)) work z w h)) + (f2cl-lib:with-multi-array-data + ((h f2cl-lib:complex16 h-%data% h-%offset%) + (w f2cl-lib:complex16 w-%data% w-%offset%) + (z f2cl-lib:complex16 z-%data% z-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%)) + (labels + ((cabs1 (cdum) (+ (abs (f2cl-lib:dble cdum)) + (abs (f2cl-lib:dimag cdum))))) + (declare + (ftype (function (f2cl-lib:complex16) + (values double-float &rest t)) cabs1)) + (prog + ((zdum (make-array 1 :element-type 'f2cl-lib:complex16)) + (jbcmpz (make-array '(2) :element-type 'character + :initial-element #\space)) + (sorted nil) (i 0) (inf 0) (it 0) (itmax 0) (k 0) (kacc22 0) (kbot 0) + (kdu 0) (ks 0) (kt 0) (ktop 0) (ku 0) (kv 0) (kwh 0) (kwtop 0) + (kwv 0) + (ld 0) (ls 0) (lwkopt 0) (ndec 0) (ndfl 0) (nh 0) (nho 0) (nibble 0) + (nmin 0) (ns 0) (nsmax 0) (nsr 0) (nve 0) (nw 0) (nwmax 0) (nwr 0) + (nwupbd 0) (s 0.0d0) (aa #C(0.0d0 0.0d0)) (bb #C(0.0d0 0.0d0)) + (cc #C(0.0d0 0.0d0)) (cdum #C(0.0d0 0.0d0)) (dd #C(0.0d0 0.0d0)) + (det #C(0.0d0 0.0d0)) (rtdisc #C(0.0d0 0.0d0)) (swap #C(0.0d0 0.0d0)) + (tr2 #C(0.0d0 0.0d0))) + (declare (type (array f2cl-lib:complex16 (1)) zdum) + (type (simple-array character (2)) jbcmpz) + (type f2cl-lib:logical sorted) + (type (f2cl-lib:integer4) nwupbd nwr nwmax nw nve nsr nsmax ns + nmin nibble + nho nh ndfl ndec lwkopt ls ld kwv kwtop kwh kv ku ktop kt ks + kdu kbot + kacc22 k itmax it inf i) + (type (double-float) s) + (type (f2cl-lib:complex16) tr2 swap rtdisc det dd cdum cc bb aa)) + (setf info 0) + (cond + ((= n 0) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) one) + (go end_label))) + (cond + ((<= n ntiny) (setf lwkopt 1) + (if (/= lwork -1) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10 + var-11 var-12) + (zlahqr wantt wantz n ilo ihi h ldh w iloz ihiz z ldz info) + (declare + (ignore var-0 var-1 var-2 var-3 var-4 var-5 var-7 var-8 + var-9 var-10 + var-11)) + (setf ldh var-6) (setf info var-12)))) + (t + (tagbody (setf info 0) + (cond + (wantt (f2cl-lib:fset-string + (f2cl-lib:fref-string jbcmpz (1 1)) "S")) + (t (f2cl-lib:fset-string + (f2cl-lib:fref-string jbcmpz (1 1)) "E"))) + (cond + (wantz (f2cl-lib:fset-string + (f2cl-lib:fref-string jbcmpz (2 2)) "V")) + (t (f2cl-lib:fset-string + (f2cl-lib:fref-string jbcmpz (2 2)) "N"))) + (setf nwr + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 13 "ZLAQR0" jbcmpz n ilo ihi lwork) + (declare (ignore var-0 var-1)) (when var-2 (setf jbcmpz var-2)) + (when var-3 (setf n var-3)) (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) + (when var-6 (setf lwork var-6)) ret-val)) + (setf nwr (max (the f2cl-lib:integer4 2) + (the f2cl-lib:integer4 nwr))) + (setf nwr + (min (f2cl-lib:int-add (f2cl-lib:int-sub ihi ilo) 1) + (the f2cl-lib:integer4 (truncate (- n 1) 3)) nwr)) + (setf nsr + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 15 "ZLAQR0" jbcmpz n ilo ihi lwork) + (declare (ignore var-0 var-1)) (when var-2 (setf jbcmpz var-2)) + (when var-3 (setf n var-3)) (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) + (when var-6 (setf lwork var-6)) ret-val)) + (setf nsr + (min nsr (the f2cl-lib:integer4 (truncate (+ n 6) 9)) + (f2cl-lib:int-sub ihi ilo))) + (setf nsr + (max (the f2cl-lib:integer4 2) + (the f2cl-lib:integer4 (f2cl-lib:int-sub nsr (mod nsr 2))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 + var-10 + var-11 var-12 var-13 var-14 var-15 var-16 var-17 var-18 var-19 + var-20 + var-21 var-22 var-23 var-24) + (zlaqr3 wantt wantz n ilo ihi (f2cl-lib:int-add nwr 1) h + ldh iloz ihiz z + ldz ls ld w h ldh n h ldh n h ldh work -1) + (declare + (ignore var-5 var-6 var-10 var-14 var-15 var-18 var-21 + var-23 var-24)) + (when var-0 (setf wantt var-0)) (when var-1 (setf wantz var-1)) + (when var-2 (setf n var-2)) (when var-3 (setf ilo var-3)) + (when var-4 (setf ihi var-4)) (when var-7 (setf ldh var-7)) + (when var-8 (setf iloz var-8)) (when var-9 (setf ihiz var-9)) + (when var-11 (setf ldz var-11)) (when var-12 (setf ls var-12)) + (when var-13 (setf ld var-13)) (when var-16 (setf ldh var-16)) + (when var-17 (setf n var-17)) (when var-19 (setf ldh var-19)) + (when var-20 (setf n var-20)) (when var-22 (setf ldh var-22))) + (setf lwkopt + (max (the f2cl-lib:integer4 (truncate (* 3 nsr) 2)) + (f2cl-lib:int (f2cl-lib:fref work-%data% (1) ((1 *)) + work-%offset%)))) + (cond + ((= lwork (f2cl-lib:int-sub 1)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (f2cl-lib:dcmplx lwkopt 0)) + (go end_label))) + (setf nmin + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 12 "ZLAQR0" jbcmpz n ilo ihi lwork) + (declare (ignore var-0 var-1)) (when var-2 (setf jbcmpz var-2)) + (when var-3 (setf n var-3)) (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) + (when var-6 (setf lwork var-6)) ret-val)) + (setf nmin + (max (the f2cl-lib:integer4 ntiny) (the f2cl-lib:integer4 nmin))) + (setf nibble + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 14 "ZLAQR0" jbcmpz n ilo ihi lwork) + (declare (ignore var-0 var-1)) (when var-2 (setf jbcmpz var-2)) + (when var-3 (setf n var-3)) (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) + (when var-6 (setf lwork var-6)) ret-val)) + (setf nibble + (max (the f2cl-lib:integer4 0) (the f2cl-lib:integer4 nibble))) + (setf kacc22 + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 16 "ZLAQR0" jbcmpz n ilo ihi lwork) + (declare (ignore var-0 var-1)) (when var-2 (setf jbcmpz var-2)) + (when var-3 (setf n var-3)) (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) + (when var-6 (setf lwork var-6)) ret-val)) + (setf kacc22 + (max (the f2cl-lib:integer4 0) (the f2cl-lib:integer4 kacc22))) + (setf kacc22 + (min (the f2cl-lib:integer4 2) (the f2cl-lib:integer4 kacc22))) + (setf nwmax + (min (the f2cl-lib:integer4 (truncate (- n 1) 3)) + (the f2cl-lib:integer4 (truncate lwork 2)))) + (setf nw nwmax) + (setf nsmax + (min (the f2cl-lib:integer4 (truncate (+ n 6) 9)) + (the f2cl-lib:integer4 (truncate (* 2 lwork) 3)))) + (setf nsmax (f2cl-lib:int-sub nsmax (mod nsmax 2))) (setf ndfl 1) + (setf itmax + (f2cl-lib:int-mul + (max (the f2cl-lib:integer4 30) + (the f2cl-lib:integer4 (f2cl-lib:int-mul 2 kexsh))) + (max (the f2cl-lib:integer4 10) + (the f2cl-lib:integer4 + (f2cl-lib:int-add (f2cl-lib:int-sub ihi ilo) 1))))) + (setf kbot ihi) + (f2cl-lib:fdo (it 1 (f2cl-lib:int-add it 1)) + ((> it itmax) nil) + (tagbody + (if (< kbot ilo) (go label80)) + (f2cl-lib:fdo (k kbot + (f2cl-lib:int-add k (f2cl-lib:int-sub 1))) + ((> k + (f2cl-lib:int-add ilo 1)) + nil) + (tagbody + (if + (= + (f2cl-lib:fref h-%data% (k + (f2cl-lib:int-sub k 1)) ((1 ldh) (1 *)) + h-%offset%) + zero) + (go label20)) + label10)) + (setf k ilo) label20 (setf ktop k) + (setf nh (f2cl-lib:int-add + (f2cl-lib:int-sub kbot ktop) 1)) + (setf nwupbd + (min (the f2cl-lib:integer4 nh) + (the f2cl-lib:integer4 nwmax))) + (cond + ((< ndfl kexnw) + (setf nw + (min (the f2cl-lib:integer4 nwupbd) + (the f2cl-lib:integer4 nwr)))) + (t + (setf nw + (min (the f2cl-lib:integer4 nwupbd) + (the f2cl-lib:integer4 + (f2cl-lib:int-mul 2 nw)))))) + (cond + ((< nw nwmax) + (cond ((>= nw (f2cl-lib:int-add nh + (f2cl-lib:int-sub 1))) (setf nw nh)) + (t (setf kwtop (f2cl-lib:int-add + (f2cl-lib:int-sub kbot nw) 1)) + (if + (> + (cabs1 + (f2cl-lib:fref h-%data% (kwtop + (f2cl-lib:int-sub kwtop 1)) + ((1 ldh) (1 *)) h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub kwtop 1) + (f2cl-lib:int-sub kwtop 2)) + ((1 ldh) (1 *)) h-%offset%))) + (setf nw (f2cl-lib:int-add nw 1))))))) + (cond ((< ndfl kexnw) (setf ndec -1)) + ((or (>= ndec 0) (>= nw nwupbd)) + (setf ndec (f2cl-lib:int-add ndec 1)) + (if (< (f2cl-lib:int-sub nw ndec) 2) (setf ndec 0)) + (setf nw (f2cl-lib:int-sub nw ndec)))) + (setf kv (f2cl-lib:int-add + (f2cl-lib:int-sub n nw) 1)) + (setf kt (f2cl-lib:int-add nw 1)) + (setf nho (f2cl-lib:int-add + (f2cl-lib:int-sub n nw 1 kt) 1)) + (setf kwv (f2cl-lib:int-add nw 2)) + (setf nve + (f2cl-lib:int-add (f2cl-lib:int-sub n nw kwv) 1)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12 var-13 var-14 var-15 var-16 + var-17 var-18 var-19 var-20 + var-21 var-22 var-23 var-24) + (zlaqr3 wantt wantz n ktop kbot nw h ldh iloz + ihiz z ldz ls ld w + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 + (kv 1) + ((1 ldh) (1 *)) h-%offset%) + ldh nho + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 + (kv kt) + ((1 ldh) (1 *)) h-%offset%) + ldh nve + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 + (kwv 1) + ((1 ldh) (1 *)) h-%offset%) + ldh work lwork) + (declare (ignore var-6 var-10 var-14 var-15 + var-18 var-21 var-23)) + (when var-0 (setf wantt var-0)) + (when var-1 (setf wantz var-1)) + (when var-2 (setf n var-2)) + (when var-3 (setf ktop var-3)) + (when var-4 (setf kbot var-4)) + (when var-5 (setf nw var-5)) + (when var-7 (setf ldh var-7)) + (when var-8 (setf iloz var-8)) + (when var-9 (setf ihiz var-9)) + (when var-11 (setf ldz var-11)) + (when var-12 (setf ls var-12)) + (when var-13 (setf ld var-13)) + (when var-16 (setf ldh var-16)) + (when var-17 (setf nho var-17)) + (when var-19 (setf ldh var-19)) + (when var-20 (setf nve var-20)) + (when var-22 (setf ldh var-22)) + (when var-24 (setf lwork var-24))) + (setf kbot (f2cl-lib:int-sub kbot ld)) + (setf ks (f2cl-lib:int-add + (f2cl-lib:int-sub kbot ls) 1)) + (cond + ((or (= ld 0) + (and (<= (f2cl-lib:int-mul 100 ld) + (f2cl-lib:int-mul nw nibble)) + (> (f2cl-lib:int-add kbot + (f2cl-lib:int-sub ktop) 1) + (min (the f2cl-lib:integer4 nmin) + (the f2cl-lib:integer4 nwmax))))) + (setf ns + (min (the f2cl-lib:integer4 nsmax) + (the f2cl-lib:integer4 nsr) + (the f2cl-lib:integer4 + (max (the f2cl-lib:integer4 2) + (the f2cl-lib:integer4 + (f2cl-lib:int-sub kbot ktop)))))) + (setf ns (f2cl-lib:int-sub ns (mod ns 2))) + (cond + ((= (mod ndfl kexsh) 0) + (setf ks (f2cl-lib:int-add + (f2cl-lib:int-sub kbot ns) 1)) + (f2cl-lib:fdo (i kbot (f2cl-lib:int-add i + (f2cl-lib:int-sub 2))) + ((> i + (f2cl-lib:int-add ks 1)) + nil) + (tagbody + (setf (f2cl-lib:fref w-%data% (i) + ((1 *)) w-%offset%) + (+ (f2cl-lib:fref h-%data% (i i) + ((1 ldh) (1 *)) h-%offset%) + (* wilk1 + (cabs1 + (f2cl-lib:fref h-%data% + (i (f2cl-lib:int-sub i 1)) + ((1 ldh) (1 *)) h-%offset%))))) + (setf + (f2cl-lib:fref w-%data% + ((f2cl-lib:int-sub i 1)) ((1 *)) + w-%offset%) + (f2cl-lib:fref w-%data% (i) ((1 *)) + w-%offset%)) + label30))) + (t + (cond + ((<= (f2cl-lib:int-add kbot + (f2cl-lib:int-sub ks) 1) + (f2cl-lib:f2cl/ ns 2)) + (setf ks (f2cl-lib:int-add + (f2cl-lib:int-sub kbot ns) 1)) + (setf kt (f2cl-lib:int-add + (f2cl-lib:int-sub n ns) 1)) + (zlacpy "A" ns ns + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (ks ks) + ((1 ldh) (1 *)) h-%offset%) + ldh + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kt 1) + ((1 ldh) (1 *)) h-%offset%) + ldh) + (cond + ((> ns nmin) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 + var-10 var-11 var-12 var-13 var-14) + (zlaqr4 f2cl-lib:%false% f2cl-lib:%false% + ns 1 ns + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kt 1) + ((1 ldh) (1 *)) h-%offset%) + ldh + (f2cl-lib:array-slice w-%data% + f2cl-lib:complex16 (ks) ((1 *)) + w-%offset%) + 1 1 zdum 1 work lwork inf) + (declare + (ignore var-0 var-1 var-3 var-5 var-7 + var-8 var-9 var-10 var-11 + var-12)) + (when var-2 (setf ns var-2)) + (when var-4 (setf ns var-4)) + (when var-6 (setf ldh var-6)) + (when var-13 (setf lwork var-13)) + (when var-14 (setf inf var-14)))) + (t + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 + var-10 var-11 var-12) + (zlahqr f2cl-lib:%false% f2cl-lib:%false% + ns 1 ns + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kt 1) + ((1 ldh) (1 *)) h-%offset%) + ldh + (f2cl-lib:array-slice w-%data% + f2cl-lib:complex16 (ks) ((1 *)) + w-%offset%) + 1 1 zdum 1 inf) + (declare + (ignore var-0 var-1 var-2 var-3 var-4 + var-5 var-7 var-8 var-9 + var-10 var-11)) + (setf ldh var-6) (setf inf var-12)))) + (setf ks (f2cl-lib:int-add ks inf)) + (cond + ((>= ks kbot) + (setf s + (+ + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub kbot 1) + (f2cl-lib:int-sub kbot 1)) + ((1 ldh) (1 *)) h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% (kbot + (f2cl-lib:int-sub kbot 1)) + ((1 ldh) (1 *)) h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub kbot 1) kbot) + ((1 ldh) (1 *)) h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% (kbot kbot) + ((1 ldh) (1 *)) + h-%offset%)))) + (setf aa + (/ + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub kbot 1) + (f2cl-lib:int-sub kbot 1)) + ((1 ldh) (1 *)) h-%offset%) + s)) + (setf cc + (/ + (f2cl-lib:fref h-%data% (kbot + (f2cl-lib:int-sub kbot 1)) + ((1 ldh) (1 *)) h-%offset%) + s)) + (setf bb + (/ + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub kbot 1) kbot) + ((1 ldh) (1 *)) h-%offset%) + s)) + (setf dd + (/ + (f2cl-lib:fref h-%data% (kbot kbot) + ((1 ldh) (1 *)) h-%offset%) + s)) + (setf tr2 (/ (+ aa dd) two)) + (setf det (- (* (- aa tr2) (- dd tr2)) + (* bb cc))) + (setf rtdisc (f2cl-lib:fsqrt (- det))) + (setf + (f2cl-lib:fref w-%data% + ((f2cl-lib:int-sub kbot 1)) ((1 *)) + w-%offset%) + (* (+ tr2 rtdisc) s)) + (setf (f2cl-lib:fref w-%data% (kbot) + ((1 *)) w-%offset%) + (* (- tr2 rtdisc) s)) + (setf ks (f2cl-lib:int-sub kbot 1)))))) + (cond + ((> (f2cl-lib:int-add kbot + (f2cl-lib:int-sub ks) 1) ns) + (tagbody (setf sorted f2cl-lib:%false%) + (f2cl-lib:fdo (k kbot + (f2cl-lib:int-add k (f2cl-lib:int-sub 1))) + ((> + k (f2cl-lib:int-add ks 1)) + nil) + (tagbody (if sorted (go label60)) + (setf sorted f2cl-lib:%true%) + (f2cl-lib:fdo (i ks + (f2cl-lib:int-add i 1)) + ((> i + (f2cl-lib:int-add k + (f2cl-lib:int-sub 1))) + nil) + (tagbody + (cond + ((< (cabs1 (f2cl-lib:fref w (i) + ((1 *)))) + (cabs1 (f2cl-lib:fref w + ((f2cl-lib:int-add i 1)) + ((1 *))))) + (setf sorted f2cl-lib:%false%) + (setf swap + (f2cl-lib:fref w-%data% (i) + ((1 *)) w-%offset%)) + (setf + (f2cl-lib:fref w-%data% (i) + ((1 *)) w-%offset%) + (f2cl-lib:fref w-%data% + ((f2cl-lib:int-add i 1)) + ((1 *)) + w-%offset%)) + (setf + (f2cl-lib:fref w-%data% + ((f2cl-lib:int-add i 1)) + ((1 *)) + w-%offset%) + swap))) + label40)) + label50)) + label60))))) + (cond + ((= (f2cl-lib:int-add kbot + (f2cl-lib:int-sub ks) 1) 2) + (cond + ((< + (cabs1 + (+ (f2cl-lib:fref w (kbot) ((1 *))) + (- (f2cl-lib:fref h (kbot kbot) ((1 ldh) + (1 *)))))) + (cabs1 + (+ + (f2cl-lib:fref w ((f2cl-lib:int-add kbot + (f2cl-lib:int-sub 1))) + ((1 *))) + (- (f2cl-lib:fref h (kbot kbot) ((1 ldh) + (1 *))))))) + (setf + (f2cl-lib:fref w-%data% + ((f2cl-lib:int-sub kbot 1)) ((1 *)) + w-%offset%) + (f2cl-lib:fref w-%data% (kbot) ((1 *)) + w-%offset%))) + (t + (setf (f2cl-lib:fref w-%data% (kbot) ((1 *)) + w-%offset%) + (f2cl-lib:fref w-%data% + ((f2cl-lib:int-sub kbot 1)) ((1 *)) + w-%offset%)))))) + (setf ns + (min (the f2cl-lib:integer4 ns) + (the f2cl-lib:integer4 + (f2cl-lib:int-add + (f2cl-lib:int-sub kbot ks) 1)))) + (setf ns (f2cl-lib:int-sub ns (mod ns 2))) + (setf ks (f2cl-lib:int-add + (f2cl-lib:int-sub kbot ns) 1)) + (setf kdu (f2cl-lib:int-sub + (f2cl-lib:int-mul 3 ns) 3)) + (setf ku (f2cl-lib:int-add + (f2cl-lib:int-sub n kdu) 1)) + (setf kwh (f2cl-lib:int-add kdu 1)) + (setf nho + (f2cl-lib:int-add + (f2cl-lib:int-sub (f2cl-lib:int-add + (f2cl-lib:int-sub n kdu) 1) 4 + (f2cl-lib:int-add kdu 1)) + 1)) + (setf kwv (f2cl-lib:int-add kdu 4)) + (setf nve (f2cl-lib:int-add + (f2cl-lib:int-sub n kdu kwv) 1)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12 var-13 var-14 var-15 var-16 + var-17 var-18 var-19 var-20 + var-21 var-22 var-23) + (zlaqr5 wantt wantz kacc22 n ktop kbot ns + (f2cl-lib:array-slice w-%data% + f2cl-lib:complex16 (ks) ((1 *)) + w-%offset%) + h ldh iloz ihiz z ldz work 3 + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (ku 1) + ((1 ldh) (1 *)) h-%offset%) + ldh nve + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kwv 1) + ((1 ldh) (1 *)) h-%offset%) + ldh nho + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (ku kwh) + ((1 ldh) (1 *)) h-%offset%) + ldh) + (declare + (ignore var-7 var-8 var-12 var-14 var-15 + var-16 var-19 var-22)) + (when var-0 (setf wantt var-0)) + (when var-1 (setf wantz var-1)) + (when var-2 (setf kacc22 var-2)) + (when var-3 (setf n var-3)) + (when var-4 (setf ktop var-4)) + (when var-5 (setf kbot var-5)) + (when var-6 (setf ns var-6)) + (when var-9 (setf ldh var-9)) + (when var-10 (setf iloz var-10)) + (when var-11 (setf ihiz var-11)) + (when var-13 (setf ldz var-13)) + (when var-17 (setf ldh var-17)) + (when var-18 (setf nve var-18)) + (when var-20 (setf ldh var-20)) + (when var-21 (setf nho var-21)) + (when var-23 (setf ldh var-23))))) + (cond ((> ld 0) (setf ndfl 1)) + (t (setf ndfl (f2cl-lib:int-add ndfl 1)))) + label70)) + (setf info kbot) label80))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (f2cl-lib:dcmplx lwkopt 0)) + end_label + (return + (values wantt wantz n ilo ihi nil ldh nil iloz ihiz nil ldz nil lwork + info))))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -112011,7 +118559,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlaqr1.f} * ===================================================================== SUBROUTINE ZLAQR1( N, H, LDH, S1, S2, V ) * @@ -112079,10 +118627,108 @@ Man Page Details END IF END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlaqr1} - +(let* + ((zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16)) + (rzero 0.0d0)) + (declare (type (f2cl-lib:complex16) zero) + (type (double-float 0.0d0 0.0d0) rzero) (ignorable zero rzero)) + (defun zlaqr1 (n h ldh s1 s2 v) + (declare (type (f2cl-lib:integer4) ldh n) + (type (array f2cl-lib:complex16 (*)) v h) (type (f2cl-lib:complex16) s2 s1)) + (f2cl-lib:with-multi-array-data + ((h f2cl-lib:complex16 h-%data% h-%offset%) + (v f2cl-lib:complex16 v-%data% v-%offset%)) + (labels + ((cabs1 (cdum) (+ (abs (f2cl-lib:dble cdum)) + (abs (f2cl-lib:dimag cdum))))) + (declare + (ftype (function (f2cl-lib:complex16) + (values double-float &rest t)) cabs1)) + (prog + ((s 0.0d0) (cdum #C(0.0d0 0.0d0)) (h21s #C(0.0d0 0.0d0)) + (h31s #C(0.0d0 0.0d0))) + (declare (type (double-float) s) + (type (f2cl-lib:complex16) h31s h21s cdum)) + (cond + ((= n 2) + (setf s + (+ + (cabs1 (- (f2cl-lib:fref h-%data% (1 1) ((1 ldh) (1 *)) + h-%offset%) s2)) + (cabs1 (f2cl-lib:fref h-%data% (2 1) ((1 ldh) (1 *)) + h-%offset%)))) + (cond + ((= s rzero) + (setf (f2cl-lib:fref v-%data% (1) ((1 *)) v-%offset%) zero) + (setf (f2cl-lib:fref v-%data% (2) ((1 *)) v-%offset%) zero)) + (t + (setf h21s + (/ (f2cl-lib:fref h-%data% (2 1) ((1 ldh) (1 *)) h-%offset%) s)) + (setf (f2cl-lib:fref v-%data% (1) ((1 *)) v-%offset%) + (+ (* h21s (f2cl-lib:fref h-%data% (1 2) ((1 ldh) (1 *)) + h-%offset%)) + (* (- (f2cl-lib:fref h-%data% (1 1) ((1 ldh) (1 *)) + h-%offset%) s1) + (/ (- (f2cl-lib:fref h-%data% (1 1) ((1 ldh) (1 *)) + h-%offset%) s2) + s)))) + (setf (f2cl-lib:fref v-%data% (2) ((1 *)) v-%offset%) + (* h21s + (- + (+ (f2cl-lib:fref h-%data% (1 1) ((1 ldh) (1 *)) h-%offset%) + (f2cl-lib:fref h-%data% (2 2) ((1 ldh) (1 *)) h-%offset%)) + s1 s2)))))) + (t + (setf s + (+ + (cabs1 + (- (f2cl-lib:fref h-%data% (1 1) ((1 ldh) (1 *)) h-%offset%) s2)) + (cabs1 (f2cl-lib:fref h-%data% (2 1) ((1 ldh) (1 *)) h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% (3 1) ((1 ldh) (1 *)) h-%offset%)))) + (cond + ((= s zero) + (setf (f2cl-lib:fref v-%data% (1) ((1 *)) v-%offset%) zero) + (setf (f2cl-lib:fref v-%data% (2) ((1 *)) v-%offset%) zero) + (setf (f2cl-lib:fref v-%data% (3) ((1 *)) v-%offset%) zero)) + (t + (setf h21s + (/ (f2cl-lib:fref h-%data% (2 1) ((1 ldh) (1 *)) h-%offset%) s)) + (setf h31s + (/ (f2cl-lib:fref h-%data% (3 1) ((1 ldh) (1 *)) h-%offset%) s)) + (setf (f2cl-lib:fref v-%data% (1) ((1 *)) v-%offset%) + (+ + (* (- (f2cl-lib:fref h-%data% (1 1) ((1 ldh) (1 *)) + h-%offset%) s1) + (/ (- (f2cl-lib:fref h-%data% (1 1) ((1 ldh) (1 *)) + h-%offset%) s2) + s)) + (* (f2cl-lib:fref h-%data% (1 2) ((1 ldh) (1 *)) h-%offset%) + h21s) + (* (f2cl-lib:fref h-%data% (1 3) ((1 ldh) (1 *)) h-%offset%) + h31s))) + (setf (f2cl-lib:fref v-%data% (2) ((1 *)) v-%offset%) + (+ + (* h21s + (- + (+ (f2cl-lib:fref h-%data% (1 1) ((1 ldh) (1 *)) h-%offset%) + (f2cl-lib:fref h-%data% (2 2) ((1 ldh) (1 *)) h-%offset%)) + s1 s2)) + (* (f2cl-lib:fref h-%data% (2 3) ((1 ldh) (1 *)) h-%offset%) + h31s))) + (setf (f2cl-lib:fref v-%data% (3) ((1 *)) v-%offset%) + (+ + (* h31s + (- + (+ (f2cl-lib:fref h-%data% (1 1) ((1 ldh) (1 *)) h-%offset%) + (f2cl-lib:fref h-%data% (3 3) ((1 ldh) (1 *)) h-%offset%)) + s1 s2)) + (* h21s + (f2cl-lib:fref h-%data% (3 2) ((1 ldh) (1 *)) h-%offset%)))))))) + end_label (return (values nil nil nil nil nil nil))))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -112333,7 +118979,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlaqr2.f} * ===================================================================== SUBROUTINE ZLAQR2( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, $ IHIZ, Z, LDZ, NS, ND, SH, V, LDV, NH, T, LDT, @@ -112635,10 +119281,454 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlaqr2} - +(let* + ((zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16)) + (one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16)) (rzero 0.0d0) + (rone 1.0d0)) + (declare (type (f2cl-lib:complex16) zero) (type (f2cl-lib:complex16) one) + (type (double-float 0.0d0 0.0d0) rzero) + (type (double-float 1.0d0 1.0d0) rone) (ignorable zero one rzero rone)) + (defun zlaqr2 + (wantt wantz n ktop kbot nw h ldh iloz ihiz z ldz ns nd sh v ldv nh t$ ldt nv + wv ldwv work lwork) + (declare (type f2cl-lib:logical wantz wantt) + (type (f2cl-lib:integer4) lwork ldwv nv ldt nh ldv nd ns ldz ihiz iloz ldh + nw kbot ktop n) + (type (array f2cl-lib:complex16 (*)) work wv t$ v sh z h)) + (f2cl-lib:with-multi-array-data + ((h f2cl-lib:complex16 h-%data% h-%offset%) + (z f2cl-lib:complex16 z-%data% z-%offset%) + (sh f2cl-lib:complex16 sh-%data% sh-%offset%) + (v f2cl-lib:complex16 v-%data% v-%offset%) + (t$ f2cl-lib:complex16 t$-%data% t$-%offset%) + (wv f2cl-lib:complex16 wv-%data% wv-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%)) + (labels + ((cabs1 (cdum) + (+ (abs (f2cl-lib:dble cdum)) (abs (f2cl-lib:dimag cdum))))) + (declare + (ftype (function (f2cl-lib:complex16) + (values double-float &rest t)) cabs1)) + (prog + ((i 0) (ifst 0) (ilst 0) (info 0) (infqr 0) (j 0) (jw 0) + (kcol 0) (kln 0) + (knt 0) (krow 0) (kwtop 0) (ltop 0) (lwk1 0) (lwk2 0) + (lwkopt 0) (foo 0.0d0) + (safmax 0.0d0) (safmin 0.0d0) (smlnum 0.0d0) (ulp 0.0d0) + (beta #C(0.0d0 0.0d0)) (cdum #C(0.0d0 0.0d0)) (s #C(0.0d0 0.0d0)) + (tau #C(0.0d0 0.0d0)) (dconjg$ 0.0)) + (declare + (type (f2cl-lib:integer4) lwkopt lwk2 lwk1 ltop kwtop + krow knt kln kcol jw j + infqr info ilst ifst i) + (type (double-float) ulp smlnum safmin safmax foo) + (type (f2cl-lib:complex16) tau s cdum beta) + (type (single-float) dconjg$)) + (setf jw + (min (the f2cl-lib:integer4 nw) + (the f2cl-lib:integer4 + (f2cl-lib:int-add (f2cl-lib:int-sub kbot ktop) 1)))) + (cond ((<= jw 2) (setf lwkopt 1)) + (t + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zgehrd jw 1 (f2cl-lib:int-sub jw 1) t$ ldt work work -1 info) + (declare (ignore var-1 var-2 var-3 var-5 var-6 var-7)) + (setf jw var-0) + (setf ldt var-4) (setf info var-8)) + (setf lwk1 + (f2cl-lib:int + (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10 var-11 + var-12 var-13) + (zunmhr "R" "N" jw jw 1 + (f2cl-lib:int-sub jw 1) t$ ldt work v ldv work -1 + info) + (declare (ignore var-0 var-1 var-4 var-5 var-6 var-8 var-9 + var-11 var-12)) + (when var-2 (setf jw var-2)) (when var-3 (setf jw var-3)) + (when var-7 (setf ldt var-7)) (when var-10 (setf ldv var-10)) + (when var-13 (setf info var-13))) + (setf lwk2 + (f2cl-lib:int (f2cl-lib:fref work-%data% (1) ((1 *)) + work-%offset%))) + (setf lwkopt + (f2cl-lib:int-add jw + (max (the f2cl-lib:integer4 lwk1) + (the f2cl-lib:integer4 lwk2)))))) + (cond + ((= lwork (f2cl-lib:int-sub 1)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (f2cl-lib:dcmplx lwkopt 0)) + (go end_label))) + (setf ns 0) (setf nd 0) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) one) + (if (> ktop kbot) (go end_label)) (if (< nw 1) (go end_label)) + (setf safmin (dlamch "SAFE MINIMUM")) (setf safmax (/ rone safmin)) + (multiple-value-bind (var-0 var-1) (dlabad safmin safmax) + (declare (ignore)) + (when var-0 (setf safmin var-0)) (when var-1 (setf safmax var-1))) + (setf ulp (dlamch "PRECISION")) + (setf smlnum (* safmin (/ (f2cl-lib:dble n) ulp))) + (setf jw + (min (the f2cl-lib:integer4 nw) + (the f2cl-lib:integer4 + (f2cl-lib:int-add (f2cl-lib:int-sub kbot ktop) 1)))) + (setf kwtop (f2cl-lib:int-add (f2cl-lib:int-sub kbot jw) 1)) + (cond ((= kwtop ktop) (setf s zero)) + (t + (setf s + (f2cl-lib:fref h-%data% + (kwtop (f2cl-lib:int-sub kwtop 1)) ((1 ldh) (1 *)) + h-%offset%)))) + (cond + ((= kbot kwtop) + (setf (f2cl-lib:fref sh-%data% (kwtop) ((1 *)) sh-%offset%) + (f2cl-lib:fref h-%data% (kwtop kwtop) ((1 ldh) (1 *)) h-%offset%)) + (setf ns 1) (setf nd 0) + (cond + ((<= (cabs1 s) + (max smlnum + (* ulp (cabs1 + (f2cl-lib:fref h (kwtop kwtop) ((1 ldh) (1 *))))))) + (setf ns 0) (setf nd 1) + (if (> kwtop ktop) + (setf + (f2cl-lib:fref h-%data% (kwtop (f2cl-lib:int-sub kwtop 1)) + ((1 ldh) (1 *)) h-%offset%) + zero)))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) one) + (go end_label))) + (zlacpy "U" jw jw + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 (kwtop kwtop) + ((1 ldh) (1 *)) h-%offset%) + ldh t$ ldt) + (zcopy (f2cl-lib:int-sub jw 1) + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 ((+ kwtop 1) kwtop) + ((1 ldh) (1 *)) h-%offset%) + (f2cl-lib:int-add ldh 1) + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 (2 1) + ((1 ldt) (1 *)) + t$-%offset%) + (f2cl-lib:int-add ldt 1)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (zlaset "A" jw jw zero one v ldv) (declare (ignore var-0 var-5)) + (when var-1 (setf jw var-1)) (when var-2 (setf jw var-2)) + (when var-3 (setf zero var-3)) (when var-4 (setf one var-4)) + (when var-6 (setf ldv var-6))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10 var-11 + var-12) + (zlahqr f2cl-lib:%true% f2cl-lib:%true% jw 1 jw t$ ldt + (f2cl-lib:array-slice sh-%data% f2cl-lib:complex16 (kwtop) ((1 *)) + sh-%offset%) + 1 jw v ldv infqr) + (declare + (ignore var-0 var-1 var-2 var-3 var-4 var-5 var-7 var-8 var-9 var-10 + var-11)) + (setf ldt var-6) (setf infqr var-12)) + (setf ns jw) (setf ilst (f2cl-lib:int-add infqr 1)) + (f2cl-lib:fdo (knt (f2cl-lib:int-add infqr 1) + (f2cl-lib:int-add knt 1)) + ((> + knt jw) + nil) + (tagbody + (setf foo + (cabs1 (f2cl-lib:fref t$-%data% (ns ns) + ((1 ldt) (1 *)) t$-%offset%))) + (if (= foo rzero) (setf foo (cabs1 s))) + (cond + ((<= (* (cabs1 s) + (cabs1 (f2cl-lib:fref v (1 ns) ((1 ldv) (1 *))))) + (max smlnum (* ulp foo))) + (setf ns (f2cl-lib:int-sub ns 1))) + (t (setf ifst ns) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (ztrexc "V" jw t$ ldt v ldv ifst ilst info) + (declare (ignore var-0 var-2 var-4)) + (when var-1 (setf jw var-1)) + (when var-3 (setf ldt var-3)) + (when var-5 (setf ldv var-5)) + (when var-6 (setf ifst var-6)) + (when var-7 (setf ilst var-7)) + (when var-8 (setf info var-8))) + (setf ilst (f2cl-lib:int-add ilst 1)))) + label10)) + (if (= ns 0) (setf s zero)) + (cond + ((< ns jw) + (f2cl-lib:fdo (i (f2cl-lib:int-add infqr 1) (f2cl-lib:int-add i 1)) + ((> i + ns) + nil) + (tagbody (setf ifst i) + (f2cl-lib:fdo (j (f2cl-lib:int-add i 1) + (f2cl-lib:int-add j 1)) + ((> j ns) + nil) + (tagbody + (if + (> (cabs1 (f2cl-lib:fref t$-%data% (j j) + ((1 ldt) (1 *)) t$-%offset%)) + (cabs1 + (f2cl-lib:fref t$-%data% (ifst ifst) + ((1 ldt) (1 *)) t$-%offset%))) + (setf ifst j)) + label20)) + (setf ilst i) + (if (/= ifst ilst) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8) + (ztrexc "V" jw t$ ldt v ldv ifst ilst info) + (declare (ignore var-0 var-2 var-4)) + (when var-1 (setf jw var-1)) + (when var-3 (setf ldt var-3)) + (when var-5 (setf ldv var-5)) + (when var-6 (setf ifst var-6)) + (when var-7 (setf ilst var-7)) + (when var-8 (setf info var-8)))) + label30)))) + (f2cl-lib:fdo (i (f2cl-lib:int-add infqr 1) (f2cl-lib:int-add i 1)) + ((> i jw) + nil) + (tagbody + (setf + (f2cl-lib:fref sh-%data% + ((f2cl-lib:int-sub (f2cl-lib:int-add kwtop i) 1)) + ((1 *)) sh-%offset%) + (f2cl-lib:fref t$-%data% (i i) ((1 ldt) (1 *)) + t$-%offset%)) + label40)) + (cond + ((or (< ns jw) (= s zero)) + (cond + ((and (> ns 1) (/= s zero)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zcopy ns v ldv work 1) (declare (ignore var-1 var-3 var-4)) + (when var-0 (setf ns var-0)) (when var-2 (setf ldv var-2))) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i ns) nil) + (tagbody + (setf (f2cl-lib:fref work-%data% (i) ((1 *)) + work-%offset%) + (coerce + (f2cl-lib:dconjg + (f2cl-lib:fref work-%data% (i) ((1 *)) + work-%offset%)) + 'f2cl-lib:complex16)) + label50)) + (setf beta (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zlarfg ns beta + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 (2) ((1 *)) + work-%offset%) + 1 tau) + (declare (ignore var-2 var-3)) (when var-0 (setf ns var-0)) + (when var-1 (setf beta var-1)) (when var-4 (setf tau var-4))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) one) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (zlaset "L" + (f2cl-lib:int-sub jw 2) (f2cl-lib:int-sub jw 2) zero zero + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 (3 1) + ((1 ldt) (1 *)) t$-%offset%) + ldt) + (declare (ignore var-0 var-1 var-2 var-5)) + (when var-3 (setf zero var-3)) (when var-4 (setf zero var-4)) + (when var-6 (setf ldt var-6))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zlarf "L" ns jw work 1 (f2cl-lib:dconjg tau) t$ ldt + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 + ((+ jw 1)) ((1 *)) + work-%offset%)) + (declare (ignore var-0 var-3 var-4 var-5 var-6 var-8)) + (when var-1 (setf ns var-1)) (when var-2 (setf jw var-2)) + (when var-7 (setf ldt var-7))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zlarf "R" ns ns work 1 tau t$ ldt + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 + ((+ jw 1)) ((1 *)) + work-%offset%)) + (declare (ignore var-0 var-3 var-4 var-6 var-8)) + (when var-1 (setf ns var-1)) (when var-2 (setf ns var-2)) + (when var-5 (setf tau var-5)) (when var-7 (setf ldt var-7))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zlarf "R" jw ns work 1 tau v ldv + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 + ((+ jw 1)) ((1 *)) + work-%offset%)) + (declare (ignore var-0 var-3 var-4 var-6 var-8)) + (when var-1 (setf jw var-1)) (when var-2 (setf ns var-2)) + (when var-5 (setf tau var-5)) (when var-7 (setf ldv var-7))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zgehrd jw 1 ns t$ ldt work + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 + ((+ jw 1)) ((1 *)) + work-%offset%) + (f2cl-lib:int-sub lwork jw) info) + (declare (ignore var-1 var-3 var-5 var-6 var-7)) (setf jw var-0) + (setf ns var-2) (setf ldt var-4) (setf info var-8)))) + (if (> kwtop 1) + (setf + (f2cl-lib:fref h-%data% (kwtop (f2cl-lib:int-sub kwtop 1)) + ((1 ldh) (1 *)) h-%offset%) + (coerce + (* s + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (1 1) ((1 ldv) (1 *)) v-%offset%))) + 'f2cl-lib:complex16))) + (zlacpy "U" jw jw t$ ldt + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 (kwtop kwtop) + ((1 ldh) (1 *)) h-%offset%) + ldh) + (zcopy (f2cl-lib:int-sub jw 1) + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 + (2 1) ((1 ldt) (1 *)) + t$-%offset%) + (f2cl-lib:int-add ldt 1) + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 + ((+ kwtop 1) kwtop) + ((1 ldh) (1 *)) h-%offset%) + (f2cl-lib:int-add ldh 1)) + (if (and (> ns 1) (/= s zero)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10 + var-11 var-12 var-13) + (zunmhr "R" "N" jw ns 1 ns t$ ldt work v ldv + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 + ((+ jw 1)) ((1 *)) + work-%offset%) + (f2cl-lib:int-sub lwork jw) info) + (declare (ignore var-0 var-1 var-4 var-6 var-8 var-9 var-11 + var-12)) + (when var-2 (setf jw var-2)) (when var-3 (setf ns var-3)) + (when var-5 (setf ns var-5)) (when var-7 (setf ldt var-7)) + (when var-10 (setf ldv var-10)) (when var-13 (setf info var-13)))) + (cond (wantt (setf ltop 1)) (t (setf ltop ktop))) + (f2cl-lib:fdo (krow ltop (f2cl-lib:int-add krow nv)) + ((> krow + (f2cl-lib:int-add kwtop (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf kln + (min (the f2cl-lib:integer4 nv) + (the f2cl-lib:integer4 + (f2cl-lib:int-sub kwtop krow)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "N" "N" kln jw jw one + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (krow kwtop) + ((1 ldh) (1 *)) h-%offset%) + ldh v ldv zero wv ldwv) + (declare (ignore var-0 var-1 var-6 var-8 var-11)) + (when var-2 (setf kln var-2)) + (when var-3 (setf jw var-3)) + (when var-4 (setf jw var-4)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldh var-7)) + (when var-9 (setf ldv var-9)) + (when var-10 (setf zero var-10)) + (when var-12 (setf ldwv var-12))) + (zlacpy "A" kln jw wv ldwv + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (krow kwtop) + ((1 ldh) (1 *)) h-%offset%) + ldh) + label60)) + (cond + (wantt + (f2cl-lib:fdo (kcol (f2cl-lib:int-add kbot 1) + (f2cl-lib:int-add kcol nh)) + ((> kcol n) nil) + (tagbody + (setf kln + (min (the f2cl-lib:integer4 nh) + (the f2cl-lib:integer4 + (f2cl-lib:int-add + (f2cl-lib:int-sub n kcol) 1)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "C" "N" jw kln jw one v ldv + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kwtop kcol) + ((1 ldh) (1 *)) h-%offset%) + ldh zero t$ ldt) + (declare (ignore var-0 var-1 var-6 var-8 var-11)) + (when var-2 (setf jw var-2)) + (when var-3 (setf kln var-3)) + (when var-4 (setf jw var-4)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldv var-7)) + (when var-9 (setf ldh var-9)) + (when var-10 (setf zero var-10)) + (when var-12 (setf ldt var-12))) + (zlacpy "A" jw kln t$ ldt + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kwtop kcol) + ((1 ldh) (1 *)) h-%offset%) + ldh) + label70)))) + (cond + (wantz + (f2cl-lib:fdo (krow iloz (f2cl-lib:int-add krow nv)) + ((> krow ihiz) + nil) + (tagbody + (setf kln + (min (the f2cl-lib:integer4 nv) + (the f2cl-lib:integer4 + (f2cl-lib:int-add + (f2cl-lib:int-sub ihiz krow) 1)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "N" "N" kln jw jw one + (f2cl-lib:array-slice z-%data% + f2cl-lib:complex16 (krow kwtop) + ((1 ldz) (1 *)) z-%offset%) + ldz v ldv zero wv ldwv) + (declare (ignore var-0 var-1 var-6 var-8 var-11)) + (when var-2 (setf kln var-2)) + (when var-3 (setf jw var-3)) + (when var-4 (setf jw var-4)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldz var-7)) + (when var-9 (setf ldv var-9)) + (when var-10 (setf zero var-10)) + (when var-12 (setf ldwv var-12))) + (zlacpy "A" kln jw wv ldwv + (f2cl-lib:array-slice z-%data% + f2cl-lib:complex16 (krow kwtop) + ((1 ldz) (1 *)) z-%offset%) + ldz) + label80)))))) + (setf nd (f2cl-lib:int-sub jw ns)) + (setf ns (f2cl-lib:int-sub ns infqr)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (f2cl-lib:dcmplx lwkopt 0)) + end_label + (return + (values nil nil nil nil nil nil nil ldh nil nil nil ldz ns nd nil + nil ldv nil nil ldt nil nil ldwv nil nil))))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -112888,7 +119978,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlaqr3.f} * ===================================================================== SUBROUTINE ZLAQR3( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, $ IHIZ, Z, LDZ, NS, ND, SH, V, LDV, NH, T, LDT, @@ -113204,10 +120294,498 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlaqr3} - +(let* + ((zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16)) + (one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16)) (rzero 0.0d0) + (rone 1.0d0)) + (declare (type (f2cl-lib:complex16) zero) (type (f2cl-lib:complex16) one) + (type (double-float 0.0d0 0.0d0) rzero) + (type (double-float 1.0d0 1.0d0) rone) (ignorable zero one rzero rone)) + (defun zlaqr3 + (wantt wantz n ktop kbot nw h ldh iloz ihiz z ldz ns nd sh v ldv nh t$ ldt nv + wv ldwv work lwork) + (declare (type f2cl-lib:logical wantz wantt) + (type (f2cl-lib:integer4) lwork ldwv nv ldt nh ldv nd ns ldz ihiz iloz ldh + nw kbot ktop n) + (type (array f2cl-lib:complex16 (*)) work wv t$ v sh z h)) + (f2cl-lib:with-multi-array-data + ((h f2cl-lib:complex16 h-%data% h-%offset%) + (z f2cl-lib:complex16 z-%data% z-%offset%) + (sh f2cl-lib:complex16 sh-%data% sh-%offset%) + (v f2cl-lib:complex16 v-%data% v-%offset%) + (t$ f2cl-lib:complex16 t$-%data% t$-%offset%) + (wv f2cl-lib:complex16 wv-%data% wv-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%)) + (labels + ((cabs1 (cdum) + (+ (abs (f2cl-lib:dble cdum)) (abs (f2cl-lib:dimag cdum))))) + (declare + (ftype (function (f2cl-lib:complex16) + (values double-float &rest t)) cabs1)) + (prog + ((i 0) (ifst 0) (ilst 0) (info 0) (infqr 0) (j 0) (jw 0) + (kcol 0) (kln 0) + (knt 0) (krow 0) (kwtop 0) (ltop 0) (lwk1 0) (lwk2 0) + (lwk3 0) (lwkopt 0) + (nmin 0) (foo 0.0d0) (safmax 0.0d0) (safmin 0.0d0) (smlnum 0.0d0) + (ulp 0.0d0) (beta #C(0.0d0 0.0d0)) (cdum #C(0.0d0 0.0d0)) + (s #C(0.0d0 0.0d0)) (tau #C(0.0d0 0.0d0)) (dconjg$ 0.0)) + (declare + (type (f2cl-lib:integer4) nmin lwkopt lwk3 lwk2 lwk1 ltop + kwtop krow knt kln + kcol jw j infqr info ilst ifst i) + (type (double-float) ulp smlnum safmin safmax foo) + (type (f2cl-lib:complex16) tau s cdum beta) + (type (single-float) dconjg$)) + (setf jw + (min (the f2cl-lib:integer4 nw) + (the f2cl-lib:integer4 + (f2cl-lib:int-add (f2cl-lib:int-sub kbot ktop) 1)))) + (cond ((<= jw 2) (setf lwkopt 1)) + (t + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zgehrd jw 1 (f2cl-lib:int-sub jw 1) t$ ldt work work -1 info) + (declare (ignore var-1 var-2 var-3 var-5 var-6 var-7)) + (setf jw var-0) + (setf ldt var-4) (setf info var-8)) + (setf lwk1 + (f2cl-lib:int + (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10 var-11 + var-12 var-13) + (zunmhr "R" "N" jw jw 1 + (f2cl-lib:int-sub jw 1) t$ ldt work v ldv work -1 + info) + (declare (ignore var-0 var-1 var-4 var-5 var-6 var-8 + var-9 var-11 var-12)) + (when var-2 (setf jw var-2)) (when var-3 (setf jw var-3)) + (when var-7 (setf ldt var-7)) (when var-10 (setf ldv var-10)) + (when var-13 (setf info var-13))) + (setf lwk2 + (f2cl-lib:int + (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10 var-11 + var-12 var-13 var-14) + (zlaqr4 f2cl-lib:%true% f2cl-lib:%true% + jw 1 jw t$ ldt sh 1 jw v ldv work + -1 infqr) + (declare + (ignore var-0 var-1 var-3 var-5 var-7 var-8 var-10 var-12 var-13)) + (when var-2 (setf jw var-2)) (when var-4 (setf jw var-4)) + (when var-6 (setf ldt var-6)) (when var-9 (setf jw var-9)) + (when var-11 (setf ldv var-11)) (when var-14 (setf infqr var-14))) + (setf lwk3 + (f2cl-lib:int (f2cl-lib:fref work-%data% (1) ((1 *)) + work-%offset%))) + (setf lwkopt + (max + (the f2cl-lib:integer4 + (f2cl-lib:int-add jw + (max (the f2cl-lib:integer4 lwk1) + (the f2cl-lib:integer4 lwk2)))) + (the f2cl-lib:integer4 lwk3))))) + (cond + ((= lwork (f2cl-lib:int-sub 1)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (f2cl-lib:dcmplx lwkopt 0)) + (go end_label))) + (setf ns 0) (setf nd 0) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) one) + (if (> ktop kbot) (go end_label)) (if (< nw 1) (go end_label)) + (setf safmin (dlamch "SAFE MINIMUM")) (setf safmax (/ rone safmin)) + (multiple-value-bind (var-0 var-1) + (dlabad safmin safmax) (declare (ignore)) + (when var-0 (setf safmin var-0)) (when var-1 (setf safmax var-1))) + (setf ulp (dlamch "PRECISION")) + (setf smlnum (* safmin (/ (f2cl-lib:dble n) ulp))) + (setf jw + (min (the f2cl-lib:integer4 nw) + (the f2cl-lib:integer4 + (f2cl-lib:int-add (f2cl-lib:int-sub kbot ktop) 1)))) + (setf kwtop (f2cl-lib:int-add (f2cl-lib:int-sub kbot jw) 1)) + (cond ((= kwtop ktop) (setf s zero)) + (t + (setf s + (f2cl-lib:fref h-%data% + (kwtop (f2cl-lib:int-sub kwtop 1)) ((1 ldh) (1 *)) + h-%offset%)))) + (cond + ((= kbot kwtop) + (setf (f2cl-lib:fref sh-%data% (kwtop) ((1 *)) sh-%offset%) + (f2cl-lib:fref h-%data% (kwtop kwtop) ((1 ldh) (1 *)) h-%offset%)) + (setf ns 1) (setf nd 0) + (cond + ((<= (cabs1 s) + (max smlnum + (* ulp (cabs1 + (f2cl-lib:fref h (kwtop kwtop) ((1 ldh) (1 *))))))) + (setf ns 0) (setf nd 1) + (if (> kwtop ktop) + (setf + (f2cl-lib:fref h-%data% (kwtop (f2cl-lib:int-sub kwtop 1)) + ((1 ldh) (1 *)) h-%offset%) + zero)))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) one) + (go end_label))) + (zlacpy "U" jw jw + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 (kwtop kwtop) + ((1 ldh) (1 *)) h-%offset%) + ldh t$ ldt) + (zcopy (f2cl-lib:int-sub jw 1) + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 ((+ kwtop 1) kwtop) + ((1 ldh) (1 *)) h-%offset%) + (f2cl-lib:int-add ldh 1) + (f2cl-lib:array-slice t$-%data% + f2cl-lib:complex16 (2 1) ((1 ldt) (1 *)) + t$-%offset%) + (f2cl-lib:int-add ldt 1)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (zlaset "A" jw jw zero one v ldv) (declare (ignore var-0 var-5)) + (when var-1 (setf jw var-1)) (when var-2 (setf jw var-2)) + (when var-3 (setf zero var-3)) (when var-4 (setf one var-4)) + (when var-6 (setf ldv var-6))) + (setf nmin + (multiple-value-bind (ret-val var-0 var-1 var-2 var-3 + var-4 var-5 var-6) + (ilaenv 12 "ZLAQR3" "SV" jw 1 jw lwork) + (declare (ignore var-0 var-1 var-2 var-4)) + (when var-3 (setf jw var-3)) + (when var-5 (setf jw var-5)) + (when var-6 (setf lwork var-6)) ret-val)) + (cond + ((> jw nmin) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10 var-11 + var-12 var-13 var-14) + (zlaqr4 f2cl-lib:%true% f2cl-lib:%true% jw 1 jw t$ ldt + (f2cl-lib:array-slice sh-%data% f2cl-lib:complex16 (kwtop) ((1 *)) + sh-%offset%) + 1 jw v ldv work lwork infqr) + (declare (ignore var-0 var-1 var-3 var-5 var-7 var-8 + var-10 var-12)) + (when var-2 (setf jw var-2)) (when var-4 (setf jw var-4)) + (when var-6 (setf ldt var-6)) (when var-9 (setf jw var-9)) + (when var-11 (setf ldv var-11)) (when var-13 (setf lwork var-13)) + (when var-14 (setf infqr var-14)))) + (t + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10 var-11 + var-12) + (zlahqr f2cl-lib:%true% f2cl-lib:%true% jw 1 jw t$ ldt + (f2cl-lib:array-slice sh-%data% f2cl-lib:complex16 (kwtop) ((1 *)) + sh-%offset%) + 1 jw v ldv infqr) + (declare + (ignore var-0 var-1 var-2 var-3 var-4 var-5 var-7 var-8 + var-9 var-10 + var-11)) + (setf ldt var-6) (setf infqr var-12)))) + (setf ns jw) (setf ilst (f2cl-lib:int-add infqr 1)) + (f2cl-lib:fdo (knt (f2cl-lib:int-add infqr 1) + (f2cl-lib:int-add knt 1)) + ((> + knt jw) + nil) + (tagbody + (setf foo + (cabs1 (f2cl-lib:fref t$-%data% (ns ns) + ((1 ldt) (1 *)) t$-%offset%))) + (if (= foo rzero) (setf foo (cabs1 s))) + (cond + ((<= (* (cabs1 s) + (cabs1 (f2cl-lib:fref v (1 ns) ((1 ldv) (1 *))))) + (max smlnum (* ulp foo))) + (setf ns (f2cl-lib:int-sub ns 1))) + (t (setf ifst ns) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (ztrexc "V" jw t$ ldt v ldv ifst ilst info) + (declare (ignore var-0 var-2 var-4)) + (when var-1 (setf jw var-1)) + (when var-3 (setf ldt var-3)) + (when var-5 (setf ldv var-5)) + (when var-6 (setf ifst var-6)) + (when var-7 (setf ilst var-7)) + (when var-8 (setf info var-8))) + (setf ilst (f2cl-lib:int-add ilst 1)))) + label10)) + (if (= ns 0) (setf s zero)) + (cond + ((< ns jw) + (f2cl-lib:fdo (i (f2cl-lib:int-add infqr 1) (f2cl-lib:int-add i 1)) + ((> i + ns) + nil) + (tagbody (setf ifst i) + (f2cl-lib:fdo + (j (f2cl-lib:int-add i 1) (f2cl-lib:int-add j 1)) + ((> j ns) + nil) + (tagbody + (if + (> (cabs1 (f2cl-lib:fref t$-%data% (j j) + ((1 ldt) (1 *)) t$-%offset%)) + (cabs1 + (f2cl-lib:fref t$-%data% (ifst ifst) + ((1 ldt) (1 *)) t$-%offset%))) + (setf ifst j)) + label20)) + (setf ilst i) + (if (/= ifst ilst) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8) + (ztrexc "V" jw t$ ldt v ldv ifst ilst info) + (declare (ignore var-0 var-2 var-4)) + (when var-1 (setf jw var-1)) + (when var-3 (setf ldt var-3)) + (when var-5 (setf ldv var-5)) + (when var-6 (setf ifst var-6)) + (when var-7 (setf ilst var-7)) + (when var-8 (setf info var-8)))) + label30)))) + (f2cl-lib:fdo (i (f2cl-lib:int-add infqr 1) (f2cl-lib:int-add i 1)) + ((> i jw) + nil) + (tagbody + (setf + (f2cl-lib:fref sh-%data% + ((f2cl-lib:int-sub (f2cl-lib:int-add kwtop i) 1)) + ((1 *)) sh-%offset%) + (f2cl-lib:fref t$-%data% (i i) ((1 ldt) (1 *)) + t$-%offset%)) + label40)) + (cond + ((or (< ns jw) (= s zero)) + (cond + ((and (> ns 1) (/= s zero)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zcopy ns v ldv work 1) (declare (ignore var-1 var-3 var-4)) + (when var-0 (setf ns var-0)) (when var-2 (setf ldv var-2))) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i ns) nil) + (tagbody + (setf (f2cl-lib:fref work-%data% (i) ((1 *)) + work-%offset%) + (coerce + (f2cl-lib:dconjg + (f2cl-lib:fref work-%data% (i) ((1 *)) + work-%offset%)) + 'f2cl-lib:complex16)) + label50)) + (setf beta (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zlarfg ns beta + (f2cl-lib:array-slice work-%data% f2cl-lib:complex16 (2) ((1 *)) + work-%offset%) + 1 tau) + (declare (ignore var-2 var-3)) (when var-0 (setf ns var-0)) + (when var-1 (setf beta var-1)) (when var-4 (setf tau var-4))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) one) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (zlaset "L" + (f2cl-lib:int-sub jw 2) (f2cl-lib:int-sub jw 2) zero zero + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 (3 1) + ((1 ldt) (1 *)) t$-%offset%) + ldt) + (declare (ignore var-0 var-1 var-2 var-5)) + (when var-3 (setf zero var-3)) (when var-4 (setf zero var-4)) + (when var-6 (setf ldt var-6))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zlarf "L" ns jw work 1 (f2cl-lib:dconjg tau) t$ ldt + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 ((+ jw 1)) ((1 *)) + work-%offset%)) + (declare (ignore var-0 var-3 var-4 var-5 var-6 var-8)) + (when var-1 (setf ns var-1)) (when var-2 (setf jw var-2)) + (when var-7 (setf ldt var-7))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zlarf "R" ns ns work 1 tau t$ ldt + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 ((+ jw 1)) ((1 *)) + work-%offset%)) + (declare (ignore var-0 var-3 var-4 var-6 var-8)) + (when var-1 (setf ns var-1)) (when var-2 (setf ns var-2)) + (when var-5 (setf tau var-5)) (when var-7 (setf ldt var-7))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zlarf "R" jw ns work 1 tau v ldv + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 ((+ jw 1)) ((1 *)) + work-%offset%)) + (declare (ignore var-0 var-3 var-4 var-6 var-8)) + (when var-1 (setf jw var-1)) (when var-2 (setf ns var-2)) + (when var-5 (setf tau var-5)) (when var-7 (setf ldv var-7))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zgehrd jw 1 ns t$ ldt work + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 ((+ jw 1)) ((1 *)) + work-%offset%) + (f2cl-lib:int-sub lwork jw) info) + (declare (ignore var-1 var-3 var-5 var-6 var-7)) (setf jw var-0) + (setf ns var-2) (setf ldt var-4) (setf info var-8)))) + (if (> kwtop 1) + (setf + (f2cl-lib:fref h-%data% (kwtop (f2cl-lib:int-sub kwtop 1)) + ((1 ldh) (1 *)) h-%offset%) + (coerce + (* s + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (1 1) ((1 ldv) (1 *)) v-%offset%))) + 'f2cl-lib:complex16))) + (zlacpy "U" jw jw t$ ldt + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 (kwtop kwtop) + ((1 ldh) (1 *)) h-%offset%) + ldh) + (zcopy (f2cl-lib:int-sub jw 1) + (f2cl-lib:array-slice t$-%data% + f2cl-lib:complex16 (2 1) ((1 ldt) (1 *)) + t$-%offset%) + (f2cl-lib:int-add ldt 1) + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 ((+ kwtop 1) kwtop) + ((1 ldh) (1 *)) h-%offset%) + (f2cl-lib:int-add ldh 1)) + (if (and (> ns 1) (/= s zero)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10 + var-11 var-12 var-13) + (zunmhr "R" "N" jw ns 1 ns t$ ldt work v ldv + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 ((+ jw 1)) ((1 *)) + work-%offset%) + (f2cl-lib:int-sub lwork jw) info) + (declare + (ignore var-0 var-1 var-4 var-6 var-8 var-9 var-11 var-12)) + (when var-2 (setf jw var-2)) (when var-3 (setf ns var-3)) + (when var-5 (setf ns var-5)) (when var-7 (setf ldt var-7)) + (when var-10 (setf ldv var-10)) (when var-13 (setf info var-13)))) + (cond (wantt (setf ltop 1)) (t (setf ltop ktop))) + (f2cl-lib:fdo (krow ltop (f2cl-lib:int-add krow nv)) + ((> krow + (f2cl-lib:int-add kwtop (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf kln + (min (the f2cl-lib:integer4 nv) + (the f2cl-lib:integer4 + (f2cl-lib:int-sub kwtop krow)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "N" "N" kln jw jw one + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (krow kwtop) + ((1 ldh) (1 *)) h-%offset%) + ldh v ldv zero wv ldwv) + (declare (ignore var-0 var-1 var-6 var-8 var-11)) + (when var-2 (setf kln var-2)) + (when var-3 (setf jw var-3)) + (when var-4 (setf jw var-4)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldh var-7)) + (when var-9 (setf ldv var-9)) + (when var-10 (setf zero var-10)) + (when var-12 (setf ldwv var-12))) + (zlacpy "A" kln jw wv ldwv + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (krow kwtop) + ((1 ldh) (1 *)) h-%offset%) + ldh) + label60)) + (cond + (wantt + (f2cl-lib:fdo (kcol (f2cl-lib:int-add kbot 1) + (f2cl-lib:int-add kcol nh)) + ((> kcol n) nil) + (tagbody + (setf kln + (min (the f2cl-lib:integer4 nh) + (the f2cl-lib:integer4 + (f2cl-lib:int-add + (f2cl-lib:int-sub n kcol) 1)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "C" "N" jw kln jw one v ldv + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kwtop kcol) + ((1 ldh) (1 *)) h-%offset%) + ldh zero t$ ldt) + (declare (ignore var-0 var-1 var-6 var-8 var-11)) + (when var-2 (setf jw var-2)) + (when var-3 (setf kln var-3)) + (when var-4 (setf jw var-4)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldv var-7)) + (when var-9 (setf ldh var-9)) + (when var-10 (setf zero var-10)) + (when var-12 (setf ldt var-12))) + (zlacpy "A" jw kln t$ ldt + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kwtop kcol) + ((1 ldh) (1 *)) h-%offset%) + ldh) + label70)))) + (cond + (wantz + (f2cl-lib:fdo (krow iloz (f2cl-lib:int-add krow nv)) + ((> krow ihiz) + nil) + (tagbody + (setf kln + (min (the f2cl-lib:integer4 nv) + (the f2cl-lib:integer4 + (f2cl-lib:int-add + (f2cl-lib:int-sub ihiz krow) 1)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "N" "N" kln jw jw one + (f2cl-lib:array-slice z-%data% + f2cl-lib:complex16 (krow kwtop) + ((1 ldz) (1 *)) z-%offset%) + ldz v ldv zero wv ldwv) + (declare (ignore var-0 var-1 var-6 var-8 var-11)) + (when var-2 (setf kln var-2)) + (when var-3 (setf jw var-3)) + (when var-4 (setf jw var-4)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldz var-7)) + (when var-9 (setf ldv var-9)) + (when var-10 (setf zero var-10)) + (when var-12 (setf ldwv var-12))) + (zlacpy "A" kln jw wv ldwv + (f2cl-lib:array-slice z-%data% + f2cl-lib:complex16 (krow kwtop) + ((1 ldz) (1 *)) z-%offset%) + ldz) + label80)))))) + (setf nd (f2cl-lib:int-sub jw ns)) + (setf ns (f2cl-lib:int-sub ns infqr)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (f2cl-lib:dcmplx lwkopt 0)) + end_label + (return + (values nil nil nil nil nil nil nil ldh nil nil nil ldz ns nd nil nil ldv + nil nil ldt nil nil ldwv nil lwork))))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -113448,7 +121026,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlaqr4.f} * ===================================================================== SUBROUTINE ZLAQR4( WANTT, WANTZ, N, ILO, IHI, H, LDH, W, ILOZ, $ IHIZ, Z, LDZ, WORK, LWORK, INFO ) @@ -113908,10 +121486,571 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlaqr4} - +(let* + ((ntiny 11) (kexnw 5) (kexsh 6) (wilk1 0.75d0) + (zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16)) + (one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16)) (two 2.0d0)) + (declare (type (f2cl-lib:integer4 11 11) ntiny) + (type (f2cl-lib:integer4 5 5) kexnw) (type (f2cl-lib:integer4 6 6) kexsh) + (type (double-float 0.75d0 0.75d0) wilk1) (type (f2cl-lib:complex16) zero) + (type (f2cl-lib:complex16) one) (type (double-float 2.0d0 2.0d0) two) + (ignorable ntiny kexnw kexsh wilk1 zero one two)) + (defun zlaqr4 (wantt wantz n ilo ihi h ldh w iloz ihiz z ldz work lwork info) + (declare (type f2cl-lib:logical wantz wantt) + (type (f2cl-lib:integer4) info lwork ldz ihiz iloz ldh ihi ilo n) + (type (array f2cl-lib:complex16 (*)) work z w h)) + (f2cl-lib:with-multi-array-data + ((h f2cl-lib:complex16 h-%data% h-%offset%) + (w f2cl-lib:complex16 w-%data% w-%offset%) + (z f2cl-lib:complex16 z-%data% z-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%)) + (labels + ((cabs1 (cdum) + (+ (abs (f2cl-lib:dble cdum)) (abs (f2cl-lib:dimag cdum))))) + (declare + (ftype (function (f2cl-lib:complex16) + (values double-float &rest t)) cabs1)) + (prog + ((zdum (make-array 1 :element-type 'f2cl-lib:complex16)) + (jbcmpz (make-array '(2) :element-type 'character + :initial-element #\space)) + (sorted nil) (i 0) (inf 0) (it 0) (itmax 0) (k 0) (kacc22 0) (kbot 0) + (kdu 0) (ks 0) (kt 0) (ktop 0) (ku 0) (kv 0) (kwh 0) (kwtop 0) (kwv 0) + (ld 0) (ls 0) (lwkopt 0) (ndec 0) (ndfl 0) (nh 0) (nho 0) (nibble 0) + (nmin 0) (ns 0) (nsmax 0) (nsr 0) (nve 0) (nw 0) (nwmax 0) (nwr 0) + (nwupbd 0) (s 0.0d0) (aa #C(0.0d0 0.0d0)) (bb #C(0.0d0 0.0d0)) + (cc #C(0.0d0 0.0d0)) (cdum #C(0.0d0 0.0d0)) (dd #C(0.0d0 0.0d0)) + (det #C(0.0d0 0.0d0)) (rtdisc #C(0.0d0 0.0d0)) (swap #C(0.0d0 0.0d0)) + (tr2 #C(0.0d0 0.0d0))) + (declare (type (array f2cl-lib:complex16 (1)) zdum) + (type (simple-array character (2)) jbcmpz) + (type f2cl-lib:logical sorted) + (type (f2cl-lib:integer4) nwupbd nwr nwmax nw nve nsr nsmax + ns nmin nibble + nho nh ndfl ndec lwkopt ls ld kwv kwtop kwh kv ku ktop kt + ks kdu kbot + kacc22 k itmax it inf i) + (type (double-float) s) + (type (f2cl-lib:complex16) tr2 swap rtdisc det dd cdum cc bb aa)) + (setf info 0) + (cond + ((= n 0) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) one) + (go end_label))) + (cond + ((<= n ntiny) (setf lwkopt 1) + (if (/= lwork -1) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zlahqr wantt wantz n ilo ihi h ldh w iloz ihiz z ldz info) + (declare + (ignore var-0 var-1 var-2 var-3 var-4 var-5 var-7 + var-8 var-9 var-10 + var-11)) + (setf ldh var-6) (setf info var-12)))) + (t + (tagbody (setf info 0) + (cond + (wantt + (f2cl-lib:fset-string (f2cl-lib:fref-string jbcmpz (1 1)) "S")) + (t + (f2cl-lib:fset-string (f2cl-lib:fref-string jbcmpz (1 1)) "E"))) + (cond + (wantz + (f2cl-lib:fset-string (f2cl-lib:fref-string jbcmpz (2 2)) "V")) + (t + (f2cl-lib:fset-string (f2cl-lib:fref-string jbcmpz (2 2)) "N"))) + (setf nwr + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 13 "ZLAQR4" jbcmpz n ilo ihi lwork) + (declare (ignore var-0 var-1)) (when var-2 (setf jbcmpz var-2)) + (when var-3 (setf n var-3)) (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) + (when var-6 (setf lwork var-6)) ret-val)) + (setf nwr (max (the f2cl-lib:integer4 2) + (the f2cl-lib:integer4 nwr))) + (setf nwr + (min (f2cl-lib:int-add (f2cl-lib:int-sub ihi ilo) 1) + (the f2cl-lib:integer4 (truncate (- n 1) 3)) nwr)) + (setf nsr + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 15 "ZLAQR4" jbcmpz n ilo ihi lwork) + (declare (ignore var-0 var-1)) (when var-2 (setf jbcmpz var-2)) + (when var-3 (setf n var-3)) (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) + (when var-6 (setf lwork var-6)) ret-val)) + (setf nsr + (min nsr (the f2cl-lib:integer4 (truncate (+ n 6) 9)) + (f2cl-lib:int-sub ihi ilo))) + (setf nsr + (max (the f2cl-lib:integer4 2) + (the f2cl-lib:integer4 (f2cl-lib:int-sub nsr (mod nsr 2))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12 var-13 var-14 var-15 var-16 var-17 + var-18 var-19 var-20 + var-21 var-22 var-23 var-24) + (zlaqr2 wantt wantz n ilo ihi + (f2cl-lib:int-add nwr 1) h ldh iloz ihiz z + ldz ls ld w h ldh n h ldh n h ldh work -1) + (declare + (ignore var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-8 + var-9 var-10 + var-14 var-15 var-17 var-18 var-20 var-21 var-23 var-24)) + (setf ldh var-7) + (setf ldz var-11) + (setf ls var-12) + (setf ld var-13) + (setf ldh var-16) + (setf ldh var-19) + (setf ldh var-22)) + (setf lwkopt + (max (the f2cl-lib:integer4 (truncate (* 3 nsr) 2)) + (f2cl-lib:int + (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%)))) + (cond + ((= lwork (f2cl-lib:int-sub 1)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (f2cl-lib:dcmplx lwkopt 0)) + (go end_label))) + (setf nmin + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 12 "ZLAQR4" jbcmpz n ilo ihi lwork) + (declare (ignore var-0 var-1)) (when var-2 (setf jbcmpz var-2)) + (when var-3 (setf n var-3)) (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) + (when var-6 (setf lwork var-6)) ret-val)) + (setf nmin + (max (the f2cl-lib:integer4 ntiny) (the f2cl-lib:integer4 nmin))) + (setf nibble + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 14 "ZLAQR4" jbcmpz n ilo ihi lwork) + (declare (ignore var-0 var-1)) (when var-2 (setf jbcmpz var-2)) + (when var-3 (setf n var-3)) (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) + (when var-6 (setf lwork var-6)) ret-val)) + (setf nibble + (max (the f2cl-lib:integer4 0) (the f2cl-lib:integer4 nibble))) + (setf kacc22 + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 16 "ZLAQR4" jbcmpz n ilo ihi lwork) + (declare (ignore var-0 var-1)) (when var-2 (setf jbcmpz var-2)) + (when var-3 (setf n var-3)) (when var-4 (setf ilo var-4)) + (when var-5 (setf ihi var-5)) + (when var-6 (setf lwork var-6)) ret-val)) + (setf kacc22 + (max (the f2cl-lib:integer4 0) (the f2cl-lib:integer4 kacc22))) + (setf kacc22 + (min (the f2cl-lib:integer4 2) (the f2cl-lib:integer4 kacc22))) + (setf nwmax + (min (the f2cl-lib:integer4 (truncate (- n 1) 3)) + (the f2cl-lib:integer4 (truncate lwork 2)))) + (setf nw nwmax) + (setf nsmax + (min (the f2cl-lib:integer4 (truncate (+ n 6) 9)) + (the f2cl-lib:integer4 (truncate (* 2 lwork) 3)))) + (setf nsmax (f2cl-lib:int-sub nsmax (mod nsmax 2))) (setf ndfl 1) + (setf itmax + (f2cl-lib:int-mul + (max (the f2cl-lib:integer4 30) + (the f2cl-lib:integer4 (f2cl-lib:int-mul 2 kexsh))) + (max (the f2cl-lib:integer4 10) + (the f2cl-lib:integer4 + (f2cl-lib:int-add (f2cl-lib:int-sub ihi ilo) 1))))) + (setf kbot ihi) + (f2cl-lib:fdo (it 1 (f2cl-lib:int-add it 1)) + ((> it itmax) nil) + (tagbody + (if (< kbot ilo) (go label80)) + (f2cl-lib:fdo (k kbot + (f2cl-lib:int-add k (f2cl-lib:int-sub 1))) + ((> k + (f2cl-lib:int-add ilo 1)) + nil) + (tagbody + (if + (= + (f2cl-lib:fref h-%data% (k + (f2cl-lib:int-sub k 1)) ((1 ldh) (1 *)) + h-%offset%) + zero) + (go label20)) + label10)) + (setf k ilo) label20 (setf ktop k) + (setf nh (f2cl-lib:int-add + (f2cl-lib:int-sub kbot ktop) 1)) + (setf nwupbd + (min (the f2cl-lib:integer4 nh) + (the f2cl-lib:integer4 nwmax))) + (cond + ((< ndfl kexnw) + (setf nw + (min (the f2cl-lib:integer4 nwupbd) + (the f2cl-lib:integer4 nwr)))) + (t + (setf nw + (min (the f2cl-lib:integer4 nwupbd) + (the f2cl-lib:integer4 + (f2cl-lib:int-mul 2 nw)))))) + (cond + ((< nw nwmax) + (cond ((>= nw (f2cl-lib:int-add nh + (f2cl-lib:int-sub 1))) + (setf nw nh)) + (t (setf kwtop (f2cl-lib:int-add + (f2cl-lib:int-sub kbot nw) 1)) + (if + (> + (cabs1 + (f2cl-lib:fref h-%data% (kwtop + (f2cl-lib:int-sub kwtop 1)) + ((1 ldh) (1 *)) h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub kwtop 1) + (f2cl-lib:int-sub kwtop 2)) + ((1 ldh) (1 *)) h-%offset%))) + (setf nw (f2cl-lib:int-add nw 1))))))) + (cond ((< ndfl kexnw) (setf ndec -1)) + ((or (>= ndec 0) (>= nw nwupbd)) + (setf ndec (f2cl-lib:int-add ndec 1)) + (if (< (f2cl-lib:int-sub nw ndec) 2) (setf ndec 0)) + (setf nw (f2cl-lib:int-sub nw ndec)))) + (setf kv (f2cl-lib:int-add + (f2cl-lib:int-sub n nw) 1)) + (setf kt (f2cl-lib:int-add nw 1)) + (setf nho (f2cl-lib:int-add + (f2cl-lib:int-sub n nw 1 kt) 1)) + (setf kwv (f2cl-lib:int-add nw 2)) + (setf nve (f2cl-lib:int-add + (f2cl-lib:int-sub n nw kwv) 1)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12 var-13 var-14 var-15 var-16 + var-17 var-18 var-19 var-20 + var-21 var-22 var-23 var-24) + (zlaqr2 wantt wantz n ktop kbot nw h ldh + iloz ihiz z ldz ls ld w + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kv 1) + ((1 ldh) (1 *)) h-%offset%) + ldh nho + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kv kt) + ((1 ldh) (1 *)) h-%offset%) + ldh nve + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kwv 1) + ((1 ldh) (1 *)) h-%offset%) + ldh work lwork) + (declare + (ignore var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-8 var-9 var-10 + var-14 var-15 var-17 var-18 var-20 var-21 + var-23 var-24)) + (setf ldh var-7) + (setf ldz var-11) + (setf ls var-12) + (setf ld var-13) + (setf ldh var-16) + (setf ldh var-19) + (setf ldh var-22)) + (setf kbot (f2cl-lib:int-sub kbot ld)) + (setf ks (f2cl-lib:int-add + (f2cl-lib:int-sub kbot ls) 1)) + (cond + ((or (= ld 0) + (and (<= (f2cl-lib:int-mul 100 ld) + (f2cl-lib:int-mul nw nibble)) + (> (f2cl-lib:int-add kbot + (f2cl-lib:int-sub ktop) 1) + (min (the f2cl-lib:integer4 nmin) + (the f2cl-lib:integer4 nwmax))))) + (setf ns + (min (the f2cl-lib:integer4 nsmax) + (the f2cl-lib:integer4 nsr) + (the f2cl-lib:integer4 + (max (the f2cl-lib:integer4 2) + (the f2cl-lib:integer4 + (f2cl-lib:int-sub kbot ktop)))))) + (setf ns (f2cl-lib:int-sub ns (mod ns 2))) + (cond + ((= (mod ndfl kexsh) 0) + (setf ks (f2cl-lib:int-add + (f2cl-lib:int-sub kbot ns) 1)) + (f2cl-lib:fdo (i kbot (f2cl-lib:int-add i + (f2cl-lib:int-sub 2))) + ((> i + (f2cl-lib:int-add ks 1)) + nil) + (tagbody + (setf (f2cl-lib:fref w-%data% (i) + ((1 *)) w-%offset%) + (+ (f2cl-lib:fref h-%data% (i i) + ((1 ldh) (1 *)) h-%offset%) + (* wilk1 + (cabs1 + (f2cl-lib:fref h-%data% (i + (f2cl-lib:int-sub i 1)) + ((1 ldh) (1 *)) h-%offset%))))) + (setf + (f2cl-lib:fref w-%data% + ((f2cl-lib:int-sub i 1)) ((1 *)) + w-%offset%) + (f2cl-lib:fref w-%data% (i) ((1 *)) + w-%offset%)) + label30))) + (t + (cond + ((<= (f2cl-lib:int-add kbot + (f2cl-lib:int-sub ks) 1) + (f2cl-lib:f2cl/ ns 2)) + (setf ks (f2cl-lib:int-add + (f2cl-lib:int-sub kbot ns) 1)) + (setf kt (f2cl-lib:int-add + (f2cl-lib:int-sub n ns) 1)) + (zlacpy "A" ns ns + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (ks ks) + ((1 ldh) (1 *)) h-%offset%) + ldh + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kt 1) + ((1 ldh) (1 *)) h-%offset%) + ldh) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 + var-10 var-11 var-12) + (zlahqr f2cl-lib:%false% f2cl-lib:%false% + ns 1 ns + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kt 1) + ((1 ldh) (1 *)) h-%offset%) + ldh + (f2cl-lib:array-slice w-%data% + f2cl-lib:complex16 (ks) ((1 *)) + w-%offset%) + 1 1 zdum 1 inf) + (declare + (ignore var-0 var-1 var-2 var-3 var-4 + var-5 var-7 var-8 var-9 + var-10 var-11)) + (setf ldh var-6) (setf inf var-12)) + (setf ks (f2cl-lib:int-add ks inf)) + (cond + ((>= ks kbot) + (setf s + (+ + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub kbot 1) + (f2cl-lib:int-sub kbot 1)) + ((1 ldh) (1 *)) h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% (kbot + (f2cl-lib:int-sub kbot 1)) + ((1 ldh) (1 *)) h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub kbot 1) kbot) + ((1 ldh) (1 *)) h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% (kbot kbot) + ((1 ldh) (1 *)) + h-%offset%)))) + (setf aa + (/ + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub kbot 1) + (f2cl-lib:int-sub kbot 1)) + ((1 ldh) (1 *)) h-%offset%) + s)) + (setf cc + (/ + (f2cl-lib:fref h-%data% (kbot + (f2cl-lib:int-sub kbot 1)) + ((1 ldh) (1 *)) h-%offset%) + s)) + (setf bb + (/ + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-sub kbot 1) kbot) + ((1 ldh) (1 *)) h-%offset%) + s)) + (setf dd + (/ + (f2cl-lib:fref h-%data% (kbot kbot) + ((1 ldh) (1 *)) h-%offset%) + s)) + (setf tr2 (/ (+ aa dd) two)) + (setf det (- (* (- aa tr2) (- dd tr2)) + (* bb cc))) + (setf rtdisc (f2cl-lib:fsqrt (- det))) + (setf + (f2cl-lib:fref w-%data% + ((f2cl-lib:int-sub kbot 1)) ((1 *)) + w-%offset%) + (* (+ tr2 rtdisc) s)) + (setf (f2cl-lib:fref w-%data% (kbot) + ((1 *)) w-%offset%) + (* (- tr2 rtdisc) s)) + (setf ks (f2cl-lib:int-sub kbot 1)))))) + (cond + ((> (f2cl-lib:int-add kbot + (f2cl-lib:int-sub ks) 1) ns) + (tagbody (setf sorted f2cl-lib:%false%) + (f2cl-lib:fdo (k kbot (f2cl-lib:int-add k + (f2cl-lib:int-sub 1))) + ((> + k (f2cl-lib:int-add ks 1)) + nil) + (tagbody (if sorted (go label60)) + (setf sorted f2cl-lib:%true%) + (f2cl-lib:fdo (i ks + (f2cl-lib:int-add i 1)) + ((> i + (f2cl-lib:int-add k + (f2cl-lib:int-sub 1))) + nil) + (tagbody + (cond + ((< (cabs1 (f2cl-lib:fref w (i) + ((1 *)))) + (cabs1 (f2cl-lib:fref w + ((f2cl-lib:int-add i 1)) + ((1 *))))) + (setf sorted f2cl-lib:%false%) + (setf swap (f2cl-lib:fref + w-%data% (i) ((1 *)) + w-%offset%)) + (setf (f2cl-lib:fref w-%data% + (i) ((1 *)) w-%offset%) + (f2cl-lib:fref w-%data% + ((f2cl-lib:int-add i 1)) ((1 *)) + w-%offset%)) + (setf + (f2cl-lib:fref w-%data% + ((f2cl-lib:int-add i 1)) ((1 *)) + w-%offset%) + swap))) + label40)) + label50)) + label60))))) + (cond + ((= (f2cl-lib:int-add kbot + (f2cl-lib:int-sub ks) 1) 2) + (cond + ((< + (cabs1 + (+ (f2cl-lib:fref w (kbot) ((1 *))) + (- (f2cl-lib:fref h (kbot kbot) + ((1 ldh) (1 *)))))) + (cabs1 + (+ + (f2cl-lib:fref w + ((f2cl-lib:int-add kbot + (f2cl-lib:int-sub 1))) + ((1 *))) + (- (f2cl-lib:fref h (kbot kbot) + ((1 ldh) (1 *))))))) + (setf + (f2cl-lib:fref w-%data% + ((f2cl-lib:int-sub kbot 1)) ((1 *)) + w-%offset%) + (f2cl-lib:fref w-%data% (kbot) ((1 *)) + w-%offset%))) + (t + (setf (f2cl-lib:fref w-%data% (kbot) + ((1 *)) w-%offset%) + (f2cl-lib:fref w-%data% + ((f2cl-lib:int-sub kbot 1)) ((1 *)) + w-%offset%)))))) + (setf ns + (min (the f2cl-lib:integer4 ns) + (the f2cl-lib:integer4 + (f2cl-lib:int-add (f2cl-lib:int-sub kbot ks) 1)))) + (setf ns (f2cl-lib:int-sub ns (mod ns 2))) + (setf ks (f2cl-lib:int-add + (f2cl-lib:int-sub kbot ns) 1)) + (setf kdu (f2cl-lib:int-sub + (f2cl-lib:int-mul 3 ns) 3)) + (setf ku (f2cl-lib:int-add + (f2cl-lib:int-sub n kdu) 1)) + (setf kwh (f2cl-lib:int-add kdu 1)) + (setf nho + (f2cl-lib:int-add + (f2cl-lib:int-sub + (f2cl-lib:int-add (f2cl-lib:int-sub n kdu) 1) 4 + (f2cl-lib:int-add kdu 1)) + 1)) + (setf kwv (f2cl-lib:int-add kdu 4)) + (setf nve + (f2cl-lib:int-add (f2cl-lib:int-sub n kdu kwv) 1)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12 var-13 var-14 var-15 var-16 + var-17 var-18 var-19 var-20 + var-21 var-22 var-23) + (zlaqr5 wantt wantz kacc22 n ktop kbot ns + (f2cl-lib:array-slice w-%data% + f2cl-lib:complex16 (ks) ((1 *)) + w-%offset%) + h ldh iloz ihiz z ldz work 3 + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (ku 1) + ((1 ldh) (1 *)) h-%offset%) + ldh nve + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (kwv 1) + ((1 ldh) (1 *)) h-%offset%) + ldh nho + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (ku kwh) + ((1 ldh) (1 *)) h-%offset%) + ldh) + (declare + (ignore var-7 var-8 var-12 var-14 var-15 + var-16 var-19 var-22)) + (when var-0 (setf wantt var-0)) + (when var-1 (setf wantz var-1)) + (when var-2 (setf kacc22 var-2)) + (when var-3 (setf n var-3)) + (when var-4 (setf ktop var-4)) + (when var-5 (setf kbot var-5)) + (when var-6 (setf ns var-6)) + (when var-9 (setf ldh var-9)) + (when var-10 (setf iloz var-10)) + (when var-11 (setf ihiz var-11)) + (when var-13 (setf ldz var-13)) + (when var-17 (setf ldh var-17)) + (when var-18 (setf nve var-18)) + (when var-20 (setf ldh var-20)) + (when var-21 (setf nho var-21)) + (when var-23 (setf ldh var-23))))) + (cond ((> ld 0) (setf ndfl 1)) + (t (setf ndfl (f2cl-lib:int-add ndfl 1)))) + label70)) + (setf info kbot) label80))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (f2cl-lib:dcmplx lwkopt 0)) + end_label + (return + (values wantt wantz n ilo ihi nil ldh nil iloz ihiz nil ldz nil lwork + info))))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -114146,7 +122285,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlaqr5.f} * ===================================================================== SUBROUTINE ZLAQR5( WANTT, WANTZ, KACC22, N, KTOP, KBOT, NSHFTS, S, $ H, LDH, ILOZ, IHIZ, Z, LDZ, V, LDV, U, LDU, NV, @@ -114810,10 +122949,1593 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlaqr5} - +(let* + ((zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16)) + (one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16)) (rzero 0.0d0) + (rone 1.0d0)) + (declare (type (f2cl-lib:complex16) zero) (type (f2cl-lib:complex16) one) + (type (double-float 0.0d0 0.0d0) rzero) + (type (double-float 1.0d0 1.0d0) rone) (ignorable zero one rzero rone)) + (defun zlaqr5 + (wantt wantz kacc22 n ktop kbot nshfts s h ldh iloz ihiz z ldz v ldv u ldu nv + wv ldwv nh wh ldwh) + (declare (type f2cl-lib:logical wantz wantt) + (type (f2cl-lib:integer4) ldwh nh ldwv nv ldu ldv ldz ihiz iloz ldh nshfts + kbot ktop n kacc22) + (type (array f2cl-lib:complex16 (*)) wh wv u v z h s)) + (f2cl-lib:with-multi-array-data + ((s f2cl-lib:complex16 s-%data% s-%offset%) + (h f2cl-lib:complex16 h-%data% h-%offset%) + (z f2cl-lib:complex16 z-%data% z-%offset%) + (v f2cl-lib:complex16 v-%data% v-%offset%) + (u f2cl-lib:complex16 u-%data% u-%offset%) + (wv f2cl-lib:complex16 wv-%data% wv-%offset%) + (wh f2cl-lib:complex16 wh-%data% wh-%offset%)) + (labels + ((cabs1 (cdum) (+ (abs (f2cl-lib:dble cdum)) + (abs (f2cl-lib:dimag cdum))))) + (declare + (ftype (function (f2cl-lib:complex16) + (values double-float &rest t)) cabs1)) + (prog + ((vt (make-array 3 :element-type 'f2cl-lib:complex16)) (accum nil) + (blk22 nil) (bmp22 nil) (i2 0) (i4 0) (incol 0) (j 0) (j2 0) (j4 0) + (jbot 0) + (jcol 0) (jlen 0) (jrow 0) (jtop 0) (k 0) (k1 0) (kdu 0) (kms 0) + (knz 0) + (krcol 0) (kzs 0) (m 0) (m22 0) (mbot 0) (mend 0) (mstart 0) (mtop 0) + (nbmps 0) (ndcol 0) (ns 0) (nu 0) (h11 0.0d0) (h12 0.0d0) (h21 0.0d0) + (h22 0.0d0) (safmax 0.0d0) (safmin 0.0d0) (scl 0.0d0) (smlnum 0.0d0) + (tst1 0.0d0) (tst2 0.0d0) (ulp 0.0d0) (alpha #C(0.0d0 0.0d0)) + (beta #C(0.0d0 0.0d0)) (cdum #C(0.0d0 0.0d0)) + (refsum #C(0.0d0 0.0d0))) + (declare (type (array f2cl-lib:complex16 (3)) vt) + (type f2cl-lib:logical bmp22 blk22 accum) + (type (f2cl-lib:integer4) nu ns ndcol nbmps mtop mstart + mend mbot m22 m kzs + krcol knz kms kdu k1 k jtop jrow jlen jcol jbot j4 j2 j incol i4 i2) + (type (double-float) ulp tst2 tst1 smlnum scl safmin safmax + h22 h21 h12 h11) + (type (f2cl-lib:complex16) refsum cdum beta alpha)) + (if (< nshfts 2) (go end_label)) (if (>= ktop kbot) (go end_label)) + (setf ns (f2cl-lib:int-sub nshfts (mod nshfts 2))) + (setf safmin (dlamch "SAFE MINIMUM")) (setf safmax (/ rone safmin)) + (multiple-value-bind (var-0 var-1) + (dlabad safmin safmax) (declare (ignore)) + (when var-0 (setf safmin var-0)) (when var-1 (setf safmax var-1))) + (setf ulp (dlamch "PRECISION")) + (setf smlnum (* safmin (/ (f2cl-lib:dble n) ulp))) + (setf accum (or (= kacc22 1) (= kacc22 2))) + (setf blk22 (and (> ns 2) (= kacc22 2))) + (if (<= (f2cl-lib:int-add ktop 2) kbot) + (setf + (f2cl-lib:fref h-%data% ((f2cl-lib:int-add ktop 2) ktop) + ((1 ldh) (1 *)) + h-%offset%) + zero)) + (setf nbmps (the f2cl-lib:integer4 (truncate ns 2))) + (setf kdu (f2cl-lib:int-sub (f2cl-lib:int-mul 6 nbmps) 3)) + (f2cl-lib:fdo (incol + (f2cl-lib:int-add + (f2cl-lib:int-mul 3 (f2cl-lib:int-add 1 + (f2cl-lib:int-sub nbmps))) ktop + (f2cl-lib:int-sub 1)) + (f2cl-lib:int-add incol + (f2cl-lib:int-add (f2cl-lib:int-mul 3 nbmps) + (f2cl-lib:int-sub 2)))) + ((> + incol (f2cl-lib:int-add kbot (f2cl-lib:int-sub 2))) + nil) + (tagbody (setf ndcol (f2cl-lib:int-add incol kdu)) + (if accum + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (zlaset "ALL" kdu kdu zero one u ldu) + (declare (ignore var-0 var-5)) + (when var-1 (setf kdu var-1)) + (when var-2 (setf kdu var-2)) + (when var-3 (setf zero var-3)) + (when var-4 (setf one var-4)) + (when var-6 (setf ldu var-6)))) + (f2cl-lib:fdo (krcol incol (f2cl-lib:int-add krcol 1)) + ((> krcol + (min + (the f2cl-lib:integer4 + (f2cl-lib:int-add incol (f2cl-lib:int-mul 3 nbmps) + (f2cl-lib:int-sub 3))) + (the f2cl-lib:integer4 + (f2cl-lib:int-add kbot (f2cl-lib:int-sub 2))))) + nil) + (tagbody + (setf mtop + (max 1 (+ (the f2cl-lib:integer4 + (truncate (+ (- ktop 1 krcol) 2) 3)) 1))) + (setf mbot (min nbmps (the f2cl-lib:integer4 + (truncate (- kbot krcol) 3)))) + (setf m22 (f2cl-lib:int-add mbot 1)) + (setf bmp22 + (and (< mbot nbmps) + (= (f2cl-lib:int-add krcol + (f2cl-lib:int-mul 3 (f2cl-lib:int-sub m22 1))) + (f2cl-lib:int-sub kbot 2)))) + (f2cl-lib:fdo (m mtop (f2cl-lib:int-add m 1)) + ((> m mbot) nil) + (tagbody + (setf k + (f2cl-lib:int-add krcol + (f2cl-lib:int-mul 3 (f2cl-lib:int-sub m 1)))) + (cond + ((= k (f2cl-lib:int-add ktop (f2cl-lib:int-sub 1))) + (zlaqr1 3 + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 (ktop ktop) + ((1 ldh) (1 *)) h-%offset%) + ldh + (f2cl-lib:fref s-%data% + ((f2cl-lib:int-sub (f2cl-lib:int-mul 2 m) 1)) + ((1 *)) s-%offset%) + (f2cl-lib:fref s-%data% + ((f2cl-lib:int-mul 2 m)) ((1 *)) s-%offset%) + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (1 m) ((1 ldv) (1 *)) + v-%offset%)) + (setf alpha (f2cl-lib:fref v-%data% (1 m) + ((1 ldv) (1 *)) v-%offset%)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zlarfg 3 alpha + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (2 m) + ((1 ldv) (1 *)) v-%offset%) + 1 + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (1 m) + ((1 ldv) (1 *)) v-%offset%)) + (declare (ignore var-0 var-2 var-3 var-4)) + (when var-1 (setf alpha var-1)))) + (t + (setf beta + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) k) ((1 ldh) (1 *)) + h-%offset%)) + (setf (f2cl-lib:fref v-%data% (2 m) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) k) ((1 ldh) (1 *)) + h-%offset%)) + (setf (f2cl-lib:fref v-%data% (3 m) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 3) k) ((1 ldh) (1 *)) + h-%offset%)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zlarfg 3 beta + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (2 m) + ((1 ldv) (1 *)) v-%offset%) + 1 + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (1 m) + ((1 ldv) (1 *)) v-%offset%)) + (declare (ignore var-0 var-2 var-3 var-4)) + (when var-1 (setf beta var-1))) + (cond + ((or + (/= (f2cl-lib:fref h + ((f2cl-lib:int-add k 3) k) ((1 ldh) (1 *))) + zero) + (/= + (f2cl-lib:fref h + ((f2cl-lib:int-add k 3) (f2cl-lib:int-add k 1)) + ((1 ldh) (1 *))) + zero) + (= + (f2cl-lib:fref h + ((f2cl-lib:int-add k 3) (f2cl-lib:int-add k 2)) + ((1 ldh) (1 *))) + zero)) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) k) ((1 ldh) (1 *)) + h-%offset%) + beta) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) k) ((1 ldh) (1 *)) + h-%offset%) + zero) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 3) k) ((1 ldh) (1 *)) + h-%offset%) + zero)) + (t + (zlaqr1 3 + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 + ((+ k 1) (f2cl-lib:int-add k 1)) + ((1 ldh) (1 *)) h-%offset%) + ldh + (f2cl-lib:fref s-%data% + ((f2cl-lib:int-sub (f2cl-lib:int-mul 2 m) 1)) + ((1 *)) s-%offset%) + (f2cl-lib:fref s-%data% + ((f2cl-lib:int-mul 2 m)) ((1 *)) s-%offset%) + vt) + (setf alpha (f2cl-lib:fref vt (1) ((1 3)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4) + (zlarfg 3 alpha + (f2cl-lib:array-slice vt + f2cl-lib:complex16 (2) ((1 3))) 1 + (f2cl-lib:array-slice vt + f2cl-lib:complex16 (1) ((1 3)))) + (declare (ignore var-0 var-2 var-3 var-4)) + (when var-1 (setf alpha var-1))) + (setf refsum + (coerce + (* (f2cl-lib:dconjg + (f2cl-lib:fref vt (1) ((1 3)))) + (+ + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) k) ((1 ldh) (1 *)) + h-%offset%) + (* (f2cl-lib:dconjg + (f2cl-lib:fref vt (2) ((1 3)))) + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) k) + ((1 ldh) (1 *)) h-%offset%)))) + 'f2cl-lib:complex16)) + (cond + ((> + (+ + (cabs1 + (+ (f2cl-lib:fref h + ((f2cl-lib:int-add k 2) k) + ((1 ldh) (1 *))) + (* -1 refsum (f2cl-lib:fref vt (2) + ((1 3)))))) + (cabs1 (* refsum (f2cl-lib:fref vt (3) + ((1 3)))))) + (* ulp + (+ (cabs1 (f2cl-lib:fref h (k k) + ((1 ldh) (1 *)))) + (cabs1 + (f2cl-lib:fref h + ((f2cl-lib:int-add k 1) + (f2cl-lib:int-add k 1)) + ((1 ldh) (1 *)))) + (cabs1 + (f2cl-lib:fref h + ((f2cl-lib:int-add k 2) + (f2cl-lib:int-add k 2)) + ((1 ldh) (1 *))))))) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) k) ((1 ldh) (1 *)) + h-%offset%) + beta) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) k) ((1 ldh) (1 *)) + h-%offset%) + zero) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 3) k) ((1 ldh) (1 *)) + h-%offset%) + zero)) + (t + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) k) ((1 ldh) (1 *)) + h-%offset%) + (- + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) k) ((1 ldh) (1 *)) + h-%offset%) + refsum)) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) k) ((1 ldh) (1 *)) + h-%offset%) + zero) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 3) k) ((1 ldh) (1 *)) + h-%offset%) + zero) + (setf (f2cl-lib:fref v-%data% (1 m) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref vt (1) ((1 3)))) + (setf (f2cl-lib:fref v-%data% (2 m) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref vt (2) ((1 3)))) + (setf (f2cl-lib:fref v-%data% (3 m) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref vt (3) ((1 3)))))))))) + label10)) + (setf k + (f2cl-lib:int-add krcol (f2cl-lib:int-mul 3 + (f2cl-lib:int-sub m22 1)))) + (cond + (bmp22 + (cond + ((= k (f2cl-lib:int-add ktop (f2cl-lib:int-sub 1))) + (zlaqr1 2 + (f2cl-lib:array-slice h-%data% f2cl-lib:complex16 + ((+ k 1) (f2cl-lib:int-add k 1)) + ((1 ldh) (1 *)) h-%offset%) + ldh + (f2cl-lib:fref s-%data% + ((f2cl-lib:int-sub (f2cl-lib:int-mul 2 m22) 1)) + ((1 *)) s-%offset%) + (f2cl-lib:fref s-%data% + ((f2cl-lib:int-mul 2 m22)) ((1 *)) s-%offset%) + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (1 m22) + ((1 ldv) (1 *)) v-%offset%)) + (setf beta (f2cl-lib:fref v-%data% (1 m22) + ((1 ldv) (1 *)) v-%offset%)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zlarfg 2 beta + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (2 m22) + ((1 ldv) (1 *)) v-%offset%) + 1 + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (1 m22) + ((1 ldv) (1 *)) v-%offset%)) + (declare (ignore var-0 var-2 var-3 var-4)) + (when var-1 (setf beta var-1)))) + (t + (setf beta + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) k) ((1 ldh) (1 *)) + h-%offset%)) + (setf (f2cl-lib:fref v-%data% (2 m22) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) k) ((1 ldh) (1 *)) + h-%offset%)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zlarfg 2 beta + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (2 m22) + ((1 ldv) (1 *)) v-%offset%) + 1 + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (1 m22) + ((1 ldv) (1 *)) v-%offset%)) + (declare (ignore var-0 var-2 var-3 var-4)) + (when var-1 (setf beta var-1))) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) k) ((1 ldh) (1 *)) + h-%offset%) + beta) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) k) ((1 ldh) (1 *)) + h-%offset%) + zero))))) + (cond + (accum + (setf jbot + (min (the f2cl-lib:integer4 ndcol) + (the f2cl-lib:integer4 kbot)))) + (wantt (setf jbot n)) (t (setf jbot kbot))) + (f2cl-lib:fdo (j + (max (the f2cl-lib:integer4 ktop) + (the f2cl-lib:integer4 krcol)) + (f2cl-lib:int-add j 1)) + ((> j jbot) nil) + (tagbody + (setf mend + (min mbot + (the f2cl-lib:integer4 + (truncate (+ (- j krcol) 2) 3)))) + (f2cl-lib:fdo (m mtop (f2cl-lib:int-add m 1)) + ((> m mend) nil) + (tagbody + (setf k + (f2cl-lib:int-add krcol + (f2cl-lib:int-mul 3 (f2cl-lib:int-sub m 1)))) + (setf refsum + (coerce + (* + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (1 m) + ((1 ldv) (1 *)) v-%offset%)) + (+ + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) j) ((1 ldh) (1 *)) + h-%offset%) + (* + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (2 m) + ((1 ldv) (1 *)) v-%offset%)) + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) j) ((1 ldh) (1 *)) + h-%offset%)) + (* + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (3 m) + ((1 ldv) (1 *)) v-%offset%)) + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 3) j) ((1 ldh) (1 *)) + h-%offset%)))) + 'f2cl-lib:complex16)) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) j) ((1 ldh) (1 *)) + h-%offset%) + (- + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) j) ((1 ldh) (1 *)) + h-%offset%) + refsum)) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) j) ((1 ldh) (1 *)) + h-%offset%) + (- + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) j) ((1 ldh) (1 *)) + h-%offset%) + (* refsum (f2cl-lib:fref v-%data% (2 m) + ((1 ldv) (1 *)) v-%offset%)))) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 3) j) ((1 ldh) (1 *)) + h-%offset%) + (- + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 3) j) ((1 ldh) (1 *)) + h-%offset%) + (* refsum (f2cl-lib:fref v-%data% (3 m) + ((1 ldv) (1 *)) v-%offset%)))) + label20)) + label30)) + (cond + (bmp22 + (setf k + (f2cl-lib:int-add krcol + (f2cl-lib:int-mul 3 (f2cl-lib:int-sub m22 1)))) + (f2cl-lib:fdo (j + (max (the f2cl-lib:integer4 (f2cl-lib:int-add k 1)) + (the f2cl-lib:integer4 ktop)) + (f2cl-lib:int-add j 1)) + ((> j jbot) nil) + (tagbody + (setf refsum + (coerce + (* + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (1 m22) + ((1 ldv) (1 *)) v-%offset%)) + (+ + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) j) ((1 ldh) (1 *)) + h-%offset%) + (* + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (2 m22) + ((1 ldv) (1 *)) v-%offset%)) + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) j) ((1 ldh) (1 *)) + h-%offset%)))) + 'f2cl-lib:complex16)) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) j) ((1 ldh) (1 *)) + h-%offset%) + (- + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) j) ((1 ldh) (1 *)) + h-%offset%) + refsum)) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) j) ((1 ldh) (1 *)) + h-%offset%) + (- + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) j) ((1 ldh) (1 *)) + h-%offset%) + (* refsum + (f2cl-lib:fref v-%data% (2 m22) + ((1 ldv) (1 *)) v-%offset%)))) + label40)))) + (cond + (accum + (setf jtop + (max (the f2cl-lib:integer4 ktop) + (the f2cl-lib:integer4 incol)))) + (wantt (setf jtop 1)) (t (setf jtop ktop))) + (f2cl-lib:fdo (m mtop (f2cl-lib:int-add m 1)) + ((> m mbot) nil) + (tagbody + (cond + ((/= (f2cl-lib:fref v (1 m) ((1 ldv) (1 *))) zero) + (setf k + (f2cl-lib:int-add krcol + (f2cl-lib:int-mul 3 (f2cl-lib:int-sub m 1)))) + (f2cl-lib:fdo (j jtop (f2cl-lib:int-add j 1)) + ((> j + (min (the f2cl-lib:integer4 kbot) + (the f2cl-lib:integer4 (f2cl-lib:int-add k 3)))) + nil) + (tagbody + (setf refsum + (* (f2cl-lib:fref v-%data% (1 m) + ((1 ldv) (1 *)) v-%offset%) + (+ + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%) + (* (f2cl-lib:fref v-%data% (2 m) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 2)) ((1 ldh) (1 *)) + h-%offset%)) + (* (f2cl-lib:fref v-%data% (3 m) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 3)) ((1 ldh) (1 *)) + h-%offset%))))) + (setf + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%) + (- + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%) + refsum)) + (setf + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 2)) ((1 ldh) (1 *)) + h-%offset%) + (- + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 2)) ((1 ldh) (1 *)) + h-%offset%) + (* refsum + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (2 m) + ((1 ldv) (1 *)) v-%offset%))))) + (setf + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 3)) ((1 ldh) (1 *)) + h-%offset%) + (- + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 3)) ((1 ldh) (1 *)) + h-%offset%) + (* refsum + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (3 m) + ((1 ldv) (1 *)) v-%offset%))))) + label50)) + (cond + (accum (setf kms (f2cl-lib:int-sub k incol)) + (f2cl-lib:fdo (j + (max (the f2cl-lib:integer4 1) + (the f2cl-lib:integer4 + (f2cl-lib:int-add ktop + (f2cl-lib:int-sub incol)))) + (f2cl-lib:int-add j 1)) + ((> j kdu) nil) + (tagbody + (setf refsum + (* (f2cl-lib:fref v-%data% (1 m) + ((1 ldv) (1 *)) v-%offset%) + (+ + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 1)) + ((1 ldu) (1 *)) u-%offset%) + (* (f2cl-lib:fref v-%data% (2 m) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 2)) + ((1 ldu) (1 *)) u-%offset%)) + (* (f2cl-lib:fref v-%data% (3 m) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 3)) + ((1 ldu) (1 *)) u-%offset%))))) + (setf + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 1)) ((1 ldu) (1 *)) + u-%offset%) + (- + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 1)) + ((1 ldu) (1 *)) u-%offset%) + refsum)) + (setf + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 2)) ((1 ldu) (1 *)) + u-%offset%) + (- + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 2)) + ((1 ldu) (1 *)) u-%offset%) + (* refsum + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (2 m) + ((1 ldv) (1 *)) v-%offset%))))) + (setf + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 3)) ((1 ldu) (1 *)) + u-%offset%) + (- + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 3)) + ((1 ldu) (1 *)) u-%offset%) + (* refsum + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (3 m) ((1 ldv) + (1 *)) v-%offset%))))) + label60))) + (wantz + (f2cl-lib:fdo (j iloz (f2cl-lib:int-add j 1)) + ((> j ihiz) nil) + (tagbody + (setf refsum + (* (f2cl-lib:fref v-%data% (1 m) + ((1 ldv) (1 *)) v-%offset%) + (+ + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 1)) ((1 ldz) (1 *)) + z-%offset%) + (* (f2cl-lib:fref v-%data% (2 m) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 2)) + ((1 ldz) (1 *)) z-%offset%)) + (* (f2cl-lib:fref v-%data% (3 m) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 3)) + ((1 ldz) (1 *)) z-%offset%))))) + (setf + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 1)) ((1 ldz) (1 *)) + z-%offset%) + (- + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 1)) ((1 ldz) (1 *)) + z-%offset%) + refsum)) + (setf + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 2)) ((1 ldz) (1 *)) + z-%offset%) + (- + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 2)) ((1 ldz) (1 *)) + z-%offset%) + (* refsum + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (2 m) + ((1 ldv) (1 *)) v-%offset%))))) + (setf + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 3)) ((1 ldz) (1 *)) + z-%offset%) + (- + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 3)) ((1 ldz) (1 *)) + z-%offset%) + (* refsum + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (3 m) + ((1 ldv) (1 *)) v-%offset%))))) + label70)))))) + label80)) + (setf k + (f2cl-lib:int-add krcol + (f2cl-lib:int-mul 3 (f2cl-lib:int-sub m22 1)))) + (cond + (bmp22 + (cond + ((/= (f2cl-lib:fref v (1 m22) ((1 ldv) (1 *))) zero) + (f2cl-lib:fdo (j jtop (f2cl-lib:int-add j 1)) + ((> j + (min (the f2cl-lib:integer4 kbot) + (the f2cl-lib:integer4 + (f2cl-lib:int-add k 3)))) + nil) + (tagbody + (setf refsum + (* (f2cl-lib:fref v-%data% (1 m22) + ((1 ldv) (1 *)) v-%offset%) + (+ + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%) + (* (f2cl-lib:fref v-%data% (2 m22) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 2)) ((1 ldh) (1 *)) + h-%offset%))))) + (setf + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%) + (- + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%) + refsum)) + (setf + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 2)) ((1 ldh) (1 *)) + h-%offset%) + (- + (f2cl-lib:fref h-%data% (j + (f2cl-lib:int-add k 2)) ((1 ldh) (1 *)) + h-%offset%) + (* refsum + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (2 m22) + ((1 ldv) (1 *)) v-%offset%))))) + label90)) + (cond + (accum (setf kms (f2cl-lib:int-sub k incol)) + (f2cl-lib:fdo (j + (max (the f2cl-lib:integer4 1) + (the f2cl-lib:integer4 + (f2cl-lib:int-add ktop + (f2cl-lib:int-sub incol)))) + (f2cl-lib:int-add j 1)) + ((> j kdu) nil) + (tagbody + (setf refsum + (* (f2cl-lib:fref v-%data% (1 m22) + ((1 ldv) (1 *)) v-%offset%) + (+ + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 1)) + ((1 ldu) (1 *)) u-%offset%) + (* (f2cl-lib:fref v-%data% (2 m22) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 2)) + ((1 ldu) (1 *)) u-%offset%))))) + (setf + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 1)) + ((1 ldu) (1 *)) u-%offset%) + (- + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 1)) + ((1 ldu) (1 *)) u-%offset%) + refsum)) + (setf + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 2)) + ((1 ldu) (1 *)) u-%offset%) + (- + (f2cl-lib:fref u-%data% (j + (f2cl-lib:int-add kms 2)) + ((1 ldu) (1 *)) u-%offset%) + (* refsum + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (2 m22) + ((1 ldv) (1 *)) v-%offset%))))) + label100))) + (wantz + (f2cl-lib:fdo (j iloz (f2cl-lib:int-add j 1)) + ((> j ihiz) nil) + (tagbody + (setf refsum + (* (f2cl-lib:fref v-%data% (1 m22) + ((1 ldv) (1 *)) v-%offset%) + (+ + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 1)) + ((1 ldz) (1 *)) z-%offset%) + (* (f2cl-lib:fref v-%data% (2 m22) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 2)) + ((1 ldz) (1 *)) z-%offset%))))) + (setf + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 1)) ((1 ldz) (1 *)) + z-%offset%) + (- + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 1)) ((1 ldz) (1 *)) + z-%offset%) + refsum)) + (setf + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 2)) ((1 ldz) (1 *)) + z-%offset%) + (- + (f2cl-lib:fref z-%data% (j + (f2cl-lib:int-add k 2)) ((1 ldz) (1 *)) + z-%offset%) + (* refsum + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (2 m22) + ((1 ldv) (1 *)) v-%offset%))))) + label110)))))))) + (setf mstart mtop) + (if + (< + (f2cl-lib:int-add krcol + (f2cl-lib:int-mul 3 (f2cl-lib:int-sub mstart 1))) + ktop) + (setf mstart (f2cl-lib:int-add mstart 1))) + (setf mend mbot) + (if bmp22 (setf mend (f2cl-lib:int-add mend 1))) + (if (= krcol (f2cl-lib:int-sub kbot 2)) + (setf mend (f2cl-lib:int-add mend 1))) + (f2cl-lib:fdo (m mstart (f2cl-lib:int-add m 1)) + ((> m mend) nil) + (tagbody + (setf k + (min (the f2cl-lib:integer4 (f2cl-lib:int-sub kbot 1)) + (the f2cl-lib:integer4 + (f2cl-lib:int-add krcol + (f2cl-lib:int-mul 3 (f2cl-lib:int-sub m 1)))))) + (cond + ((/= (f2cl-lib:fref h ((f2cl-lib:int-add k 1) k) + ((1 ldh) (1 *))) zero) + (setf tst1 + (+ (cabs1 (f2cl-lib:fref h-%data% (k k) + ((1 ldh) (1 *)) h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%)))) + (cond + ((= tst1 rzero) + (if (>= k (f2cl-lib:int-add ktop 1)) + (setf tst1 + (+ tst1 + (cabs1 + (f2cl-lib:fref h-%data% (k + (f2cl-lib:int-sub k 1)) ((1 ldh) (1 *)) + h-%offset%))))) + (if (>= k (f2cl-lib:int-add ktop 2)) + (setf tst1 + (+ tst1 + (cabs1 + (f2cl-lib:fref h-%data% (k + (f2cl-lib:int-sub k 2)) ((1 ldh) (1 *)) + h-%offset%))))) + (if (>= k (f2cl-lib:int-add ktop 3)) + (setf tst1 + (+ tst1 + (cabs1 + (f2cl-lib:fref h-%data% (k + (f2cl-lib:int-sub k 3)) ((1 ldh) (1 *)) + h-%offset%))))) + (if (<= k (f2cl-lib:int-sub kbot 2)) + (setf tst1 + (+ tst1 + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 2) + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%))))) + (if (<= k (f2cl-lib:int-sub kbot 3)) + (setf tst1 + (+ tst1 + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 3) + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%))))) + (if (<= k (f2cl-lib:int-sub kbot 4)) + (setf tst1 + (+ tst1 + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 4) + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%))))))) + (cond + ((<= + (cabs1 (f2cl-lib:fref h + ((f2cl-lib:int-add k 1) k) ((1 ldh) (1 *)))) + (max smlnum (* ulp tst1))) + (setf h12 + (max + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) k) ((1 ldh) (1 *)) + h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% (k + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%)))) + (setf h21 + (min + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) k) ((1 ldh) (1 *)) + h-%offset%)) + (cabs1 + (f2cl-lib:fref h-%data% (k + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%)))) + (setf h11 + (max + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%)) + (cabs1 + (- (f2cl-lib:fref h-%data% (k k) + ((1 ldh) (1 *)) h-%offset%) + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%))))) + (setf h22 + (min + (cabs1 + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%)) + (cabs1 + (- (f2cl-lib:fref h-%data% (k k) + ((1 ldh) (1 *)) h-%offset%) + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) + (f2cl-lib:int-add k 1)) ((1 ldh) (1 *)) + h-%offset%))))) + (setf scl (+ h11 h12)) + (setf tst2 (* h22 (/ h11 scl))) + (if + (or (= tst2 rzero) + (<= (* h21 (/ h12 scl)) + (max smlnum (* ulp tst2)))) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 1) k) ((1 ldh) (1 *)) + h-%offset%) + zero)))))) + label120)) + (setf mend + (min nbmps + (the f2cl-lib:integer4 (truncate (- kbot krcol 1) 3)))) + (f2cl-lib:fdo (m mtop (f2cl-lib:int-add m 1)) + ((> m mend) nil) + (tagbody + (setf k + (f2cl-lib:int-add krcol + (f2cl-lib:int-mul 3 (f2cl-lib:int-sub m 1)))) + (setf refsum + (* (f2cl-lib:fref v-%data% (1 m) ((1 ldv) (1 *)) + v-%offset%) + (f2cl-lib:fref v-%data% (3 m) + ((1 ldv) (1 *)) v-%offset%) + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 4) (f2cl-lib:int-add k 3)) + ((1 ldh) (1 *)) h-%offset%))) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 4) (f2cl-lib:int-add k 1)) + ((1 ldh) (1 *)) h-%offset%) + (- refsum)) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 4) (f2cl-lib:int-add k 2)) + ((1 ldh) (1 *)) h-%offset%) + (coerce + (* (- refsum) + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (2 m) + ((1 ldv) (1 *)) v-%offset%))) + 'f2cl-lib:complex16)) + (setf + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 4) (f2cl-lib:int-add k 3)) + ((1 ldh) (1 *)) h-%offset%) + (- + (f2cl-lib:fref h-%data% + ((f2cl-lib:int-add k 4) (f2cl-lib:int-add k 3)) + ((1 ldh) (1 *)) h-%offset%) + (* refsum + (f2cl-lib:dconjg + (f2cl-lib:fref v-%data% (3 m) + ((1 ldv) (1 *)) v-%offset%))))) + label130)) + label140)) + (cond + (accum + (cond (wantt (setf jtop 1) (setf jbot n)) + (t (setf jtop ktop) (setf jbot kbot))) + (cond + ((or (not blk22) (< incol ktop) + (> ndcol kbot) (<= ns 2)) + (setf k1 + (max (the f2cl-lib:integer4 1) + (the f2cl-lib:integer4 + (f2cl-lib:int-sub ktop incol)))) + (setf nu + (f2cl-lib:int-add + (f2cl-lib:int-sub kdu + (max (the f2cl-lib:integer4 0) + (the f2cl-lib:integer4 + (f2cl-lib:int-sub ndcol kbot))) + k1) + 1)) + (f2cl-lib:fdo (jcol + (f2cl-lib:int-add + (min (the f2cl-lib:integer4 ndcol) + (the f2cl-lib:integer4 kbot)) 1) + (f2cl-lib:int-add jcol nh)) + ((> jcol jbot) nil) + (tagbody + (setf jlen + (min (the f2cl-lib:integer4 nh) + (the f2cl-lib:integer4 + (f2cl-lib:int-add + (f2cl-lib:int-sub jbot jcol) 1)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "C" "N" nu jlen nu one + (f2cl-lib:array-slice u-%data% + f2cl-lib:complex16 (k1 k1) + ((1 ldu) (1 *)) u-%offset%) + ldu + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 ((+ incol k1) jcol) + ((1 ldh) (1 *)) h-%offset%) + ldh zero wh ldwh) + (declare (ignore var-0 var-1 var-6 var-8 + var-11)) + (when var-2 (setf nu var-2)) + (when var-3 (setf jlen var-3)) + (when var-4 (setf nu var-4)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldu var-7)) + (when var-9 (setf ldh var-9)) + (when var-10 (setf zero var-10)) + (when var-12 (setf ldwh var-12))) + (zlacpy "ALL" nu jlen wh ldwh + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 ((+ incol k1) jcol) + ((1 ldh) (1 *)) h-%offset%) + ldh) + label150)) + (f2cl-lib:fdo (jrow jtop (f2cl-lib:int-add jrow nv)) + ((> jrow + (f2cl-lib:int-add + (max (the f2cl-lib:integer4 ktop) + (the f2cl-lib:integer4 incol)) + (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf jlen + (min (the f2cl-lib:integer4 nv) + (the f2cl-lib:integer4 + (f2cl-lib:int-sub + (max (the f2cl-lib:integer4 ktop) + (the f2cl-lib:integer4 incol)) + jrow)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "N" "N" jlen nu nu one + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol k1)) + ((1 ldh) (1 *)) h-%offset%) + ldh + (f2cl-lib:array-slice u-%data% + f2cl-lib:complex16 (k1 k1) + ((1 ldu) (1 *)) u-%offset%) + ldu zero wv ldwv) + (declare (ignore var-0 var-1 var-6 + var-8 var-11)) + (when var-2 (setf jlen var-2)) + (when var-3 (setf nu var-3)) + (when var-4 (setf nu var-4)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldh var-7)) + (when var-9 (setf ldu var-9)) + (when var-10 (setf zero var-10)) + (when var-12 (setf ldwv var-12))) + (zlacpy "ALL" jlen nu wv ldwv + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol k1)) + ((1 ldh) (1 *)) h-%offset%) + ldh) + label160)) + (cond + (wantz + (f2cl-lib:fdo (jrow iloz (f2cl-lib:int-add jrow nv)) + ((> jrow ihiz) + nil) + (tagbody + (setf jlen + (min (the f2cl-lib:integer4 nv) + (the f2cl-lib:integer4 + (f2cl-lib:int-add + (f2cl-lib:int-sub ihiz jrow) 1)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "N" "N" jlen nu nu one + (f2cl-lib:array-slice z-%data% + f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol k1)) + ((1 ldz) (1 *)) z-%offset%) + ldz + (f2cl-lib:array-slice u-%data% + f2cl-lib:complex16 (k1 k1) + ((1 ldu) (1 *)) u-%offset%) + ldu zero wv ldwv) + (declare (ignore var-0 var-1 var-6 + var-8 var-11)) + (when var-2 (setf jlen var-2)) + (when var-3 (setf nu var-3)) + (when var-4 (setf nu var-4)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldz var-7)) + (when var-9 (setf ldu var-9)) + (when var-10 (setf zero var-10)) + (when var-12 (setf ldwv var-12))) + (zlacpy "ALL" jlen nu wv ldwv + (f2cl-lib:array-slice z-%data% + f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol k1)) + ((1 ldz) (1 *)) z-%offset%) + ldz) + label170))))) + (t (setf i2 (the f2cl-lib:integer4 + (truncate (+ kdu 1) 2))) + (setf i4 kdu) + (setf j2 (f2cl-lib:int-sub i4 i2)) + (setf j4 kdu) + (setf kzs (f2cl-lib:int-sub j4 j2 + (f2cl-lib:int-add ns 1))) + (setf knz (f2cl-lib:int-add ns 1)) + (f2cl-lib:fdo (jcol + (f2cl-lib:int-add + (min (the f2cl-lib:integer4 ndcol) + (the f2cl-lib:integer4 kbot)) 1) + (f2cl-lib:int-add jcol nh)) + ((> jcol jbot) nil) + (tagbody + (setf jlen + (min (the f2cl-lib:integer4 nh) + (the f2cl-lib:integer4 + (f2cl-lib:int-add + (f2cl-lib:int-sub jbot jcol) 1)))) + (zlacpy "ALL" knz jlen + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 + ((+ incol 1 j2) jcol) ((1 ldh) (1 *)) + h-%offset%) + ldh + (f2cl-lib:array-slice wh-%data% + f2cl-lib:complex16 ((+ kzs 1) 1) + ((1 ldwh) (1 *)) wh-%offset%) + ldwh) + (multiple-value-bind (var-0 var-1 var-2 + var-3 var-4 var-5 var-6) + (zlaset "ALL" kzs jlen zero zero wh ldwh) + (declare (ignore var-0 var-5)) + (when var-1 (setf kzs var-1)) + (when var-2 (setf jlen var-2)) + (when var-3 (setf zero var-3)) + (when var-4 (setf zero var-4)) + (when var-6 (setf ldwh var-6))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10) + (ztrmm "L" "U" "C" "N" knz jlen one + (f2cl-lib:array-slice u-%data% + f2cl-lib:complex16 + ((+ j2 1) (f2cl-lib:int-add 1 kzs)) + ((1 ldu) (1 *)) u-%offset%) + ldu + (f2cl-lib:array-slice wh-%data% + f2cl-lib:complex16 ((+ kzs 1) 1) + ((1 ldwh) (1 *)) wh-%offset%) + ldwh) + (declare (ignore var-0 var-1 var-2 var-3 + var-7 var-9)) + (when var-4 (setf knz var-4)) + (when var-5 (setf jlen var-5)) + (when var-6 (setf one var-6)) + (when var-8 (setf ldu var-8)) + (when var-10 (setf ldwh var-10))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "C" "N" i2 jlen j2 one u ldu + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 ((+ incol 1) jcol) + ((1 ldh) (1 *)) h-%offset%) + ldh one wh ldwh) + (declare (ignore var-0 var-1 var-6 + var-8 var-11)) + (when var-2 (setf i2 var-2)) + (when var-3 (setf jlen var-3)) + (when var-4 (setf j2 var-4)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldu var-7)) + (when var-9 (setf ldh var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldwh var-12))) + (zlacpy "ALL" j2 jlen + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 ((+ incol 1) jcol) + ((1 ldh) (1 *)) h-%offset%) + ldh + (f2cl-lib:array-slice wh-%data% + f2cl-lib:complex16 ((+ i2 1) 1) + ((1 ldwh) (1 *)) wh-%offset%) + ldwh) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10) + (ztrmm "L" "L" "C" "N" j2 jlen one + (f2cl-lib:array-slice u-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add i2 1)) + ((1 ldu) (1 *)) u-%offset%) + ldu + (f2cl-lib:array-slice wh-%data% + f2cl-lib:complex16 ((+ i2 1) 1) + ((1 ldwh) (1 *)) wh-%offset%) + ldwh) + (declare (ignore var-0 var-1 var-2 var-3 + var-7 var-9)) + (when var-4 (setf j2 var-4)) + (when var-5 (setf jlen var-5)) + (when var-6 (setf one var-6)) + (when var-8 (setf ldu var-8)) + (when var-10 (setf ldwh var-10))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "C" "N" (f2cl-lib:int-sub i4 i2) + jlen (f2cl-lib:int-sub j4 j2) + one + (f2cl-lib:array-slice u-%data% + f2cl-lib:complex16 + ((+ j2 1) (f2cl-lib:int-add i2 1)) + ((1 ldu) (1 *)) u-%offset%) + ldu + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 + ((+ incol 1 j2) jcol) ((1 ldh) (1 *)) + h-%offset%) + ldh one + (f2cl-lib:array-slice wh-%data% + f2cl-lib:complex16 ((+ i2 1) 1) + ((1 ldwh) (1 *)) wh-%offset%) + ldwh) + (declare (ignore var-0 var-1 var-2 var-4 + var-6 var-8 var-11)) + (when var-3 (setf jlen var-3)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldu var-7)) + (when var-9 (setf ldh var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldwh var-12))) + (zlacpy "ALL" kdu jlen wh ldwh + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 ((+ incol 1) jcol) + ((1 ldh) (1 *)) h-%offset%) + ldh) + label180)) + (f2cl-lib:fdo (jrow jtop (f2cl-lib:int-add jrow nv)) + ((> jrow + (f2cl-lib:int-add + (max (the f2cl-lib:integer4 incol) + (the f2cl-lib:integer4 ktop)) + (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf jlen + (min (the f2cl-lib:integer4 nv) + (the f2cl-lib:integer4 + (f2cl-lib:int-sub + (max (the f2cl-lib:integer4 incol) + (the f2cl-lib:integer4 ktop)) + jrow)))) + (zlacpy "ALL" jlen knz + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol 1 j2)) + ((1 ldh) (1 *)) h-%offset%) + ldh + (f2cl-lib:array-slice wv-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add 1 kzs)) + ((1 ldwv) (1 *)) wv-%offset%) + ldwv) + (multiple-value-bind (var-0 var-1 var-2 var-3 + var-4 var-5 var-6) + (zlaset "ALL" jlen kzs zero zero wv ldwv) + (declare (ignore var-0 var-5)) + (when var-1 (setf jlen var-1)) + (when var-2 (setf kzs var-2)) + (when var-3 (setf zero var-3)) + (when var-4 (setf zero var-4)) + (when var-6 (setf ldwv var-6))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10) + (ztrmm "R" "U" "N" "N" jlen knz one + (f2cl-lib:array-slice u-%data% + f2cl-lib:complex16 + ((+ j2 1) (f2cl-lib:int-add 1 kzs)) + ((1 ldu) (1 *)) u-%offset%) + ldu + (f2cl-lib:array-slice wv-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add 1 kzs)) + ((1 ldwv) (1 *)) wv-%offset%) + ldwv) + (declare (ignore var-0 var-1 var-2 var-3 + var-7 var-9)) + (when var-4 (setf jlen var-4)) + (when var-5 (setf knz var-5)) + (when var-6 (setf one var-6)) + (when var-8 (setf ldu var-8)) + (when var-10 (setf ldwv var-10))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "N" "N" jlen i2 j2 one + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol 1)) + ((1 ldh) (1 *)) h-%offset%) + ldh u ldu one wv ldwv) + (declare (ignore var-0 var-1 var-6 + var-8 var-11)) + (when var-2 (setf jlen var-2)) + (when var-3 (setf i2 var-3)) + (when var-4 (setf j2 var-4)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldh var-7)) + (when var-9 (setf ldu var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldwv var-12))) + (zlacpy "ALL" jlen j2 + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol 1)) + ((1 ldh) (1 *)) h-%offset%) + ldh + (f2cl-lib:array-slice wv-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add 1 i2)) + ((1 ldwv) (1 *)) wv-%offset%) + ldwv) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10) + (ztrmm "R" "L" "N" "N" jlen + (f2cl-lib:int-sub i4 i2) one + (f2cl-lib:array-slice u-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add i2 1)) + ((1 ldu) (1 *)) u-%offset%) + ldu + (f2cl-lib:array-slice wv-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add 1 i2)) + ((1 ldwv) (1 *)) wv-%offset%) + ldwv) + (declare (ignore var-0 var-1 var-2 var-3 + var-5 var-7 var-9)) + (when var-4 (setf jlen var-4)) + (when var-6 (setf one var-6)) + (when var-8 (setf ldu var-8)) + (when var-10 (setf ldwv var-10))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "N" "N" jlen + (f2cl-lib:int-sub i4 i2) + (f2cl-lib:int-sub j4 j2) + one + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol 1 j2)) + ((1 ldh) (1 *)) h-%offset%) + ldh + (f2cl-lib:array-slice u-%data% + f2cl-lib:complex16 + ((+ j2 1) (f2cl-lib:int-add i2 1)) + ((1 ldu) (1 *)) u-%offset%) + ldu one + (f2cl-lib:array-slice wv-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add 1 i2)) ((1 ldwv) + (1 *)) wv-%offset%) + ldwv) + (declare (ignore var-0 var-1 var-3 var-4 + var-6 var-8 var-11)) + (when var-2 (setf jlen var-2)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldh var-7)) + (when var-9 (setf ldu var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldwv var-12))) + (zlacpy "ALL" jlen kdu wv ldwv + (f2cl-lib:array-slice h-%data% + f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol 1)) ((1 ldh) + (1 *)) h-%offset%) + ldh) + label190)) + (cond + (wantz + (f2cl-lib:fdo (jrow iloz (f2cl-lib:int-add jrow nv)) + ((> jrow ihiz) + nil) + (tagbody + (setf jlen + (min (the f2cl-lib:integer4 nv) + (the f2cl-lib:integer4 + (f2cl-lib:int-add + (f2cl-lib:int-sub ihiz jrow) 1)))) + (zlacpy "ALL" jlen knz + (f2cl-lib:array-slice z-%data% + f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol 1 j2)) + ((1 ldz) (1 *)) z-%offset%) + ldz + (f2cl-lib:array-slice wv-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add 1 kzs)) + ((1 ldwv) (1 *)) wv-%offset%) + ldwv) + (multiple-value-bind (var-0 var-1 var-2 + var-3 var-4 var-5 var-6) + (zlaset "ALL" jlen kzs zero zero wv ldwv) + (declare (ignore var-0 var-5)) + (when var-1 (setf jlen var-1)) + (when var-2 (setf kzs var-2)) + (when var-3 (setf zero var-3)) + (when var-4 (setf zero var-4)) + (when var-6 (setf ldwv var-6))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10) + (ztrmm "R" "U" "N" "N" jlen knz one + (f2cl-lib:array-slice u-%data% + f2cl-lib:complex16 + ((+ j2 1) (f2cl-lib:int-add 1 kzs)) + ((1 ldu) (1 *)) u-%offset%) + ldu + (f2cl-lib:array-slice wv-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add 1 kzs)) + ((1 ldwv) (1 *)) wv-%offset%) + ldwv) + (declare (ignore + var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf jlen var-4)) + (when var-5 (setf knz var-5)) + (when var-6 (setf one var-6)) + (when var-8 (setf ldu var-8)) + (when var-10 (setf ldwv var-10))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "N" "N" jlen i2 j2 one + (f2cl-lib:array-slice z-%data% + f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol 1)) + ((1 ldz) (1 *)) z-%offset%) + ldz u ldu one wv ldwv) + (declare (ignore var-0 var-1 var-6 + var-8 var-11)) + (when var-2 (setf jlen var-2)) + (when var-3 (setf i2 var-3)) + (when var-4 (setf j2 var-4)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldz var-7)) + (when var-9 (setf ldu var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldwv var-12))) + (zlacpy "ALL" jlen j2 + (f2cl-lib:array-slice z-%data% + f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol 1)) + ((1 ldz) (1 *)) z-%offset%) + ldz + (f2cl-lib:array-slice wv-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add 1 i2)) + ((1 ldwv) (1 *)) wv-%offset%) + ldwv) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10) + (ztrmm "R" "L" "N" "N" jlen + (f2cl-lib:int-sub i4 i2) one + (f2cl-lib:array-slice u-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add i2 1)) + ((1 ldu) (1 *)) u-%offset%) + ldu + (f2cl-lib:array-slice wv-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add 1 i2)) + ((1 ldwv) (1 *)) wv-%offset%) + ldwv) + (declare (ignore var-0 var-1 var-2 var-3 + var-5 var-7 var-9)) + (when var-4 (setf jlen var-4)) + (when var-6 (setf one var-6)) + (when var-8 (setf ldu var-8)) + (when var-10 (setf ldwv var-10))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "N" "N" jlen (f2cl-lib:int-sub i4 i2) + (f2cl-lib:int-sub j4 j2) one + (f2cl-lib:array-slice z-%data% + f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol 1 j2)) + ((1 ldz) (1 *)) z-%offset%) + ldz + (f2cl-lib:array-slice u-%data% + f2cl-lib:complex16 + ((+ j2 1) (f2cl-lib:int-add i2 1)) + ((1 ldu) (1 *)) u-%offset%) + ldu one + (f2cl-lib:array-slice wv-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add 1 i2)) ((1 ldwv) + (1 *)) wv-%offset%) + ldwv) + (declare (ignore var-0 var-1 var-3 var-4 + var-6 var-8 var-11)) + (when var-2 (setf jlen var-2)) + (when var-5 (setf one var-5)) + (when var-7 (setf ldz var-7)) + (when var-9 (setf ldu var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldwv var-12))) + (zlacpy "ALL" jlen kdu wv ldwv + (f2cl-lib:array-slice + z-%data% f2cl-lib:complex16 + (jrow (f2cl-lib:int-add incol 1)) + ((1 ldz) (1 *)) z-%offset%) + ldz) + label200)))))))) + label210)) + end_label + (return + (values nil nil nil nil nil nil nil nil nil ldh nil nil nil + ldz nil nil nil + ldu nil nil ldwv nil nil ldwh))))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -115000,7 +124722,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlarfb.f} * ===================================================================== SUBROUTINE ZLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, $ T, LDT, C, LDC, WORK, LDWORK ) @@ -115583,10 +125305,953 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlarfb} - +(let* ((one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (f2cl-lib:complex16) one) (ignorable one)) + (defun zlarfb (side trans direct storev m n k v ldv t$ ldt c ldc work ldwork) + (declare (type (simple-array character (*)) storev direct trans side) + (type (f2cl-lib:integer4) ldwork ldc ldt ldv k n m) + (type (array f2cl-lib:complex16 (*)) work c t$ v)) + (f2cl-lib:with-multi-array-data + ((v f2cl-lib:complex16 v-%data% v-%offset%) + (t$ f2cl-lib:complex16 t$-%data% t$-%offset%) + (c f2cl-lib:complex16 c-%data% c-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%) + (side character side-%data% side-%offset%) + (trans character trans-%data% trans-%offset%) + (direct character direct-%data% direct-%offset%) + (storev character storev-%data% storev-%offset%)) + (prog + ((i 0) (j 0) (lastv 0) (lastc 0) + (transt (make-array '(1) :element-type 'character + :initial-element #\space))) + (declare (type (f2cl-lib:integer4) lastc lastv j i) + (type (simple-array character (1)) transt)) + (if (or (<= m 0) (<= n 0)) (go end_label)) + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame trans "N") + (declare (ignore var-1)) (when var-0 (setf trans var-0)) ret-val) + (f2cl-lib:f2cl-set-string transt "C" (string 1))) + (t (f2cl-lib:f2cl-set-string transt "N" (string 1)))) + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame storev "C") + (declare (ignore var-1)) (when var-0 (setf storev var-0)) ret-val) + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame direct "F") + (declare (ignore var-1)) (when var-0 (setf direct var-0)) ret-val) + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame side "L") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val) + (setf lastv + (max (the f2cl-lib:integer4 k) + (the f2cl-lib:integer4 (ilazlr m k v ldv)))) + (setf lastc (ilazlc lastv n c ldc)) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (multiple-value-bind (var-0 var-1 var-2 + var-3 var-4) + (zcopy lastc + (f2cl-lib:array-slice c-%data% + f2cl-lib:complex16 (j 1) + ((1 ldc) (1 *)) c-%offset%) + ldc + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1 j) + ((1 ldwork) (1 *)) work-%offset%) + 1) + (declare (ignore var-1 var-3 var-4)) + (when var-0 (setf lastc var-0)) + (when var-2 (setf ldc var-2))) + (zlacgv lastc + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1 j) + ((1 ldwork) (1 *)) work-%offset%) + 1) + label10)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Lower" "No transpose" "Unit" + lastc k one v ldv work + ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10 + var-11 var-12) + (zgemm "Conjugate transpose" "No transpose" lastc k + (f2cl-lib:int-sub lastv k) one + (f2cl-lib:array-slice c-%data% f2cl-lib:complex16 ((+ k 1) 1) + ((1 ldc) (1 *)) c-%offset%) + ldc + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 ((+ k 1) 1) + ((1 ldv) (1 *)) v-%offset%) + ldv one work ldwork) + (declare (ignore var-0 var-1 var-4 var-6 var-8 var-11)) + (when var-2 (setf lastc var-2)) (when var-3 (setf k var-3)) + (when var-5 (setf one var-5)) (when var-7 (setf ldc var-7)) + (when var-9 (setf ldv var-9)) (when var-10 (setf one var-10)) + (when var-12 (setf ldwork var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Upper" transt "Non-unit" lastc k one t$ ldt work + ldwork) + (declare (ignore var-0 var-1 var-3 var-7 var-9)) + (when var-2 (setf transt var-2)) (when var-4 (setf lastc var-4)) + (when var-5 (setf k var-5)) (when var-6 (setf one var-6)) + (when var-8 (setf ldt var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> m k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zgemm "No transpose" "Conjugate transpose" + (f2cl-lib:int-sub lastv k) lastc k (- one) + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 ((+ k 1) 1) + ((1 ldv) (1 *)) v-%offset%) + ldv work ldwork one + (f2cl-lib:array-slice c-%data% f2cl-lib:complex16 ((+ k 1) 1) + ((1 ldc) (1 *)) c-%offset%) + ldc) + (declare (ignore var-0 var-1 var-2 var-5 var-6 var-8 var-11)) + (when var-3 (setf lastc var-3)) (when var-4 (setf k var-4)) + (when var-7 (setf ldv var-7)) (when var-9 (setf ldwork var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldc var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Lower" "Conjugate transpose" "Unit" + lastc k one v ldv + work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i lastc) nil) + (tagbody + (setf (f2cl-lib:fref c-%data% (j i) + ((1 ldc) (1 *)) c-%offset%) + (coerce + (- (f2cl-lib:fref c-%data% (j i) + ((1 ldc) (1 *)) c-%offset%) + (f2cl-lib:dconjg + (f2cl-lib:fref work-%data% (i j) + ((1 ldwork) (1 *)) + work-%offset%))) + 'f2cl-lib:complex16)) + label20)) + label30))) + ((multiple-value-bind (ret-val var-0 var-1) (lsame side "R") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val) + (setf lastv + (max (the f2cl-lib:integer4 k) + (the f2cl-lib:integer4 (ilazlr n k v ldv)))) + (setf lastc (ilazlr m lastv c ldc)) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (multiple-value-bind (var-0 var-1 var-2 + var-3 var-4) + (zcopy lastc + (f2cl-lib:array-slice c-%data% + f2cl-lib:complex16 (1 j) + ((1 ldc) (1 *)) c-%offset%) + 1 + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1 j) + ((1 ldwork) (1 *)) work-%offset%) + 1) + (declare (ignore var-1 var-2 var-3 var-4)) + (when var-0 (setf lastc var-0))) + label40)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Lower" "No transpose" "Unit" + lastc k one v ldv work + ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zgemm "No transpose" "No transpose" lastc k + (f2cl-lib:int-sub lastv k) one + (f2cl-lib:array-slice c-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add k 1)) ((1 ldc) (1 *)) c-%offset%) + ldc + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 ((+ k 1) 1) + ((1 ldv) (1 *)) v-%offset%) + ldv one work ldwork) + (declare (ignore var-0 var-1 var-4 var-6 var-8 var-11)) + (when var-2 (setf lastc var-2)) (when var-3 (setf k var-3)) + (when var-5 (setf one var-5)) (when var-7 (setf ldc var-7)) + (when var-9 (setf ldv var-9)) (when var-10 (setf one var-10)) + (when var-12 (setf ldwork var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Upper" trans "Non-unit" + lastc k one t$ ldt work ldwork) + (declare (ignore var-0 var-1 var-3 var-7 var-9)) + (when var-2 (setf trans var-2)) (when var-4 (setf lastc var-4)) + (when var-5 (setf k var-5)) (when var-6 (setf one var-6)) + (when var-8 (setf ldt var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zgemm "No transpose" "Conjugate transpose" lastc + (f2cl-lib:int-sub lastv k) k (- one) work ldwork + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 ((+ k 1) 1) + ((1 ldv) (1 *)) v-%offset%) + ldv one + (f2cl-lib:array-slice c-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add k 1)) ((1 ldc) (1 *)) c-%offset%) + ldc) + (declare (ignore var-0 var-1 var-3 var-5 var-6 var-8 var-11)) + (when var-2 (setf lastc var-2)) (when var-4 (setf k var-4)) + (when var-7 (setf ldwork var-7)) (when var-9 (setf ldv var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldc var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Lower" "Conjugate transpose" "Unit" + lastc k one v ldv + work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i lastc) nil) + (tagbody + (setf (f2cl-lib:fref c-%data% (i j) + ((1 ldc) (1 *)) c-%offset%) + (- (f2cl-lib:fref c-%data% (i j) + ((1 ldc) (1 *)) c-%offset%) + (f2cl-lib:fref work-%data% (i j) + ((1 ldwork) (1 *)) work-%offset%))) + label50)) + label60))))) + (t + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame side "L") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val) + (setf lastv + (max (the f2cl-lib:integer4 k) + (the f2cl-lib:integer4 (ilazlr m k v ldv)))) + (setf lastc (ilazlc lastv n c ldc)) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (multiple-value-bind (var-0 var-1 var-2 + var-3 var-4) + (zcopy lastc + (f2cl-lib:array-slice c-%data% + f2cl-lib:complex16 + ((+ lastv (f2cl-lib:int-sub k) j) 1) + ((1 ldc) (1 *)) c-%offset%) + ldc + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1 j) + ((1 ldwork) (1 *)) work-%offset%) + 1) + (declare (ignore var-1 var-3 var-4)) + (when var-0 (setf lastc var-0)) + (when var-2 (setf ldc var-2))) + (zlacgv lastc + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1 j) + ((1 ldwork) (1 *)) work-%offset%) + 1) + label70)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Upper" "No transpose" "Unit" lastc k one + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + ((+ lastv (f2cl-lib:int-sub k) 1) 1) + ((1 ldv) (1 *)) v-%offset%) + ldv work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zgemm "Conjugate transpose" "No transpose" lastc k + (f2cl-lib:int-sub lastv k) one c ldc v ldv one work ldwork) + (declare (ignore var-0 var-1 var-4 var-6 var-8 var-11)) + (when var-2 (setf lastc var-2)) (when var-3 (setf k var-3)) + (when var-5 (setf one var-5)) (when var-7 (setf ldc var-7)) + (when var-9 (setf ldv var-9)) (when var-10 (setf one var-10)) + (when var-12 (setf ldwork var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Lower" transt "Non-unit" lastc k one t$ ldt work + ldwork) + (declare (ignore var-0 var-1 var-3 var-7 var-9)) + (when var-2 (setf transt var-2)) (when var-4 (setf lastc var-4)) + (when var-5 (setf k var-5)) (when var-6 (setf one var-6)) + (when var-8 (setf ldt var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zgemm "No transpose" "Conjugate transpose" + (f2cl-lib:int-sub lastv k) lastc k + (- one) v ldv work ldwork one c + ldc) + (declare (ignore var-0 var-1 var-2 var-5 var-6 var-8 var-11)) + (when var-3 (setf lastc var-3)) (when var-4 (setf k var-4)) + (when var-7 (setf ldv var-7)) (when var-9 (setf ldwork var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldc var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Upper" "Conjugate transpose" "Unit" lastc k one + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + ((+ lastv (f2cl-lib:int-sub k) 1) 1) + ((1 ldv) (1 *)) v-%offset%) + ldv work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i lastc) nil) + (tagbody + (setf + (f2cl-lib:fref c-%data% + ((f2cl-lib:int-add + (f2cl-lib:int-sub lastv k) j) i) + ((1 ldc) (1 *)) + c-%offset%) + (coerce + (- + (f2cl-lib:fref c-%data% + ((f2cl-lib:int-add + (f2cl-lib:int-sub lastv k) j) i) + ((1 ldc) (1 *)) c-%offset%) + (f2cl-lib:dconjg + (f2cl-lib:fref work-%data% (i j) + ((1 ldwork) (1 *)) + work-%offset%))) + 'f2cl-lib:complex16)) + label80)) + label90))) + ((multiple-value-bind (ret-val var-0 var-1) (lsame side "R") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val) + (setf lastv + (max (the f2cl-lib:integer4 k) + (the f2cl-lib:integer4 (ilazlr n k v ldv)))) + (setf lastc (ilazlr m lastv c ldc)) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (multiple-value-bind (var-0 var-1 var-2 + var-3 var-4) + (zcopy lastc + (f2cl-lib:array-slice c-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add + (f2cl-lib:int-sub lastv k) j)) + ((1 ldc) (1 *)) + c-%offset%) + 1 + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1 j) + ((1 ldwork) (1 *)) work-%offset%) + 1) + (declare (ignore var-1 var-2 var-3 var-4)) + (when var-0 (setf lastc var-0))) + label100)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Upper" "No transpose" "Unit" lastc k one + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + ((+ lastv (f2cl-lib:int-sub k) 1) 1) + ((1 ldv) (1 *)) v-%offset%) + ldv work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zgemm "No transpose" "No transpose" lastc k + (f2cl-lib:int-sub lastv k) one c ldc v ldv one work ldwork) + (declare (ignore var-0 var-1 var-4 var-6 var-8 var-11)) + (when var-2 (setf lastc var-2)) (when var-3 (setf k var-3)) + (when var-5 (setf one var-5)) (when var-7 (setf ldc var-7)) + (when var-9 (setf ldv var-9)) (when var-10 (setf one var-10)) + (when var-12 (setf ldwork var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Lower" trans "Non-unit" + lastc k one t$ ldt work ldwork) + (declare (ignore var-0 var-1 var-3 var-7 var-9)) + (when var-2 (setf trans var-2)) (when var-4 (setf lastc var-4)) + (when var-5 (setf k var-5)) (when var-6 (setf one var-6)) + (when var-8 (setf ldt var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10 + var-11 var-12) + (zgemm "No transpose" "Conjugate transpose" lastc + (f2cl-lib:int-sub lastv k) k (- one) work + ldwork v ldv one c ldc) + (declare (ignore var-0 var-1 var-3 var-5 var-6 var-8 var-11)) + (when var-2 (setf lastc var-2)) (when var-4 (setf k var-4)) + (when var-7 (setf ldwork var-7)) (when var-9 (setf ldv var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldc var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Upper" "Conjugate transpose" "Unit" lastc k one + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + ((+ lastv (f2cl-lib:int-sub k) 1) 1) + ((1 ldv) (1 *)) v-%offset%) + ldv work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i lastc) nil) + (tagbody + (setf + (f2cl-lib:fref c-%data% + (i (f2cl-lib:int-add + (f2cl-lib:int-sub lastv k) j)) + ((1 ldc) (1 *)) + c-%offset%) + (- + (f2cl-lib:fref c-%data% + (i (f2cl-lib:int-add + (f2cl-lib:int-sub lastv k) j)) + ((1 ldc) (1 *)) + c-%offset%) + (f2cl-lib:fref work-%data% (i j) + ((1 ldwork) (1 *)) work-%offset%))) + label110)) + label120))))))) + ((multiple-value-bind (ret-val var-0 var-1) (lsame storev "R") + (declare (ignore var-1)) (when var-0 (setf storev var-0)) ret-val) + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame direct "F") + (declare (ignore var-1)) (when var-0 (setf direct var-0)) ret-val) + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame side "L") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val) + (setf lastv + (max (the f2cl-lib:integer4 k) + (the f2cl-lib:integer4 (ilazlc k m v ldv)))) + (setf lastc (ilazlc lastv n c ldc)) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (multiple-value-bind (var-0 var-1 var-2 + var-3 var-4) + (zcopy lastc + (f2cl-lib:array-slice c-%data% + f2cl-lib:complex16 (j 1) + ((1 ldc) (1 *)) c-%offset%) + ldc + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1 j) + ((1 ldwork) (1 *)) work-%offset%) + 1) + (declare (ignore var-1 var-3 var-4)) + (when var-0 (setf lastc var-0)) + (when var-2 (setf ldc var-2))) + (zlacgv lastc + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1 j) + ((1 ldwork) (1 *)) work-%offset%) + 1) + label130)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Upper" "Conjugate transpose" "Unit" + lastc k one v ldv + work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zgemm "Conjugate transpose" "Conjugate transpose" lastc k + (f2cl-lib:int-sub lastv k) one + (f2cl-lib:array-slice c-%data% f2cl-lib:complex16 ((+ k 1) 1) + ((1 ldc) (1 *)) c-%offset%) + ldc + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add k 1)) ((1 ldv) (1 *)) v-%offset%) + ldv one work ldwork) + (declare (ignore var-0 var-1 var-4 var-6 var-8 var-11)) + (when var-2 (setf lastc var-2)) (when var-3 (setf k var-3)) + (when var-5 (setf one var-5)) (when var-7 (setf ldc var-7)) + (when var-9 (setf ldv var-9)) (when var-10 (setf one var-10)) + (when var-12 (setf ldwork var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Upper" transt "Non-unit" lastc k one t$ ldt work + ldwork) + (declare (ignore var-0 var-1 var-3 var-7 var-9)) + (when var-2 (setf transt var-2)) (when var-4 (setf lastc var-4)) + (when var-5 (setf k var-5)) (when var-6 (setf one var-6)) + (when var-8 (setf ldt var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zgemm "Conjugate transpose" "Conjugate transpose" + (f2cl-lib:int-sub lastv k) lastc k (- one) + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add k 1)) ((1 ldv) (1 *)) v-%offset%) + ldv work ldwork one + (f2cl-lib:array-slice c-%data% f2cl-lib:complex16 ((+ k 1) 1) + ((1 ldc) (1 *)) c-%offset%) + ldc) + (declare (ignore var-0 var-1 var-2 var-5 var-6 var-8 var-11)) + (when var-3 (setf lastc var-3)) (when var-4 (setf k var-4)) + (when var-7 (setf ldv var-7)) (when var-9 (setf ldwork var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldc var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Upper" "No transpose" "Unit" + lastc k one v ldv work + ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i lastc) nil) + (tagbody + (setf (f2cl-lib:fref c-%data% (j i) + ((1 ldc) (1 *)) c-%offset%) + (coerce + (- (f2cl-lib:fref c-%data% (j i) + ((1 ldc) (1 *)) c-%offset%) + (f2cl-lib:dconjg + (f2cl-lib:fref work-%data% (i j) + ((1 ldwork) (1 *)) + work-%offset%))) + 'f2cl-lib:complex16)) + label140)) + label150))) + ((multiple-value-bind (ret-val var-0 var-1) (lsame side "R") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val) + (setf lastv + (max (the f2cl-lib:integer4 k) + (the f2cl-lib:integer4 (ilazlc k n v ldv)))) + (setf lastc (ilazlr m lastv c ldc)) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (multiple-value-bind (var-0 var-1 var-2 + var-3 var-4) + (zcopy lastc + (f2cl-lib:array-slice c-%data% + f2cl-lib:complex16 (1 j) + ((1 ldc) (1 *)) c-%offset%) + 1 + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1 j) + ((1 ldwork) (1 *)) work-%offset%) + 1) + (declare (ignore var-1 var-2 var-3 var-4)) + (when var-0 (setf lastc var-0))) + label160)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Upper" "Conjugate transpose" "Unit" + lastc k one v ldv + work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zgemm "No transpose" "Conjugate transpose" lastc k + (f2cl-lib:int-sub lastv k) one + (f2cl-lib:array-slice c-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add k 1)) ((1 ldc) (1 *)) c-%offset%) + ldc + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add k 1)) ((1 ldv) (1 *)) v-%offset%) + ldv one work ldwork) + (declare (ignore var-0 var-1 var-4 var-6 var-8 var-11)) + (when var-2 (setf lastc var-2)) (when var-3 (setf k var-3)) + (when var-5 (setf one var-5)) (when var-7 (setf ldc var-7)) + (when var-9 (setf ldv var-9)) (when var-10 (setf one var-10)) + (when var-12 (setf ldwork var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Upper" trans "Non-unit" + lastc k one t$ ldt work ldwork) + (declare (ignore var-0 var-1 var-3 var-7 var-9)) + (when var-2 (setf trans var-2)) (when var-4 (setf lastc var-4)) + (when var-5 (setf k var-5)) (when var-6 (setf one var-6)) + (when var-8 (setf ldt var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zgemm "No transpose" "No transpose" + lastc (f2cl-lib:int-sub lastv k) + k (- one) work ldwork + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add k 1)) ((1 ldv) (1 *)) v-%offset%) + ldv one + (f2cl-lib:array-slice c-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add k 1)) ((1 ldc) (1 *)) c-%offset%) + ldc) + (declare (ignore var-0 var-1 var-3 var-5 var-6 var-8 var-11)) + (when var-2 (setf lastc var-2)) (when var-4 (setf k var-4)) + (when var-7 (setf ldwork var-7)) (when var-9 (setf ldv var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldc var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Upper" "No transpose" "Unit" + lastc k one v ldv work + ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i lastc) nil) + (tagbody + (setf (f2cl-lib:fref c-%data% (i j) + ((1 ldc) (1 *)) c-%offset%) + (- (f2cl-lib:fref c-%data% (i j) + ((1 ldc) (1 *)) c-%offset%) + (f2cl-lib:fref work-%data% (i j) + ((1 ldwork) (1 *)) work-%offset%))) + label170)) + label180))))) + (t + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame side "L") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val) + (setf lastv + (max (the f2cl-lib:integer4 k) + (the f2cl-lib:integer4 (ilazlc k m v ldv)))) + (setf lastc (ilazlc lastv n c ldc)) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (multiple-value-bind (var-0 var-1 var-2 + var-3 var-4) + (zcopy lastc + (f2cl-lib:array-slice c-%data% + f2cl-lib:complex16 + ((+ lastv (f2cl-lib:int-sub k) j) 1) + ((1 ldc) (1 *)) c-%offset%) + ldc + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1 j) + ((1 ldwork) (1 *)) work-%offset%) + 1) + (declare (ignore var-1 var-3 var-4)) + (when var-0 (setf lastc var-0)) + (when var-2 (setf ldc var-2))) + (zlacgv lastc + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1 j) + ((1 ldwork) (1 *)) work-%offset%) + 1) + label190)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Lower" "Conjugate transpose" "Unit" lastc k one + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add (f2cl-lib:int-sub lastv k) 1)) + ((1 ldv) (1 *)) + v-%offset%) + ldv work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zgemm "Conjugate transpose" "Conjugate transpose" lastc k + (f2cl-lib:int-sub lastv k) one c ldc v ldv one work ldwork) + (declare (ignore var-0 var-1 var-4 var-6 var-8 var-11)) + (when var-2 (setf lastc var-2)) (when var-3 (setf k var-3)) + (when var-5 (setf one var-5)) (when var-7 (setf ldc var-7)) + (when var-9 (setf ldv var-9)) (when var-10 (setf one var-10)) + (when var-12 (setf ldwork var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10) + (ztrmm "Right" "Lower" transt "Non-unit" lastc k one t$ ldt work + ldwork) + (declare (ignore var-0 var-1 var-3 var-7 var-9)) + (when var-2 (setf transt var-2)) (when var-4 (setf lastc var-4)) + (when var-5 (setf k var-5)) (when var-6 (setf one var-6)) + (when var-8 (setf ldt var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10 + var-11 var-12) + (zgemm "Conjugate transpose" "Conjugate transpose" + (f2cl-lib:int-sub lastv k) lastc k (- one) + v ldv work ldwork one c + ldc) + (declare (ignore var-0 var-1 var-2 var-5 var-6 var-8 var-11)) + (when var-3 (setf lastc var-3)) (when var-4 (setf k var-4)) + (when var-7 (setf ldv var-7)) (when var-9 (setf ldwork var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldc var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 + var-9 var-10) + (ztrmm "Right" "Lower" "No transpose" "Unit" lastc k one + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add (f2cl-lib:int-sub lastv k) 1)) + ((1 ldv) (1 *)) + v-%offset%) + ldv work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i lastc) nil) + (tagbody + (setf + (f2cl-lib:fref c-%data% + ((f2cl-lib:int-add + (f2cl-lib:int-sub lastv k) j) i) + ((1 ldc) (1 *)) + c-%offset%) + (coerce + (- + (f2cl-lib:fref c-%data% + ((f2cl-lib:int-add + (f2cl-lib:int-sub lastv k) j) i) + ((1 ldc) (1 *)) c-%offset%) + (f2cl-lib:dconjg + (f2cl-lib:fref work-%data% (i j) + ((1 ldwork) (1 *)) + work-%offset%))) + 'f2cl-lib:complex16)) + label200)) + label210))) + ((multiple-value-bind (ret-val var-0 var-1) (lsame side "R") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val) + (setf lastv + (max (the f2cl-lib:integer4 k) + (the f2cl-lib:integer4 (ilazlc k n v ldv)))) + (setf lastc (ilazlr m lastv c ldc)) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (multiple-value-bind (var-0 var-1 var-2 + var-3 var-4) + (zcopy lastc + (f2cl-lib:array-slice c-%data% + f2cl-lib:complex16 + (1 (f2cl-lib:int-add + (f2cl-lib:int-sub lastv k) j)) + ((1 ldc) (1 *)) + c-%offset%) + 1 + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1 j) + ((1 ldwork) (1 *)) work-%offset%) + 1) + (declare (ignore var-1 var-2 var-3 var-4)) + (when var-0 (setf lastc var-0))) + label220)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Lower" "Conjugate transpose" "Unit" lastc k one + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add (f2cl-lib:int-sub lastv k) 1)) + ((1 ldv) (1 *)) + v-%offset%) + ldv work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zgemm "No transpose" "Conjugate transpose" lastc k + (f2cl-lib:int-sub lastv k) one c ldc v ldv one work ldwork) + (declare (ignore var-0 var-1 var-4 var-6 var-8 var-11)) + (when var-2 (setf lastc var-2)) (when var-3 (setf k var-3)) + (when var-5 (setf one var-5)) (when var-7 (setf ldc var-7)) + (when var-9 (setf ldv var-9)) (when var-10 (setf one var-10)) + (when var-12 (setf ldwork var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Lower" trans "Non-unit" + lastc k one t$ ldt work ldwork) + (declare (ignore var-0 var-1 var-3 var-7 var-9)) + (when var-2 (setf trans var-2)) (when var-4 (setf lastc var-4)) + (when var-5 (setf k var-5)) (when var-6 (setf one var-6)) + (when var-8 (setf ldt var-8)) + (when var-10 (setf ldwork var-10))) + (cond + ((> lastv k) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 + var-11 var-12) + (zgemm "No transpose" "No transpose" lastc + (f2cl-lib:int-sub lastv k) + k (- one) work ldwork v ldv one c ldc) + (declare (ignore var-0 var-1 var-3 var-5 var-6 var-8 var-11)) + (when var-2 (setf lastc var-2)) (when var-4 (setf k var-4)) + (when var-7 (setf ldwork var-7)) (when var-9 (setf ldv var-9)) + (when var-10 (setf one var-10)) + (when var-12 (setf ldc var-12))))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (ztrmm "Right" "Lower" "No transpose" "Unit" lastc k one + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add (f2cl-lib:int-sub lastv k) 1)) + ((1 ldv) (1 *)) + v-%offset%) + ldv work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 var-7 var-9)) + (when var-4 (setf lastc var-4)) (when var-5 (setf k var-5)) + (when var-6 (setf one var-6)) (when var-8 (setf ldv var-8)) + (when var-10 (setf ldwork var-10))) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i lastc) nil) + (tagbody + (setf + (f2cl-lib:fref c-%data% + (i (f2cl-lib:int-add (f2cl-lib:int-sub + lastv k) j)) ((1 ldc) (1 *)) + c-%offset%) + (- + (f2cl-lib:fref c-%data% + (i (f2cl-lib:int-add + (f2cl-lib:int-sub lastv k) j)) + ((1 ldc) (1 *)) + c-%offset%) + (f2cl-lib:fref work-%data% (i j) + ((1 ldwork) (1 *)) work-%offset%))) + label230)) + label240)))))))) + (go end_label) end_label + (return + (values side trans direct storev nil nil k nil ldv nil ldt nil ldc nil + ldwork)))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -115715,7 +126380,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlarf.f} * ===================================================================== SUBROUTINE ZLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK ) * @@ -115822,10 +126487,90 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlarf} - +(let* + ((one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16)) + (zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (f2cl-lib:complex16) one) (type (f2cl-lib:complex16) zero) + (ignorable one zero)) + (defun zlarf (side m n v incv tau c ldc work) + (declare (type (simple-array character (*)) side) + (type (f2cl-lib:integer4) ldc incv n m) + (type (array f2cl-lib:complex16 (*)) work c v) + (type (f2cl-lib:complex16) tau)) + (f2cl-lib:with-multi-array-data + ((v f2cl-lib:complex16 v-%data% v-%offset%) + (c f2cl-lib:complex16 c-%data% c-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%) + (side character side-%data% side-%offset%)) + (prog + ((i 0) (lastv 0) (lastc 0) (applyleft nil)) + (declare (type (f2cl-lib:integer4) lastc lastv i) + (type f2cl-lib:logical applyleft)) + (setf applyleft + (multiple-value-bind (ret-val var-0 var-1) (lsame side "L") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val)) + (setf lastv 0) (setf lastc 0) + (cond + ((/= tau zero) + (tagbody (cond (applyleft (setf lastv m)) (t (setf lastv n))) + (cond + ((> incv 0) + (setf i + (f2cl-lib:int-add 1 + (f2cl-lib:int-mul (f2cl-lib:int-sub lastv 1) incv)))) + (t (setf i 1))) + label100000 + (if + (not + (and (> lastv 0) + (= (f2cl-lib:fref v-%data% (i) ((1 *)) v-%offset%) zero))) + (go label100001)) + (setf lastv (f2cl-lib:int-sub lastv 1)) + (setf i (f2cl-lib:int-sub i incv)) + (go label100000) label100001 + (cond (applyleft (setf lastc (ilazlc lastv n c ldc))) + (t (setf lastc (ilazlr m lastv c ldc))))))) + (cond + (applyleft + (cond + ((> lastv 0) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (zgemv "Conjugate transpose" lastv lastc one c + ldc v incv zero work 1) + (declare (ignore var-0 var-4 var-6 var-9 var-10)) + (when var-1 (setf lastv var-1)) (when var-2 (setf lastc var-2)) + (when var-3 (setf one var-3)) (when var-5 (setf ldc var-5)) + (when var-7 (setf incv var-7)) (when var-8 (setf zero var-8))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zgerc lastv lastc (- tau) v incv work 1 c ldc) + (declare (ignore var-2 var-3 var-5 var-6 var-7)) + (when var-0 (setf lastv var-0)) (when var-1 (setf lastc var-1)) + (when var-4 (setf incv var-4)) (when var-8 (setf ldc var-8)))))) + (t + (cond + ((> lastv 0) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10) + (zgemv "No transpose" lastc lastv one c ldc v incv zero work 1) + (declare (ignore var-0 var-4 var-6 var-9 var-10)) + (when var-1 (setf lastc var-1)) (when var-2 (setf lastv var-2)) + (when var-3 (setf one var-3)) (when var-5 (setf ldc var-5)) + (when var-7 (setf incv var-7)) (when var-8 (setf zero var-8))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zgerc lastc lastv (- tau) work 1 v incv c ldc) + (declare (ignore var-2 var-3 var-4 var-5 var-7)) + (when var-0 (setf lastc var-0)) (when var-1 (setf lastv var-1)) + (when var-6 (setf incv var-6)) (when var-8 (setf ldc var-8))))))) + (go end_label) end_label + (return (values side nil nil nil incv nil nil ldc nil)))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -115937,7 +126682,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlzrfg.f} * ===================================================================== SUBROUTINE ZLARFG( N, ALPHA, X, INCX, TAU ) * @@ -116037,10 +126782,68 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlarfg} - +(let* ((one 1.0d0) (zero 0.0d0)) + (declare (type (double-float 1.0d0 1.0d0) one) + (type (double-float 0.0d0 0.0d0) zero) (ignorable one zero)) + (defun zlarfg (n alpha x incx tau) + (declare (type (f2cl-lib:integer4) incx n) + (type (f2cl-lib:complex16) tau alpha) + (type (array f2cl-lib:complex16 (*)) x)) + (f2cl-lib:with-multi-array-data + ((x f2cl-lib:complex16 x-%data% x-%offset%)) + (prog + ((alphi 0.0d0) (alphr 0.0d0) (beta 0.0d0) (rsafmn 0.0d0) (safmin 0.0d0) + (xnorm 0.0d0) (j 0) (knt 0)) + (declare (type (double-float) xnorm safmin rsafmn beta alphr alphi) + (type (f2cl-lib:integer4) knt j)) + (cond ((<= n 0) (setf tau (coerce zero 'f2cl-lib:complex16)) + (go end_label))) + (setf xnorm + (multiple-value-bind (ret-val var-0 var-1 var-2) + (dznrm2 (f2cl-lib:int-sub n 1) x incx) (declare (ignore var-0 var-1)) + (when var-2 (setf incx var-2)) ret-val)) + (setf alphr (f2cl-lib:dble alpha)) (setf alphi (f2cl-lib:dimag alpha)) + (cond + ((and (= xnorm zero) (= alphi zero)) + (setf tau (coerce zero 'f2cl-lib:complex16))) + (t (setf beta (- (f2cl-lib:sign (dlapy3 alphr alphi xnorm) alphr))) + (setf safmin (/ (dlamch "S") (dlamch "E"))) + (setf rsafmn (/ one safmin)) + (setf knt 0) + (cond + ((< (abs beta) safmin) + (tagbody label10 (setf knt (f2cl-lib:int-add knt 1)) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal (f2cl-lib:int-sub n 1) rsafmn x incx) + (declare (ignore var-0 var-2)) (when var-1 (setf rsafmn var-1)) + (when var-3 (setf incx var-3))) + (setf beta (* beta rsafmn)) (setf alphi (* alphi rsafmn)) + (setf alphr (* alphr rsafmn)) + (if (< (abs beta) safmin) (go label10)) + (setf xnorm + (multiple-value-bind (ret-val var-0 var-1 var-2) + (dznrm2 (f2cl-lib:int-sub n 1) x incx) + (declare (ignore var-0 var-1)) + (when var-2 (setf incx var-2)) ret-val)) + (setf alpha (f2cl-lib:dcmplx alphr alphi)) + (setf beta + (- (f2cl-lib:sign (dlapy3 alphr alphi xnorm) alphr)))))) + (setf tau + (f2cl-lib:dcmplx (/ (- beta alphr) beta) (/ (- alphi) beta))) + (setf alpha (zladiv (f2cl-lib:dcmplx one) (- alpha beta))) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zscal (f2cl-lib:int-sub n 1) alpha x incx) + (declare (ignore var-0 var-2)) + (when var-1 (setf alpha var-1)) (when var-3 (setf incx var-3))) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j knt) nil) + (tagbody + (setf beta (* beta safmin)) label20)) + (setf alpha (coerce beta 'f2cl-lib:complex16)))) + (go end_label) end_label (return (values nil alpha nil incx tau)))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -116203,7 +127006,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlarft.f} * ===================================================================== SUBROUTINE ZLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT ) * @@ -116376,10 +127179,354 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlarft} - +(let* + ((one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16)) + (zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (f2cl-lib:complex16) one) (type (f2cl-lib:complex16) zero) + (ignorable one zero)) + (defun zlarft (direct storev n k v ldv tau t$ ldt) + (declare (type (simple-array character (*)) storev direct) + (type (f2cl-lib:integer4) ldt ldv k n) + (type (array f2cl-lib:complex16 (*)) t$ tau v)) + (f2cl-lib:with-multi-array-data + ((v f2cl-lib:complex16 v-%data% v-%offset%) + (tau f2cl-lib:complex16 tau-%data% tau-%offset%) + (t$ f2cl-lib:complex16 t$-%data% t$-%offset%) + (direct character direct-%data% direct-%offset%) + (storev character storev-%data% storev-%offset%)) + (prog + ((vii #C(0.0d0 0.0d0)) (i 0) (j 0) (prevlastv 0) (lastv 0)) + (declare (type (f2cl-lib:complex16) vii) + (type (f2cl-lib:integer4) lastv prevlastv j i)) + (if (= n 0) (go end_label)) + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame direct "F") + (declare (ignore var-1)) (when var-0 (setf direct var-0)) ret-val) + (setf prevlastv n) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i k) nil) + (tagbody + (setf prevlastv + (max (the f2cl-lib:integer4 prevlastv) + (the f2cl-lib:integer4 i))) + (cond + ((= (f2cl-lib:fref tau (i) ((1 *))) zero) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j i) nil) + (tagbody + (setf (f2cl-lib:fref t$-%data% (j i) + ((1 ldt) (1 *)) t$-%offset%) zero) + label10))) + (t (setf vii (f2cl-lib:fref v-%data% (i i) + ((1 ldv) (1 *)) v-%offset%)) + (setf (f2cl-lib:fref v-%data% (i i) + ((1 ldv) (1 *)) v-%offset%) one) + (cond + ((multiple-value-bind (ret-val var-0 var-1) + (lsame storev "C") + (declare (ignore var-1)) + (when var-0 (setf storev var-0)) ret-val) + (f2cl-lib:fdo (lastv n (f2cl-lib:int-add lastv + (f2cl-lib:int-sub 1))) + ((> + lastv (f2cl-lib:int-add i 1)) + nil) + (tagbody + (if + (/= (f2cl-lib:fref v-%data% (lastv i) + ((1 ldv) (1 *)) v-%offset%) + zero) + (go f2cl-lib::exit)) + label100000)) + (setf j + (min (the f2cl-lib:integer4 lastv) + (the f2cl-lib:integer4 prevlastv))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10) + (zgemv "Conjugate transpose" + (f2cl-lib:int-add (f2cl-lib:int-sub j i) 1) + (f2cl-lib:int-sub i 1) + (- (f2cl-lib:fref tau-%data% (i) ((1 *)) + tau-%offset%)) + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (i 1) + ((1 ldv) (1 *)) v-%offset%) + ldv + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (i i) + ((1 ldv) (1 *)) v-%offset%) + 1 zero + (f2cl-lib:array-slice t$-%data% + f2cl-lib:complex16 (1 i) + ((1 ldt) (1 *)) t$-%offset%) + 1) + (declare + (ignore var-0 var-1 var-2 var-3 var-4 + var-6 var-7 var-9 var-10)) + (when var-5 (setf ldv var-5)) + (when var-8 (setf zero var-8)))) + (t + (f2cl-lib:fdo (lastv n (f2cl-lib:int-add lastv + (f2cl-lib:int-sub 1))) + ((> + lastv (f2cl-lib:int-add i 1)) + nil) + (tagbody + (if + (/= (f2cl-lib:fref v-%data% (i lastv) + ((1 ldv) (1 *)) v-%offset%) + zero) + (go f2cl-lib::exit)) + label100001)) + (setf j + (min (the f2cl-lib:integer4 lastv) + (the f2cl-lib:integer4 prevlastv))) + (if (< i j) + (zlacgv (f2cl-lib:int-sub j i) + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (i (f2cl-lib:int-add i 1)) + ((1 ldv) (1 *)) v-%offset%) + ldv)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 + var-5 var-6 var-7 var-8 var-9 var-10) + (zgemv "No transpose" (f2cl-lib:int-sub i 1) + (f2cl-lib:int-add (f2cl-lib:int-sub j i) 1) + (- (f2cl-lib:fref tau-%data% (i) ((1 *)) + tau-%offset%)) + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (1 i) + ((1 ldv) (1 *)) v-%offset%) + ldv + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (i i) + ((1 ldv) (1 *)) v-%offset%) + ldv zero + (f2cl-lib:array-slice t$-%data% + f2cl-lib:complex16 (1 i) + ((1 ldt) (1 *)) t$-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-3 + var-4 var-6 var-9 var-10)) + (when var-5 (setf ldv var-5)) + (when var-7 (setf ldv var-7)) + (when var-8 (setf zero var-8))) + (if (< i j) + (zlacgv (f2cl-lib:int-sub j i) + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (i (f2cl-lib:int-add i 1)) + ((1 ldv) (1 *)) v-%offset%) + ldv)))) + (setf (f2cl-lib:fref v-%data% (i i) + ((1 ldv) (1 *)) v-%offset%) vii) + (multiple-value-bind (var-0 var-1 var-2 var-3 + var-4 var-5 var-6 var-7) + (ztrmv "Upper" "No transpose" "Non-unit" + (f2cl-lib:int-sub i 1) t$ ldt + (f2cl-lib:array-slice t$-%data% + f2cl-lib:complex16 (1 i) + ((1 ldt) (1 *)) t$-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-3 + var-4 var-6 var-7)) + (when var-5 (setf ldt var-5))) + (setf (f2cl-lib:fref t$-%data% (i i) + ((1 ldt) (1 *)) t$-%offset%) + (f2cl-lib:fref tau-%data% (i) ((1 *)) tau-%offset%)) + (cond + ((> i 1) + (setf prevlastv + (max (the f2cl-lib:integer4 prevlastv) + (the f2cl-lib:integer4 lastv)))) + (t (setf prevlastv lastv))))) + label20))) + (t (setf prevlastv 1) + (f2cl-lib:fdo (i k (f2cl-lib:int-add i (f2cl-lib:int-sub 1))) + ((> i 1) nil) + (tagbody + (cond + ((= (f2cl-lib:fref tau (i) ((1 *))) zero) + (f2cl-lib:fdo (j i (f2cl-lib:int-add j 1)) + ((> j k) nil) + (tagbody + (setf (f2cl-lib:fref t$-%data% (j i) + ((1 ldt) (1 *)) t$-%offset%) zero) + label30))) + (t + (cond + ((< i k) + (cond + ((multiple-value-bind (ret-val var-0 var-1) + (lsame storev "C") + (declare (ignore var-1)) + (when var-0 (setf storev var-0)) ret-val) + (setf vii + (f2cl-lib:fref v-%data% + ((f2cl-lib:int-add (f2cl-lib:int-sub n k) i) i) + ((1 ldv) (1 *)) + v-%offset%)) + (setf + (f2cl-lib:fref v-%data% + ((f2cl-lib:int-add (f2cl-lib:int-sub n k) i) i) + ((1 ldv) (1 *)) + v-%offset%) + one) + (f2cl-lib:fdo (lastv 1 (f2cl-lib:int-add lastv 1)) + ((> lastv + (f2cl-lib:int-add i (f2cl-lib:int-sub 1))) + nil) + (tagbody + (if + (/= (f2cl-lib:fref v-%data% (lastv i) + ((1 ldv) (1 *)) v-%offset%) + zero) + (go f2cl-lib::exit)) + label100002)) + (setf j + (max (the f2cl-lib:integer4 lastv) + (the f2cl-lib:integer4 prevlastv))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10) + (zgemv "Conjugate transpose" + (f2cl-lib:int-add + (f2cl-lib:int-sub (f2cl-lib:int-add + (f2cl-lib:int-sub n k) i) j) + 1) + (f2cl-lib:int-sub k i) + (- (f2cl-lib:fref tau-%data% (i) + ((1 *)) tau-%offset%)) + (f2cl-lib:array-slice v-%data% f2cl-lib:complex16 + (j (f2cl-lib:int-add i 1)) + ((1 ldv) (1 *)) v-%offset%) + ldv + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (j i) + ((1 ldv) (1 *)) v-%offset%) + 1 zero + (f2cl-lib:array-slice t$-%data% + f2cl-lib:complex16 ((+ i 1) i) + ((1 ldt) (1 *)) t$-%offset%) + 1) + (declare + (ignore var-0 var-1 var-2 var-3 var-4 + var-6 var-7 var-9 var-10)) + (when var-5 (setf ldv var-5)) + (when var-8 (setf zero var-8))) + (setf + (f2cl-lib:fref v-%data% + ((f2cl-lib:int-add (f2cl-lib:int-sub n k) i) i) + ((1 ldv) (1 *)) + v-%offset%) + vii)) + (t + (setf vii + (f2cl-lib:fref v-%data% + (i (f2cl-lib:int-add (f2cl-lib:int-sub n k) i)) + ((1 ldv) (1 *)) + v-%offset%)) + (setf + (f2cl-lib:fref v-%data% + (i (f2cl-lib:int-add (f2cl-lib:int-sub n k) i)) + ((1 ldv) (1 *)) + v-%offset%) + one) + (f2cl-lib:fdo (lastv 1 (f2cl-lib:int-add lastv 1)) + ((> lastv + (f2cl-lib:int-add i (f2cl-lib:int-sub 1))) + nil) + (tagbody + (if + (/= (f2cl-lib:fref v-%data% (i lastv) + ((1 ldv) (1 *)) v-%offset%) + zero) + (go f2cl-lib::exit)) + label100003)) + (setf j + (max (the f2cl-lib:integer4 lastv) + (the f2cl-lib:integer4 prevlastv))) + (zlacgv + (f2cl-lib:int-add + (f2cl-lib:int-sub (f2cl-lib:int-add + (f2cl-lib:int-sub n k) i) 1 j) + 1) + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (i j) + ((1 ldv) (1 *)) v-%offset%) + ldv) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10) + (zgemv "No transpose" (f2cl-lib:int-sub k i) + (f2cl-lib:int-add + (f2cl-lib:int-sub (f2cl-lib:int-add + (f2cl-lib:int-sub n k) i) j) + 1) + (- (f2cl-lib:fref tau-%data% (i) + ((1 *)) tau-%offset%)) + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 ((+ i 1) j) + ((1 ldv) (1 *)) v-%offset%) + ldv + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (i j) + ((1 ldv) (1 *)) v-%offset%) + ldv zero + (f2cl-lib:array-slice t$-%data% + f2cl-lib:complex16 ((+ i 1) i) + ((1 ldt) (1 *)) t$-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-3 + var-4 var-6 var-9 var-10)) + (when var-5 (setf ldv var-5)) + (when var-7 (setf ldv var-7)) + (when var-8 (setf zero var-8))) + (zlacgv + (f2cl-lib:int-add + (f2cl-lib:int-sub + (f2cl-lib:int-add (f2cl-lib:int-sub n k) i) 1 j) + 1) + (f2cl-lib:array-slice v-%data% + f2cl-lib:complex16 (i j) + ((1 ldv) (1 *)) v-%offset%) + ldv) + (setf + (f2cl-lib:fref v-%data% + (i (f2cl-lib:int-add + (f2cl-lib:int-sub n k) i)) ((1 ldv) (1 *)) + v-%offset%) + vii))) + (multiple-value-bind (var-0 var-1 var-2 var-3 + var-4 var-5 var-6 var-7) + (ztrmv "Lower" "No transpose" "Non-unit" + (f2cl-lib:int-sub k i) + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 + ((+ i 1) (f2cl-lib:int-add i 1)) + ((1 ldt) (1 *)) t$-%offset%) + ldt + (f2cl-lib:array-slice t$-%data% + f2cl-lib:complex16 ((+ i 1) i) + ((1 ldt) (1 *)) t$-%offset%) + 1) + (declare (ignore var-0 var-1 var-2 var-3 + var-4 var-6 var-7)) + (when var-5 (setf ldt var-5))) + (cond + ((> i 1) + (setf prevlastv + (min (the f2cl-lib:integer4 prevlastv) + (the f2cl-lib:integer4 lastv)))) + (t (setf prevlastv lastv))))) + (setf (f2cl-lib:fref t$-%data% (i i) + ((1 ldt) (1 *)) t$-%offset%) + (f2cl-lib:fref tau-%data% (i) ((1 *)) tau-%offset%)))) + label40)))) + (go end_label) end_label + (return (values direct storev nil nil nil ldv nil nil ldt)))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -116485,7 +127632,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlartg.f} * ===================================================================== SUBROUTINE ZLARTG( F, G, CS, SN, R ) * @@ -116643,10 +127790,107 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlartg} - +(let* + ((two 2.0d0) (one 1.0d0) (zero 0.0d0) + (czero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (double-float 2.0d0 2.0d0) two) + (type (double-float 1.0d0 1.0d0) one) (type (double-float 0.0d0 0.0d0) zero) + (type (f2cl-lib:complex16) czero) (ignorable two one zero czero)) + (defun zlartg (f g cs sn r) + (declare (type (f2cl-lib:complex16) r sn g f) (type (double-float) cs)) + (labels + ((abs1 (ff) (max (abs (f2cl-lib:dble ff)) (abs (f2cl-lib:dimag ff)))) + (abssq (ff) (+ (expt (f2cl-lib:dble ff) 2) (expt (f2cl-lib:dimag ff) 2)))) + (declare + (ftype (function (f2cl-lib:complex16) (values double-float &rest t)) abs1)) + (declare + (ftype (function (f2cl-lib:complex16) (values double-float &rest t)) + abssq)) + (prog + ((ff #C(0.0d0 0.0d0)) (fs #C(0.0d0 0.0d0)) (gs #C(0.0d0 0.0d0)) (d 0.0d0) + (di 0.0d0) (dr 0.0d0) (eps 0.0d0) (f2 0.0d0) (f2s 0.0d0) (g2 0.0d0) + (g2s 0.0d0) (safmin 0.0d0) (safmn2 0.0d0) (safmx2 0.0d0) (scale 0.0d0) + (i 0) (count$ 0)) + (declare (type (f2cl-lib:complex16) gs fs ff) + (type (double-float) scale safmx2 safmn2 safmin g2s g2 f2s f2 eps dr di d) + (type (f2cl-lib:integer4) count$ i)) + (setf safmin (dlamch "S")) (setf eps (dlamch "E")) + (setf safmn2 + (expt (dlamch "B") + (f2cl-lib:int + (/ (/ (f2cl-lib:flog (/ safmin eps)) (f2cl-lib:flog (dlamch "B"))) + two)))) + (setf safmx2 (/ one safmn2)) (setf scale (max (abs1 f) (abs1 g))) + (setf fs f) (setf gs g) (setf count$ 0) + (cond + ((>= scale safmx2) + (tagbody label10 (setf count$ (f2cl-lib:int-add count$ 1)) + (setf fs (* fs safmn2)) (setf gs (* gs safmn2)) + (setf scale (* scale safmn2)) (if (>= scale safmx2) (go label10)))) + ((<= scale safmn2) + (tagbody + (cond + ((= g czero) (setf cs one) (setf sn czero) (setf r f) (go end_label))) + label20 (setf count$ (f2cl-lib:int-sub count$ 1)) + (setf fs (* fs safmx2)) (setf gs (* gs safmx2)) + (setf scale (* scale safmx2)) (if (<= scale safmn2) (go label20))))) + (setf f2 (abssq fs)) (setf g2 (abssq gs)) + (cond + ((<= f2 (* (max g2 one) safmin)) + (cond + ((= f czero) (setf cs zero) + (setf r + (coerce (dlapy2 (f2cl-lib:dble g) (f2cl-lib:dimag g)) + 'f2cl-lib:complex16)) + (setf d (dlapy2 (f2cl-lib:dble gs) (f2cl-lib:dimag gs))) + (setf sn + (f2cl-lib:dcmplx (/ (f2cl-lib:dble gs) d) + (/ (- (f2cl-lib:dimag gs)) d))) + (go end_label))) + (setf f2s (dlapy2 (f2cl-lib:dble fs) (f2cl-lib:dimag fs))) + (setf g2s (f2cl-lib:fsqrt g2)) (setf cs (/ f2s g2s)) + (cond + ((> (abs1 f) one) (setf d (dlapy2 (f2cl-lib:dble f) (f2cl-lib:dimag f))) + (setf ff + (f2cl-lib:dcmplx (/ (f2cl-lib:dble f) d) (/ (f2cl-lib:dimag f) d)))) + (t (setf dr (* safmx2 (f2cl-lib:dble f))) + (setf di (* safmx2 (f2cl-lib:dimag f))) + (setf d + (multiple-value-bind (ret-val var-0 var-1) (dlapy2 dr di) + (declare (ignore)) (when var-0 (setf dr var-0)) + (when var-1 (setf di var-1)) ret-val)) + (setf ff (f2cl-lib:dcmplx (/ dr d) (/ di d))))) + (setf sn + (* ff + (f2cl-lib:dcmplx (/ (f2cl-lib:dble gs) g2s) + (/ (- (f2cl-lib:dimag gs)) g2s)))) + (setf r (+ (* cs f) (* sn g)))) + (t (setf f2s (f2cl-lib:fsqrt (+ one (/ g2 f2)))) + (setf r + (f2cl-lib:dcmplx (* f2s (f2cl-lib:dble fs)) + (* f2s (f2cl-lib:dimag fs)))) + (setf cs (/ one f2s)) (setf d (+ f2 g2)) + (setf sn + (f2cl-lib:dcmplx (/ (f2cl-lib:dble r) d) (/ (f2cl-lib:dimag r) d))) + (setf sn (coerce (* sn (f2cl-lib:dconjg gs)) 'f2cl-lib:complex16)) + (cond + ((/= count$ 0) + (cond + ((> count$ 0) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i count$) nil) + (tagbody + (setf r (* r safmx2)) label30))) + (t + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i + (f2cl-lib:int-sub count$)) + nil) + (tagbody (setf r (* r safmn2)) label40)))))))) + (go end_label) end_label (return (values nil nil cs sn r)))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -116785,7 +128029,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlascl.f} * ===================================================================== SUBROUTINE ZLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO ) * @@ -117013,10 +128257,231 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlascl} - +(let* ((zero 0.0d0) (one 1.0d0)) + (declare (type (double-float 0.0d0 0.0d0) zero) + (type (double-float 1.0d0 1.0d0) one) (ignorable zero one)) + (defun zlascl (type kl ku cfrom cto m n a lda info) + (declare (type (simple-array character (*)) type) + (type (f2cl-lib:integer4) info lda n m ku kl) + (type (double-float) cto cfrom) (type (array f2cl-lib:complex16 (*)) a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%) + (type character type-%data% type-%offset%)) + (prog + ((bignum 0.0d0) (cfrom1 0.0d0) (cfromc 0.0d0) (cto1 0.0d0) (ctoc 0.0d0) + (mul 0.0d0) (smlnum 0.0d0) (i 0) (itype 0) (j 0) (k1 0) + (k2 0) (k3 0) (k4 0) + (done nil)) + (declare (type (double-float) smlnum mul ctoc cto1 + cfromc cfrom1 bignum) + (type (f2cl-lib:integer4) k4 k3 k2 k1 j itype i) + (type f2cl-lib:logical done)) + (setf info 0) + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame type "G") + (declare (ignore var-1)) (when var-0 (setf type var-0)) ret-val) + (setf itype 0)) + ((multiple-value-bind (ret-val var-0 var-1) (lsame type "L") + (declare (ignore var-1)) (when var-0 (setf type var-0)) ret-val) + (setf itype 1)) + ((multiple-value-bind (ret-val var-0 var-1) (lsame type "U") + (declare (ignore var-1)) (when var-0 (setf type var-0)) ret-val) + (setf itype 2)) + ((multiple-value-bind (ret-val var-0 var-1) (lsame type "H") + (declare (ignore var-1)) (when var-0 (setf type var-0)) ret-val) + (setf itype 3)) + ((multiple-value-bind (ret-val var-0 var-1) (lsame type "B") + (declare (ignore var-1)) (when var-0 (setf type var-0)) ret-val) + (setf itype 4)) + ((multiple-value-bind (ret-val var-0 var-1) (lsame type "Q") + (declare (ignore var-1)) (when var-0 (setf type var-0)) ret-val) + (setf itype 5)) + ((multiple-value-bind (ret-val var-0 var-1) (lsame type "Z") + (declare (ignore var-1)) (when var-0 (setf type var-0)) ret-val) + (setf itype 6)) + (t (setf itype -1))) + (cond ((= itype (f2cl-lib:int-sub 1)) (setf info -1)) + ((or (= cfrom zero) + (multiple-value-bind (ret-val var-0) + (disnan cfrom) (declare (ignore)) + (when var-0 (setf cfrom var-0)) ret-val)) + (setf info -4)) + ((multiple-value-bind (ret-val var-0) (disnan cto) (declare (ignore)) + (when var-0 (setf cto var-0)) ret-val) + (setf info -5)) + ((< m 0) (setf info -6)) + ((or (< n 0) (and (= itype 4) (/= n m)) (and (= itype 5) (/= n m))) + (setf info -7)) + ((and (<= itype 3) + (< lda (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 m)))) + (setf info -9)) + ((>= itype 4) + (cond + ((or (< kl 0) + (> kl + (max (the f2cl-lib:integer4 + (f2cl-lib:int-add m (f2cl-lib:int-sub 1))) + (the f2cl-lib:integer4 0)))) + (setf info -2)) + ((or (< ku 0) + (> ku + (max (the f2cl-lib:integer4 + (f2cl-lib:int-add n (f2cl-lib:int-sub 1))) + (the f2cl-lib:integer4 0))) + (and (or (= itype 4) (= itype 5)) (/= kl ku))) + (setf info -3)) + ((or (and (= itype 4) (< lda (f2cl-lib:int-add kl 1))) + (and (= itype 5) (< lda (f2cl-lib:int-add ku 1))) + (and (= itype 6) + (< lda (f2cl-lib:int-add (f2cl-lib:int-mul 2 kl) ku 1)))) + (setf info -9))))) + (cond ((/= info 0) + (xerbla "ZLASCL" (f2cl-lib:int-sub info)) (go end_label))) + (if (or (= n 0) (= m 0)) (go end_label)) (setf smlnum (dlamch "S")) + (setf bignum (/ one smlnum)) + (setf cfromc cfrom) + (setf ctoc cto) label10 + (setf cfrom1 (* cfromc smlnum)) + (cond + ((= cfrom1 cfromc) + (setf mul (/ ctoc cfromc)) + (setf done f2cl-lib:%true%) + (setf cto1 ctoc)) + (t (setf cto1 (/ ctoc bignum)) + (cond + ((= cto1 ctoc) (setf mul ctoc) (setf done f2cl-lib:%true%) + (setf cfromc one)) + ((and (> (abs cfrom1) (abs ctoc)) (/= ctoc zero)) (setf mul smlnum) + (setf done f2cl-lib:%false%) (setf cfromc cfrom1)) + ((> (abs cto1) (abs cfromc)) + (setf mul bignum) + (setf done f2cl-lib:%false%) + (setf ctoc cto1)) + (t (setf mul (/ ctoc cfromc)) (setf done f2cl-lib:%true%))))) + (cond + ((= itype 0) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i m) nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) + (* (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) mul)) + label20)) + label30))) + ((= itype 1) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (i j (f2cl-lib:int-add i 1)) + ((> i m) nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) + (* (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) mul)) + label40)) + label50))) + ((= itype 2) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i + (min (the f2cl-lib:integer4 j) + (the f2cl-lib:integer4 m))) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) + (* (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) mul)) + label60)) + label70))) + ((= itype 3) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i + (min (the f2cl-lib:integer4 (f2cl-lib:int-add j 1)) + (the f2cl-lib:integer4 m))) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) + (* (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) mul)) + label80)) + label90))) + ((= itype 4) (setf k3 (f2cl-lib:int-add kl 1)) + (setf k4 (f2cl-lib:int-add n 1)) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i + (min (the f2cl-lib:integer4 k3) + (the f2cl-lib:integer4 + (f2cl-lib:int-add k4 (f2cl-lib:int-sub j))))) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) + (* (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) mul)) + label100)) + label110))) + ((= itype 5) (setf k1 (f2cl-lib:int-add ku 2)) + (setf k3 (f2cl-lib:int-add ku 1)) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (i + (max (the f2cl-lib:integer4 + (f2cl-lib:int-add k1 (f2cl-lib:int-sub j))) + (the f2cl-lib:integer4 1)) + (f2cl-lib:int-add i 1)) + ((> i k3) nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) + (* (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) mul)) + label120)) + label130))) + ((= itype 6) (setf k1 (f2cl-lib:int-add kl ku 2)) + (setf k2 (f2cl-lib:int-add kl 1)) + (setf k3 (f2cl-lib:int-add (f2cl-lib:int-mul 2 kl) ku 1)) + (setf k4 (f2cl-lib:int-add kl ku 1 m)) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (i + (max (the f2cl-lib:integer4 + (f2cl-lib:int-add k1 (f2cl-lib:int-sub j))) + (the f2cl-lib:integer4 k2)) + (f2cl-lib:int-add i 1)) + ((> i + (min (the f2cl-lib:integer4 k3) + (the f2cl-lib:integer4 + (f2cl-lib:int-add k4 (f2cl-lib:int-sub j))))) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) + (* (f2cl-lib:fref a-%data% (i j) ((1 lda) (1 *)) + a-%offset%) mul)) + label140)) + label150)))) + (if (not done) (go label10)) (go end_label) end_label + (return (values type nil nil cfrom cto nil nil nil nil info)))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -117125,7 +128590,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlaset.f} * ===================================================================== SUBROUTINE ZLASET( UPLO, M, N, ALPHA, BETA, A, LDA ) * @@ -117206,10 +128671,94 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlaset} - +(defun zlaset (uplo m n alpha beta a lda) + (declare (type (simple-array character (*)) uplo) + (type (f2cl-lib:integer4) lda n m) (type (f2cl-lib:complex16) beta alpha) + (type (array f2cl-lib:complex16 (*)) a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%) + (uplo character uplo-%data% uplo-%offset%)) + (prog ((i 0) (j 0)) + (declare (type (f2cl-lib:integer4) j i)) + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame uplo "U") + (declare (ignore var-1)) (when var-0 (setf uplo var-0)) ret-val) + (f2cl-lib:fdo (j 2 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i + (min (the f2cl-lib:integer4 + (f2cl-lib:int-add j (f2cl-lib:int-sub 1))) + (the f2cl-lib:integer4 m))) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) alpha) + label10)) + label20)) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i + (min (the f2cl-lib:integer4 n) + (the f2cl-lib:integer4 m))) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i i) + ((1 lda) (1 *)) a-%offset%) beta) + label30))) + ((multiple-value-bind (ret-val var-0 var-1) (lsame uplo "L") + (declare (ignore var-1)) (when var-0 (setf uplo var-0)) ret-val) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j + (min (the f2cl-lib:integer4 m) + (the f2cl-lib:integer4 n))) + nil) + (tagbody + (f2cl-lib:fdo (i (f2cl-lib:int-add j 1) + (f2cl-lib:int-add i 1)) + ((> i m) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) alpha) + label40)) + label50)) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i + (min (the f2cl-lib:integer4 n) + (the f2cl-lib:integer4 m))) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i i) + ((1 lda) (1 *)) a-%offset%) beta) + label60))) + (t + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i m) nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) alpha) + label70)) + label80)) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i + (min (the f2cl-lib:integer4 m) + (the f2cl-lib:integer4 n))) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i i) + ((1 lda) (1 *)) a-%offset%) beta) + label90)))) + (go end_label) + end_label + (return (values uplo nil nil nil nil nil nil))) + )) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -117320,7 +128869,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlassq.f} * ===================================================================== SUBROUTINE ZLASSQ( N, X, INCX, SCALE, SUMSQ ) * @@ -117381,7 +128930,7 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlassq} (let* ((zero 0.0)) @@ -117406,11 +128955,13 @@ Man Page Details nil) (tagbody (cond - ((/= (coerce (realpart (f2cl-lib:fref x (ix) ((1 *)))) 'double-float) zero) + ((/= (coerce (realpart + (f2cl-lib:fref x (ix) ((1 *)))) 'double-float) zero) (setf temp1 (abs (coerce (realpart - (f2cl-lib:fref x-%data% (ix) ((1 *)) x-%offset%)) 'double-float))) + (f2cl-lib:fref x-%data% (ix) + ((1 *)) x-%offset%)) 'double-float))) (cond ((< scale temp1) (setf sumsq (+ 1 (* sumsq (expt (/ scale temp1) 2)))) @@ -117664,7 +129215,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zlatrs.f} * ===================================================================== SUBROUTINE ZLATRS( UPLO, TRANS, DIAG, NORMIN, N, A, LDA, X, SCALE, $ CNORM, INFO ) @@ -118395,10 +129946,737 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zlatrs} - +(let* ((zero 0.0d0) (half 0.5d0) (one 1.0d0) (two 2.0d0)) + (declare (type (double-float 0.0d0 0.0d0) zero) + (type (double-float 0.5d0 0.5d0) half) (type (double-float 1.0d0 1.0d0) one) + (type (double-float 2.0d0 2.0d0) two) (ignorable zero half one two)) + (defun zlatrs (uplo trans diag normin n a lda x scale cnorm info) + (declare (type (simple-array character (*)) normin diag trans uplo) + (type (f2cl-lib:integer4) info lda n) + (type (array f2cl-lib:complex16 (*)) x a) (type (double-float) scale) + (type (array double-float (*)) cnorm)) + (f2cl-lib:with-multi-array-data + ((cnorm double-float cnorm-%data% + cnorm-%offset%) + (a f2cl-lib:complex16 a-%data% a-%offset%) + (x f2cl-lib:complex16 x-%data% x-%offset%) + (uplo character uplo-%data% uplo-%offset%) + (trans character trans-%data% trans-%offset%) + (diag character diag-%data% diag-%offset%) + (normin character normin-%data% normin-%offset%)) + (labels + ((cabs1 (zdum) (+ (abs (f2cl-lib:dble zdum)) + (abs (f2cl-lib:dimag zdum)))) + (cabs2 (zdum) + (+ (abs (/ (f2cl-lib:dble zdum) 2.0d0)) + (abs (/ (f2cl-lib:dimag zdum) 2.0d0))))) + (declare + (ftype (function (f2cl-lib:complex16) + (values double-float &rest t)) cabs1)) + (declare + (ftype (function (f2cl-lib:complex16) + (values double-float &rest t)) cabs2)) + (prog + ((csumj #C(0.0d0 0.0d0)) (tjjs #C(0.0d0 0.0d0)) + (uscal #C(0.0d0 0.0d0)) + (zdum #C(0.0d0 0.0d0)) (bignum 0.0d0) (grow 0.0d0) (rec 0.0d0) + (smlnum 0.0d0) (tjj 0.0d0) (tmax 0.0d0) (tscal 0.0d0) (xbnd 0.0d0) + (xj 0.0d0) (xmax 0.0d0) (i 0) (imax 0) (j 0) (jfirst 0) + (jinc 0) (jlast 0) + (notran nil) (nounit nil) (upper nil)) + (declare (type (f2cl-lib:complex16) zdum uscal tjjs csumj) + (type (double-float) xmax xj xbnd tscal tmax tjj + smlnum rec grow bignum) + (type (f2cl-lib:integer4) jlast jinc jfirst j imax i) + (type f2cl-lib:logical upper nounit notran)) + (setf info 0) + (setf upper + (multiple-value-bind (ret-val var-0 var-1) (lsame uplo "U") + (declare (ignore var-1)) (when var-0 (setf uplo var-0)) ret-val)) + (setf notran + (multiple-value-bind (ret-val var-0 var-1) (lsame trans "N") + (declare (ignore var-1)) (when var-0 (setf trans var-0)) ret-val)) + (setf nounit + (multiple-value-bind (ret-val var-0 var-1) (lsame diag "N") + (declare (ignore var-1)) (when var-0 (setf diag var-0)) ret-val)) + (cond + ((and (not upper) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame uplo "L") + (declare (ignore var-1)) + (when var-0 (setf uplo var-0)) ret-val))) + (setf info -1)) + ((and (not notran) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame trans "T") + (declare (ignore var-1)) + (when var-0 (setf trans var-0)) ret-val)) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame trans "C") + (declare (ignore var-1)) + (when var-0 (setf trans var-0)) ret-val))) + (setf info -2)) + ((and (not nounit) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame diag "U") + (declare (ignore var-1)) + (when var-0 (setf diag var-0)) ret-val))) + (setf info -3)) + ((and + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame normin "Y") + (declare (ignore var-1)) + (when var-0 (setf normin var-0)) ret-val)) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame normin "N") + (declare (ignore var-1)) + (when var-0 (setf normin var-0)) ret-val))) + (setf info -4)) + ((< n 0) (setf info -5)) + ((< lda (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n))) + (setf info -7))) + (cond ((/= info 0) + (xerbla "ZLATRS" (f2cl-lib:int-sub info)) (go end_label))) + (if (= n 0) (go end_label)) (setf smlnum (dlamch "Safe minimum")) + (setf bignum (/ one smlnum)) + (multiple-value-bind (var-0 var-1) + (dlabad smlnum bignum) (declare (ignore)) + (when var-0 (setf smlnum var-0)) (when var-1 (setf bignum var-1))) + (setf smlnum (/ smlnum (dlamch "Precision"))) + (setf bignum (/ one smlnum)) + (setf scale one) + (cond + ((multiple-value-bind (ret-val var-0 var-1) (lsame normin "N") + (declare (ignore var-1)) (when var-0 (setf normin var-0)) ret-val) + (cond + (upper + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (setf (f2cl-lib:fref cnorm-%data% (j) + ((1 *)) cnorm-%offset%) + (dzasum (f2cl-lib:int-sub j 1) + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 (1 j) + ((1 lda) (1 *)) a-%offset%) + 1)) + label10))) + (t + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j + (f2cl-lib:int-add n (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf (f2cl-lib:fref cnorm-%data% (j) + ((1 *)) cnorm-%offset%) + (dzasum (f2cl-lib:int-sub n j) + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 ((+ j 1) j) + ((1 lda) (1 *)) a-%offset%) + 1)) + label20)) + (setf (f2cl-lib:fref cnorm-%data% (n) + ((1 *)) cnorm-%offset%) zero))))) + (setf imax + (multiple-value-bind (ret-val var-0 var-1 var-2) (idamax n cnorm 1) + (declare (ignore var-1 var-2)) (when var-0 (setf n var-0)) ret-val)) + (setf tmax (f2cl-lib:fref cnorm-%data% (imax) ((1 *)) cnorm-%offset%)) + (cond ((<= tmax (* bignum half)) (setf tscal one)) + (t (setf tscal (/ half (* smlnum tmax))) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (dscal n tscal cnorm 1) + (declare (ignore var-2 var-3)) (when var-0 (setf n var-0)) + (when var-1 (setf tscal var-1))))) + (setf xmax zero) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (setf xmax + (max xmax (cabs2 (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%)))) + label30)) + (setf xbnd xmax) + (cond + (notran + (tagbody + (cond (upper (setf jfirst n) (setf jlast 1) (setf jinc -1)) + (t (setf jfirst 1) (setf jlast n) (setf jinc 1))) + (cond ((/= tscal one) (setf grow zero) (go label60))) + (cond + (nounit (setf grow (/ half (max xbnd smlnum))) (setf xbnd grow) + (f2cl-lib:fdo (j jfirst (f2cl-lib:int-add j jinc)) + ((> j jlast) nil) + (tagbody + (if (<= grow smlnum) (go label60)) + (setf tjjs (f2cl-lib:fref a-%data% (j j) + ((1 lda) (1 *)) a-%offset%)) + (setf tjj (cabs1 tjjs)) + (cond ((>= tjj smlnum) + (setf xbnd (min xbnd (* (min one tjj) grow)))) + (t (setf xbnd zero))) + (cond + ((>= (+ tjj (f2cl-lib:fref cnorm (j) + ((1 *)))) smlnum) + (setf grow + (* grow + (/ tjj + (+ tjj + (f2cl-lib:fref cnorm-%data% (j) + ((1 *)) cnorm-%offset%)))))) + (t (setf grow zero))) + label40)) + (setf grow xbnd)) + (t (setf grow (min one (/ half (max xbnd smlnum)))) + (f2cl-lib:fdo (j jfirst (f2cl-lib:int-add j jinc)) + ((> j jlast) nil) + (tagbody + (if (<= grow smlnum) (go label60)) + (setf grow + (* grow + (/ one + (+ one (f2cl-lib:fref cnorm-%data% (j) + ((1 *)) cnorm-%offset%))))) + label50)))) + label60)) + (t + (tagbody + (cond (upper (setf jfirst 1) (setf jlast n) (setf jinc 1)) + (t (setf jfirst n) (setf jlast 1) (setf jinc -1))) + (cond ((/= tscal one) (setf grow zero) (go label90))) + (cond + (nounit (setf grow (/ half (max xbnd smlnum))) (setf xbnd grow) + (f2cl-lib:fdo (j jfirst (f2cl-lib:int-add j jinc)) + ((> j jlast) nil) + (tagbody + (if (<= grow smlnum) (go label90)) + (setf xj + (+ one (f2cl-lib:fref cnorm-%data% (j) + ((1 *)) cnorm-%offset%))) + (setf grow (min grow (/ xbnd xj))) + (setf tjjs (f2cl-lib:fref a-%data% (j j) + ((1 lda) (1 *)) a-%offset%)) + (setf tjj (cabs1 tjjs)) + (cond ((>= tjj smlnum) + (if (> xj tjj) + (setf xbnd (* xbnd (/ tjj xj))))) + (t (setf xbnd zero))) + label70)) + (setf grow (min grow xbnd))) + (t (setf grow (min one (/ half (max xbnd smlnum)))) + (f2cl-lib:fdo (j jfirst (f2cl-lib:int-add j jinc)) + ((> j jlast) nil) + (tagbody + (if (<= grow smlnum) (go label90)) + (setf xj + (+ one (f2cl-lib:fref cnorm-%data% (j) + ((1 *)) cnorm-%offset%))) + (setf grow (/ grow xj)) label80)))) + label90))) + (cond + ((> (* grow tscal) smlnum) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 + var-5 var-6 var-7) + (ztrsv uplo trans diag n a lda x 1) + (declare (ignore var-4 var-6 var-7)) + (when var-0 (setf uplo var-0)) (when var-1 (setf trans var-1)) + (when var-2 (setf diag var-2)) (when var-3 (setf n var-3)) + (when var-5 (setf lda var-5)))) + (t + (cond + ((> xmax (* bignum half)) (setf scale (/ (* bignum half) xmax)) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal n scale x 1) + (declare (ignore var-2 var-3)) (when var-0 (setf n var-0)) + (when var-1 (setf scale var-1))) + (setf xmax bignum)) + (t (setf xmax (* xmax two)))) + (cond + (notran + (f2cl-lib:fdo (j jfirst (f2cl-lib:int-add j jinc)) + ((> j jlast) nil) + (tagbody + (setf xj (cabs1 (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%))) + (cond + (nounit + (setf tjjs + (* (f2cl-lib:fref a-%data% (j j) + ((1 lda) (1 *)) a-%offset%) tscal))) + (t (setf tjjs (coerce tscal 'f2cl-lib:complex16)) + (if (= tscal one) (go label110)))) + (setf tjj (cabs1 tjjs)) + (cond + ((> tjj smlnum) + (cond + ((< tjj one) + (cond + ((> xj (* tjj bignum)) (setf rec (/ one xj)) + (multiple-value-bind (var-0 var-1 var-2 + var-3) + (zdscal n rec x 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf rec var-1))) + (setf scale (* scale rec)) + (setf xmax (* xmax rec)))))) + (setf (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) + (zladiv (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) tjjs)) + (setf xj (cabs1 (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%)))) + ((> tjj zero) + (cond + ((> xj (* tjj bignum)) + (setf rec (/ (* tjj bignum) xj)) + (cond + ((> (f2cl-lib:fref cnorm (j) ((1 *))) one) + (setf rec + (/ rec + (f2cl-lib:fref cnorm-%data% (j) + ((1 *)) cnorm-%offset%))))) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal n rec x 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf rec var-1))) + (setf scale (* scale rec)) + (setf xmax (* xmax rec)))) + (setf (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) + (zladiv (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) tjjs)) + (setf xj (cabs1 + (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%)))) + (t + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf (f2cl-lib:fref x-%data% (i) + ((1 *)) x-%offset%) + (coerce zero 'f2cl-lib:complex16)) + label100)) + (setf (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) + (coerce one 'f2cl-lib:complex16)) + (setf xj one) + (setf scale zero) + (setf xmax zero))) + label110 + (cond + ((> xj one) (setf rec (/ one xj)) + (cond + ((> (f2cl-lib:fref cnorm (j) ((1 *))) + (* (+ bignum (- xmax)) rec)) + (setf rec (* rec half)) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal n rec x 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf rec var-1))) + (setf scale (* scale rec))))) + ((> (* xj (f2cl-lib:fref cnorm (j) + ((1 *)))) (+ bignum (- xmax))) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal n half x 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf half var-1))) + (setf scale (* scale half)))) + (cond + (upper + (cond + ((> j 1) + (zaxpy (f2cl-lib:int-sub j 1) + (* (- (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%)) tscal) + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 (1 j) + ((1 lda) (1 *)) a-%offset%) + 1 x 1) + (setf i (izamax (f2cl-lib:int-sub j 1) x 1)) + (setf xmax + (cabs1 (f2cl-lib:fref x-%data% (i) + ((1 *)) x-%offset%)))))) + (t + (cond + ((< j n) + (zaxpy (f2cl-lib:int-sub n j) + (* (- (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%)) tscal) + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 ((+ j 1) j) + ((1 lda) (1 *)) a-%offset%) + 1 + (f2cl-lib:array-slice x-%data% + f2cl-lib:complex16 ((+ j 1)) ((1 *)) + x-%offset%) + 1) + (setf i + (f2cl-lib:int-add j + (izamax (f2cl-lib:int-sub n j) + (f2cl-lib:array-slice x-%data% + f2cl-lib:complex16 ((+ j 1)) + ((1 *)) x-%offset%) + 1))) + (setf xmax + (cabs1 (f2cl-lib:fref x-%data% (i) + ((1 *)) x-%offset%))))))) + label120))) + ((multiple-value-bind (ret-val var-0 var-1) (lsame trans "T") + (declare (ignore var-1)) (when var-0 (setf trans var-0)) ret-val) + (f2cl-lib:fdo (j jfirst (f2cl-lib:int-add j jinc)) + ((> j jlast) nil) + (tagbody + (setf xj (cabs1 (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%))) + (setf uscal (coerce tscal 'f2cl-lib:complex16)) + (setf rec (/ one (max xmax one))) + (cond + ((> (f2cl-lib:fref cnorm (j) + ((1 *))) (* (+ bignum (- xj)) rec)) + (setf rec (* rec half)) + (cond + (nounit + (setf tjjs + (* (f2cl-lib:fref a-%data% (j j) + ((1 lda) (1 *)) a-%offset%) + tscal))) + (t (setf tjjs + (coerce tscal 'f2cl-lib:complex16)))) + (setf tjj (cabs1 tjjs)) + (cond + ((> tjj one) (setf rec (min one (* rec tjj))) + (setf uscal (zladiv uscal tjjs)))) + (cond + ((< rec one) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal n rec x 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf rec var-1))) + (setf scale (* scale rec)) + (setf xmax (* xmax rec)))))) + (setf csumj (coerce zero 'f2cl-lib:complex16)) + (cond + ((= uscal (f2cl-lib:dcmplx one)) + (cond + (upper + (setf csumj + (zdotu (f2cl-lib:int-sub j 1) + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 (1 j) + ((1 lda) (1 *)) a-%offset%) + 1 x 1))) + ((< j n) + (setf csumj + (zdotu (f2cl-lib:int-sub n j) + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 ((+ j 1) j) + ((1 lda) (1 *)) a-%offset%) + 1 + (f2cl-lib:array-slice x-%data% + f2cl-lib:complex16 ((+ j 1)) + ((1 *)) x-%offset%) + 1))))) + (t + (cond + (upper + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i + (f2cl-lib:int-add j + (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf csumj + (+ csumj + (* (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) + uscal (f2cl-lib:fref x-%data% (i) + ((1 *)) x-%offset%)))) + label130))) + ((< j n) + (f2cl-lib:fdo (i (f2cl-lib:int-add j 1) + (f2cl-lib:int-add i 1)) + ((> i + n) + nil) + (tagbody + (setf csumj + (+ csumj + (* (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) + uscal (f2cl-lib:fref x-%data% (i) + ((1 *)) x-%offset%)))) + label140)))))) + (cond + ((= uscal (f2cl-lib:dcmplx tscal)) + (tagbody + (setf (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) + (- (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) csumj)) + (setf xj (cabs1 (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%))) + (cond + (nounit + (setf tjjs + (* (f2cl-lib:fref a-%data% (j j) + ((1 lda) (1 *)) a-%offset%) + tscal))) + (t (setf tjjs + (coerce tscal 'f2cl-lib:complex16)) + (if (= tscal one) (go label160)))) + (setf tjj (cabs1 tjjs)) + (cond + ((> tjj smlnum) + (cond + ((< tjj one) + (cond + ((> xj (* tjj bignum)) + (setf rec (/ one xj)) + (multiple-value-bind (var-0 var-1 + var-2 var-3) + (zdscal n rec x 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf rec var-1))) + (setf scale (* scale rec)) + (setf xmax (* xmax rec)))))) + (setf (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) + (zladiv (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) tjjs))) + ((> tjj zero) + (cond + ((> xj (* tjj bignum)) + (setf rec (/ (* tjj bignum) xj)) + (multiple-value-bind (var-0 var-1 var-2 + var-3) + (zdscal n rec x 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf rec var-1))) + (setf scale (* scale rec)) + (setf xmax (* xmax rec)))) + (setf (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) + (zladiv (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) tjjs))) + (t + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf (f2cl-lib:fref x-%data% (i) + ((1 *)) x-%offset%) + (coerce zero 'f2cl-lib:complex16)) + label150)) + (setf (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) + (coerce one 'f2cl-lib:complex16)) + (setf scale zero) (setf xmax zero))) + label160)) + (t + (setf (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) + (- (zladiv (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) tjjs) + csumj)))) + (setf xmax + (max xmax (cabs1 + (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%)))) + label170))) + (t + (f2cl-lib:fdo (j jfirst (f2cl-lib:int-add j jinc)) + ((> j jlast) nil) + (tagbody + (setf xj (cabs1 (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%))) + (setf uscal (coerce tscal 'f2cl-lib:complex16)) + (setf rec (/ one (max xmax one))) + (cond + ((> (f2cl-lib:fref cnorm (j) ((1 *))) + (* (+ bignum (- xj)) rec)) + (setf rec (* rec half)) + (cond + (nounit + (setf tjjs + (coerce + (* + (f2cl-lib:dconjg + (f2cl-lib:fref a-%data% (j j) + ((1 lda) (1 *)) a-%offset%)) + tscal) + 'f2cl-lib:complex16))) + (t + (setf tjjs + (coerce tscal 'f2cl-lib:complex16)))) + (setf tjj (cabs1 tjjs)) + (cond + ((> tjj one) (setf rec (min one (* rec tjj))) + (setf uscal (zladiv uscal tjjs)))) + (cond + ((< rec one) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal n rec x 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf rec var-1))) + (setf scale (* scale rec)) + (setf xmax (* xmax rec)))))) + (setf csumj (coerce zero 'f2cl-lib:complex16)) + (cond + ((= uscal (f2cl-lib:dcmplx one)) + (cond + (upper + (setf csumj + (zdotc (f2cl-lib:int-sub j 1) + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 (1 j) + ((1 lda) (1 *)) a-%offset%) + 1 x 1))) + ((< j n) + (setf csumj + (zdotc (f2cl-lib:int-sub n j) + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 ((+ j 1) j) + ((1 lda) (1 *)) a-%offset%) + 1 + (f2cl-lib:array-slice x-%data% + f2cl-lib:complex16 ((+ j 1)) + ((1 *)) x-%offset%) + 1))))) + (t + (cond + (upper + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i + (f2cl-lib:int-add j + (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf csumj + (+ csumj + (* + (f2cl-lib:dconjg + (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%)) + uscal (f2cl-lib:fref x-%data% (i) + ((1 *)) x-%offset%)))) + label180))) + ((< j n) + (f2cl-lib:fdo (i (f2cl-lib:int-add j 1) + (f2cl-lib:int-add i 1)) + ((> i + n) + nil) + (tagbody + (setf csumj + (+ csumj + (* + (f2cl-lib:dconjg + (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%)) + uscal (f2cl-lib:fref x-%data% (i) + ((1 *)) x-%offset%)))) + label190)))))) + (cond + ((= uscal (f2cl-lib:dcmplx tscal)) + (tagbody + (setf (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) + (- (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) csumj)) + (setf xj (cabs1 (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%))) + (cond + (nounit + (setf tjjs + (coerce + (* + (f2cl-lib:dconjg + (f2cl-lib:fref a-%data% (j j) + ((1 lda) (1 *)) a-%offset%)) + tscal) + 'f2cl-lib:complex16))) + (t (setf tjjs + (coerce tscal 'f2cl-lib:complex16)) + (if (= tscal one) (go label210)))) + (setf tjj (cabs1 tjjs)) + (cond + ((> tjj smlnum) + (cond + ((< tjj one) + (cond + ((> xj (* tjj bignum)) + (setf rec (/ one xj)) + (multiple-value-bind (var-0 var-1 + var-2 var-3) + (zdscal n rec x 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf rec var-1))) + (setf scale (* scale rec)) + (setf xmax (* xmax rec)))))) + (setf (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) + (zladiv (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) tjjs))) + ((> tjj zero) + (cond + ((> xj (* tjj bignum)) + (setf rec (/ (* tjj bignum) xj)) + (multiple-value-bind (var-0 var-1 var-2 + var-3) + (zdscal n rec x 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf rec var-1))) + (setf scale (* scale rec)) + (setf xmax (* xmax rec)))) + (setf (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) + (zladiv (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) tjjs))) + (t + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf (f2cl-lib:fref x-%data% (i) + ((1 *)) x-%offset%) + (coerce zero 'f2cl-lib:complex16)) + label200)) + (setf (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) + (coerce one 'f2cl-lib:complex16)) + (setf scale zero) (setf xmax zero))) + label210)) + (t + (setf (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) + (- (zladiv (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%) tjjs) + csumj)))) + (setf xmax + (max xmax (cabs1 (f2cl-lib:fref x-%data% (j) + ((1 *)) x-%offset%)))) + label220)))) + (setf scale (/ scale tscal)))) + (cond + ((/= tscal one) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (dscal n (/ one tscal) cnorm 1) + (declare (ignore var-1 var-2 var-3)) + (when var-0 (setf n var-0))))) + (go end_label) end_label + (return + (values uplo trans diag normin n nil lda nil scale nil info)))) + ))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -118504,7 +130782,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zrot.f} * ===================================================================== SUBROUTINE ZROT( N, CX, INCX, CY, INCY, C, S ) * @@ -118566,10 +130844,60 @@ Man Page Details RETURN END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zrot} - +(defun zrot (n cx incx cy incy c s) + (declare (type (f2cl-lib:integer4) incy incx n) + (type (array f2cl-lib:complex16 (*)) cy cx) (type (double-float) c) + (type (f2cl-lib:complex16) s)) + (f2cl-lib:with-multi-array-data + ((cx f2cl-lib:complex16 cx-%data% cx-%offset%) + (cy f2cl-lib:complex16 cy-%data% cy-%offset%)) + (prog + ((stemp #C(0.0d0 0.0d0)) (i 0) (ix 0) (iy 0)) + (declare (type (f2cl-lib:complex16) stemp) + (type (f2cl-lib:integer4) iy ix i)) + (if (<= n 0) (go end_label)) + (if (and (= incx 1) (= incy 1)) (go label20)) + (setf ix 1) (setf iy 1) + (if (< incx 0) + (setf ix + (f2cl-lib:int-add (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incx) 1))) + (if (< incy 0) + (setf iy + (f2cl-lib:int-add (f2cl-lib:int-mul (f2cl-lib:int-sub 1 n) incy) 1))) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf stemp + (+ (* c (f2cl-lib:fref cx-%data% (ix) ((1 *)) cx-%offset%)) + (* s (f2cl-lib:fref cy-%data% (iy) ((1 *)) cy-%offset%)))) + (setf (f2cl-lib:fref cy-%data% (iy) ((1 *)) cy-%offset%) + (- (* c (f2cl-lib:fref cy-%data% (iy) ((1 *)) cy-%offset%)) + (* (f2cl-lib:dconjg s) + (f2cl-lib:fref cx-%data% (ix) ((1 *)) cx-%offset%)))) + (setf (f2cl-lib:fref cx-%data% (ix) ((1 *)) + cx-%offset%) stemp) + (setf ix (f2cl-lib:int-add ix incx)) + (setf iy (f2cl-lib:int-add iy incy)) + label10)) + (go end_label) label20 + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf stemp + (+ (* c (f2cl-lib:fref cx-%data% (i) ((1 *)) cx-%offset%)) + (* s (f2cl-lib:fref cy-%data% (i) ((1 *)) cy-%offset%)))) + (setf (f2cl-lib:fref cy-%data% (i) ((1 *)) cy-%offset%) + (- (* c (f2cl-lib:fref cy-%data% (i) ((1 *)) cy-%offset%)) + (* (f2cl-lib:dconjg s) + (f2cl-lib:fref cx-%data% (i) ((1 *)) cx-%offset%)))) + (setf (f2cl-lib:fref cx-%data% (i) ((1 *)) cx-%offset%) + stemp) label30) + ) + (go end_label) end_label (return (values nil nil nil nil nil nil nil))) + )) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -118778,7 +131106,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{ztrevc.f} * ===================================================================== SUBROUTINE ZTREVC( SIDE, HOWMNY, SELECT, N, T, LDT, VL, LDVL, VR, $ LDVR, MM, M, WORK, RWORK, INFO ) @@ -119050,10 +131378,471 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK ztrevc} - +(let* + ((zero 0.0d0) (one 1.0d0) + (cmzero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16)) + (cmone (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (double-float 0.0d0 0.0d0) zero) + (type (double-float 1.0d0 1.0d0) one) (type (f2cl-lib:complex16) cmzero) + (type (f2cl-lib:complex16) cmone) (ignorable zero one cmzero cmone)) + (defun ztrevc + (side howmny select n t$ ldt vl ldvl vr ldvr mm m work rwork info) + (declare (type (simple-array character (*)) howmny side) + (type (array f2cl-lib:logical (*)) select) + (type (f2cl-lib:integer4) info m mm ldvr ldvl ldt n) + (type (array f2cl-lib:complex16 (*)) work vr vl t$) + (type (array double-float (*)) rwork)) + (f2cl-lib:with-multi-array-data + ((rwork double-float rwork-%data% + rwork-%offset%) + (t$ f2cl-lib:complex16 t$-%data% t$-%offset%) + (vl f2cl-lib:complex16 vl-%data% vl-%offset%) + (vr f2cl-lib:complex16 vr-%data% vr-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%) + (select f2cl-lib:logical select-%data% select-%offset%) + (side character side-%data% side-%offset%) + (howmny character howmny-%data% howmny-%offset%)) + (labels + ((cabs1 (cdum) + (+ (abs (f2cl-lib:dble cdum)) (abs (f2cl-lib:dimag cdum))))) + (declare + (ftype (function (f2cl-lib:complex16) + (values double-float &rest t)) cabs1)) + (prog + ((cdum #C(0.0d0 0.0d0)) (ovfl 0.0d0) (remax 0.0d0) + (scale 0.0d0) (smin 0.0d0) + (smlnum 0.0d0) (ulp 0.0d0) (unfl 0.0d0) + (i 0) (ii 0) (is 0) (j 0) (k 0) + (ki 0) (allv nil) (bothv nil) (leftv nil) (over nil) (rightv nil) + (somev nil) (dcmplx$ 0.0)) + (declare (type (f2cl-lib:complex16) cdum) + (type (double-float) unfl ulp smlnum smin scale remax ovfl) + (type (f2cl-lib:integer4) ki k j is ii i) + (type f2cl-lib:logical somev rightv over leftv bothv allv) + (type (single-float) dcmplx$)) + (setf bothv + (multiple-value-bind (ret-val var-0 var-1) (lsame side "B") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val)) + (setf rightv + (or + (multiple-value-bind (ret-val var-0 var-1) (lsame side "R") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val) + bothv)) + (setf leftv + (or + (multiple-value-bind (ret-val var-0 var-1) (lsame side "L") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val) + bothv)) + (setf allv + (multiple-value-bind (ret-val var-0 var-1) (lsame howmny "A") + (declare (ignore var-1)) (when var-0 (setf howmny var-0)) ret-val)) + (setf over + (multiple-value-bind (ret-val var-0 var-1) (lsame howmny "B") + (declare (ignore var-1)) (when var-0 (setf howmny var-0)) ret-val)) + (setf somev + (multiple-value-bind (ret-val var-0 var-1) (lsame howmny "S") + (declare (ignore var-1)) (when var-0 (setf howmny var-0)) ret-val)) + (cond + (somev (setf m 0) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (if (f2cl-lib:fref select-%data% (j) + ((1 *)) select-%offset%) + (setf m (f2cl-lib:int-add m 1))) + label10))) + (t (setf m n))) + (setf info 0) + (cond ((and (not rightv) (not leftv)) (setf info -1)) + ((and (not allv) (not over) (not somev)) (setf info -2)) + ((< n 0) (setf info -4)) + ((< ldt (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n))) + (setf info -6)) + ((or (< ldvl 1) (and leftv (< ldvl n))) (setf info -8)) + ((or (< ldvr 1) (and rightv (< ldvr n))) (setf info -10)) + ((< mm m) (setf info -11))) + (cond ((/= info 0) + (xerbla "ZTREVC" (f2cl-lib:int-sub info)) (go end_label))) + (if (= n 0) (go end_label)) (setf unfl (dlamch "Safe minimum")) + (setf ovfl (/ one unfl)) + (multiple-value-bind (var-0 var-1) + (dlabad unfl ovfl) (declare (ignore)) + (when var-0 (setf unfl var-0)) (when var-1 (setf ovfl var-1))) + (setf ulp (dlamch "Precision")) (setf smlnum (* unfl (/ n ulp))) + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf + (f2cl-lib:fref work-%data% + ((f2cl-lib:int-add i n)) ((1 *)) work-%offset%) + (f2cl-lib:fref t$-%data% (i i) + ((1 ldt) (1 *)) t$-%offset%)) + label20)) + (setf (f2cl-lib:fref rwork-%data% (1) ((1 *)) rwork-%offset%) zero) + (f2cl-lib:fdo (j 2 (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (setf (f2cl-lib:fref rwork-%data% (j) + ((1 *)) rwork-%offset%) + (dzasum (f2cl-lib:int-sub j 1) + (f2cl-lib:array-slice t$-%data% + f2cl-lib:complex16 (1 j) ((1 ldt) (1 *)) + t$-%offset%) + 1)) + label30)) + (cond + (rightv (setf is m) + (f2cl-lib:fdo (ki n (f2cl-lib:int-add ki (f2cl-lib:int-sub 1))) + ((> ki 1) + nil) + (tagbody + (cond + (somev + (if (not (f2cl-lib:fref select-%data% (ki) + ((1 *)) select-%offset%)) + (go label80)))) + (setf smin + (max + (* ulp + (cabs1 (f2cl-lib:fref t$-%data% (ki ki) + ((1 ldt) (1 *)) t$-%offset%))) + smlnum)) + (setf (f2cl-lib:fref work-%data% (1) + ((1 *)) work-%offset%) cmone) + (f2cl-lib:fdo (k 1 (f2cl-lib:int-add k 1)) + ((> k + (f2cl-lib:int-add ki (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf (f2cl-lib:fref work-%data% (k) + ((1 *)) work-%offset%) + (- (f2cl-lib:fref t$-%data% (k ki) + ((1 ldt) (1 *)) t$-%offset%))) + label40)) + (f2cl-lib:fdo (k 1 (f2cl-lib:int-add k 1)) + ((> k + (f2cl-lib:int-add ki (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf (f2cl-lib:fref t$-%data% (k k) + ((1 ldt) (1 *)) t$-%offset%) + (- (f2cl-lib:fref t$-%data% (k k) + ((1 ldt) (1 *)) t$-%offset%) + (f2cl-lib:fref t$-%data% (ki ki) + ((1 ldt) (1 *)) t$-%offset%))) + (if + (< (cabs1 (f2cl-lib:fref t$-%data% (k k) + ((1 ldt) (1 *)) t$-%offset%)) + smin) + (setf (f2cl-lib:fref t$-%data% (k k) + ((1 ldt) (1 *)) t$-%offset%) + (coerce smin 'f2cl-lib:complex16))) + label50)) + (cond + ((> ki 1) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10) + (zlatrs "Upper" "No transpose" "Non-unit" "Y" + (f2cl-lib:int-sub ki 1) + t$ ldt + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1) ((1 *)) + work-%offset%) + scale rwork info) + (declare (ignore var-0 var-1 var-2 var-3 + var-4 var-5 var-7 var-9)) + (setf ldt var-6) + (setf scale var-8) + (setf info var-10)) + (setf (f2cl-lib:fref work-%data% (ki) + ((1 *)) work-%offset%) + (coerce scale 'f2cl-lib:complex16)))) + (cond + ((not over) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zcopy ki + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1) ((1 *)) + work-%offset%) + 1 + (f2cl-lib:array-slice vr-%data% + f2cl-lib:complex16 (1 is) + ((1 ldvr) (1 *)) vr-%offset%) + 1) + (declare (ignore var-1 var-2 var-3 var-4)) + (when var-0 (setf ki var-0))) + (setf ii + (multiple-value-bind (ret-val var-0 var-1 var-2) + (izamax ki + (f2cl-lib:array-slice vr-%data% + f2cl-lib:complex16 (1 is) + ((1 ldvr) (1 *)) vr-%offset%) + 1) + (declare (ignore var-1 var-2)) + (when var-0 (setf ki var-0)) ret-val)) + (setf remax + (/ one + (cabs1 + (f2cl-lib:fref vr-%data% (ii is) + ((1 ldvr) (1 *)) vr-%offset%)))) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal ki remax + (f2cl-lib:array-slice vr-%data% + f2cl-lib:complex16 (1 is) + ((1 ldvr) (1 *)) vr-%offset%) + 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf ki var-0)) + (when var-1 (setf remax var-1))) + (f2cl-lib:fdo (k (f2cl-lib:int-add ki 1) + (f2cl-lib:int-add k 1)) + ((> k n) + nil) + (tagbody + (setf (f2cl-lib:fref vr-%data% (k is) + ((1 ldvr) (1 *)) vr-%offset%) + cmzero) + label60))) + (t + (if (> ki 1) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10) + (zgemv "N" n (f2cl-lib:int-sub ki 1) cmone vr ldvr + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (1) ((1 *)) + work-%offset%) + 1 (f2cl-lib:dcmplx scale) + (f2cl-lib:array-slice vr-%data% + f2cl-lib:complex16 (1 ki) + ((1 ldvr) (1 *)) vr-%offset%) + 1) + (declare (ignore var-0 var-2 var-4 var-6 + var-7 var-8 var-9 var-10)) + (when var-1 (setf n var-1)) + (when var-3 (setf cmone var-3)) + (when var-5 (setf ldvr var-5)))) + (setf ii + (multiple-value-bind (ret-val var-0 var-1 var-2) + (izamax n + (f2cl-lib:array-slice vr-%data% + f2cl-lib:complex16 (1 ki) + ((1 ldvr) (1 *)) vr-%offset%) + 1) + (declare (ignore var-1 var-2)) + (when var-0 (setf n var-0)) ret-val)) + (setf remax + (/ one + (cabs1 + (f2cl-lib:fref vr-%data% (ii ki) + ((1 ldvr) (1 *)) vr-%offset%)))) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal n remax + (f2cl-lib:array-slice vr-%data% + f2cl-lib:complex16 (1 ki) + ((1 ldvr) (1 *)) vr-%offset%) + 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf remax var-1))))) + (f2cl-lib:fdo (k 1 (f2cl-lib:int-add k 1)) + ((> k + (f2cl-lib:int-add ki (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf (f2cl-lib:fref t$-%data% (k k) + ((1 ldt) (1 *)) t$-%offset%) + (f2cl-lib:fref work-%data% + ((f2cl-lib:int-add k n)) ((1 *)) + work-%offset%)) + label70)) + (setf is (f2cl-lib:int-sub is 1)) label80)))) + (cond + (leftv (setf is 1) + (f2cl-lib:fdo (ki 1 (f2cl-lib:int-add ki 1)) + ((> ki n) nil) + (tagbody + (cond + (somev + (if (not (f2cl-lib:fref select-%data% (ki) + ((1 *)) select-%offset%)) + (go label130)))) + (setf smin + (max + (* ulp + (cabs1 (f2cl-lib:fref t$-%data% (ki ki) + ((1 ldt) (1 *)) t$-%offset%))) + smlnum)) + (setf (f2cl-lib:fref work-%data% (n) ((1 *)) + work-%offset%) cmone) + (f2cl-lib:fdo (k (f2cl-lib:int-add ki 1) + (f2cl-lib:int-add k 1)) + ((> k n) + nil) + (tagbody + (setf (f2cl-lib:fref work-%data% (k) + ((1 *)) work-%offset%) + (coerce + (- + (f2cl-lib:dconjg + (f2cl-lib:fref t$-%data% (ki k) + ((1 ldt) (1 *)) t$-%offset%))) + 'f2cl-lib:complex16)) + label90)) + (f2cl-lib:fdo (k + (f2cl-lib:int-add ki 1) (f2cl-lib:int-add k 1)) + ((> k n) + nil) + (tagbody + (setf (f2cl-lib:fref t$-%data% (k k) + ((1 ldt) (1 *)) t$-%offset%) + (- (f2cl-lib:fref t$-%data% (k k) + ((1 ldt) (1 *)) t$-%offset%) + (f2cl-lib:fref t$-%data% (ki ki) + ((1 ldt) (1 *)) t$-%offset%))) + (if + (< (cabs1 (f2cl-lib:fref t$-%data% (k k) + ((1 ldt) (1 *)) t$-%offset%)) + smin) + (setf (f2cl-lib:fref t$-%data% (k k) + ((1 ldt) (1 *)) t$-%offset%) + (coerce smin 'f2cl-lib:complex16))) + label100)) + (cond + ((< ki n) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10) + (zlatrs "Upper" "Conjugate transpose" "Non-unit" "Y" + (f2cl-lib:int-sub n ki) + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 + ((+ ki 1) (f2cl-lib:int-add ki 1)) + ((1 ldt) (1 *)) t$-%offset%) + ldt + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 ((+ ki 1)) + ((1 *)) work-%offset%) + scale rwork info) + (declare (ignore var-0 var-1 var-2 var-3 + var-4 var-5 var-7 var-9)) + (setf ldt var-6) + (setf scale var-8) + (setf info var-10)) + (setf (f2cl-lib:fref work-%data% (ki) + ((1 *)) work-%offset%) + (coerce scale 'f2cl-lib:complex16)))) + (cond + ((not over) + (zcopy (f2cl-lib:int-add (f2cl-lib:int-sub n ki) 1) + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 (ki) ((1 *)) + work-%offset%) + 1 + (f2cl-lib:array-slice vl-%data% + f2cl-lib:complex16 (ki is) + ((1 ldvl) (1 *)) vl-%offset%) + 1) + (setf ii + (f2cl-lib:int-sub + (f2cl-lib:int-add + (izamax (f2cl-lib:int-add + (f2cl-lib:int-sub n ki) 1) + (f2cl-lib:array-slice vl-%data% + f2cl-lib:complex16 (ki is) + ((1 ldvl) (1 *)) vl-%offset%) + 1) + ki) + 1)) + (setf remax + (/ one + (cabs1 + (f2cl-lib:fref vl-%data% (ii is) + ((1 ldvl) (1 *)) vl-%offset%)))) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal (f2cl-lib:int-add + (f2cl-lib:int-sub n ki) 1) remax + (f2cl-lib:array-slice vl-%data% + f2cl-lib:complex16 (ki is) + ((1 ldvl) (1 *)) vl-%offset%) + 1) + (declare (ignore var-0 var-2 var-3)) + (when var-1 (setf remax var-1))) + (f2cl-lib:fdo (k 1 (f2cl-lib:int-add k 1)) + ((> k + (f2cl-lib:int-add ki (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf (f2cl-lib:fref vl-%data% (k is) + ((1 ldvl) (1 *)) vl-%offset%) + cmzero) + label110))) + (t + (if (< ki n) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 + var-7 var-8 var-9 var-10) + (zgemv "N" n (f2cl-lib:int-sub n ki) cmone + (f2cl-lib:array-slice vl-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add ki 1)) + ((1 ldvl) (1 *)) vl-%offset%) + ldvl + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 ((+ ki 1)) + ((1 *)) work-%offset%) + 1 (f2cl-lib:dcmplx scale) + (f2cl-lib:array-slice vl-%data% + f2cl-lib:complex16 (1 ki) + ((1 ldvl) (1 *)) vl-%offset%) + 1) + (declare (ignore var-0 var-2 var-4 var-6 + var-7 var-8 var-9 var-10)) + (when var-1 (setf n var-1)) + (when var-3 (setf cmone var-3)) + (when var-5 (setf ldvl var-5)))) + (setf ii + (multiple-value-bind (ret-val var-0 var-1 var-2) + (izamax n + (f2cl-lib:array-slice vl-%data% + f2cl-lib:complex16 (1 ki) + ((1 ldvl) (1 *)) vl-%offset%) + 1) + (declare (ignore var-1 var-2)) + (when var-0 (setf n var-0)) ret-val)) + (setf remax + (/ one + (cabs1 + (f2cl-lib:fref vl-%data% (ii ki) + ((1 ldvl) (1 *)) vl-%offset%)))) + (multiple-value-bind (var-0 var-1 var-2 var-3) + (zdscal n remax + (f2cl-lib:array-slice vl-%data% + f2cl-lib:complex16 (1 ki) + ((1 ldvl) (1 *)) vl-%offset%) + 1) + (declare (ignore var-2 var-3)) + (when var-0 (setf n var-0)) + (when var-1 (setf remax var-1))))) + (f2cl-lib:fdo (k (f2cl-lib:int-add ki 1) + (f2cl-lib:int-add k 1)) + ((> k n) + nil) + (tagbody + (setf (f2cl-lib:fref t$-%data% (k k) + ((1 ldt) (1 *)) t$-%offset%) + (f2cl-lib:fref work-%data% + ((f2cl-lib:int-add k n)) ((1 *)) + work-%offset%)) + label120)) + (setf is (f2cl-lib:int-add is 1)) label130)))) + (go end_label) end_label + (return + (values side howmny nil n nil ldt nil ldvl nil + ldvr nil m nil nil info)))) + ))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -119178,7 +131967,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{ztrexc.f} * ===================================================================== SUBROUTINE ZTREXC( COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, INFO ) * @@ -119296,10 +132085,109 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK ztrexc} - +(defun ztrexc (compq n t$ ldt q ldq ifst ilst info) + (declare (type (simple-array character (*)) compq) + (type (f2cl-lib:integer4) info ilst ifst ldq ldt n) + (type (array f2cl-lib:complex16 (*)) q t$)) + (f2cl-lib:with-multi-array-data + ((t$ f2cl-lib:complex16 t$-%data% t$-%offset%) + (q f2cl-lib:complex16 q-%data% q-%offset%) + (compq character compq-%data% compq-%offset%)) + (prog + ((sn #C(0.0d0 0.0d0)) (t11 #C(0.0d0 0.0d0)) (t22 #C(0.0d0 0.0d0)) + (temp #C(0.0d0 0.0d0)) (cs 0.0d0) (k 0) (m1 0) (m2 0) + (m3 0) (wantq nil) + (dconjg$ 0.0)) + (declare (type (f2cl-lib:complex16) temp t22 t11 sn) + (type (double-float) cs) + (type (f2cl-lib:integer4) m3 m2 m1 k) (type f2cl-lib:logical wantq) + (type (single-float) dconjg$)) + (setf info 0) + (setf wantq + (multiple-value-bind (ret-val var-0 var-1) (lsame compq "V") + (declare (ignore var-1)) (when var-0 (setf compq var-0)) ret-val)) + (cond + ((and + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame compq "N") + (declare (ignore var-1)) (when var-0 (setf compq var-0)) ret-val)) + (not wantq)) + (setf info -1)) + ((< n 0) (setf info -2)) + ((< ldt (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n))) + (setf info -4)) + ((or (< ldq 1) + (and wantq + (< ldq (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n))))) + (setf info -6)) + ((or (< ifst 1) (> ifst n)) (setf info -7)) + ((or (< ilst 1) (> ilst n)) (setf info -8))) + (cond ((/= info 0) + (xerbla "ZTREXC" (f2cl-lib:int-sub info)) (go end_label))) + (if (or (= n 1) (= ifst ilst)) (go end_label)) + (cond ((< ifst ilst) (setf m1 0) (setf m2 -1) (setf m3 1)) + (t (setf m1 -1) (setf m2 0) (setf m3 -1))) + (f2cl-lib:fdo (k (f2cl-lib:int-add ifst m1) (f2cl-lib:int-add k m3)) + ((> k + (f2cl-lib:int-add ilst m2)) + nil) + (tagbody + (setf t11 (f2cl-lib:fref t$-%data% (k k) + ((1 ldt) (1 *)) t$-%offset%)) + (setf t22 + (f2cl-lib:fref t$-%data% + ((f2cl-lib:int-add k 1) (f2cl-lib:int-add k 1)) + ((1 ldt) (1 *)) t$-%offset%)) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4) + (zlartg + (f2cl-lib:fref t$-%data% (k (f2cl-lib:int-add k 1)) + ((1 ldt) (1 *)) + t$-%offset%) + (- t22 t11) cs sn temp) + (declare (ignore var-0 var-1)) + (setf cs var-2) + (setf sn var-3) + (setf temp var-4)) + (if (<= (f2cl-lib:int-add k 2) n) + (zrot (f2cl-lib:int-sub n k 1) + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 + (k (f2cl-lib:int-add k 2)) ((1 ldt) (1 *)) t$-%offset%) + ldt + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 + ((+ k 1) (f2cl-lib:int-add k 2)) + ((1 ldt) (1 *)) t$-%offset%) + ldt cs sn)) + (zrot (f2cl-lib:int-sub k 1) + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 (1 k) + ((1 ldt) (1 *)) + t$-%offset%) + 1 + (f2cl-lib:array-slice t$-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add k 1)) ((1 ldt) (1 *)) t$-%offset%) + 1 cs (f2cl-lib:dconjg sn)) + (setf (f2cl-lib:fref t$-%data% (k k) + ((1 ldt) (1 *)) t$-%offset%) t22) + (setf + (f2cl-lib:fref t$-%data% ((f2cl-lib:int-add k 1) + (f2cl-lib:int-add k 1)) + ((1 ldt) (1 *)) t$-%offset%) + t11) + (cond + (wantq + (zrot n + (f2cl-lib:array-slice q-%data% f2cl-lib:complex16 (1 k) + ((1 ldq) (1 *)) + q-%offset%) + 1 + (f2cl-lib:array-slice q-%data% f2cl-lib:complex16 + (1 (f2cl-lib:int-add k 1)) ((1 ldq) (1 *)) q-%offset%) + 1 cs (f2cl-lib:dconjg sn)))) + label10)) + (go end_label) end_label + (return (values compq nil nil nil nil nil nil nil info))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -119415,7 +132303,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zung2r.f} * ===================================================================== SUBROUTINE ZUNG2R( M, N, K, A, LDA, TAU, WORK, INFO ) * @@ -119505,10 +132393,85 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zung2r} - +(let* + ((one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16)) + (zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (f2cl-lib:complex16) one) (type (f2cl-lib:complex16) zero) + (ignorable one zero)) + (defun zung2r (m n k a lda tau work info) + (declare (type (f2cl-lib:integer4) info lda k n m) + (type (array f2cl-lib:complex16 (*)) work tau a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%) + (tau f2cl-lib:complex16 tau-%data% tau-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%)) + (prog ((i 0) (j 0) (l 0)) + (declare (type (f2cl-lib:integer4) l j i)) (setf info 0) + (cond ((< m 0) (setf info -1)) ((or (< n 0) (> n m)) (setf info -2)) + ((or (< k 0) (> k n)) (setf info -3)) + ((< lda (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 m))) + (setf info -5))) + (cond ((/= info 0) + (xerbla "ZUNG2R" (f2cl-lib:int-sub info)) (go end_label))) + (if (<= n 0) (go end_label)) + (f2cl-lib:fdo (j (f2cl-lib:int-add k 1) (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (l 1 (f2cl-lib:int-add l 1)) + ((> l m) nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (l j) + ((1 lda) (1 *)) a-%offset%) zero) + label10)) + (setf (f2cl-lib:fref a-%data% (j j) + ((1 lda) (1 *)) a-%offset%) one) label20) + ) + (f2cl-lib:fdo (i k (f2cl-lib:int-add i (f2cl-lib:int-sub 1))) + ((> i 1) nil) + (tagbody + (cond + ((< i n) + (setf (f2cl-lib:fref a-%data% (i i) + ((1 lda) (1 *)) a-%offset%) one) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zlarf "Left" (f2cl-lib:int-add (f2cl-lib:int-sub m i) 1) + (f2cl-lib:int-sub n i) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (i i) ((1 lda) (1 *)) + a-%offset%) + 1 (f2cl-lib:fref tau-%data% (i) ((1 *)) tau-%offset%) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (i (f2cl-lib:int-add i 1)) ((1 lda) (1 *)) a-%offset%) + lda work) + (declare (ignore var-0 var-1 var-2 var-3 + var-4 var-5 var-6 var-8)) + (setf lda var-7)))) + (if (< i m) + (zscal (f2cl-lib:int-sub m i) + (- (f2cl-lib:fref tau-%data% (i) ((1 *)) tau-%offset%)) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ i 1) i) + ((1 lda) (1 *)) a-%offset%) + 1)) + (setf (f2cl-lib:fref a-%data% (i i) + ((1 lda) (1 *)) a-%offset%) + (- one (f2cl-lib:fref tau-%data% (i) ((1 *)) tau-%offset%))) + (f2cl-lib:fdo (l 1 (f2cl-lib:int-add l 1)) + ((> l + (f2cl-lib:int-add i (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (l i) + ((1 lda) (1 *)) a-%offset%) zero) + label30)) + label40)) + (go end_label) + end_label (return (values nil nil nil nil lda nil nil info))) + ))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -119635,7 +132598,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zunghr.f} * ===================================================================== SUBROUTINE ZUNGHR( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO ) * @@ -119753,10 +132716,140 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zunghr} - +(let* + ((zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16)) + (one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (f2cl-lib:complex16) zero) (type (f2cl-lib:complex16) one) + (ignorable zero one)) + (defun zunghr (n ilo ihi a lda tau work lwork info) + (declare (type (f2cl-lib:integer4) info lwork lda ihi ilo n) + (type (array f2cl-lib:complex16 (*)) work tau a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%) + (tau f2cl-lib:complex16 tau-%data% tau-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%)) + (prog + ((i 0) (iinfo 0) (j 0) (lwkopt 0) (nb 0) (nh 0) (lquery nil)) + (declare (type (f2cl-lib:integer4) nh nb lwkopt j iinfo i) + (type f2cl-lib:logical lquery)) + (setf info 0) (setf nh (f2cl-lib:int-sub ihi ilo)) + (setf lquery (coerce (= lwork -1) 'f2cl-lib:logical)) + (cond ((< n 0) (setf info -1)) + ((or (< ilo 1) + (> ilo (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n)))) + (setf info -2)) + ((or (< ihi (min (the f2cl-lib:integer4 ilo) + (the f2cl-lib:integer4 n))) + (> ihi n)) + (setf info -3)) + ((< lda (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 n))) + (setf info -5)) + ((and (< lwork (max (the f2cl-lib:integer4 1) + (the f2cl-lib:integer4 nh))) + (not lquery)) + (setf info -8))) + (cond + ((= info 0) + (setf nb + (multiple-value-bind (ret-val var-0 var-1 var-2 var-3 + var-4 var-5 var-6) + (ilaenv 1 "ZUNGQR" " " nh nh nh -1) + (declare (ignore var-0 var-1 var-2 var-6)) + (when var-3 (setf nh var-3)) + (when var-4 (setf nh var-4)) + (when var-5 (setf nh var-5)) ret-val)) + (setf lwkopt + (f2cl-lib:int-mul + (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 nh)) nb)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce lwkopt 'f2cl-lib:complex16)))) + (cond ((/= info 0) + (xerbla "ZUNGHR" (f2cl-lib:int-sub info)) (go end_label)) + (lquery (go end_label))) + (cond + ((= n 0) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce 1 'f2cl-lib:complex16)) + (go end_label))) + (f2cl-lib:fdo (j ihi (f2cl-lib:int-add j (f2cl-lib:int-sub 1))) + ((> j + (f2cl-lib:int-add ilo 1)) + nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i + (f2cl-lib:int-add j (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) zero) + label10)) + (f2cl-lib:fdo (i (f2cl-lib:int-add j 1) + (f2cl-lib:int-add i 1)) + ((> i ihi) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) + (f2cl-lib:fref a-%data% (i (f2cl-lib:int-sub j 1)) + ((1 lda) (1 *)) + a-%offset%)) + label20)) + (f2cl-lib:fdo (i (f2cl-lib:int-add ihi 1) + (f2cl-lib:int-add i 1)) + ((> i n) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) zero) + label30)) + label40)) + (f2cl-lib:fdo (j 1 (f2cl-lib:int-add j 1)) + ((> j ilo) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) zero) + label50)) + (setf (f2cl-lib:fref a-%data% (j j) + ((1 lda) (1 *)) a-%offset%) one) label60) + ) + (f2cl-lib:fdo (j (f2cl-lib:int-add ihi 1) (f2cl-lib:int-add j 1)) + ((> j n) nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i n) nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) zero) + label70)) + (setf (f2cl-lib:fref a-%data% (j j) + ((1 lda) (1 *)) a-%offset%) one) label80) + ) + (cond + ((> nh 0) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8) + (zungqr nh nh nh + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ ilo 1) (f2cl-lib:int-add ilo 1)) ((1 lda) (1 *)) a-%offset%) + lda + (f2cl-lib:array-slice tau-%data% f2cl-lib:complex16 (ilo) ((1 *)) + tau-%offset%) + work lwork iinfo) + (declare (ignore var-3 var-5 var-6)) (when var-0 (setf nh var-0)) + (when var-1 (setf nh var-1)) (when var-2 (setf nh var-2)) + (when var-4 (setf lda var-4)) (when var-7 (setf lwork var-7)) + (when var-8 (setf iinfo var-8))))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce lwkopt 'f2cl-lib:complex16)) + (go end_label) end_label + (return (values nil nil nil nil lda nil nil lwork info)))))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -119885,7 +132978,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zungqr.f} * ===================================================================== SUBROUTINE ZUNGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO ) * @@ -120050,10 +133143,207 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zungqr} - +(let* ((zero (coerce (f2cl-lib:cmplx 0.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (f2cl-lib:complex16) zero) (ignorable zero)) + (defun zungqr (m n k a lda tau work lwork info) + (declare (type (f2cl-lib:integer4) info lwork lda k n m) + (type (array f2cl-lib:complex16 (*)) work tau a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%) + (tau f2cl-lib:complex16 tau-%data% tau-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%)) + (prog + ((i 0) (ib 0) (iinfo 0) (iws 0) (j 0) (ki 0) (kk 0) (l 0) (ldwork 0) + (lwkopt 0) (nb 0) (nbmin 0) (nx 0) (lquery nil)) + (declare + (type (f2cl-lib:integer4) nx nbmin nb lwkopt ldwork + l kk ki j iws iinfo ib i) + (type f2cl-lib:logical lquery)) + (setf info 0) + (setf nb + (multiple-value-bind (ret-val var-0 var-1 var-2 var-3 + var-4 var-5 var-6) + (ilaenv 1 "ZUNGQR" " " m n k -1) + (declare (ignore var-0 var-1 var-2 var-6)) + (when var-3 (setf m var-3)) (when var-4 (setf n var-4)) + (when var-5 (setf k var-5)) ret-val)) + (setf lwkopt + (f2cl-lib:int-mul (max (the f2cl-lib:integer4 1) + (the f2cl-lib:integer4 n)) + nb)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce lwkopt 'f2cl-lib:complex16)) + (setf lquery (coerce (= lwork -1) 'f2cl-lib:logical)) + (cond ((< m 0) (setf info -1)) ((or (< n 0) (> n m)) (setf info -2)) + ((or (< k 0) (> k n)) (setf info -3)) + ((< lda (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 m))) + (setf info -5)) + ((and (< lwork (max (the f2cl-lib:integer4 1) + (the f2cl-lib:integer4 n))) + (not lquery)) + (setf info -8))) + (cond ((/= info 0) + (xerbla "ZUNGQR" (f2cl-lib:int-sub info)) (go end_label)) + (lquery (go end_label))) + (cond + ((<= n 0) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce 1 'f2cl-lib:complex16)) + (go end_label))) + (setf nbmin 2) (setf nx 0) (setf iws n) + (cond + ((and (> nb 1) (< nb k)) + (setf nx + (max (the f2cl-lib:integer4 0) + (the f2cl-lib:integer4 + (multiple-value-bind (ret-val var-0 var-1 var-2 + var-3 var-4 var-5 var-6) + (ilaenv 3 "ZUNGQR" " " m n k -1) + (declare (ignore var-0 var-1 var-2 var-6)) + (when var-3 (setf m var-3)) + (when var-4 (setf n var-4)) + (when var-5 (setf k var-5)) ret-val)))) + (cond + ((< nx k) (setf ldwork n) (setf iws (f2cl-lib:int-mul ldwork nb)) + (cond + ((< lwork iws) + (setf nb (the f2cl-lib:integer4 (truncate lwork ldwork))) + (setf nbmin + (max (the f2cl-lib:integer4 2) + (the f2cl-lib:integer4 + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 2 "ZUNGQR" " " m n k -1) + (declare (ignore var-0 var-1 var-2 var-6)) + (when var-3 (setf m var-3)) (when var-4 (setf n var-4)) + (when var-5 (setf k var-5)) ret-val)))))))))) + (cond + ((and (>= nb nbmin) (< nb k) (< nx k)) + (setf ki (* (the f2cl-lib:integer4 (truncate (- k nx 1) nb)) nb)) + (setf kk + (min (the f2cl-lib:integer4 k) + (the f2cl-lib:integer4 (f2cl-lib:int-add ki nb)))) + (f2cl-lib:fdo (j (f2cl-lib:int-add kk 1) (f2cl-lib:int-add j 1)) + ((> j n) + nil) + (tagbody + (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1)) + ((> i kk) nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (i j) + ((1 lda) (1 *)) a-%offset%) zero) + label10)) + label20))) + (t (setf kk 0))) + (if (< kk n) + (multiple-value-bind (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7) + (zung2r (f2cl-lib:int-sub m kk) (f2cl-lib:int-sub n kk) + (f2cl-lib:int-sub k kk) + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + ((+ kk 1) (f2cl-lib:int-add kk 1)) ((1 lda) (1 *)) a-%offset%) + lda + (f2cl-lib:array-slice tau-%data% f2cl-lib:complex16 + ((+ kk 1)) ((1 *)) + tau-%offset%) + work iinfo) + (declare (ignore var-0 var-1 var-2 var-3 var-5 var-6)) + (setf lda var-4) + (setf iinfo var-7))) + (cond + ((> kk 0) + (f2cl-lib:fdo (i (f2cl-lib:int-add ki 1) + (f2cl-lib:int-add i (f2cl-lib:int-sub nb))) + ((> i 1) nil) + (tagbody + (setf ib + (min (the f2cl-lib:integer4 nb) + (the f2cl-lib:integer4 + (f2cl-lib:int-add (f2cl-lib:int-sub k i) 1)))) + (cond + ((<= (f2cl-lib:int-add i ib) n) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8) + (zlarft "Forward" "Columnwise" + (f2cl-lib:int-add (f2cl-lib:int-sub m i) 1) ib + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 (i i) ((1 lda) (1 *)) + a-%offset%) + lda + (f2cl-lib:array-slice tau-%data% + f2cl-lib:complex16 (i) ((1 *)) + tau-%offset%) + work ldwork) + (declare (ignore var-0 var-1 var-2 var-3 + var-4 var-6 var-7)) + (setf lda var-5) (setf ldwork var-8)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 + var-5 var-6 var-7 var-8 var-9 var-10 + var-11 var-12 var-13 var-14) + (zlarfb "Left" "No transpose" "Forward" "Columnwise" + (f2cl-lib:int-add (f2cl-lib:int-sub m i) 1) + (f2cl-lib:int-add (f2cl-lib:int-sub n i ib) 1) ib + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 (i i) ((1 lda) (1 *)) + a-%offset%) + lda work ldwork + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 + (i (f2cl-lib:int-add i ib)) + ((1 lda) (1 *)) a-%offset%) + lda + (f2cl-lib:array-slice work-%data% + f2cl-lib:complex16 ((+ ib 1)) ((1 *)) + work-%offset%) + ldwork) + (declare + (ignore var-0 var-1 var-2 var-3 var-4 + var-5 var-7 var-9 var-11 var-13)) + (setf ib var-6) + (setf lda var-8) + (setf ldwork var-10) + (setf lda var-12) + (setf ldwork var-14)))) + (multiple-value-bind (var-0 var-1 var-2 var-3 + var-4 var-5 var-6 var-7) + (zung2r (f2cl-lib:int-add + (f2cl-lib:int-sub m i) 1) ib ib + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 (i i) ((1 lda) (1 *)) + a-%offset%) + lda + (f2cl-lib:array-slice tau-%data% + f2cl-lib:complex16 (i) ((1 *)) + tau-%offset%) + work iinfo) + (declare (ignore var-0 var-1 var-2 + var-3 var-5 var-6)) + (setf lda var-4) + (setf iinfo var-7)) + (f2cl-lib:fdo (j i (f2cl-lib:int-add j 1)) + ((> j + (f2cl-lib:int-add i ib (f2cl-lib:int-sub 1))) + nil) + (tagbody + (f2cl-lib:fdo (l 1 (f2cl-lib:int-add l 1)) + ((> l + (f2cl-lib:int-add i (f2cl-lib:int-sub 1))) + nil) + (tagbody + (setf (f2cl-lib:fref a-%data% (l j) + ((1 lda) (1 *)) a-%offset%) zero) + label30)) + label40)) + label50)))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce iws 'f2cl-lib:complex16)) + (go end_label) + end_label + (return (values m n k nil lda nil nil nil info))) + ))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -120209,7 +133499,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zunm2r.f} * ===================================================================== SUBROUTINE ZUNM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, $ WORK, INFO ) @@ -120340,10 +133630,106 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zunm2r} - +(let* ((one (coerce (f2cl-lib:cmplx 1.0d0 0.0d0) 'f2cl-lib:complex16))) + (declare (type (f2cl-lib:complex16) one) (ignorable one)) + (defun zunm2r (side trans m n k a lda tau c ldc work info) + (declare (type (simple-array character (*)) trans side) + (type (f2cl-lib:integer4) info ldc lda k n m) + (type (array f2cl-lib:complex16 (*)) work c tau a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%) + (tau f2cl-lib:complex16 tau-%data% tau-%offset%) + (c f2cl-lib:complex16 c-%data% c-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%) + (side character side-%data% side-%offset%) + (trans character trans-%data% trans-%offset%)) + (prog + ((aii #C(0.0d0 0.0d0)) + (taui #C(0.0d0 0.0d0)) (i 0) (i1 0) (i2 0) (i3 0) + (ic 0) (jc 0) (mi 0) (ni 0) (nq 0) (left nil) (notran nil)) + (declare (type (f2cl-lib:complex16) taui aii) + (type (f2cl-lib:integer4) nq ni mi jc ic i3 i2 i1 i) + (type f2cl-lib:logical notran left)) + (setf info 0) + (setf left + (multiple-value-bind (ret-val var-0 var-1) (lsame side "L") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val)) + (setf notran + (multiple-value-bind (ret-val var-0 var-1) (lsame trans "N") + (declare (ignore var-1)) (when var-0 (setf trans var-0)) ret-val)) + (cond (left (setf nq m)) (t (setf nq n))) + (cond + ((and (not left) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame side "R") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val))) + (setf info -1)) + ((and (not notran) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame trans "C") + (declare (ignore var-1)) + (when var-0 (setf trans var-0)) ret-val))) + (setf info -2)) + ((< m 0) (setf info -3)) ((< n 0) (setf info -4)) + ((or (< k 0) (> k nq)) (setf info -5)) + ((< lda (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 nq))) + (setf info -7)) + ((< ldc (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 m))) + (setf info -10))) + (cond ((/= info 0) + (xerbla "ZUNM2R" (f2cl-lib:int-sub info)) (go end_label))) + (if (or (= m 0) (= n 0) (= k 0)) (go end_label)) + (cond + ((or (and left (not notran)) (and (not left) notran)) + (setf i1 1) + (setf i2 k) + (setf i3 1)) + (t (setf i1 k) (setf i2 1) (setf i3 -1))) + (cond (left (setf ni n) (setf jc 1)) (t (setf mi m) (setf ic 1))) + (f2cl-lib:fdo (i i1 (f2cl-lib:int-add i i3)) + ((> i i2) nil) + (tagbody + (cond + (left (setf mi (f2cl-lib:int-add + (f2cl-lib:int-sub m i) 1)) (setf ic i)) + (t (setf ni (f2cl-lib:int-add + (f2cl-lib:int-sub n i) 1)) (setf jc i))) + (cond + (notran + (setf taui + (f2cl-lib:fref tau-%data% (i) ((1 *)) tau-%offset%))) + (t + (setf taui + (coerce + (f2cl-lib:dconjg (f2cl-lib:fref tau-%data% (i) + ((1 *)) tau-%offset%)) + 'f2cl-lib:complex16)))) + (setf aii (f2cl-lib:fref a-%data% (i i) + ((1 lda) (1 *)) a-%offset%)) + (setf (f2cl-lib:fref a-%data% (i i) + ((1 lda) (1 *)) a-%offset%) one) + (multiple-value-bind (var-0 var-1 var-2 var-3 + var-4 var-5 var-6 var-7 var-8) + (zlarf side mi ni + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 (i i) ((1 lda) (1 *)) + a-%offset%) + 1 taui + (f2cl-lib:array-slice c-%data% + f2cl-lib:complex16 (ic jc) ((1 ldc) (1 *)) + c-%offset%) + ldc work) + (declare (ignore var-1 var-2 var-3 var-4 var-5 var-6 var-8)) + (setf side var-0) (setf ldc var-7)) + (setf (f2cl-lib:fref a-%data% (i i) + ((1 lda) (1 *)) a-%offset%) aii) label10) + ) + (go end_label) end_label + (return (values side trans nil nil nil nil nil nil nil ldc nil info))) + ))) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -120516,7 +133902,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zunmhr.f} * ===================================================================== SUBROUTINE ZUNMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C, $ LDC, WORK, LWORK, INFO ) @@ -120636,10 +134022,129 @@ Man Page Details * END -\end{verbatim} +\end{chunk} \begin{chunk}{LAPACK zunmhr} - +(defun zunmhr (side trans m n ilo ihi a lda tau c ldc work lwork info) + (declare (type (simple-array character (*)) trans side) + (type (f2cl-lib:integer4) info lwork ldc lda ihi ilo n m) + (type (array f2cl-lib:complex16 (*)) work c tau a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%) + (tau f2cl-lib:complex16 tau-%data% tau-%offset%) + (c f2cl-lib:complex16 c-%data% c-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%) + (side character side-%data% side-%offset%) + (trans character trans-%data% trans-%offset%)) + (prog + ((i1 0) (i2 0) (iinfo 0) (lwkopt 0) (mi 0) + (nb 0) (nh 0) (ni 0) (nq 0) (nw 0) + (left nil) (lquery nil)) + (declare (type (f2cl-lib:integer4) nw nq ni nh nb mi lwkopt iinfo i2 i1) + (type f2cl-lib:logical lquery left)) + (setf info 0) (setf nh (f2cl-lib:int-sub ihi ilo)) + (setf left + (multiple-value-bind (ret-val var-0 var-1) (lsame side "L") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val)) + (setf lquery (coerce (= lwork -1) 'f2cl-lib:logical)) + (cond (left (setf nq m) (setf nw n)) (t (setf nq n) (setf nw m))) + (cond + ((and (not left) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame side "R") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val))) + (setf info -1)) + ((and + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame trans "N") + (declare (ignore var-1)) (when var-0 (setf trans var-0)) ret-val)) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame trans "C") + (declare (ignore var-1)) (when var-0 (setf trans var-0)) ret-val))) + (setf info -2)) + ((< m 0) (setf info -3)) ((< n 0) (setf info -4)) + ((or (< ilo 1) + (> ilo (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 nq)))) + (setf info -5)) + ((or (< ihi (min (the f2cl-lib:integer4 ilo) + (the f2cl-lib:integer4 nq))) + (> ihi nq)) + (setf info -6)) + ((< lda (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 nq))) + (setf info -8)) + ((< ldc (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 m))) + (setf info -11)) + ((and (< lwork (max (the f2cl-lib:integer4 1) + (the f2cl-lib:integer4 nw))) + (not lquery)) + (setf info -13))) + (cond + ((= info 0) + (cond + (left + (setf nb + (multiple-value-bind (ret-val var-0 var-1 var-2 + var-3 var-4 var-5 var-6) + (ilaenv 1 "ZUNMQR" (f2cl-lib:f2cl-// side trans) nh n nh -1) + (declare (ignore var-0 var-1 var-2 var-6)) + (when var-3 (setf nh var-3)) + (when var-4 (setf n var-4)) + (when var-5 (setf nh var-5)) ret-val))) + (t + (setf nb + (multiple-value-bind (ret-val var-0 var-1 var-2 var-3 + var-4 var-5 var-6) + (ilaenv 1 "ZUNMQR" (f2cl-lib:f2cl-// side trans) m nh nh -1) + (declare (ignore var-0 var-1 var-2 var-6)) + (when var-3 (setf m var-3)) + (when var-4 (setf nh var-4)) + (when var-5 (setf nh var-5)) ret-val)))) + (setf lwkopt + (f2cl-lib:int-mul + (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 nw)) nb)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce lwkopt 'f2cl-lib:complex16)))) + (cond ((/= info 0) + (xerbla "ZUNMHR" (f2cl-lib:int-sub info)) (go end_label)) + (lquery (go end_label))) + (cond + ((or (= m 0) (= n 0) (= nh 0)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce 1 'f2cl-lib:complex16)) + (go end_label))) + (cond + (left (setf mi nh) (setf ni n) (setf i1 (f2cl-lib:int-add ilo 1)) + (setf i2 1)) + (t (setf mi m) + (setf ni nh) + (setf i1 1) + (setf i2 (f2cl-lib:int-add ilo 1)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 + var-8 var-9 var-10 var-11 + var-12) + (zunmqr side trans mi ni nh + (f2cl-lib:array-slice a-%data% f2cl-lib:complex16 ((+ ilo 1) ilo) + ((1 lda) (1 *)) a-%offset%) + lda + (f2cl-lib:array-slice tau-%data% f2cl-lib:complex16 (ilo) ((1 *)) + tau-%offset%) + (f2cl-lib:array-slice c-%data% + f2cl-lib:complex16 (i1 i2) ((1 ldc) (1 *)) + c-%offset%) + ldc work lwork iinfo) + (declare (ignore var-5 var-7 var-8 var-10)) + (when var-0 (setf side var-0)) + (when var-1 (setf trans var-1)) (when var-2 (setf mi var-2)) + (when var-3 (setf ni var-3)) (when var-4 (setf nh var-4)) + (when var-6 (setf lda var-6)) (when var-9 (setf ldc var-9)) + (when var-11 (setf lwork var-11)) (when var-12 (setf iinfo var-12))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce lwkopt 'f2cl-lib:complex16)) + (go end_label) end_label + (return + (values side trans m n nil nil nil lda nil nil ldc nil lwork info))) + )) \end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -120805,7 +134310,7 @@ Man Page Details \end{chunk} -\begin{verbatim} +\begin{chunk}{zunmqr.f} * ===================================================================== SUBROUTINE ZUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, $ WORK, LWORK, INFO ) @@ -120987,10 +134492,199 @@ Man Page Details * END +\end{chunk} + +\begin{verbatim} +Warning: Types of argument 0 in call to ZUNM2R do not match. + Declared type: (SIMPLE-ARRAY CHARACTER (*)) + Argument type: (STRING 1) +Warning: Types of argument 1 in call to ZUNM2R do not match. + Declared type: (SIMPLE-ARRAY CHARACTER (*)) + Argument type: (STRING 1) +Warning: Types of argument 0 in call to ZLARFB do not match. + Declared type: (SIMPLE-ARRAY CHARACTER (*)) + Argument type: (STRING 1) +Warning: Types of argument 1 in call to ZLARFB do not match. + Declared type: (SIMPLE-ARRAY CHARACTER (*)) + Argument type: (STRING 1) \end{verbatim} \begin{chunk}{LAPACK zunmqr} - +(let* ((nbmax 64) (ldt (+ nbmax 1))) + (declare (type (f2cl-lib:integer4 64 64) nbmax) (type (f2cl-lib:integer4) ldt) + (ignorable nbmax ldt)) + (defun zunmqr (side trans m n k a lda tau c ldc work lwork info) + (declare (type (simple-array character (*)) trans side) + (type (f2cl-lib:integer4) info lwork ldc lda k n m) + (type (array f2cl-lib:complex16 (*)) work c tau a)) + (f2cl-lib:with-multi-array-data + ((a f2cl-lib:complex16 a-%data% a-%offset%) + (tau f2cl-lib:complex16 tau-%data% tau-%offset%) + (c f2cl-lib:complex16 c-%data% c-%offset%) + (work f2cl-lib:complex16 work-%data% work-%offset%) + (side character side-%data% side-%offset%) + (trans character trans-%data% trans-%offset%)) + (prog + ((i 0) (i1 0) (i2 0) (i3 0) (ib 0) (ic 0) + (iinfo 0) (iws 0) (jc 0) (ldwork 0) + (lwkopt 0) (mi 0) (nb 0) (nbmin 0) (ni 0) (nq 0) (nw 0) (left nil) + (lquery nil) (notran nil) + (t$ + (make-array (the fixnum (reduce #'* (list ldt nbmax))) :element-type + 'f2cl-lib:complex16))) + (declare + (type (f2cl-lib:integer4) nw nq ni nbmin nb mi + lwkopt ldwork jc iws iinfo ic + ib i3 i2 i1 i) + (type f2cl-lib:logical notran lquery left) + (type (array f2cl-lib:complex16 (*)) t$)) + (setf info 0) + (setf left + (multiple-value-bind (ret-val var-0 var-1) (lsame side "L") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val)) + (setf notran + (multiple-value-bind (ret-val var-0 var-1) (lsame trans "N") + (declare (ignore var-1)) (when var-0 (setf trans var-0)) ret-val)) + (setf lquery (coerce (= lwork -1) 'f2cl-lib:logical)) + (cond (left (setf nq m) (setf nw n)) (t (setf nq n) (setf nw m))) + (cond + ((and (not left) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame side "R") + (declare (ignore var-1)) (when var-0 (setf side var-0)) ret-val))) + (setf info -1)) + ((and (not notran) + (not + (multiple-value-bind (ret-val var-0 var-1) (lsame trans "C") + (declare (ignore var-1)) + (when var-0 (setf trans var-0)) ret-val))) + (setf info -2)) + ((< m 0) (setf info -3)) ((< n 0) (setf info -4)) + ((or (< k 0) (> k nq)) (setf info -5)) + ((< lda (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 nq))) + (setf info -7)) + ((< ldc (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 m))) + (setf info -10)) + ((and (< lwork (max (the f2cl-lib:integer4 1) + (the f2cl-lib:integer4 nw))) + (not lquery)) + (setf info -12))) + (cond + ((= info 0) + (setf nb + (min (the f2cl-lib:integer4 nbmax) + (the f2cl-lib:integer4 + (multiple-value-bind (ret-val var-0 var-1 var-2 + var-3 var-4 var-5 var-6) + (ilaenv 1 "ZUNMQR" (f2cl-lib:f2cl-// side trans) m n k -1) + (declare (ignore var-0 var-1 var-2 var-6)) + (when var-3 (setf m var-3)) + (when var-4 (setf n var-4)) + (when var-5 (setf k var-5)) ret-val)))) + (setf lwkopt + (f2cl-lib:int-mul + (max (the f2cl-lib:integer4 1) (the f2cl-lib:integer4 nw)) nb)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce lwkopt 'f2cl-lib:complex16)))) + (cond ((/= info 0) + (xerbla "ZUNMQR" (f2cl-lib:int-sub info)) (go end_label)) + (lquery (go end_label))) + (cond + ((or (= m 0) (= n 0) (= k 0)) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce 1 'f2cl-lib:complex16)) + (go end_label))) + (setf nbmin 2) (setf ldwork nw) + (cond + ((and (> nb 1) (< nb k)) (setf iws (f2cl-lib:int-mul nw nb)) + (cond + ((< lwork iws) + (setf nb (the f2cl-lib:integer4 (truncate lwork ldwork))) + (setf nbmin + (max (the f2cl-lib:integer4 2) + (the f2cl-lib:integer4 + (multiple-value-bind + (ret-val var-0 var-1 var-2 var-3 var-4 var-5 var-6) + (ilaenv 2 "ZUNMQR" (f2cl-lib:f2cl-// side trans) m n k -1) + (declare (ignore var-0 var-1 var-2 var-6)) + (when var-3 (setf m var-3)) + (when var-4 (setf n var-4)) + (when var-5 (setf k var-5)) ret-val))))))) + (t (setf iws nw))) + (cond + ((or (< nb nbmin) (>= nb k)) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10 var-11) + (zunm2r side trans m n k a lda tau c ldc work iinfo) + (declare (ignore var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-10)) + (setf side var-0) + (setf trans var-1) + (setf ldc var-9) + (setf iinfo var-11))) + (t + (cond + ((or (and left (not notran)) (and (not left) notran)) (setf i1 1) + (setf i2 k) (setf i3 nb)) + (t (setf i1 + (+ (* (the f2cl-lib:integer4 (truncate (- k 1) nb)) nb) 1)) + (setf i2 1) (setf i3 (f2cl-lib:int-sub nb)))) + (cond (left (setf ni n) (setf jc 1)) (t (setf mi m) (setf ic 1))) + (f2cl-lib:fdo (i i1 (f2cl-lib:int-add i i3)) + ((> i i2) nil) + (tagbody + (setf ib + (min (the f2cl-lib:integer4 nb) + (the f2cl-lib:integer4 (f2cl-lib:int-add + (f2cl-lib:int-sub k i) 1)))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8) + (zlarft "Forward" "Columnwise" + (f2cl-lib:int-add (f2cl-lib:int-sub nq i) 1) ib + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 (i i) ((1 lda) (1 *)) + a-%offset%) + lda + (f2cl-lib:array-slice tau-%data% + f2cl-lib:complex16 (i) ((1 *)) + tau-%offset%) + t$ ldt) + (declare (ignore var-0 var-1 var-2 var-3 + var-4 var-6 var-7)) + (setf lda var-5) (setf ldt var-8)) + (cond + (left (setf mi (f2cl-lib:int-add + (f2cl-lib:int-sub m i) 1)) (setf ic i)) + (t (setf ni (f2cl-lib:int-add + (f2cl-lib:int-sub n i) 1)) (setf jc i))) + (multiple-value-bind + (var-0 var-1 var-2 var-3 var-4 var-5 + var-6 var-7 var-8 var-9 var-10 var-11 + var-12 var-13 var-14) + (zlarfb side trans "Forward" "Columnwise" mi ni ib + (f2cl-lib:array-slice a-%data% + f2cl-lib:complex16 (i i) ((1 lda) (1 *)) + a-%offset%) + lda t$ ldt + (f2cl-lib:array-slice c-%data% + f2cl-lib:complex16 (ic jc) ((1 ldc) (1 *)) + c-%offset%) + ldc work ldwork) + (declare (ignore var-2 var-3 var-4 var-5 + var-7 var-9 var-11 var-13)) + (setf side var-0) + (setf trans var-1) + (setf ib var-6) + (setf lda var-8) + (setf ldt var-10) + (setf ldc var-12) + (setf ldwork var-14)) + label10)))) + (setf (f2cl-lib:fref work-%data% (1) ((1 *)) work-%offset%) + (coerce lwkopt 'f2cl-lib:complex16)) + (go end_label) end_label + (return + (values side trans m n k nil lda nil nil ldc nil nil info)))))) \end{chunk} @@ -121722,10 +135416,225 @@ Man Page Details %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Chunk collections} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{chunk}{BLAS FORTRAN} +\begin{chunk}{dcabs1.f} +\begin{chunk}{lsame.f} +\begin{chunk}{xerbla.f} +\begin{chunk}{dasum.f} +\begin{chunk}{daxpy.f} +\begin{chunk}{dcopy.f} +\begin{chunk}{ddot.f} +\begin{chunk}{dnrm2.f} +\begin{chunk}{drotg.f} +\begin{chunk}{drot.f} +\begin{chunk}{dscal.f} +\begin{chunk}{dswap.f} +\begin{chunk}{dzasum.f} +\begin{chunk}{dznrm2.f} +\begin{chunk}{icamax.f} +\begin{chunk}{idamax.f} +\begin{chunk}{isamax.f} +\begin{chunk}{izamax.f} +\begin{chunk}{zaxpy.f} +\begin{chunk}{zcopy.f} +\begin{chunk}{zdotc.f} +\begin{chunk}{zdotu.f} +\begin{chunk}{zdscal.f} +\begin{chunk}{zrotg.f} +\begin{chunk}{zscal.f} +\begin{chunk}{zswap.f} +\begin{chunk}{dgbmv.f} +\begin{chunk}{dgemv.f} +\begin{chunk}{dger.f} +\begin{chunk}{dsbmv.f} +\begin{chunk}{dspmv.f} +\begin{chunk}{dspr2.f} +\begin{chunk}{dspr.f} +\begin{chunk}{dsymv.f} +\begin{chunk}{dsyr2.f} +\begin{chunk}{dsyr.f} +\begin{chunk}{dtbmv.f} +\begin{chunk}{dtbsv.f} +\begin{chunk}{dtpmv.f} +\begin{chunk}{dtpsv.f} +\begin{chunk}{dtrmv.f} +\begin{chunk}{dtrsv.f} +\begin{chunk}{zgbmv.f} +\begin{chunk}{zgemv.f} +\begin{chunk}{zgerc.f} +\begin{chunk}{zgeru.f} +\begin{chunk}{zhbmv.f} +\begin{chunk}{zhemv.f} +\begin{chunk}{zher2.f} +\begin{chunk}{zher.f} +\begin{chunk}{zhpmv.f} +\begin{chunk}{zhpr2.f} +\begin{chunk}{zhpr.f} +\begin{chunk}{ztbmv.f} +\begin{chunk}{ztbsv.f} +\begin{chunk}{ztpmv.f} +\begin{chunk}{ztpsv.f} +\begin{chunk}{ztrmv.f} +\begin{chunk}{ztrsv.f} +\begin{chunk}{dgemm.f} +\begin{chunk}{dsymm.f} +\begin{chunk}{dsyr2k.f} +\begin{chunk}{dsyrk.f} +\begin{chunk}{dtrmm.f} +\begin{chunk}{dtrsm.f} +\begin{chunk}{zgemm.f} +\begin{chunk}{zhemm.f} +\begin{chunk}{zher2k.f} +\begin{chunk}{zherk.f} +\begin{chunk}{zsymm.f} +\begin{chunk}{zsyr2k.f} +\begin{chunk}{zsyrk.f} +\begin{chunk}{ztrmm.f} +\begin{chunk}{ztrsm.f} +\end{chunk} + +\begin{chunk}{LAPACK FORTRAN} +\begin{chunk}{dbdsdc.f} +\begin{chunk}{dbdsqr.f} +\begin{chunk}{ddisna.f} +\begin{chunk}{dgebak.f} +\begin{chunk}{dgebal.f} +\begin{chunk}{dgebd2.f} +\begin{chunk}{dgebrd.f} +\begin{chunk}{dgeev.f} +\begin{chunk}{dgeevx.f} +\begin{chunk}{dgehd2.f} +\begin{chunk}{dgehrd.f} +\begin{chunk}{dgelq2.f} +\begin{chunk}{dgelqf.f} +\begin{chunk}{dgeqr2.f} +\begin{chunk}{dgeqrf.f} +\begin{chunk}{dgesdd.f} +\begin{chunk}{dgesvd.f} +\begin{chunk}{dgesv.f} +\begin{chunk}{dgetf2.f} +\begin{chunk}{dgetrf.f} +\begin{chunk}{dgetrs.f} +\begin{chunk}{dhseqr.f} +\begin{chunk}{disnan.f} +\begin{chunk}{dlabad.f} +\begin{chunk}{dlabrd.f} +\begin{chunk}{dlacon.f} +\begin{chunk}{dlacpy.f} +\begin{chunk}{dladiv.f} +\begin{chunk}{dlaed6.f} +\begin{chunk}{dlaexc.f} +\begin{chunk}{dlahqr.f} +\begin{chunk}{dlahrd.f} +\begin{chunk}{dlaisnan.f} +\begin{chunk}{dlaln2.f} +\begin{chunk}{dlamch.f} +\begin{chunk}{dlamc1.f} +\begin{chunk}{dlamc2.f} +\begin{chunk}{dlamc3.f} +\begin{chunk}{dlamc4.f} +\begin{chunk}{dlamc5.f} +\begin{chunk}{dlamrg.f} +\begin{chunk}{dlange.f} +\begin{chunk}{dlanhs.f} +\begin{chunk}{dlanst.f} +\begin{chunk}{dlanv2.f} +\begin{chunk}{dlapy2.f} +\begin{chunk}{dlapy3.f} +\begin{chunk}{dlaqtr.f} +\begin{chunk}{dlarfb.f} +\begin{chunk}{dlarfg.f} +\begin{chunk}{dlarf.f} +\begin{chunk}{dlarft.f} +\begin{chunk}{dlarfx.f} +\begin{chunk}{dlartg.f} +\begin{chunk}{dlas2.f} +\begin{chunk}{dlascl.f} +\begin{chunk}{dlasd0.f} +\begin{chunk}{dlasd1.f} +\begin{chunk}{dlasd2.f} +\begin{chunk}{dlasd3.f} +\begin{chunk}{dlasd4.f} +\begin{chunk}{dlasd5.f} +\begin{chunk}{dlasd6.f} +\begin{chunk}{dlasd7.f} +\begin{chunk}{dlasd8.f} +\begin{chunk}{dlasda.f} +\begin{chunk}{dlasdq.f} +\begin{chunk}{dlasdt.f} +\begin{chunk}{dlaset.f} +\begin{chunk}{dlasq1.f} +\begin{chunk}{dlasq2.f} +\begin{chunk}{dlasq3.f} +\begin{chunk}{dlasq4.f} +\begin{chunk}{dlasq5.f} +\begin{chunk}{dlasq6.f} +\begin{chunk}{dlasr.f} +\begin{chunk}{dlasrt.f} +\begin{chunk}{dlassq.f} +\begin{chunk}{dlasv2.f} +\begin{chunk}{dlaswp.f} +\begin{chunk}{dlasy2.f} +\begin{chunk}{dorg2r.f} +\begin{chunk}{dorgbr.f} +\begin{chunk}{dorghr.f} +\begin{chunk}{dorgl2.f} +\begin{chunk}{dorglq.f} +\begin{chunk}{dorgqr.f} +\begin{chunk}{dorm2r.f} +\begin{chunk}{dormbr.f} +\begin{chunk}{dorml2.f} +\begin{chunk}{dormlq.f} +\begin{chunk}{dormqr.f} +\begin{chunk}{dtrevc.f} +\begin{chunk}{dtrexc.f} +\begin{chunk}{dtrsna.f} +\begin{chunk}{ieeeck.f} +\begin{chunk}{ilaenv.f} +\begin{chunk}{ilazlc.f} +\begin{chunk}{ilazlr.f} +\begin{chunk}{zgebak.f} +\begin{chunk}{zgebal.f} +\begin{chunk}{zgeev.f} +\begin{chunk}{zgehd2.f} +\begin{chunk}{zgehrd.f} +\begin{chunk}{zhseqr.f} +\begin{chunk}{zlacgv.f} +\begin{chunk}{zlacpy.f} +\begin{chunk}{zladiv.f} +\begin{chunk}{zlahqr.f} +\begin{chunk}{zlahr2.f} +\begin{chunk}{zlange.f} +\begin{chunk}{zlaqr0.f} +\begin{chunk}{zlaqr1.f} +\begin{chunk}{zlaqr2.f} +\begin{chunk}{zlaqr3.f} +\begin{chunk}{zlaqr4.f} +\begin{chunk}{zlaqr5.f} +\begin{chunk}{zlarfb.f} +\begin{chunk}{zlarf.f} +\begin{chunk}{zlzrfg.f} +\begin{chunk}{zlarft.f} +\begin{chunk}{zlartg.f} +\begin{chunk}{zlascl.f} +\begin{chunk}{zlaset.f} +\begin{chunk}{zlassq.f} +\begin{chunk}{zlatrs.f} +\begin{chunk}{zrot.f} +\begin{chunk}{ztrevc.f} +\begin{chunk}{ztrexc.f} +\begin{chunk}{zung2r.f} +\begin{chunk}{zunghr.f} +\begin{chunk}{zungqr.f} +\begin{chunk}{zunm2r.f} +\begin{chunk}{zunmhr.f} +\begin{chunk}{zunmqr.f} +\end{chunk} + \begin{chunk}{Numerics} (in-package "BOOT") -\getchunk{BLAS dcabs1} +\getchunk{BLAS 1 dcabs1} \getchunk{BLAS 1 dasum} \getchunk{BLAS 1 daxpy} \getchunk{BLAS 1 dcopy} diff --git a/changelog b/changelog index 3768e51..b27312b 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,5 @@ +20120423 tpd src/axiom-website/patches.html 20120423.01.tpd.patch +20120423 tpd books/bookvol10.5 add missing lapack routines 20120422 tpd src/axiom-website/patches.html 20120422.01.tpd.patch 20120422 tpd books/bookvolbib.bib add LAPACK bibtex reference 20120422 tpd books/bookvol10.5 add LAPACK reference code diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index 4cc46c9..7c28148 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -3886,5 +3886,7 @@ src/axiom-website/download.html update download list
src/input/cohen.input Joel Cohen algebra example
20120422.01.tpd.patch books/bookvol10.5 add LAPACK reference code
+20120423.01.tpd.patch +books/bookvol10.5 add missing lapack routines