Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
reverting the ZLATZM -> ZUNMRZ change, adding SLYCOT specific ZLATZM
  • Loading branch information
repagh committed Jun 24, 2017
commit 8cf5e49c0188e3d355305cdfc92d383ee36c7eb8
10 changes: 5 additions & 5 deletions slycot/src/AB8NXZ.f
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ SUBROUTINE AB8NXZ( N, M, P, RO, SIGMA, SVLMAX, ABCD, LDABCD,
EXTERNAL ILAENV
C .. External Subroutines ..
EXTERNAL MB3OYZ, MB3PYZ, XERBLA, ZLAPMT, ZLARFG, ZLASET,
$ ZUNMRZ, ZUNMQR, ZUNMRQ
$ SLCT_ZLATZM, ZUNMQR, ZUNMRQ
C .. Intrinsic Functions ..
INTRINSIC DCONJG, INT, MAX, MIN
C .. Executable Statements ..
Expand Down Expand Up @@ -315,11 +315,11 @@ SUBROUTINE AB8NXZ( N, M, P, RO, SIGMA, SVLMAX, ABCD, LDABCD,
DO 40 I1 = 1, SIGMA
CALL ZLARFG( RO+1, ABCD(IROW,I1), ABCD(IROW+1,I1), 1,
$ TC )
C RvP 170608. replacing zlatzm by ZUNMRZ.
C RvP 170623 slicot-specific ZLATZM
TCCONJ = DCONJG( TC )
CALL ZUNMRZ( 'L', 'N', RO+1, MNU-I1, 1, RO+1,
$ ABCD(IROW+1,I1), LDABCD, TCCONJ,
$ ABCD(IROW,I1+1), LDABCD, ZWORK, LZWORK, INFO)
CALL SLCT_ZLATZM( 'L', RO+1, MNU-I1, ABCD(IROW+1,I1), 1,
$ DCONJG( TC ), ABCD(IROW,I1+1),
$ ABCD(IROW+1,I1+1), LDABCD, ZWORK )
IROW = IROW + 1
40 CONTINUE
CALL ZLASET( 'Lower', RO+SIGMA-1, SIGMA, ZERO, ZERO,
Expand Down
18 changes: 7 additions & 11 deletions slycot/src/AG8BYZ.f
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ SUBROUTINE AG8BYZ( FIRST, N, M, P, SVLMAX, ABCD, LDABCD, E, LDE,
$ MNTAU, MP1, MPM, MUI, MUIM1, N1, NB, NBLCKS,
$ PN, RANK, RO, RO1, SIGMA, TAUI, WRKOPT
DOUBLE PRECISION C, RCOND, SMAX, SMAXPR, SMIN, SMINPR, T, TT
COMPLEX*16 C1, C2, S, S1, S2, TC, TCCONJ
COMPLEX*16 C1, C2, S, S1, S2, TC
C .. Local Arrays ..
DOUBLE PRECISION SVAL(3)
COMPLEX*16 DUM(1)
Expand All @@ -274,7 +274,8 @@ SUBROUTINE AG8BYZ( FIRST, N, M, P, SVLMAX, ABCD, LDABCD, E, LDE,
EXTERNAL DLAMCH, DZNRM2, IDAMAX, ILAENV
C .. External Subroutines ..
EXTERNAL MB3OYZ, XERBLA, ZCOPY, ZLAIC1, ZLAPMT, ZLARFG,
$ ZLARTG, ZLASET, ZUNMRZ, ZROT, ZSWAP, ZUNMQR
$ ZLARTG, ZLASET, SLCT_ZLATZM, ZROT, ZSWAP,
$ ZUNMQR
C .. Intrinsic Functions ..
INTRINSIC ABS, DBLE, DCONJG, INT, MAX, MIN, SQRT
C .. Executable Statements ..
Expand Down Expand Up @@ -406,15 +407,10 @@ SUBROUTINE AG8BYZ( FIRST, N, M, P, SVLMAX, ABCD, LDABCD, E, LDE,
IROW = IROW + 1
CALL ZLARFG( RO+1, ABCD(IROW,ICOL), ABCD(IROW+1,ICOL), 1,
$ TC )
c$$$ CALL ZLATZM( 'L', RO+1, MNR-ICOL, ABCD(IROW+1,ICOL), 1,
c$$$ $ DCONJG( TC ), ABCD(IROW,ICOL+1),
c$$$ $ ABCD(IROW+1,ICOL+1), LDABCD, ZWORK )
C RvP replacing by ZUNMRZ
TCCONJ = DCONJG( TC )
CALL ZUNMRZ( 'L','N', RO+1, MNR-ICOL, 1, RO+1,
$ ABCD(IROW+1,ICOL), LDABCD,
$ TCCONJ, ABCD(IROW,ICOL+1), LDABCD,
$ ZWORK, LZWORK, INFO )
C RvP, replaced by slicot replacement for obsolete lapack routine
CALL SLCT_ZLATZM( 'L', RO+1, MNR-ICOL, ABCD(IROW+1,ICOL), 1,
$ DCONJG( TC ), ABCD(IROW,ICOL+1),
$ ABCD(IROW+1,ICOL+1), LDABCD, ZWORK )
CALL ZCOPY( PR-ICOL, DUM, 0, ABCD(IROW+1,ICOL), 1 )
20 CONTINUE
WRKOPT = MAX( WRKOPT, MN - 1 )
Expand Down
226 changes: 226 additions & 0 deletions slycot/src/SLCT_ZLATZM.f
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
*> \brief \b ZLATZM
*
* =========== DOCUMENTATION ===========
*
* Online html documentation available at
* http://www.netlib.org/lapack/explore-html/
*
*> \htmlonly
*> Download ZLATZM + dependencies
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlatzm.f">
*> [TGZ]</a>
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlatzm.f">
*> [ZIP]</a>
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlatzm.f">
*> [TXT]</a>
*> \endhtmlonly
*
* Definition:
* ===========
*
* SUBROUTINE ZLATZM( SIDE, M, N, V, INCV, TAU, C1, C2, LDC, WORK )
*
* .. Scalar Arguments ..
* CHARACTER SIDE
* INTEGER INCV, LDC, M, N
* COMPLEX*16 TAU
* ..
* .. Array Arguments ..
* COMPLEX*16 C1( LDC, * ), C2( LDC, * ), V( * ), WORK( * )
* ..
*
*
*> \par Purpose:
* =============
*>
*> \verbatim
*>
*> This routine is deprecated and has been replaced by routine ZUNMRZ.
*>
*> ZLATZM applies a Householder matrix generated by ZTZRQF to a matrix.
*>
*> Let P = I - tau*u*u**H, u = ( 1 ),
*> ( v )
*> where v is an (m-1) vector if SIDE = 'L', or a (n-1) vector if
*> SIDE = 'R'.
*>
*> If SIDE equals 'L', let
*> C = [ C1 ] 1
*> [ C2 ] m-1
*> n
*> Then C is overwritten by P*C.
*>
*> If SIDE equals 'R', let
*> C = [ C1, C2 ] m
*> 1 n-1
*> Then C is overwritten by C*P.
*> \endverbatim
*
* Arguments:
* ==========
*
*> \param[in] SIDE
*> \verbatim
*> SIDE is CHARACTER*1
*> = 'L': form P * C
*> = 'R': form C * P
*> \endverbatim
*>
*> \param[in] M
*> \verbatim
*> M is INTEGER
*> The number of rows of the matrix C.
*> \endverbatim
*>
*> \param[in] N
*> \verbatim
*> N is INTEGER
*> The number of columns of the matrix C.
*> \endverbatim
*>
*> \param[in] V
*> \verbatim
*> V is COMPLEX*16 array, dimension
*> (1 + (M-1)*abs(INCV)) if SIDE = 'L'
*> (1 + (N-1)*abs(INCV)) if SIDE = 'R'
*> The vector v in the representation of P. V is not used
*> if TAU = 0.
*> \endverbatim
*>
*> \param[in] INCV
*> \verbatim
*> INCV is INTEGER
*> The increment between elements of v. INCV <> 0
*> \endverbatim
*>
*> \param[in] TAU
*> \verbatim
*> TAU is COMPLEX*16
*> The value tau in the representation of P.
*> \endverbatim
*>
*> \param[in,out] C1
*> \verbatim
*> C1 is COMPLEX*16 array, dimension
*> (LDC,N) if SIDE = 'L'
*> (M,1) if SIDE = 'R'
*> On entry, the n-vector C1 if SIDE = 'L', or the m-vector C1
*> if SIDE = 'R'.
*>
*> On exit, the first row of P*C if SIDE = 'L', or the first
*> column of C*P if SIDE = 'R'.
*> \endverbatim
*>
*> \param[in,out] C2
*> \verbatim
*> C2 is COMPLEX*16 array, dimension
*> (LDC, N) if SIDE = 'L'
*> (LDC, N-1) if SIDE = 'R'
*> On entry, the (m - 1) x n matrix C2 if SIDE = 'L', or the
*> m x (n - 1) matrix C2 if SIDE = 'R'.
*>
*> On exit, rows 2:m of P*C if SIDE = 'L', or columns 2:m of C*P
*> if SIDE = 'R'.
*> \endverbatim
*>
*> \param[in] LDC
*> \verbatim
*> LDC is INTEGER
*> The leading dimension of the arrays C1 and C2.
*> LDC >= max(1,M).
*> \endverbatim
*>
*> \param[out] WORK
*> \verbatim
*> WORK is COMPLEX*16 array, dimension
*> (N) if SIDE = 'L'
*> (M) if SIDE = 'R'
*> \endverbatim
*
* Authors:
* ========
*
*> \author Univ. of Tennessee
*> \author Univ. of California Berkeley
*> \author Univ. of Colorado Denver
*> \author NAG Ltd.
*
*> \date November 2011
*
*> \ingroup complex16OTHERcomputational
*
* =====================================================================
SUBROUTINE SLCT_ZLATZM( SIDE, M, N, V, INCV, TAU, C1, C2, LDC,
$ WORK )
*
* -- LAPACK computational routine (version 3.4.0) --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
* November 2011
*
* .. Scalar Arguments ..
CHARACTER SIDE
INTEGER INCV, LDC, M, N
COMPLEX*16 TAU
* ..
* .. Array Arguments ..
COMPLEX*16 C1( LDC, * ), C2( LDC, * ), V( * ), WORK( * )
* ..
*
* =====================================================================
*
* .. Parameters ..
COMPLEX*16 ONE, ZERO
PARAMETER ( ONE = ( 1.0D+0, 0.0D+0 ),
$ ZERO = ( 0.0D+0, 0.0D+0 ) )
* ..
* .. External Subroutines ..
EXTERNAL ZAXPY, ZCOPY, ZGEMV, ZGERC, ZGERU, ZLACGV
* ..
* .. External Functions ..
LOGICAL LSAME
EXTERNAL LSAME
* ..
* .. Intrinsic Functions ..
INTRINSIC MIN
* ..
* .. Executable Statements ..
*
IF( ( MIN( M, N ).EQ.0 ) .OR. ( TAU.EQ.ZERO ) )
$ RETURN
*
IF( LSAME( SIDE, 'L' ) ) THEN
*
* w := ( C1 + v**H * C2 )**H
*
CALL ZCOPY( N, C1, LDC, WORK, 1 )
CALL ZLACGV( N, WORK, 1 )
CALL ZGEMV( 'Conjugate transpose', M-1, N, ONE, C2, LDC, V,
$ INCV, ONE, WORK, 1 )
*
* [ C1 ] := [ C1 ] - tau* [ 1 ] * w**H
* [ C2 ] [ C2 ] [ v ]
*
CALL ZLACGV( N, WORK, 1 )
CALL ZAXPY( N, -TAU, WORK, 1, C1, LDC )
CALL ZGERU( M-1, N, -TAU, V, INCV, WORK, 1, C2, LDC )
*
ELSE IF( LSAME( SIDE, 'R' ) ) THEN
*
* w := C1 + C2 * v
*
CALL ZCOPY( M, C1, 1, WORK, 1 )
CALL ZGEMV( 'No transpose', M, N-1, ONE, C2, LDC, V, INCV, ONE,
$ WORK, 1 )
*
* [ C1, C2 ] := [ C1, C2 ] - tau* w * [ 1 , v**H]
*
CALL ZAXPY( M, -TAU, WORK, 1, C1, 1 )
CALL ZGERC( M, N-1, -TAU, WORK, 1, V, INCV, C2, LDC )
END IF
*
RETURN
*
* End of ZLATZM
*
END