LAPACK  3.10.1
LAPACK: Linear Algebra PACKage

◆ zlaqz1()

subroutine zlaqz1 ( logical, intent(in)  ILQ,
logical, intent(in)  ILZ,
integer, intent(in)  K,
integer, intent(in)  ISTARTM,
integer, intent(in)  ISTOPM,
integer, intent(in)  IHI,
complex*16, dimension( lda, * )  A,
integer, intent(in)  LDA,
complex*16, dimension( ldb, * )  B,
integer, intent(in)  LDB,
integer, intent(in)  NQ,
integer, intent(in)  QSTART,
complex*16, dimension( ldq, * )  Q,
integer, intent(in)  LDQ,
integer, intent(in)  NZ,
integer, intent(in)  ZSTART,
complex*16, dimension( ldz, * )  Z,
integer, intent(in)  LDZ 
)

ZLAQZ1

Download ZLAQZ1 + dependencies [TGZ] [ZIP] [TXT]

Purpose:
      ZLAQZ1 chases a 1x1 shift bulge in a matrix pencil down a single position
Parameters
[in]ILQ
          ILQ is LOGICAL
              Determines whether or not to update the matrix Q
[in]ILZ
          ILZ is LOGICAL
              Determines whether or not to update the matrix Z
[in]K
          K is INTEGER
              Index indicating the position of the bulge.
              On entry, the bulge is located in
              (A(k+1,k),B(k+1,k)).
              On exit, the bulge is located in
              (A(k+2,k+1),B(k+2,k+1)).
[in]ISTARTM
          ISTARTM is INTEGER
[in]ISTOPM
          ISTOPM is INTEGER
              Updates to (A,B) are restricted to
              (istartm:k+2,k:istopm). It is assumed
              without checking that istartm <= k+1 and
              k+2 <= istopm
[in]IHI
          IHI is INTEGER
[in,out]A
          A is COMPLEX*16 array, dimension (LDA,N)
[in]LDA
          LDA is INTEGER
              The leading dimension of A as declared in
              the calling procedure.
[in,out]B
          B is COMPLEX*16 array, dimension (LDB,N)
[in]LDB
          LDB is INTEGER
              The leading dimension of B as declared in
              the calling procedure.
[in]NQ
          NQ is INTEGER
              The order of the matrix Q
[in]QSTART
          QSTART is INTEGER
              Start index of the matrix Q. Rotations are applied
              To columns k+2-qStart:k+3-qStart of Q.
[in,out]Q
          Q is COMPLEX*16 array, dimension (LDQ,NQ)
[in]LDQ
          LDQ is INTEGER
              The leading dimension of Q as declared in
              the calling procedure.
[in]NZ
          NZ is INTEGER
              The order of the matrix Z
[in]ZSTART
          ZSTART is INTEGER
              Start index of the matrix Z. Rotations are applied
              To columns k+1-qStart:k+2-qStart of Z.
[in,out]Z
          Z is COMPLEX*16 array, dimension (LDZ,NZ)
[in]LDZ
          LDZ is INTEGER
              The leading dimension of Q as declared in
              the calling procedure.
Author
Thijs Steel, KU Leuven
Date
May 2020

Definition at line 171 of file zlaqz1.f.

173  IMPLICIT NONE
174 *
175 * Arguments
176  LOGICAL, INTENT( IN ) :: ILQ, ILZ
177  INTEGER, INTENT( IN ) :: K, LDA, LDB, LDQ, LDZ, ISTARTM, ISTOPM,
178  $ NQ, NZ, QSTART, ZSTART, IHI
179  COMPLEX*16 :: A( LDA, * ), B( LDB, * ), Q( LDQ, * ), Z( LDZ, * )
180 *
181 * Parameters
182  COMPLEX*16 CZERO, CONE
183  parameter( czero = ( 0.0d+0, 0.0d+0 ), cone = ( 1.0d+0,
184  $ 0.0d+0 ) )
185  DOUBLE PRECISION :: ZERO, ONE, HALF
186  parameter( zero = 0.0d0, one = 1.0d0, half = 0.5d0 )
187 *
188 * Local variables
189  DOUBLE PRECISION :: C
190  COMPLEX*16 :: S, TEMP
191 *
192 * External Functions
193  EXTERNAL :: zlartg, zrot
194 *
195  IF( k+1 .EQ. ihi ) THEN
196 *
197 * Shift is located on the edge of the matrix, remove it
198 *
199  CALL zlartg( b( ihi, ihi ), b( ihi, ihi-1 ), c, s, temp )
200  b( ihi, ihi ) = temp
201  b( ihi, ihi-1 ) = czero
202  CALL zrot( ihi-istartm, b( istartm, ihi ), 1, b( istartm,
203  $ ihi-1 ), 1, c, s )
204  CALL zrot( ihi-istartm+1, a( istartm, ihi ), 1, a( istartm,
205  $ ihi-1 ), 1, c, s )
206  IF ( ilz ) THEN
207  CALL zrot( nz, z( 1, ihi-zstart+1 ), 1, z( 1, ihi-1-zstart+
208  $ 1 ), 1, c, s )
209  END IF
210 *
211  ELSE
212 *
213 * Normal operation, move bulge down
214 *
215 *
216 * Apply transformation from the right
217 *
218  CALL zlartg( b( k+1, k+1 ), b( k+1, k ), c, s, temp )
219  b( k+1, k+1 ) = temp
220  b( k+1, k ) = czero
221  CALL zrot( k+2-istartm+1, a( istartm, k+1 ), 1, a( istartm,
222  $ k ), 1, c, s )
223  CALL zrot( k-istartm+1, b( istartm, k+1 ), 1, b( istartm, k ),
224  $ 1, c, s )
225  IF ( ilz ) THEN
226  CALL zrot( nz, z( 1, k+1-zstart+1 ), 1, z( 1, k-zstart+1 ),
227  $ 1, c, s )
228  END IF
229 *
230 * Apply transformation from the left
231 *
232  CALL zlartg( a( k+1, k ), a( k+2, k ), c, s, temp )
233  a( k+1, k ) = temp
234  a( k+2, k ) = czero
235  CALL zrot( istopm-k, a( k+1, k+1 ), lda, a( k+2, k+1 ), lda, c,
236  $ s )
237  CALL zrot( istopm-k, b( k+1, k+1 ), ldb, b( k+2, k+1 ), ldb, c,
238  $ s )
239  IF ( ilq ) THEN
240  CALL zrot( nq, q( 1, k+1-qstart+1 ), 1, q( 1, k+2-qstart+
241  $ 1 ), 1, c, dconjg( s ) )
242  END IF
243 *
244  END IF
245 *
246 * End of ZLAQZ1
247 *
subroutine zlartg(f, g, c, s, r)
ZLARTG generates a plane rotation with real cosine and complex sine.
Definition: zlartg.f90:118
subroutine zrot(N, CX, INCX, CY, INCY, C, S)
ZROT applies a plane rotation with real cosine and complex sine to a pair of complex vectors.
Definition: zrot.f:103
Here is the call graph for this function:
Here is the caller graph for this function: