Files
lapack/TESTING/LIN/drzt02.f
Julie e18d437924 Making LAPACK's code eternal... no more version and date in source files.
GitHub is now enabling us to track accurately version and date.
No need for this anymore.
2021-03-25 10:16:58 -07:00

166 lines
3.9 KiB
FortranFixed

*> \brief \b DRZT02
*
* =========== DOCUMENTATION ===========
*
* Online html documentation available at
* http://www.netlib.org/lapack/explore-html/
*
* Definition:
* ===========
*
* DOUBLE PRECISION FUNCTION DRZT02( M, N, AF, LDA, TAU, WORK,
* LWORK )
*
* .. Scalar Arguments ..
* INTEGER LDA, LWORK, M, N
* ..
* .. Array Arguments ..
* DOUBLE PRECISION AF( LDA, * ), TAU( * ), WORK( LWORK )
* ..
*
*
*> \par Purpose:
* =============
*>
*> \verbatim
*>
*> DRZT02 returns
*> || I - Q'*Q || / ( M * eps)
*> where the matrix Q is defined by the Householder transformations
*> generated by DTZRZF.
*> \endverbatim
*
* Arguments:
* ==========
*
*> \param[in] M
*> \verbatim
*> M is INTEGER
*> The number of rows of the matrix AF.
*> \endverbatim
*>
*> \param[in] N
*> \verbatim
*> N is INTEGER
*> The number of columns of the matrix AF.
*> \endverbatim
*>
*> \param[in] AF
*> \verbatim
*> AF is DOUBLE PRECISION array, dimension (LDA,N)
*> The output of DTZRZF.
*> \endverbatim
*>
*> \param[in] LDA
*> \verbatim
*> LDA is INTEGER
*> The leading dimension of the array AF.
*> \endverbatim
*>
*> \param[in] TAU
*> \verbatim
*> TAU is DOUBLE PRECISION array, dimension (M)
*> Details of the Householder transformations as returned by
*> DTZRZF.
*> \endverbatim
*>
*> \param[out] WORK
*> \verbatim
*> WORK is DOUBLE PRECISION array, dimension (LWORK)
*> \endverbatim
*>
*> \param[in] LWORK
*> \verbatim
*> LWORK is INTEGER
*> length of WORK array. LWORK >= N*N+N*NB.
*> \endverbatim
*
* Authors:
* ========
*
*> \author Univ. of Tennessee
*> \author Univ. of California Berkeley
*> \author Univ. of Colorado Denver
*> \author NAG Ltd.
*
*> \ingroup double_lin
*
* =====================================================================
DOUBLE PRECISION FUNCTION DRZT02( M, N, AF, LDA, TAU, WORK,
$ LWORK )
*
* -- LAPACK test routine --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
*
* .. Scalar Arguments ..
INTEGER LDA, LWORK, M, N
* ..
* .. Array Arguments ..
DOUBLE PRECISION AF( LDA, * ), TAU( * ), WORK( LWORK )
* ..
*
* =====================================================================
*
* .. Parameters ..
DOUBLE PRECISION ZERO, ONE
PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 )
* ..
* .. Local Scalars ..
INTEGER I, INFO
* ..
* .. Local Arrays ..
DOUBLE PRECISION RWORK( 1 )
* ..
* .. External Functions ..
DOUBLE PRECISION DLAMCH, DLANGE
EXTERNAL DLAMCH, DLANGE
* ..
* .. External Subroutines ..
EXTERNAL DLASET, DORMRZ, XERBLA
* ..
* .. Intrinsic Functions ..
INTRINSIC DBLE, MAX
* ..
* .. Executable Statements ..
*
DRZT02 = ZERO
*
IF( LWORK.LT.N*N+N ) THEN
CALL XERBLA( 'DRZT02', 7 )
RETURN
END IF
*
* Quick return if possible
*
IF( M.LE.0 .OR. N.LE.0 )
$ RETURN
*
* Q := I
*
CALL DLASET( 'Full', N, N, ZERO, ONE, WORK, N )
*
* Q := P(1) * ... * P(m) * Q
*
CALL DORMRZ( 'Left', 'No transpose', N, N, M, N-M, AF, LDA, TAU,
$ WORK, N, WORK( N*N+1 ), LWORK-N*N, INFO )
*
* Q := P(m) * ... * P(1) * Q
*
CALL DORMRZ( 'Left', 'Transpose', N, N, M, N-M, AF, LDA, TAU,
$ WORK, N, WORK( N*N+1 ), LWORK-N*N, INFO )
*
* Q := Q - I
*
DO 10 I = 1, N
WORK( ( I-1 )*N+I ) = WORK( ( I-1 )*N+I ) - ONE
10 CONTINUE
*
DRZT02 = DLANGE( 'One-norm', N, N, WORK, N, RWORK ) /
$ ( DLAMCH( 'Epsilon' )*DBLE( MAX( M, N ) ) )
RETURN
*
* End of DRZT02
*
END